summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-03-24 23:19:48 -0400
committerGitHub <noreply@github.com>2021-03-24 23:19:48 -0400
commit35b68c68ee565b9b232252e4f37ea082e9310560 (patch)
treeaeacb544f27db8f63b17b7e808b28f4a1e12acde /src
parentd8b76e6fb545efd69bfb18322a67243520e4d11d (diff)
parent7f70b570dd2e18a34a2c0ee558f404c15c77371c (diff)
Merge pull request #404 from PikalaxALT/misc_doc
[PARTIALLY LEAK INFORMED] Miscellaneous cleanup and documentation
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c4
-rw-r--r--src/battle_anim_effects_3.c6
-rw-r--r--src/battle_anim_mons.c128
-rw-r--r--src/battle_anim_status_effects.c14
-rw-r--r--src/battle_anim_utility_funcs.c10
-rw-r--r--src/battle_controllers.c2
-rw-r--r--src/battle_gfx_sfx_util.c2
-rw-r--r--src/battle_main.c6
-rw-r--r--src/battle_script_commands.c2
-rw-r--r--src/battle_transition.c10
-rw-r--r--src/battle_util2.c6
-rw-r--r--src/berry.c105
-rw-r--r--src/bike.c6
-rw-r--r--src/blend_palette.c2
-rw-r--r--src/braille_text.c16
-rw-r--r--src/cable_club.c2
-rw-r--r--src/credits.c3
-rw-r--r--src/dark.c2
-rw-r--r--src/data/object_events/object_event_graphics_info.h4
-rw-r--r--src/data/object_events/object_event_graphics_info_pointers.h8
-rw-r--r--src/daycare.c21
-rw-r--r--src/dynamic_placeholder_text_util.c10
-rw-r--r--src/event_object_movement.c12
-rw-r--r--src/field_control_avatar.c94
-rw-r--r--src/field_effect.c54
-rw-r--r--src/field_player_avatar.c265
-rw-r--r--src/field_poison.c2
-rw-r--r--src/field_specials.c108
-rw-r--r--src/field_weather.c99
-rw-r--r--src/field_weather_effects.c16
-rw-r--r--src/fieldmap.c52
-rw-r--r--src/fire.c22
-rw-r--r--src/fldeff_rocksmash.c2
-rw-r--r--src/fldeff_sweetscent.c16
-rw-r--r--src/flying.c2
-rw-r--r--src/ghost.c2
-rw-r--r--src/help_system.c3357
-rw-r--r--src/help_system_812B1E0.c2463
-rw-r--r--src/help_system_util.c856
-rw-r--r--src/ice.c10
-rw-r--r--src/link.c2
-rw-r--r--src/link_rfu_2.c2
-rw-r--r--src/metatile_behavior.c14
-rw-r--r--src/mevent_show_card.c2
-rw-r--r--src/new_game.c2
-rw-r--r--src/oak_speech.c4
-rw-r--r--src/overworld.c42
-rw-r--r--src/party_menu.c6
-rw-r--r--src/pokedex_screen.c4
-rw-r--r--src/pokemon.c177
-rw-r--r--src/pokemon_summary_screen.c12
-rw-r--r--src/quest_log.c83
-rw-r--r--src/quest_log_events.c6
-rw-r--r--src/quest_log_player.c115
-rw-r--r--src/save.c14
-rw-r--r--src/sound.c10
-rw-r--r--src/strings.c8
-rw-r--r--src/teachy_tv.c10
-rw-r--r--src/text.c681
-rw-r--r--src/text_printer.c112
-rw-r--r--src/trade_scene.c80
-rw-r--r--src/trainer_card.c2
-rw-r--r--src/trainer_see.c2
-rw-r--r--src/water.c12
-rw-r--r--src/wild_encounter.c28
65 files changed, 4431 insertions, 4800 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 0b011b0f3..ae4e6cf47 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1823,7 +1823,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
{
s32 i;
- sub_80767F0();
+ ResetSpritePriorityOfAllVisibleBattlers();
UpdateOamPriorityInAllHealthboxes(0);
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
@@ -2128,7 +2128,7 @@ static void ScriptCmd_end(void)
if (!continuousAnim)
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
- sub_80767F0();
+ ResetSpritePriorityOfAllVisibleBattlers();
UpdateOamPriorityInAllHealthboxes(1);
gAnimScriptActive = FALSE;
}
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index ab12c02b4..1d7761351 100644
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -3135,7 +3135,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
- spriteId = sub_80768D0(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1);
+ spriteId = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1);
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
FillPalette(RGB_WHITE, (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
@@ -3172,7 +3172,7 @@ static void AnimTask_RolePlaySilhouetteStep2(u8 taskId)
TrySetSpriteRotScale(&gSprites[spriteId], TRUE, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
if (++gTasks[taskId].data[12] == 9)
{
- sub_8075AD8(&gSprites[spriteId]);
+ TryResetSpriteAffineState(&gSprites[spriteId]);
DestroySpriteAndFreeResources_(&gSprites[spriteId]);
gTasks[taskId].func = DestroyAnimVisualTaskAndDisableBlend;
}
@@ -4906,7 +4906,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
x = -32;
}
- spriteId2 = sub_80768D0(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0);
+ spriteId2 = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0);
if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE)
BlendPalette((gSprites[spriteId2].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE);
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index 46f62a03c..c47a29976 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -23,17 +23,17 @@ static void PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6(stru
static void SpriteCB_RunAnimFastLinearTranslation(struct Sprite *sprite);
static bool8 Dummy_ReturnFalse(void);
static void AnimThrowProjectile_Step(struct Sprite *sprite);
-static void sub_80760D0(u8 taskId);
+static void AnimTask_AlphaFadeIn_Step(u8 taskId);
static void AnimTask_BlendMonInAndOutSetup(struct Task *task);
static void AnimTask_BlendMonInAndOutStep(u8 taskId);
static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId);
-static void sub_8077118(u8 taskId);
-static void sub_80771E4(struct Task *task, u8 taskId);
-static void sub_8077268(struct Sprite *sprite);
-static void sub_80772F4(struct Sprite *sprite);
+static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId);
+static void PunchAnim_CreateTraceSprite(struct Task *task, u8 taskId);
+static void SpriteCB_PunchTrace(struct Sprite *sprite);
+static void SpriteCB_WeatherBallUp_Step(struct Sprite *sprite);
static EWRAM_DATA union AffineAnimCmd *sAnimTaskAffineAnim = NULL;
-static EWRAM_DATA u32 gUnknown_2037F2C = 0; // not used
+UNUSED static EWRAM_DATA u32 gUnknown_2037F2C = 0; // not used
static const struct UCoords8 sBattlerCoords[][4] =
{
@@ -77,11 +77,11 @@ static const u8 sCastformBackSpriteYCoords[] =
0, // HAIL
};
-static const struct SpriteTemplate gUnknown_83AE054[] =
+static const struct SpriteTemplate sSpriteTemplates_AdditionalForAnim[] =
{
{
- .tileTag = 0xD755,
- .paletteTag = 0xD755,
+ .tileTag = 55125,
+ .paletteTag = 55125,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -89,8 +89,8 @@ static const struct SpriteTemplate gUnknown_83AE054[] =
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0xD756,
- .paletteTag = 0xD756,
+ .tileTag = 55126,
+ .paletteTag = 55126,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -99,10 +99,10 @@ static const struct SpriteTemplate gUnknown_83AE054[] =
}
};
-static const struct SpriteSheet gUnknown_83AE084[] =
+static const struct SpriteSheet sMoveAnimAdtlSprSheets[] =
{
- { gMiscBlank_Gfx, 0x800, 0xD755 },
- { gMiscBlank_Gfx, 0x800, 0xD756 },
+ { gMiscBlank_Gfx, 0x800, 55125 },
+ { gMiscBlank_Gfx, 0x800, 55126 }, // unused
};
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
@@ -390,6 +390,8 @@ static void SetCallbackToStoredInData6(struct Sprite *sprite)
sprite->callback = (SpriteCallback)callback;
}
+// x = a * sin(theta0 + dtheta * t)
+// y = a * cos(theta0 + dtheta * t)
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
@@ -409,6 +411,8 @@ void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
}
}
+// x = (a0 + da * t) * sin(theta0 + dtheta * t)
+// y = (a0 + da * t) * cos(theta0 + dtheta * t)
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
@@ -430,7 +434,9 @@ void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
}
// not used
-static void sub_8074B5C(struct Sprite *sprite)
+// x = alpl * sin(alpha0 + dalpha * t)
+// y = ampl * cos(beta0 + dbeta * t)
+static void TranslateSpriteInLissajousCurveOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -454,6 +460,8 @@ static void sub_8074B5C(struct Sprite *sprite)
}
}
+// x = a * sin(theta0 + dtheta * t)
+// y = b * cos(theta0 + dtheta * t)
void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
@@ -484,14 +492,14 @@ void WaitAnimForDuration(struct Sprite *sprite)
SetCallbackToStoredInData6(sprite);
}
-static void sub_8074C64(struct Sprite *sprite)
+static void SetupAndStartSpriteLinearTranslation(struct Sprite *sprite)
{
- sub_8074C80(sprite);
+ SetupLinearTranslationWithFixedDuration(sprite);
sprite->callback = TranslateSpriteLinear;
sprite->callback(sprite);
}
-void sub_8074C80(struct Sprite *sprite)
+void SetupLinearTranslationWithFixedDuration(struct Sprite *sprite)
{
s16 old;
s32 xDiff;
@@ -554,13 +562,13 @@ static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite)
}
// not used
-static void sub_8074D80(struct Sprite *sprite)
+static void SetupAndStartSpriteLinearTranslationToTarget(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x + sprite->pos2.x;
sprite->data[3] = sprite->pos1.y + sprite->pos2.y;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
- sprite->callback = sub_8074C64;
+ sprite->callback = SetupAndStartSpriteLinearTranslation;
}
void TranslateMonSpriteLinear(struct Sprite *sprite)
@@ -621,17 +629,17 @@ void DestroySpriteAndMatrix(struct Sprite *sprite)
}
// not used
-static void sub_8074EF4(struct Sprite *sprite)
+static void SetupAndStartSpriteLinearTranslationToAttacker(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x + sprite->pos2.x;
sprite->data[3] = sprite->pos1.y + sprite->pos2.y;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
- sprite->callback = sub_8074C64;
+ sprite->callback = SetupAndStartSpriteLinearTranslation;
}
// not used
-static void sub_8074F38(struct Sprite *sprite)
+static void SpriteResetPaletteStructAndDestroy(struct Sprite *sprite)
{
ResetPaletteStructByUid(sprite->data[5]);
DestroySpriteAndMatrix(sprite);
@@ -1094,7 +1102,7 @@ void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite)
InitAnimFastLinearTranslation(sprite);
}
-void sub_8075830(struct Sprite *sprite)
+void InitAndStartAnimFastLinearTranslationWithSpeed(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -1188,7 +1196,7 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x
}
}
-void sub_8075AD8(struct Sprite *sprite)
+void TryResetSpriteAffineState(struct Sprite *sprite)
{
TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0);
sprite->affineAnimPaused = FALSE;
@@ -1487,10 +1495,10 @@ void AnimTask_AlphaFadeIn(u8 taskId)
gTasks[taskId].data[7] = gBattleAnimArgs[2];
gTasks[taskId].data[8] = gBattleAnimArgs[3];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gBattleAnimArgs[0], gBattleAnimArgs[1]));
- gTasks[taskId].func = sub_80760D0;
+ gTasks[taskId].func = AnimTask_AlphaFadeIn_Step;
}
-static void sub_80760D0(u8 taskId)
+static void AnimTask_AlphaFadeIn_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1750,19 +1758,19 @@ void *LoadPointerFromVars(s16 lo, s16 hi)
return (void *)((u16)lo | ((u16)hi << 16));
}
-void sub_80765D4(struct Task *task, u8 spriteId, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7)
+void BattleAnimHelper_SetSpriteSquashParams(struct Task *task, u8 spriteId, s16 xScale0, s16 yScale0, s16 xScale1, s16 yScale1, u16 duration)
{
- task->data[8] = a7;
+ task->data[8] = duration;
task->data[15] = spriteId;
- task->data[9] = a3;
- task->data[10] = a4;
- task->data[13] = a5;
- task->data[14] = a6;
- task->data[11] = (a5 - a3) / a7;
- task->data[12] = (a6 - a4) / a7;
+ task->data[9] = xScale0;
+ task->data[10] = yScale0;
+ task->data[13] = xScale1;
+ task->data[14] = yScale1;
+ task->data[11] = (xScale1 - xScale0) / duration;
+ task->data[12] = (yScale1 - yScale0) / duration;
}
-u8 sub_8076640(struct Task *task)
+u8 BattleAnimHelper_RunSpriteSquash(struct Task *task)
{
if (!task->data[8])
return 0;
@@ -1801,7 +1809,7 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId)
}
// not used
-static void sub_80766EC(u8 priority)
+static void SetOamPriorityOfAllVisibleBattlers(u8 priority)
{
if (IsBattlerSpriteVisible(gBattleAnimTarget))
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority;
@@ -1813,7 +1821,7 @@ static void sub_80766EC(u8 priority)
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority;
}
-void sub_80767F0(void)
+void ResetSpritePriorityOfAllVisibleBattlers(void)
{
s32 i;
@@ -1863,18 +1871,18 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
return 1;
}
-u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10)
+u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 templateId, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxys)
{
u8 spriteId;
- u16 sheet = LoadSpriteSheet(&gUnknown_83AE084[a3]);
- u16 palette = AllocSpritePalette(gUnknown_83AE054[a3].paletteTag);
+ u16 sheet = LoadSpriteSheet(&sMoveAnimAdtlSprSheets[templateId]);
+ u16 palette = AllocSpritePalette(sSpriteTemplates_AdditionalForAnim[templateId].paletteTag);
if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->multiUseBuffer == NULL)
gMonSpritesGfxPtr->multiUseBuffer = AllocZeroed(0x2000);
if (!isBackpic)
{
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
- if (a10 == 1 || ShouldIgnoreDeoxysForm(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
+ if (ignoreDeoxys == TRUE || ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_ANIM, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
gMonSpritesGfxPtr->multiUseBuffer,
species,
@@ -1890,7 +1898,7 @@ u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority
else
{
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
- if (a10 == 1 || ShouldIgnoreDeoxysForm(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
+ if (ignoreDeoxys == TRUE || ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_ANIM, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
gMonSpritesGfxPtr->multiUseBuffer,
species,
@@ -1906,9 +1914,9 @@ u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority
RequestDma3Copy(gMonSpritesGfxPtr->multiUseBuffer, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1);
FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer);
if (!isBackpic)
- spriteId = CreateSprite(&gUnknown_83AE054[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority);
+ spriteId = CreateSprite(&sSpriteTemplates_AdditionalForAnim[templateId], x, y + gMonFrontPicCoords[species].y_offset, subpriority);
else
- spriteId = CreateSprite(&gUnknown_83AE054[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority);
+ spriteId = CreateSprite(&sSpriteTemplates_AdditionalForAnim[templateId], x, y + gMonBackPicCoords[species].y_offset, subpriority);
return spriteId;
}
@@ -2048,20 +2056,20 @@ void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x
*y = (battlerY + partnerY) / 2;
}
-u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species)
+u8 CreateCloneOfSpriteInWindowMode(s32 battlerId, u8 spriteId, s32 species)
{
u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
gSprites[newSpriteId] = gSprites[spriteId];
gSprites[newSpriteId].usingSheet = TRUE;
gSprites[newSpriteId].oam.priority = 0;
- gSprites[newSpriteId].oam.objMode = 2;
+ gSprites[newSpriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum;
gSprites[newSpriteId].callback = SpriteCallbackDummy;
return newSpriteId;
}
-void sub_8076ED8(struct Sprite *sprite)
+void SpriteCB_AnimTranslateSpriteLinearAndFlicker(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -2083,7 +2091,7 @@ void sub_8076ED8(struct Sprite *sprite)
sprite->callback = TranslateSpriteLinearAndFlicker;
}
-void sub_8076F58(struct Sprite *sprite)
+void SpriteCB_AnimTranslateSpriteLinearAndFlicker2(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -2104,7 +2112,7 @@ void sub_8076F58(struct Sprite *sprite)
sprite->callback = TranslateSpriteLinearAndFlicker;
}
-void sub_8076FD0(struct Sprite *sprite)
+void SpriteCB_TrackOffsetFromAttackerAndWaitAnim(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -2138,16 +2146,16 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId)
task->data[6] = 3;
CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20);
BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]);
- task->func = sub_8077118;
+ task->func = AnimTask_AttackerPunchWithTrace_Step;
}
-static void sub_8077118(u8 taskId)
+static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[2])
{
case 0:
- sub_80771E4(task, taskId);
+ PunchAnim_CreateTraceSprite(task, taskId);
gSprites[task->data[0]].pos2.x += task->data[1];
if (++task->data[3] == 5)
{
@@ -2156,7 +2164,7 @@ static void sub_8077118(u8 taskId)
}
break;
case 1:
- sub_80771E4(task, taskId);
+ PunchAnim_CreateTraceSprite(task, taskId);
gSprites[task->data[0]].pos2.x -= task->data[1];
if (--task->data[3] == 0)
{
@@ -2174,7 +2182,7 @@ static void sub_8077118(u8 taskId)
}
}
-static void sub_80771E4(struct Task *task, u8 taskId)
+static void PunchAnim_CreateTraceSprite(struct Task *task, u8 taskId)
{
s16 spriteId = CloneBattlerSpriteWithBlend(0);
@@ -2186,12 +2194,12 @@ static void sub_80771E4(struct Task *task, u8 taskId)
gSprites[spriteId].data[1] = taskId;
gSprites[spriteId].data[2] = spriteId;
gSprites[spriteId].pos2.x = gSprites[task->data[0]].pos2.x;
- gSprites[spriteId].callback = sub_8077268;
+ gSprites[spriteId].callback = SpriteCB_PunchTrace;
++task->data[5];
}
}
-static void sub_8077268(struct Sprite *sprite)
+static void SpriteCB_PunchTrace(struct Sprite *sprite)
{
if (--sprite->data[0] == 0)
{
@@ -2200,7 +2208,7 @@ static void sub_8077268(struct Sprite *sprite)
}
}
-void sub_807729C(struct Sprite *sprite)
+void SpriteCB_WeatherBallUp(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -2209,10 +2217,10 @@ void sub_807729C(struct Sprite *sprite)
else
sprite->data[0] = -10;
sprite->data[1] = -40;
- sprite->callback = sub_80772F4;
+ sprite->callback = SpriteCB_WeatherBallUp_Step;
}
-static void sub_80772F4(struct Sprite *sprite)
+static void SpriteCB_WeatherBallUp_Step(struct Sprite *sprite)
{
sprite->data[2] += sprite->data[0];
sprite->data[3] += sprite->data[1];
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index 23dc0461e..4bae32599 100644
--- a/src/battle_anim_status_effects.c
+++ b/src/battle_anim_status_effects.c
@@ -43,7 +43,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF3F8 =
.anims = sSpriteAnimTable_83BF3F4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8076F58,
+ .callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
};
const struct SpriteTemplate gSpriteTemplate_83BF410 =
@@ -54,7 +54,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF410 =
.anims = sSpriteAnimTable_83BF3F4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8076ED8,
+ .callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
};
static const union AnimCmd sUnknown_83BF428[] =
@@ -76,7 +76,7 @@ const struct SpriteTemplate gWeatherBallUpSpriteTemplate =
.anims = sSpriteAnimTable_83BF430,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807729C,
+ .callback = SpriteCB_WeatherBallUp,
};
const struct SpriteTemplate gWeatherBallNormalDownSpriteTemplate =
@@ -113,7 +113,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF480 =
.anims = sSpriteAnimTable_83BF47C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8076FD0,
+ .callback = SpriteCB_TrackOffsetFromAttackerAndWaitAnim,
};
const struct SpriteTemplate gSpriteTemplate_83BF498 =
@@ -124,7 +124,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF498 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8076F58,
+ .callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
};
static const union AnimCmd sUnknown_83BF4B0[] =
@@ -160,7 +160,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF4D4 =
.anims = sSpriteAniimTable_83BF4C8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8076F58,
+ .callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
};
static const union AnimCmd sUnknown_83BF4EC[] =
@@ -194,7 +194,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF514 =
.anims = sSpriteAnimTable_83BF4F4,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_83BF510,
- .callback = sub_8076ED8,
+ .callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
};
static const u8 sUnknown_83BF52C[] = _("TASK OVER\nタスクがオ-バ-しました");
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index ae2a4a407..6ac9b0fe7 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -330,7 +330,7 @@ void AnimTask_SetUpCurseBackground(u8 taskId)
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species);
+ newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
GetBattleAnimBg1Data(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap);
if (IsContest())
@@ -446,11 +446,11 @@ static void sub_80BB2A0(u8 taskId)
u8 battlerSpriteId;
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1];
- spriteId = sub_8076E34(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
+ spriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
if (sAnimStatsChangeData->data[3])
{
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2];
- newSpriteId = sub_8076E34(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
+ newSpriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
}
GetBattleAnimBg1Data(&animBgData);
if (sAnimStatsChangeData->data[0] == 0)
@@ -752,9 +752,9 @@ void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
- spriteId = sub_8076E34(battler1, gBattlerSpriteIds[battler1], species);
+ spriteId = CreateCloneOfSpriteInWindowMode(battler1, gBattlerSpriteIds[battler1], species);
if (arg4)
- newSpriteId = sub_8076E34(battler2, gBattlerSpriteIds[battler2], species);
+ newSpriteId = CreateCloneOfSpriteInWindowMode(battler2, gBattlerSpriteIds[battler2], species);
GetBattleAnimBg1Data(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap);
if (IsContest())
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index a0495ac15..c0cb6fe71 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -487,7 +487,7 @@ void TryReceiveLinkBattleData(void)
s32 j;
u8 *recvBuffer;
- if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_20) && (gLinkPlayers[0].linkType == 0x2211))
+ if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_LINK_ESTABLISHED) && (gLinkPlayers[0].linkType == 0x2211))
{
LinkRfu_DestroyIdleTask();
for (i = 0; i < GetLinkPlayerCount(); ++i)
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index d0025de01..aac9b990d 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -387,7 +387,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
}
otId = GetMonData(mon, MON_DATA_OT_ID);
position = GetBattlerPosition(battlerId);
- if (ShouldIgnoreDeoxysForm(1, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ if (ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_SPRITE, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
gMonSpritesGfxPtr->sprites[position],
species, currentPersonality);
diff --git a/src/battle_main.c b/src/battle_main.c
index d7f43ce75..021a0ca81 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -701,7 +701,7 @@ static void CB2_InitBattleInternal(void)
}
gMain.inBattle = TRUE;
for (i = 0; i < PARTY_SIZE; ++i)
- AdjustFriendship(&gPlayerParty[i], 3);
+ AdjustFriendship(&gPlayerParty[i], FRIENDSHIP_EVENT_LEAGUE_BATTLE);
gBattleCommunication[MULTIUSE_STATE] = 0;
}
@@ -1051,7 +1051,7 @@ static void CB2_HandleStartBattle(void)
SetMainCallback2(BattleMainCB2);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- gBattleTypeFlags |= BATTLE_TYPE_20;
+ gBattleTypeFlags |= BATTLE_TYPE_LINK_ESTABLISHED;
}
}
break;
@@ -1409,7 +1409,7 @@ static void CB2_HandleStartMultiBattle(void)
gMain.callback1 = BattleMainCB1;
SetMainCallback2(BattleMainCB2);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- gBattleTypeFlags |= BATTLE_TYPE_20;
+ gBattleTypeFlags |= BATTLE_TYPE_LINK_ESTABLISHED;
}
break;
case 5:
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 35328d6c1..30b8bda88 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -3241,7 +3241,7 @@ static void atk23_getexp(void)
gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId];
gBattlescriptCurrInstr = BattleScript_LevelUp;
gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8));
- AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], FRIENDSHIP_EVENT_GROW_LEVEL);
// update battle mon structure after level up
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp)
{
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 7d117f50f..e07bcd582 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -1033,7 +1033,7 @@ static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task)
u16 *tilemapAddr, *tilesetAddr;
BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr);
- CpuSet(sSlidingPokeballTilemap, tilesetAddr, 0x20);
+ CpuCopy16(sSlidingPokeballTilemap, tilesetAddr, 0x40);
CpuFill32(0, tilemapAddr, 0x800);
LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20);
++task->tState;
@@ -1827,7 +1827,7 @@ static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task)
const u16 *mugshotsMap = sVsBarTilemap;
BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr);
- CpuSet(sVsBarTileset, tilesetAddr, 0xF0);
+ CpuCopy16(sVsBarTileset, tilesetAddr, 0x1E0);
LoadPalette(sVsBarOpponentPalettes[task->tWhichMugshot], 0xF0, 0x20);
LoadPalette(sVsBarPlayerPalettes[gSaveBlock2Ptr->playerGender], 0xFA, 0xC);
for (i = 0; i < 20; ++i)
@@ -2438,7 +2438,7 @@ static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task)
u16 *tilemapAddr, *tilesetAddr;
BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr);
- CpuSet(sGridSquareTileset, tilesetAddr, 0x10);
+ CpuCopy16(sGridSquareTileset, tilesetAddr, 0x20);
CpuFill16(0xF000, tilemapAddr, 0x800);
LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20);
++task->tState;
@@ -2454,7 +2454,7 @@ static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task)
BT_GetBg0TilesetBase(&tilesetAddr);
task->tDelay = 3;
++task->tWhichGrid;
- CpuSet(sGridSquareTileset + (task->tWhichGrid * 8), tilesetAddr, 0x10);
+ CpuCopy16(sGridSquareTileset + (task->tWhichGrid * 8), tilesetAddr, 0x20);
if (task->tWhichGrid > 0xD)
{
++task->tState;
@@ -2501,7 +2501,7 @@ static bool8 BT_Phase2BlackDoodles_Init(struct Task *task)
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
gScanlineEffectRegBuffers[0][i] = WIN_RANGE(0, 0xF0);
- CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 160);
+ CpuCopy16(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0x140);
SetVBlankCallback(VBCB_BT_Phase2BlackDoodles);
++task->tState;
return TRUE;
diff --git a/src/battle_util2.c b/src/battle_util2.c
index b1036ef0b..e3fa1a6a7 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -85,12 +85,12 @@ void AdjustFriendshipOnBattleFaint(u8 battlerId)
if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
{
if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 9);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_LARGE);
else
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_SMALL);
}
else
{
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_SMALL);
}
}
diff --git a/src/berry.c b/src/berry.c
index d4ea0dae3..c5b8af7f8 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -3,10 +3,6 @@
#include "text.h"
#include "constants/items.h"
-#if !defined(NONMATCHING) && MODERN
-#define static
-#endif
-
static const u8 sBerryDescriptionPart1_Cheri[] = _("とても かわいい はなが さく.");
static const u8 sBerryDescriptionPart2_Cheri[] = _("まっかな みは とても からい.");
static const u8 sBerryDescriptionPart1_Chesto[] = _("そとの かわの ぶぶんも なかみも すべてが");
@@ -925,7 +921,7 @@ const struct BerryTree gBlankBerryTree = {};
berries[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX]; \
})
-void sub_809C718(void)
+void InitEnigmaBerry(void)
{
s32 i;
@@ -937,96 +933,39 @@ void sub_809C718(void)
gSaveBlock1Ptr->enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry);
}
-void sub_809C794(void)
+void ClearEnigmaBerries(void)
{
CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry));
- sub_809C718();
+ InitEnigmaBerry();
}
-#ifdef NONMATCHING
+struct ReceivedEnigmaBerry
+{
+ struct Berry2 berry;
+ u8 unk_001C[0x4FA];
+ u8 itemEffect[18];
+ u8 holdEffect;
+ u8 holdEffectParam;
+};
+
void SetEnigmaBerry(u8 * berry)
{
struct EnigmaBerry * enigmaBerry;
+ struct ReceivedEnigmaBerry * src2;
+ s32 i;
- sub_809C794();
-
- {
- const struct Berry2 * src = (const struct Berry2 *)berry;
- struct Berry2 * dest = &gSaveBlock1Ptr->enigmaBerry.berry;
- *dest = *src;
- }
+ ClearEnigmaBerries();
+ src2 = (struct ReceivedEnigmaBerry *)berry;
enigmaBerry = &gSaveBlock1Ptr->enigmaBerry;
- {
- s32 i = 0;
- u8 * dest = gSaveBlock1Ptr->enigmaBerry.itemEffect;
- const u8 * src = berry + 0x516;
-
- for (i = 0; i < 18; i++) dest[i] = src[i];
- }
- enigmaBerry->holdEffect = berry[0x528];
- enigmaBerry->holdEffectParam = berry[0x529];
+
+ enigmaBerry->berry = src2->berry;
+ for (i = 0; i < 18; i++)
+ enigmaBerry->itemEffect[i] = src2->itemEffect[i];
+ enigmaBerry->holdEffect = src2->holdEffect;
+ enigmaBerry->holdEffectParam = src2->holdEffectParam;
enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry);
}
-#else
-NAKED
-void SetEnigmaBerry(u8 * berry)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tbl sub_809C794\n"
- "\tadds r5, r4, 0\n"
- "\tldr r0, _0809C824 @ =gSaveBlock1Ptr\n"
- "\tldr r2, [r0]\n"
- "\tldr r0, _0809C828 @ =0x000030ec\n"
- "\tadds r4, r2, r0\n"
- "\tadds r1, r4, 0\n"
- "\tadds r0, r5, 0\n"
- "\tldm r0!, {r3,r6,r7}\n"
- "\tstm r1!, {r3,r6,r7}\n"
- "\tldm r0!, {r3,r6,r7}\n"
- "\tstm r1!, {r3,r6,r7}\n"
- "\tldr r0, [r0]\n"
- "\tstr r0, [r1]\n"
- "\tmovs r3, 0\n"
- "\tldr r0, _0809C82C @ =0x00003108\n"
- "\tadds r6, r2, r0\n"
- "\tldr r1, _0809C830 @ =0x00000516\n"
- "\tadds r2, r5, r1\n"
- "_0809C7F0:\n"
- "\tadds r0, r6, r3\n"
- "\tadds r1, r2, r3\n"
- "\tldrb r1, [r1]\n"
- "\tstrb r1, [r0]\n"
- "\tadds r3, 0x1\n"
- "\tcmp r3, 0x11\n"
- "\tble _0809C7F0\n"
- "\tmovs r3, 0xA5\n"
- "\tlsls r3, 3\n"
- "\tadds r0, r5, r3\n"
- "\tldrb r0, [r0]\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x2E\n"
- "\tstrb r0, [r1]\n"
- "\tldr r6, _0809C834 @ =0x00000529\n"
- "\tadds r0, r5, r6\n"
- "\tldrb r0, [r0]\n"
- "\tadds r1, 0x1\n"
- "\tstrb r0, [r1]\n"
- "\tadds r0, r4, 0\n"
- "\tbl GetEnigmaBerryChecksum\n"
- "\tstr r0, [r4, 0x30]\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0809C824: .4byte gSaveBlock1Ptr\n"
- "_0809C828: .4byte 0x000030ec\n"
- "_0809C82C: .4byte 0x00003108\n"
- "_0809C830: .4byte 0x00000516\n"
- "_0809C834: .4byte 0x00000529");
-}
-#endif
u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry)
{
diff --git a/src/bike.c b/src/bike.c
index e31fd27a4..b1d39ca21 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -268,11 +268,11 @@ bool32 IsRunningDisallowed(u8 metatileBehavior)
return TRUE;
}
-static bool8 MetatileBehaviorForbidsBiking(u8 r4)
+static bool8 MetatileBehaviorForbidsBiking(u8 metatileBehavior)
{
- if (MetatileBehavior_IsMB0A(r4))
+ if (MetatileBehavior_IsMB0A(metatileBehavior))
return TRUE;
- if (!MetatileBehavior_ReturnFalse_9(r4))
+ if (!MetatileBehavior_ReturnFalse_9(metatileBehavior))
return FALSE;
if (PlayerGetZCoord() & 1)
return FALSE;
diff --git a/src/blend_palette.c b/src/blend_palette.c
index 8cd65ae4b..f454a2a6e 100644
--- a/src/blend_palette.c
+++ b/src/blend_palette.c
@@ -19,7 +19,7 @@ void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor)
}
}
-void sub_8045314(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size)
+void BlendPalettesAt(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size)
{
if (coefficient == 16)
{
diff --git a/src/braille_text.c b/src/braille_text.c
index 9be01bf75..c58df8e8e 100644
--- a/src/braille_text.c
+++ b/src/braille_text.c
@@ -4,8 +4,6 @@
#include "text.h"
#include "sound.h"
-extern u8 gGlyphInfo[];
-
static const u8 gUnknown_846FB08[] = {1, 2, 4};
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("graphics/fonts/font6.fwjpnfont");
@@ -136,7 +134,7 @@ u16 Font6Func(struct TextPrinter *textPrinter)
}
DecompressGlyphFont6(char_);
CopyGlyphToWindow(textPrinter);
- textPrinter->printerTemplate.currentX += gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing;
+ textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing;
return 0;
case 1:
if (TextPrinterWait(textPrinter))
@@ -207,12 +205,12 @@ static void DecompressGlyphFont6(u16 glyph)
const u16 *glyphs;
glyphs = sFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = 0x10;
- gGlyphInfo[0x81] = 0x10;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = 0x10;
+ gGlyphInfo.height = 0x10;
}
s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese)
diff --git a/src/cable_club.c b/src/cable_club.c
index 039dea19c..34b023281 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -723,7 +723,7 @@ static void sub_8081624(void)
void CB2_ReturnFromCableClubBattle(void)
{
- gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
+ gBattleTypeFlags &= (u16)~BATTLE_TYPE_LINK_ESTABLISHED;
Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
diff --git a/src/credits.c b/src/credits.c
index 5bf2eae7f..09bdb89c2 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -11,6 +11,7 @@
#include "trainer_pokemon_sprites.h"
#include "menu.h"
#include "field_weather.h"
+#include "quest_log.h"
#include "constants/maps.h"
#include "constants/field_weather.h"
@@ -785,7 +786,7 @@ static bool32 DoOverworldMapScrollScene(UNUSED u8 unused)
sCreditsMgr->subseqno++;
// fallthrough
case 1:
- if (!Overworld_DoScrollSceneForCredits(&sCreditsMgr->ovwldseqno, sOverworldMapScenes[sCreditsMgr->whichMon], 0))
+ if (!Overworld_DoScrollSceneForCredits(&sCreditsMgr->ovwldseqno, sOverworldMapScenes[sCreditsMgr->whichMon], QL_TINT_NONE))
return FALSE;
CreateCreditsWindow();
SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
diff --git a/src/dark.c b/src/dark.c
index 142366fea..e8b0b7e62 100644
--- a/src/dark.c
+++ b/src/dark.c
@@ -799,7 +799,7 @@ void AnimTask_MetallicShine(u8 taskId)
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species);
+ newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
GetBattleAnimBg1Data(&animBg);
AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap);
AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset);
diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h
index f43e6f628..41a883b40 100644
--- a/src/data/object_events/object_event_graphics_info.h
+++ b/src/data/object_events/object_event_graphics_info.h
@@ -1,7 +1,7 @@
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedNormal = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenNormal, gObjectEventPicTable_RedNormal, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedBike = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RedBike, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedSurf = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenSurf, gObjectEventPicTable_RedSurf, gDummySpriteAffineAnimTable};
-const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedItem = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenItem, gObjectEventPicTable_RedItem, gDummySpriteAffineAnimTable};
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedFieldMove = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenItem, gObjectEventPicTable_RedItem, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Policeman = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Policeman, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RSBrendan = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RSBrendan, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RSMay = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RSMay, gDummySpriteAffineAnimTable};
@@ -70,7 +70,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_StrengthBoulder =
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenNormal = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenNormal, gObjectEventPicTable_GreenNormal, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenBike = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GreenBike, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenSurf = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenSurf, gObjectEventPicTable_GreenSurf, gDummySpriteAffineAnimTable};
-const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenItem = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenItem, gObjectEventPicTable_GreenItem, gDummySpriteAffineAnimTable};
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenFieldMove = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_RedGreenItem, gObjectEventPicTable_GreenItem, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_83A45F4 = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RedBike, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RocketM = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RocketM, gDummySpriteAffineAnimTable};
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Celio = {SPRITE_INVALID_TAG, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Celio, gDummySpriteAffineAnimTable};
diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h
index 164199089..82588ba9a 100644
--- a/src/data/object_events/object_event_graphics_info_pointers.h
+++ b/src/data/object_events/object_event_graphics_info_pointers.h
@@ -1,14 +1,14 @@
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedNormal;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedBike;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedSurf;
-const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedItem;
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedFieldMove;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedFish;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedVSSeeker;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RedVSSeekerBike;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenNormal;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenBike;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenSurf;
-const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenItem;
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenFieldMove;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenFish;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenVSSeeker;
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GreenVSSeekerBike;
@@ -156,14 +156,14 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
[OBJ_EVENT_GFX_RED_NORMAL] = &gObjectEventGraphicsInfo_RedNormal,
[OBJ_EVENT_GFX_RED_BIKE] = &gObjectEventGraphicsInfo_RedBike,
[OBJ_EVENT_GFX_RED_SURF] = &gObjectEventGraphicsInfo_RedSurf,
- [OBJ_EVENT_GFX_RED_ITEM] = &gObjectEventGraphicsInfo_RedItem,
+ [OBJ_EVENT_GFX_RED_FIELD_MOVE] = &gObjectEventGraphicsInfo_RedFieldMove,
[OBJ_EVENT_GFX_RED_FISH] = &gObjectEventGraphicsInfo_RedFish,
[OBJ_EVENT_GFX_RED_VS_SEEKER] = &gObjectEventGraphicsInfo_RedVSSeeker,
[OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE] = &gObjectEventGraphicsInfo_RedVSSeekerBike,
[OBJ_EVENT_GFX_GREEN_NORMAL] = &gObjectEventGraphicsInfo_GreenNormal,
[OBJ_EVENT_GFX_GREEN_BIKE] = &gObjectEventGraphicsInfo_GreenBike,
[OBJ_EVENT_GFX_GREEN_SURF] = &gObjectEventGraphicsInfo_GreenSurf,
- [OBJ_EVENT_GFX_GREEN_ITEM] = &gObjectEventGraphicsInfo_GreenItem,
+ [OBJ_EVENT_GFX_GREEN_FIELD_MOVE] = &gObjectEventGraphicsInfo_GreenFieldMove,
[OBJ_EVENT_GFX_GREEN_FISH] = &gObjectEventGraphicsInfo_GreenFish,
[OBJ_EVENT_GFX_GREEN_VS_SEEKER] = &gObjectEventGraphicsInfo_GreenVSSeeker,
[OBJ_EVENT_GFX_GREEN_VS_SEEKER_BIKE] = &gObjectEventGraphicsInfo_GreenVSSeekerBike,
diff --git a/src/daycare.c b/src/daycare.c
index bbd0d89a6..97190c1d6 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "gflib.h"
+#include "data.h"
#include "battle.h"
#include "constants/items.h"
#include "mail_data.h"
@@ -1682,13 +1683,13 @@ void ScriptHatchMon(void)
AddHatchedMonToParty(gSpecialVar_0x8004);
}
-static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId)
+static bool8 BufferDayCareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
{
u8 nick[0x20];
struct DaycareMon *daycareMon = &daycare->mons[daycareId];
DayCare_GetBoxMonNickname(&daycareMon->mon, nick);
- if (daycareMon->mail.message.itemId != 0
+ if (daycareMon->mail.message.itemId != ITEM_NONE
&& (StringCompare(nick, daycareMon->mail.monName) != 0
|| StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
{
@@ -1702,7 +1703,7 @@ static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId)
bool8 DaycareMonReceivedMail(void)
{
- return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+ return BufferDayCareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
}
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
@@ -1841,7 +1842,7 @@ static void CB2_EggHatch_0(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
- CopyToBgTilemapBuffer(1, gUnknown_826601C, 0x1000, 0);
+ CopyToBgTilemapBuffer(1, gTradeOrHatchMonShadowTilemap, 0x1000, 0);
CopyBgTilemapBufferToVram(1);
gMain.state++;
break;
@@ -2040,16 +2041,6 @@ static void SpriteCB_Egg_1(struct Sprite* sprite)
}
}
-struct UnkStruct_82349CC
-{
- u8 field_0;
- u8 field_1;
- u8 field_2;
- u8 field_3;
-};
-
-extern const struct UnkStruct_82349CC gMonFrontPicCoords[NUM_SPECIES];
-
static void SpriteCB_Egg_2(struct Sprite* sprite)
{
if (++sprite->data[2] > 30)
@@ -2062,7 +2053,7 @@ static void SpriteCB_Egg_2(struct Sprite* sprite)
sprite->data[0] = 0;
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0;
- gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].field_1;
+ gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset;
}
else
{
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c
index eede1ae48..8167c0d2b 100644
--- a/src/dynamic_placeholder_text_util.c
+++ b/src/dynamic_placeholder_text_util.c
@@ -6,13 +6,13 @@ static EWRAM_DATA const u8 *sStringPointers[8] = {0};
static const u8 sTextColorTable[] =
{
- // [LOW_NYBBLE / 2] = 0xXY, // HIGH_NYBBLE
+ // [LOW_NYBBLE / 2] = 0xXY, // HIGH_NYBBLE
[OBJ_EVENT_GFX_RED_NORMAL / 2] = 0x00, // OBJ_EVENT_GFX_RED_BIKE
- [OBJ_EVENT_GFX_RED_SURF / 2] = 0x00, // OBJ_EVENT_GFX_RED_ITEM
+ [OBJ_EVENT_GFX_RED_SURF / 2] = 0x00, // OBJ_EVENT_GFX_RED_FIELD_MOVE
[OBJ_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJ_EVENT_GFX_RED_VS_SEEKER
- [OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL
+ [OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE / 2] = 0x10, // OBJ_EVENT_GFX_GREEN_NORMAL
[OBJ_EVENT_GFX_GREEN_BIKE / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_SURF
- [OBJ_EVENT_GFX_GREEN_ITEM / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FISH
+ [OBJ_EVENT_GFX_GREEN_FIELD_MOVE / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_FISH
[OBJ_EVENT_GFX_GREEN_VS_SEEKER / 2] = 0x11, // OBJ_EVENT_GFX_GREEN_VS_SEEKER_BIKE
[OBJ_EVENT_GFX_RS_BRENDAN / 2] = 0x10, // OBJ_EVENT_GFX_RS_MAY
[OBJ_EVENT_GFX_LITTLE_BOY / 2] = 0x10, // OBJ_EVENT_GFX_LITTLE_GIRL
@@ -108,7 +108,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src)
{
while (*src != EOS)
{
- if (*src != CHAR_SPECIAL_F7)
+ if (*src != CHAR_DYNAMIC_PLACEHOLDER)
{
*dest++ = *src++;
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 1f9b47691..8b1dffa51 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -2002,7 +2002,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
gPlayerAvatar.objectEventId = objectEventId;
gPlayerAvatar.spriteId = spriteId;
gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId);
- SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, 0x20);
+ SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE);
}
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
@@ -2223,7 +2223,7 @@ void PatchObjectPalette(u16 paletteTag, u8 paletteSlot)
u8 paletteIndex = FindObjectEventPaletteIndexByTag(paletteTag);
LoadPalette(sObjectEventSpritePalettes[paletteIndex].data, 16 * paletteSlot + 0x100, 0x20);
- sub_8083598(paletteSlot);
+ ApplyGlobalFieldPaletteTint(paletteSlot);
}
void PatchObjectPaletteRange(const u16 *paletteTags, u8 minSlot, u8 maxSlot)
@@ -2787,7 +2787,7 @@ static bool8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, st
static bool8 MovementType_WanderAround_Step5Duplicate(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- ObjectEventSetSingleMovement(objectEvent, sprite, sub_8063F2C(objectEvent->movementDirection));
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowestMovementAction(objectEvent->movementDirection));
objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 6;
return TRUE;
@@ -5222,7 +5222,7 @@ u8 sub_8063F10(u32 idx)
return gUnknown_83A64F6[direction];
}
-dirn_to_anim(sub_8063F2C, gUnknown_83A64FB);
+dirn_to_anim(GetWalkSlowestMovementAction, gUnknown_83A64FB);
dirn_to_anim(GetWalkSlowMovementAction, gUnknown_83A6500);
dirn_to_anim(GetWalkNormalMovementAction, gUnknown_83A6505);
dirn_to_anim(GetWalkFastMovementAction, gUnknown_83A650A);
@@ -5232,7 +5232,7 @@ dirn_to_anim(GetWalkFastestMovementAction, gUnknown_83A6519);
dirn_to_anim(GetSlideMovementAction, gUnknown_83A651E);
dirn_to_anim(GetPlayerRunMovementAction, gUnknown_83A6523);
dirn_to_anim(GetPlayerRunSlowMovementAction, gUnknown_83A6528);
-dirn_to_anim(sub_80640E4, gUnknown_83A652D);
+dirn_to_anim(GetSpinMovementAction, gUnknown_83A652D);
dirn_to_anim(GetJump2MovementAction, gUnknown_83A6532);
dirn_to_anim(GetJumpInPlaceMovementAction, gUnknown_83A6537);
dirn_to_anim(GetJumpInPlaceTurnAroundMovementAction, gUnknown_83A653C);
@@ -5328,7 +5328,7 @@ static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct
if (gQuestLogPlaybackState == 2)
{
- sub_81124EC(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId);
+ QuestLogRecordNPCStep(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId);
}
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 572c6af6b..ca5453d7d 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -56,7 +56,7 @@ static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior);
static bool8 TryStartStepCountScript(u16 metatileBehavior);
static void UpdateHappinessStepCounter(void);
static bool8 UpdatePoisonStepCounter(void);
-static bool8 CheckStandardWildEncounter(u32 encounter);
+static bool8 CheckStandardWildEncounter(u32 metatileAttributes);
static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection);
static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection);
static u8 GetFacingSignpostType(u16 metatileBehvaior, u8 direction);
@@ -105,11 +105,11 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
{
if (GetPlayerSpeed() != 4)
{
- if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING))
+ if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED))
input->pressedStartButton = TRUE;
if (!QL_IS_PLAYBACK_STATE)
{
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED))
{
if (newKeys & SELECT_BUTTON)
input->pressedSelectButton = TRUE;
@@ -195,12 +195,12 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
struct MapPosition position;
u8 playerDirection;
u16 metatileBehavior;
- u32 r8;
+ u32 metatileAttributes;
ResetFacingNpcOrSignPostVars();
playerDirection = GetPlayerFacingDirection();
GetPlayerPosition(&position);
- r8 = MapGridGetMetatileAttributeAt(position.x, position.y, 0xFF);
+ metatileAttributes = MapGridGetMetatileAttributeAt(position.x, position.y, 0xFF);
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
FieldClearPlayerInput(&gInputToStoreInQuestLogMaybe);
@@ -241,7 +241,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
}
}
- if (input->checkStandardWildEncounter && CheckStandardWildEncounter(r8) == TRUE)
+ if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileAttributes) == TRUE)
{
gInputToStoreInQuestLogMaybe.checkStandardWildEncounter = TRUE;
return TRUE;
@@ -520,57 +520,57 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
if (MetatileBehavior_IsRegionMap(metatileBehavior) == TRUE)
return EventScript_WallTownMap;
if (MetatileBehavior_IsBookshelf(metatileBehavior) == TRUE)
- return gUnknown_81A7606;
+ return EventScript_Bookshelf;
if (MetatileBehavior_IsPokeMartShelf(metatileBehavior) == TRUE)
- return gUnknown_81A760F;
+ return EventScript_PokeMartShelf;
if (MetatileBehavior_IsFood(metatileBehavior) == TRUE)
- return gUnknown_81A7618;
+ return EventScript_Food;
if (MetatileBehavior_IsImpressiveMachine(metatileBehavior) == TRUE)
- return gUnknown_81A7633;
+ return EventScript_ImpressiveMachine;
if (MetatileBehavior_IsBlueprints(metatileBehavior) == TRUE)
- return gUnknown_81A763C;
+ return EventScript_Blueprints;
if (MetatileBehavior_IsVideoGame(metatileBehavior) == TRUE)
- return gUnknown_81A7621;
+ return EventScript_VideoGame;
if (MetatileBehavior_IsBurglary(metatileBehavior) == TRUE)
- return gUnknown_81A7645;
+ return EventScript_Burglary;
if (MetatileBehavior_IsComputer(metatileBehavior) == TRUE)
- return gUnknown_81A762A;
- if (MetatileBehavior_IsMBA3(metatileBehavior) == TRUE)
+ return EventScript_Computer;
+ if (MetatileBehavior_IsTrainerTowerMonitor(metatileBehavior) == TRUE)
return TrainerTower_EventScript_ShowTime;
if (MetatileBehavior_IsPlayerFacingTVScreen(metatileBehavior, direction) == TRUE)
- return gUnknown_81A764E;
+ return EventScript_PlayerFacingTVScreen;
if (MetatileBehavior_IsCabinet(metatileBehavior) == TRUE)
- return gUnknown_81A7657;
+ return EventScript_Cabinet;
if (MetatileBehavior_IsKitchen(metatileBehavior) == TRUE)
- return gUnknown_81A7660;
+ return EventScript_Kitchen;
if (MetatileBehavior_IsDresser(metatileBehavior) == TRUE)
- return gUnknown_81A7669;
+ return EventScript_Dresser;
if (MetatileBehavior_IsSnacks(metatileBehavior) == TRUE)
- return gUnknown_81A7672;
+ return EventScript_Snacks;
if (MetatileBehavior_IsPainting(metatileBehavior) == TRUE)
- return gUnknown_81A767B;
+ return EventScript_Painting;
if (MetatileBehavior_IsPowerPlantMachine(metatileBehavior) == TRUE)
- return gUnknown_81A7684;
+ return EventScript_PowerPlantMachine;
if (MetatileBehavior_IsTelephone(metatileBehavior) == TRUE)
- return gUnknown_81A768D;
+ return EventScript_Telephone;
if (MetatileBehavior_IsAdvertisingPoster(metatileBehavior) == TRUE)
- return gUnknown_81A7696;
+ return EventScript_AdvertisingPoster;
if (MetatileBehavior_IsTastyFood(metatileBehavior) == TRUE)
- return gUnknown_81A769F;
+ return EventScript_TastyFood;
if (MetatileBehavior_IsTrashBin(metatileBehavior) == TRUE)
- return gUnknown_81A76A8;
+ return EventScript_TrashBin;
if (MetatileBehavior_IsCup(metatileBehavior) == TRUE)
- return gUnknown_81A76B1;
- if (MetatileBehavior_ReturnFalse_19(metatileBehavior) == TRUE)
- return gUnknown_81A76BA;
- if (MetatileBehavior_ReturnFalse_20(metatileBehavior) == TRUE)
- return gUnknown_81A76C3;
+ return EventScript_Cup;
+ if (MetatileBehavior_IsPolishedWindow(metatileBehavior) == TRUE)
+ return EventScript_PolishedWindow;
+ if (MetatileBehavior_IsBeautifulSkyWindow(metatileBehavior) == TRUE)
+ return EventScript_BeautifulSkyWindow;
if (MetatileBehavior_IsBlinkingLights(metatileBehavior) == TRUE)
- return gUnknown_81A76CC;
- if (MetatileBehavior_IsMB9F(metatileBehavior) == TRUE)
- return gUnknown_81A76D5;
- if (MetatileBehavior_IsPlayerFacingMB_8D(metatileBehavior, direction) == TRUE)
- return CableClub_EventScript_81BBFD8;
+ return EventScript_BlinkingLights;
+ if (MetatileBehavior_IsNeatlyLinedUpTools(metatileBehavior) == TRUE)
+ return EventScript_NeatlyLinedUpTools;
+ if (MetatileBehavior_IsPlayerFacingCableClubWirelessMonitor(metatileBehavior, direction) == TRUE)
+ return CableClub_EventScript_ShowWirelessCommunicationScreen;
if (MetatileBehavior_IsQuestionnaire(metatileBehavior) == TRUE)
return EventScript_Questionnaire;
if (MetatileBehavior_IsPlayerFacingBattleRecords(metatileBehavior, direction) == TRUE)
@@ -625,7 +625,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB
return TRUE;
if (TryStartStepCountScript(metatileBehavior) == TRUE)
return TRUE;
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior) && UpdateRepelCounter() == TRUE)
return TRUE;
return FALSE;
}
@@ -655,7 +655,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
UpdateHappinessStepCounter();
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
{
if (UpdateVsSeekerStepCounter() == TRUE)
{
@@ -737,37 +737,37 @@ void RestartWildEncounterImmunitySteps(void)
ResetEncounterRateModifiers();
}
-static bool8 CheckStandardWildEncounter(u32 encounter)
+static bool8 CheckStandardWildEncounter(u32 metatileAttributes)
{
- return TryStandardWildEncounter(encounter);
+ return TryStandardWildEncounter(metatileAttributes);
}
static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection)
{
- u8 r4;
+ u8 signpostType;
const u8 * script;
if (JOY_HELD(DPAD_LEFT | DPAD_RIGHT))
return FALSE;
if (playerDirection == DIR_EAST || playerDirection == DIR_WEST)
return FALSE;
- r4 = GetFacingSignpostType(metatileBehavior, playerDirection);
- if (r4 == SIGNPOST_POKECENTER)
+ signpostType = GetFacingSignpostType(metatileBehavior, playerDirection);
+ if (signpostType == SIGNPOST_POKECENTER)
{
SetUpWalkIntoSignScript(EventScript_PokecenterSign, playerDirection);
return TRUE;
}
- else if (r4 == SIGNPOST_POKEMART)
+ else if (signpostType == SIGNPOST_POKEMART)
{
SetUpWalkIntoSignScript(EventScript_PokemartSign, playerDirection);
return TRUE;
}
- else if (r4 == SIGNPOST_INDIGO_1)
+ else if (signpostType == SIGNPOST_INDIGO_1)
{
SetUpWalkIntoSignScript(EventScript_Indigo_UltimateGoal, playerDirection);
return TRUE;
}
- else if (r4 == SIGNPOST_INDIGO_2)
+ else if (signpostType == SIGNPOST_INDIGO_2)
{
SetUpWalkIntoSignScript(EventScript_Indigo_HighestAuthority, playerDirection);
return TRUE;
@@ -777,7 +777,7 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 m
script = GetSignpostScriptAtMapPosition(position);
if (script == NULL)
return FALSE;
- if (r4 != SIGNPOST_SCRIPTED)
+ if (signpostType != SIGNPOST_SCRIPTED)
return FALSE;
SetUpWalkIntoSignScript(script, playerDirection);
return TRUE;
diff --git a/src/field_effect.c b/src/field_effect.c
index a5533c466..5942e68fd 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -422,9 +422,9 @@ static void FieldEffectScript_LoadTiles(const u8 **script)
*script += sizeof(u32);
}
-void sub_8083598(u8 paletteIdx)
+void ApplyGlobalFieldPaletteTint(u8 paletteIdx)
{
- switch (gUnknown_2036E28)
+ switch (gGlobalFieldTintMode)
{
case 0:
return;
@@ -435,7 +435,7 @@ void sub_8083598(u8 paletteIdx)
TintPalette_SepiaTone(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10);
break;
case 3:
- sub_8111F38((paletteIdx + 16) * 16, 0x10);
+ QuestLog_BackUpPalette((paletteIdx + 16) * 16, 0x10);
TintPalette_GrayScale(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10);
break;
default:
@@ -450,7 +450,7 @@ static void FieldEffectScript_LoadFadedPal(const u8 **script)
u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
LoadSpritePalette(spritePalette);
if (idx == 0xFF)
- sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag));
+ ApplyGlobalFieldPaletteTint(IndexOfSpritePaletteTag(spritePalette->tag));
UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(spritePalette->tag));
*script += sizeof(u32);
}
@@ -461,7 +461,7 @@ static void FieldEffectScript_LoadPal(const u8 **script)
u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
LoadSpritePalette(spritePalette);
if (idx != 0xFF)
- sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag));
+ ApplyGlobalFieldPaletteTint(IndexOfSpritePaletteTag(spritePalette->tag));
*script += sizeof(u32);
}
@@ -1293,7 +1293,7 @@ static bool8 EscalatorWarpEffect_1(struct Task * task)
FreezeObjectEvents();
CameraObjectReset2();
StartEscalator(task->data[1]);
- sub_81128BC(1);
+ QuestLog_OnEscalatorWarp(QL_ESCALATOR_OUT);
task->data[0]++;
return FALSE;
}
@@ -1534,7 +1534,7 @@ static bool8 EscalatorWarpInEffect_7(struct Task * task)
UnfreezeObjectEvents();
ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpInFieldEffect));
- sub_81128BC(2);
+ QuestLog_OnEscalatorWarp(QL_ESCALATOR_IN);
}
return FALSE;
}
@@ -1600,7 +1600,7 @@ static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct Ob
static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj)
{
- ObjectEventSetHeldMovement(playerObj, sub_8063F2C(DIR_NORTH));
+ ObjectEventSetHeldMovement(playerObj, GetWalkSlowestMovementAction(DIR_NORTH));
task->data[0]++;
return FALSE;
}
@@ -2907,7 +2907,7 @@ static void UseSurfEffect_1(struct Task * task)
ScriptContext2_Enable();
FreezeObjectEvents();
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(8);
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
PlayerGetDestCoords(&task->data[1], &task->data[2]);
MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]);
task->data[0]++;
@@ -2919,7 +2919,7 @@ static void UseSurfEffect_2(struct Task * task)
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- sub_805CB70();
+ StartPlayerAvatarSummonMonForFieldMoveAnim();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
task->data[0]++;
}
@@ -2943,7 +2943,7 @@ static void UseSurfEffect_4(struct Task * task)
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
ObjectEventClearHeldMovementIfFinished(objectEvent);
ObjectEventSetHeldMovement(objectEvent, sub_80641C0(objectEvent->movementDirection));
gFieldEffectArguments[0] = task->data[1];
@@ -2961,7 +2961,7 @@ static void UseSurfEffect_5(struct Task * task)
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
gPlayerAvatar.preventStep = FALSE;
- gPlayerAvatar.flags &= 0xdf;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE;
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
sub_80DC44C(objectEvent->fieldEffectSpriteId, 1);
UnfreezeObjectEvents();
@@ -2988,7 +2988,7 @@ static void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = {
u32 FldEff_UseVsSeeker(void)
{
if (gQuestLogState == QL_STATE_RECORDING)
- sub_811278C(8, 89);
+ QuestLogRecordPlayerAvatarGfxTransitionWithDuration(8, 89);
CreateTask(Task_FldEffUseVsSeeker, 0xFF);
return 0;
}
@@ -3011,7 +3011,7 @@ static void UseVsSeekerEffect_2(struct Task * task)
struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj))
{
- sub_805CBE8();
+ StartPlayerAvatarVsSeekerAnim();
ObjectEventSetHeldMovement(playerObj, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
task->data[0]++;
}
@@ -3023,11 +3023,11 @@ static void UseVsSeekerEffect_3(struct Task * task)
if (ObjectEventClearHeldMovementIfFinished(playerObj))
{
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE))
- ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(1));
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_BIKE));
else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
- ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(2));
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
else
- ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(0));
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_NORMAL));
ObjectEventForceSetHeldMovement(playerObj, GetFaceDirectionMovementAction(playerObj->facingDirection));
task->data[0]++;
}
@@ -3131,8 +3131,8 @@ static void UseFlyEffect_1(struct Task * task)
{
task->data[15] = gPlayerAvatar.flags;
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(1);
- sub_805CB70();
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
+ StartPlayerAvatarSummonMonForFieldMoveAnim();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
task->data[0]++;
}
@@ -3191,7 +3191,7 @@ static void UseFlyEffect_6(struct Task * task)
if ((++task->data[2]) >= 8)
{
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
objectEvent->inanimate = TRUE;
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT);
@@ -3437,12 +3437,12 @@ static void FlyInEffect_1(struct Task * task)
task->data[2] = 33;
task->data[15] = gPlayerAvatar.flags;
gPlayerAvatar.preventStep = TRUE;
- SetPlayerAvatarStateMask(0x01);
- if (task->data[15] & 0x08)
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
+ if (task->data[15] & PLAYER_AVATAR_FLAG_SURFING)
{
sub_80DC44C(objectEvent->fieldEffectSpriteId, 0);
}
- ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
CameraObjectReset2();
ObjectEventTurn(objectEvent, DIR_WEST);
StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
@@ -3518,7 +3518,7 @@ static void FlyInEffect_4(struct Task * task)
sprite->pos2.x = 0;
sprite->pos2.y = 0;
sprite->coordOffsetEnabled = TRUE;
- sub_805CB70();
+ StartPlayerAvatarSummonMonForFieldMoveAnim();
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
task->data[0]++;
}
@@ -3550,10 +3550,10 @@ static void FlyInEffect_7(struct Task * task)
if ((--task->data[1]) == 0)
{
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- state = 0;
- if (task->data[15] & 0x08)
+ state = PLAYER_AVATAR_GFX_NORMAL;
+ if (task->data[15] & PLAYER_AVATAR_FLAG_SURFING)
{
- state = 2;
+ state = PLAYER_AVATAR_GFX_RIDE;
sub_80DC44C(objectEvent->fieldEffectSpriteId, 1);
}
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state));
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index d86811ca8..bf0afe5b8 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -26,13 +26,13 @@
#include "constants/metatile_behaviors.h"
#include "constants/moves.h"
-static EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL;
+static EWRAM_DATA struct ObjectEvent * sPlayerObjectPtr = NULL;
static EWRAM_DATA u8 sTeleportSavedFacingDirection = DIR_NONE;
EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {};
EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {};
static u8 ObjectEventCB2_NoMovement2(struct ObjectEvent * object, struct Sprite * sprite);
-static bool8 sub_805B528(void);
+static bool8 TryUpdatePlayerSpinDirection(void);
static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent * playerObjEvent, u8 direction);
static void npc_clear_strange_bits(struct ObjectEvent * playerObjEvent);
static bool8 TryDoMetatileBehaviorForcedMovement(void);
@@ -77,18 +77,18 @@ static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObject)
static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObject);
static bool8 PlayerIsAnimActive(void);
static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
-static bool8 player_is_anim_in_certain_ranges(void);
-static bool8 sub_805BF58(void);
+static bool8 PlayerAnimIsMultiFrameStationary(void);
+static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void);
static void PlayCollisionSoundIfNotFacingWarp(u8 direction);
static void PlayerGoSpin(u8 direction);
-static void sub_805C2CC(u8 metatileBehavior);
+static void PlayerApplyTileForcedMovement(u8 metatileBehavior);
static bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y);
-static void sub_805CC40(struct ObjectEvent * playerObjEvent);
+static void HandleWarpArrowSpriteHideShow(struct ObjectEvent * playerObjEvent);
static void StartStrengthAnim(u8 objectEventId, u8 direction);
static void Task_BumpBoulder(u8 taskId);
-static bool8 sub_805CD64(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
-static bool8 do_boulder_dust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
-static bool8 sub_805CE20(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static bool8 DoBoulderInit(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static bool8 DoBoulderDust(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
+static bool8 DoBoulderFinish(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj);
static void DoPlayerMatJump(void);
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
static bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task * task, struct ObjectEvent * playerObj);
@@ -136,8 +136,8 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- sub_805CC40(playerObjEvent);
- if (!gPlayerAvatar.preventStep && !sub_805B528())
+ HandleWarpArrowSpriteHideShow(playerObjEvent);
+ if (!gPlayerAvatar.preventStep && !TryUpdatePlayerSpinDirection())
{
if (!TryInterruptObjectEventSpecialAnim(playerObjEvent, direction))
{
@@ -194,26 +194,26 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held
static void PlayerAllowForcedMovementIfMovingSameDirection(void)
{
if (gPlayerAvatar.runningState == MOVING)
- gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FIELD_MOVE;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE;
}
-static bool8 sub_805B528(void)
+static bool8 TryUpdatePlayerSpinDirection(void)
{
- if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING) && MetatileBehavior_IsSpinTile(gPlayerAvatar.lastSpinTile))
+ if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED) && MetatileBehavior_IsSpinTile(gPlayerAvatar.lastSpinTile))
{
- gUnknown_2036E30 = &gObjectEvents[gPlayerAvatar.objectEventId];
- if (gUnknown_2036E30->heldMovementFinished)
+ sPlayerObjectPtr = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (sPlayerObjectPtr->heldMovementFinished)
{
- if (MetatileBehavior_IsStopSpinning(gUnknown_2036E30->currentMetatileBehavior))
+ if (MetatileBehavior_IsStopSpinning(sPlayerObjectPtr->currentMetatileBehavior))
{
return FALSE;
}
- if (MetatileBehavior_IsSpinTile(gUnknown_2036E30->currentMetatileBehavior))
+ if (MetatileBehavior_IsSpinTile(sPlayerObjectPtr->currentMetatileBehavior))
{
- gPlayerAvatar.lastSpinTile = gUnknown_2036E30->currentMetatileBehavior;
+ gPlayerAvatar.lastSpinTile = sPlayerObjectPtr->currentMetatileBehavior;
}
- ObjectEventClearHeldMovement(gUnknown_2036E30);
- sub_805C2CC(gPlayerAvatar.lastSpinTile);
+ ObjectEventClearHeldMovement(sPlayerObjectPtr);
+ PlayerApplyTileForcedMovement(gPlayerAvatar.lastSpinTile);
}
return TRUE;
}
@@ -221,8 +221,8 @@ static bool8 sub_805B528(void)
}
static const struct {
- bool8 (*unk0)(u8 metatileBehavior);
- bool8 (*unk4)(void);
+ bool8 (*check)(u8 metatileBehavior);
+ bool8 (*apply)(void);
} sForcedMovementFuncs[] = {
{MetatileBehavior_IsUnknownMovement48, ForcedMovement_Slip},
{MetatileBehavior_IsIce_2, ForcedMovement_Slip},
@@ -252,37 +252,38 @@ static bool8 TryDoMetatileBehaviorForcedMovement(void)
{
int i;
u8 behavior;
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FIELD_MOVE))
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_CONTROLLABLE))
{
behavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior;
- for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ for (i = 0; sForcedMovementFuncs[i].check != NULL; i++)
{
- if (sForcedMovementFuncs[i].unk0(behavior))
+ if (sForcedMovementFuncs[i].check(behavior))
{
gPlayerAvatar.lastSpinTile = behavior;
- return sForcedMovementFuncs[i].unk4();
+ return sForcedMovementFuncs[i].apply();
}
}
- return sForcedMovementFuncs[i].unk4();
+ return sForcedMovementFuncs[i].apply();
}
else
{
- for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ // Calls ForcedMovement_None but with extra steps
+ for (i = 0; sForcedMovementFuncs[i].check != NULL; i++)
;
- return sForcedMovementFuncs[i].unk4();
+ return sForcedMovementFuncs[i].apply();
}
}
static bool8 ForcedMovement_None(void)
{
- if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
playerObjEvent->facingDirectionLocked = FALSE;
playerObjEvent->enableAnim = TRUE;
SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
- gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FISHING;
+ gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED;
}
return FALSE;
}
@@ -292,7 +293,7 @@ static u8 DoForcedMovement(u8 direction, MovementAction movementAction)
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
u8 collision = CheckForPlayerAvatarCollision(direction);
- playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING;
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED;
if (collision)
{
ForcedMovement_None();
@@ -304,7 +305,7 @@ static u8 DoForcedMovement(u8 direction, MovementAction movementAction)
{
if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
- playerAvatar->flags |= PLAYER_AVATAR_FLAG_FISHING;
+ playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED;
playerAvatar->runningState = MOVING;
return 1;
}
@@ -581,12 +582,12 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u
return collision;
}
-static const u8 gUnknown_835B820[] = {
- MOVEMENT_ACTION_FACE_DOWN_FAST,
- MOVEMENT_ACTION_FACE_DOWN_FAST,
- MOVEMENT_ACTION_FACE_UP_FAST,
- MOVEMENT_ACTION_FACE_LEFT_FAST,
- MOVEMENT_ACTION_FACE_RIGHT_FAST
+static const u8 sQuestLogSurfDismountActionIds[] = {
+ QL_PLAYER_GFX_STOP_SURF_S,
+ QL_PLAYER_GFX_STOP_SURF_S,
+ QL_PLAYER_GFX_STOP_SURF_N,
+ QL_PLAYER_GFX_STOP_SURF_W,
+ QL_PLAYER_GFX_STOP_SURF_E
};
static bool8 CanStopSurfing(s16 x, s16 y, u8 direction)
@@ -595,7 +596,7 @@ static bool8 CanStopSurfing(s16 x, s16 y, u8 direction)
&& MapGridGetZCoordAt(x, y) == 3
&& GetObjectEventIdByXYZ(x, y, 3) == OBJECT_EVENTS_COUNT)
{
- sub_811278C(gUnknown_835B820[direction], 16);
+ QuestLogRecordPlayerAvatarGfxTransitionWithDuration(sQuestLogSurfDismountActionIds[direction], 16);
CreateStopSurfingTask(direction);
return TRUE;
}
@@ -641,7 +642,7 @@ static bool8 TryPushBoulder(s16 x, s16 y, u8 direction)
}
}
-static bool8 (*const gUnknown_835B828[])(u8) = {
+static bool8 (*const sAcroBikeTrickMetatiles[])(u8) = {
MetatileBehavior_IsBumpySlope,
MetatileBehavior_IsIsolatedVerticalRail,
MetatileBehavior_IsIsolatedHorizontalRail,
@@ -649,7 +650,7 @@ static bool8 (*const gUnknown_835B828[])(u8) = {
MetatileBehavior_IsHorizontalRail
};
-static const u8 gUnknown_835B83C[] = {
+static const u8 sAcroBikeTrickCollisionTypes[] = {
COLLISION_WHEELIE_HOP,
COLLISION_ISOLATED_VERTICAL_RAIL,
COLLISION_ISOLATED_HORIZONTAL_RAIL,
@@ -661,11 +662,11 @@ static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collis
{
u8 i;
- for (i = 0; i < NELEMS(gUnknown_835B828); i++)
+ for (i = 0; i < NELEMS(sAcroBikeTrickMetatiles); i++)
{
- if (gUnknown_835B828[i](metatileBehavior))
+ if (sAcroBikeTrickMetatiles[i](metatileBehavior))
{
- *collision = gUnknown_835B83C[i];
+ *collision = sAcroBikeTrickCollisionTypes[i];
return;
}
}
@@ -677,15 +678,15 @@ void SetPlayerAvatarTransitionFlags(u16 flags)
DoPlayerAvatarTransition();
}
-static void (*const gUnknown_835B844[])(struct ObjectEvent *) = {
- [PLAYER_AVATAR_STATE_NORMAL] = PlayerAvatarTransition_Normal,
- [PLAYER_AVATAR_STATE_MACH_BIKE] = PlayerAvatarTransition_Bike,
- [PLAYER_AVATAR_STATE_ACRO_BIKE] = PlayerAvatarTransition_Bike,
- [PLAYER_AVATAR_STATE_SURFING] = PlayerAvatarTransition_Surfing,
- [PLAYER_AVATAR_STATE_UNDERWATER] = PlayerAvatarTransition_Underwater,
- [PLAYER_AVATAR_STATE_FIELD_MOVE] = PlayerAvatarTransition_ReturnToField,
- [PLAYER_AVATAR_STATE_FISHING] = PlayerAvatarTransition_Dummy,
- [PLAYER_AVATAR_STATE_WATERING] = PlayerAvatarTransition_Dummy
+static void (*const sPlayerAvatarTransitionFuncs[])(struct ObjectEvent *) = {
+ [PLAYER_AVATAR_STATE_NORMAL] = PlayerAvatarTransition_Normal,
+ [PLAYER_AVATAR_STATE_MACH_BIKE] = PlayerAvatarTransition_Bike,
+ [PLAYER_AVATAR_STATE_ACRO_BIKE] = PlayerAvatarTransition_Bike,
+ [PLAYER_AVATAR_STATE_SURFING] = PlayerAvatarTransition_Surfing,
+ [PLAYER_AVATAR_STATE_UNDERWATER] = PlayerAvatarTransition_Underwater,
+ [PLAYER_AVATAR_STATE_CONTROLLABLE] = PlayerAvatarTransition_ReturnToField,
+ [PLAYER_AVATAR_STATE_FORCED] = PlayerAvatarTransition_Dummy,
+ [PLAYER_AVATAR_STATE_DASH] = PlayerAvatarTransition_Dummy
};
static void DoPlayerAvatarTransition(void)
@@ -695,10 +696,10 @@ static void DoPlayerAvatarTransition(void)
if (flags != 0)
{
- for (i = 0; i < NELEMS(gUnknown_835B844); i++, flags >>= 1)
+ for (i = 0; i < NELEMS(sPlayerAvatarTransitionFuncs); i++, flags >>= 1)
{
if (flags & 1)
- gUnknown_835B844[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
+ sPlayerAvatarTransitionFuncs[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
}
gPlayerAvatar.transitionFlags = 0;
}
@@ -711,21 +712,21 @@ static void PlayerAvatarTransition_Dummy(struct ObjectEvent * playerObjEvent)
static void PlayerAvatarTransition_Normal(struct ObjectEvent * playerObjEvent)
{
- sub_8150474(0);
- sub_8150498(0);
+ QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_NORMAL);
+ QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_NORMAL);
}
static void PlayerAvatarTransition_Bike(struct ObjectEvent * playerObjEvent)
{
- sub_8150474(1);
- sub_8150498(1);
+ QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_BIKE);
+ QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_BIKE);
InitPlayerAvatarBikeState(0, 0);
}
static void PlayerAvatarTransition_Surfing(struct ObjectEvent * playerObjEvent)
{
- sub_8150474(3);
- sub_8150498(3);
+ QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_SURF);
+ QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_SURF);
}
static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEvent)
@@ -735,28 +736,28 @@ static void PlayerAvatarTransition_Underwater(struct ObjectEvent * playerObjEven
static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent * playerObjEvent)
{
- gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_FIELD_MOVE;
+ gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_CONTROLLABLE;
}
-void sub_805BEB8(void)
+void UpdatePlayerAvatarTransitionState(void)
{
gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
if (PlayerIsAnimActive())
{
if (!PlayerCheckIfAnimFinishedOrInactive())
{
- if (!player_is_anim_in_certain_ranges())
+ if (!PlayerAnimIsMultiFrameStationary())
gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION;
}
else
{
- if (!sub_805BF58())
+ if (!PlayerAnimIsMultiFrameStationaryAndStateNotTurning())
gPlayerAvatar.tileTransitionState = T_TILE_CENTER;
}
}
}
-static bool8 player_is_anim_in_certain_ranges(void)
+static bool8 PlayerAnimIsMultiFrameStationary(void)
{
u8 movementActionId = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId;
@@ -770,9 +771,9 @@ static bool8 player_is_anim_in_certain_ranges(void)
return FALSE;
}
-static bool8 sub_805BF58(void)
+static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void)
{
- if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION)
+ if (PlayerAnimIsMultiFrameStationary() && gPlayerAvatar.runningState != TURN_DIRECTION)
return TRUE;
else
return FALSE;
@@ -809,25 +810,25 @@ static void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement)
{
PlayerSetCopyableMovement(copyableMovement);
if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementActionId))
- sub_8112628(movementActionId);
+ QuestLogRecordPlayerStep(movementActionId);
}
}
-static void sub_805C06C(struct ObjectEvent * objectEvent, u8 movementAction)
+static void QL_TryRecordPlayerStepWithDuration0(struct ObjectEvent * objectEvent, u8 movementAction)
{
if (!ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], movementAction))
- sub_81126AC(movementAction, 0);
+ QuestLogRecordPlayerStepWithDuration(movementAction, 0);
}
-static void sub_805C0A4(struct ObjectEvent * objectEvent, u8 movementAction)
+static void QL_TryRecordNPCStepWithDuration32(struct ObjectEvent * objectEvent, u8 movementAction)
{
if (!ObjectEventSetHeldMovement(objectEvent, movementAction))
- sub_8112588(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementAction, 32);
+ QuestLogRecordNPCStepWithDuration(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementAction, 32);
}
-void sub_805C0D4(u8 direction)
+void PlayerGoSlowest(u8 direction)
{
- PlayerSetAnimId(sub_8063F2C(direction), 2);
+ PlayerSetAnimId(GetWalkSlowestMovementAction(direction), 2);
}
void PlayerGoSlow(u8 direction)
@@ -919,17 +920,17 @@ void HandleEnforcedLookDirectionOnPlayerStopMoving(void)
static void PlayerGoSpin(u8 direction)
{
- PlayerSetAnimId(sub_80640E4(direction), 3);
+ PlayerSetAnimId(GetSpinMovementAction(direction), 3);
}
-static void sub_805C2CC(u8 metatileBehavior)
+static void PlayerApplyTileForcedMovement(u8 metatileBehavior)
{
int i;
- for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
+ for (i = 0; sForcedMovementFuncs[i].check != NULL; i++)
{
- if (sForcedMovementFuncs[i].unk0(metatileBehavior))
- sForcedMovementFuncs[i].unk4();
+ if (sForcedMovementFuncs[i].check(metatileBehavior))
+ sForcedMovementFuncs[i].apply();
}
}
@@ -978,12 +979,12 @@ static void PlayerAcroWheelieCollide(u8 direction)
PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2);
}
-static void sub_805C408(u8 direction)
+static void PlayerAcroPopWheelie(u8 direction)
{
PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2);
}
-static void sub_805C420(u8 direction)
+static void PlayerAcroWheelieMove(u8 direction)
{
PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2);
}
@@ -1107,7 +1108,7 @@ u8 GetPlayerAvatarObjectId(void)
return gPlayerAvatar.spriteId;
}
-void sub_805C774(void)
+void CancelPlayerForcedMovement(void)
{
ForcedMovement_None();
}
@@ -1126,12 +1127,12 @@ void StopPlayerAvatar(void)
}
static const u8 sPlayerAvatarGfxIds[][GENDER_COUNT] = {
- {OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL},
- {OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE},
- {OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF},
- {OBJ_EVENT_GFX_RED_ITEM, OBJ_EVENT_GFX_GREEN_ITEM},
- {OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH},
- {OBJ_EVENT_GFX_RED_VS_SEEKER, OBJ_EVENT_GFX_GREEN_VS_SEEKER},
+ [PLAYER_AVATAR_GFX_NORMAL] = {OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL},
+ [PLAYER_AVATAR_GFX_BIKE] = {OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE},
+ [PLAYER_AVATAR_GFX_RIDE] = {OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF},
+ [PLAYER_AVATAR_GFX_FIELD_MOVE] = {OBJ_EVENT_GFX_RED_FIELD_MOVE, OBJ_EVENT_GFX_GREEN_FIELD_MOVE},
+ [PLAYER_AVATAR_GFX_FISH] = {OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH},
+ [PLAYER_AVATAR_GFX_VSSEEKER] = {OBJ_EVENT_GFX_RED_VS_SEEKER, OBJ_EVENT_GFX_GREEN_VS_SEEKER},
};
static const u8 sHoennLinkPartnerGfxIds[] = {
@@ -1166,7 +1167,7 @@ u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId)
case OBJ_EVENT_GFX_GREEN_NORMAL:
case OBJ_EVENT_GFX_GREEN_BIKE:
case OBJ_EVENT_GFX_GREEN_SURF:
- case OBJ_EVENT_GFX_GREEN_ITEM:
+ case OBJ_EVENT_GFX_GREEN_FIELD_MOVE:
case OBJ_EVENT_GFX_GREEN_FISH:
return FEMALE;
default:
@@ -1226,7 +1227,7 @@ void ClearPlayerAvatarInfo(void)
void SetPlayerAvatarStateMask(u8 flags)
{
- gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FISHING | PLAYER_AVATAR_FLAG_FIELD_MOVE);
+ gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED | PLAYER_AVATAR_FLAG_CONTROLLABLE);
gPlayerAvatar.flags |= flags;
}
@@ -1258,21 +1259,21 @@ u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
{
u8 i;
- u8 r5 = gPlayerAvatar.flags;
+ u8 flags = gPlayerAvatar.flags;
for (i = 0; i < NELEMS(*sPlayerAvatarGfxToStateFlag); i++)
{
- if (sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][1] & r5)
+ if (sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][1] & flags)
return sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][0];
}
return 0;
}
-void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b)
+void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 extras)
{
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
- gPlayerAvatar.transitionFlags |= unk | b;
+ gPlayerAvatar.transitionFlags |= unk | extras;
DoPlayerAvatarTransition();
}
@@ -1283,7 +1284,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
struct ObjectEvent *objectEvent;
playerObjEventTemplate.localId = OBJ_EVENT_ID_PLAYER;
- playerObjEventTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, gender);
+ playerObjEventTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_GFX_NORMAL, gender);
playerObjEventTemplate.x = x - 7;
playerObjEventTemplate.y = y - 7;
playerObjEventTemplate.elevation = 0;
@@ -1305,7 +1306,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
gPlayerAvatar.objectEventId = objectEventId;
gPlayerAvatar.spriteId = objectEvent->spriteId;
gPlayerAvatar.gender = gender;
- SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FIELD_MOVE | PLAYER_AVATAR_FLAG_ON_FOOT);
+ SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_CONTROLLABLE | PLAYER_AVATAR_FLAG_ON_FOOT);
}
void SetPlayerInvisibility(bool8 invisible)
@@ -1315,34 +1316,34 @@ void SetPlayerInvisibility(bool8 invisible)
gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible;
}
-void sub_805CB70(void)
+void StartPlayerAvatarSummonMonForFieldMoveAnim(void)
{
- ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
+ ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_FIELD_MOVE));
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
}
-static const u8 gUnknown_835B88E[] = {
+static const u8 sPlayerAvatarVsSeekerBikeGfxIds[] = {
OBJ_EVENT_GFX_RED_VS_SEEKER_BIKE,
OBJ_EVENT_GFX_GREEN_VS_SEEKER_BIKE
};
-u8 sub_805CBB8(void)
+u8 GetPlayerAvatarVsSeekerGfxId(void)
{
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
- return gUnknown_835B88E[gPlayerAvatar.gender];
+ return sPlayerAvatarVsSeekerBikeGfxIds[gPlayerAvatar.gender];
else
- return GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE);
+ return GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_VSSEEKER);
}
-void sub_805CBE8(void)
+void StartPlayerAvatarVsSeekerAnim(void)
{
- ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], sub_805CBB8());
+ ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarVsSeekerGfxId());
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
}
-void sub_805CC2C(u8 direction)
+void StartPlayerAvatarFishAnim(u8 direction)
{
- sub_8150498(2);
+ QuestLogCallUpdatePlayerSprite(QL_PLAYER_GFX_FISH);
}
void nullsub_24(u8 direction)
@@ -1362,7 +1363,7 @@ static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = {
MetatileBehavior_IsEastArrowWarp
};
-static void sub_805CC40(struct ObjectEvent *objectEvent)
+static void HandleWarpArrowSpriteHideShow(struct ObjectEvent *objectEvent)
{
s16 x;
s16 y;
@@ -1383,10 +1384,10 @@ static void sub_805CC40(struct ObjectEvent *objectEvent)
SetSpriteInvisible(objectEvent->warpArrowSpriteId);
}
-static bool8 (*const gUnknown_835B8A0[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = {
- sub_805CD64,
- do_boulder_dust,
- sub_805CE20
+static bool8 (*const sBoulderTaskSteps[])(struct Task * task, struct ObjectEvent * playerObj, struct ObjectEvent * boulderObj) = {
+ DoBoulderInit,
+ DoBoulderDust,
+ DoBoulderFinish
};
static void StartStrengthAnim(u8 a, u8 b)
@@ -1400,13 +1401,13 @@ static void StartStrengthAnim(u8 a, u8 b)
static void Task_BumpBoulder(u8 taskId)
{
- while (gUnknown_835B8A0[gTasks[taskId].data[0]](&gTasks[taskId],
+ while (sBoulderTaskSteps[gTasks[taskId].data[0]](&gTasks[taskId],
&gObjectEvents[gPlayerAvatar.objectEventId],
&gObjectEvents[gTasks[taskId].data[1]]))
;
}
-static bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+static bool8 DoBoulderInit(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{
ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE;
@@ -1414,15 +1415,15 @@ static bool8 sub_805CD64(struct Task *task, struct ObjectEvent *playerObject, st
return FALSE;
}
-static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+static bool8 DoBoulderDust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{
if (!ObjectEventIsMovementOverridden(playerObject)
&& !ObjectEventIsMovementOverridden(strengthObject))
{
ObjectEventClearHeldMovementIfFinished(playerObject);
ObjectEventClearHeldMovementIfFinished(strengthObject);
- sub_805C06C(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2]));
- sub_805C0A4(strengthObject, sub_8063F2C((u8)task->data[2]));
+ QL_TryRecordPlayerStepWithDuration0(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2]));
+ QL_TryRecordNPCStepWithDuration32(strengthObject, GetWalkSlowestMovementAction((u8)task->data[2]));
gFieldEffectArguments[0] = strengthObject->currentCoords.x;
gFieldEffectArguments[1] = strengthObject->currentCoords.y;
gFieldEffectArguments[2] = strengthObject->previousElevation;
@@ -1434,7 +1435,7 @@ static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject
return FALSE;
}
-static bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
+static bool8 DoBoulderFinish(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{
if (ObjectEventCheckHeldMovementStatus(playerObject)
&& ObjectEventCheckHeldMovementStatus(strengthObject))
@@ -1472,12 +1473,12 @@ static bool8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEv
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
PlaySE(SE_LEDGE);
- sub_805C06C(objectEvent, GetJumpInPlaceMovementAction(objectEvent->facingDirection));
+ QL_TryRecordPlayerStepWithDuration0(objectEvent, GetJumpInPlaceMovementAction(objectEvent->facingDirection));
task->data[1]++;
if (task->data[1] > 1)
{
gPlayerAvatar.preventStep = FALSE;
- gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_FIELD_MOVE;
+ gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_CONTROLLABLE;
DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
}
}
@@ -1522,7 +1523,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct Objec
{
u8 direction;
- sub_805C06C(objectEvent, GetFaceDirectionMovementAction(direction = directions[objectEvent->movementDirection - 1]));
+ QL_TryRecordPlayerStepWithDuration0(objectEvent, GetFaceDirectionMovementAction(direction = directions[objectEvent->movementDirection - 1]));
if (direction == (u8)task->data[1])
task->data[2]++;
task->data[0]++;
@@ -1544,7 +1545,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct Objec
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- sub_805C06C(objectEvent, actions[task->data[2]]);
+ QL_TryRecordPlayerStepWithDuration0(objectEvent, actions[task->data[2]]);
task->data[0] = 1;
}
return FALSE;
@@ -1554,7 +1555,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Objec
{
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
- sub_805C06C(objectEvent, sub_8063F2C(GetOppositeDirection(task->data[1])));
+ QL_TryRecordPlayerStepWithDuration0(objectEvent, GetWalkSlowestMovementAction(GetOppositeDirection(task->data[1])));
ScriptContext2_Disable();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin));
@@ -1596,7 +1597,7 @@ void SeafoamIslandsB4F_CurrentDumpsPlayerOnLand(void)
{
if (gQuestLogPlaybackState != 1 && gQuestLogPlaybackState != 3)
{
- sub_811278C(gUnknown_835B820[DIR_NORTH], 16);
+ QuestLogRecordPlayerAvatarGfxTransitionWithDuration(sQuestLogSurfDismountActionIds[DIR_NORTH], 16);
CreateStopSurfingTask(DIR_NORTH);
}
}
@@ -1611,7 +1612,7 @@ static void Task_StopSurfingInit(u8 taskId)
return;
}
sub_80DC44C(playerObjEvent->fieldEffectSpriteId, 2);
- sub_805C06C(playerObjEvent, sub_80641EC((u8)gTasks[taskId].data[0]));
+ QL_TryRecordPlayerStepWithDuration0(playerObjEvent, sub_80641EC((u8)gTasks[taskId].data[0]));
gTasks[taskId].func = Task_WaitStopSurfing;
}
@@ -1621,8 +1622,8 @@ static void Task_WaitStopSurfing(u8 taskId)
if (ObjectEventClearHeldMovementIfFinished(playerObjEvent))
{
- ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL));
- sub_805C06C(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
+ ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_NORMAL));
+ QL_TryRecordPlayerStepWithDuration0(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnfreezeObjectEvents();
@@ -1674,8 +1675,8 @@ void StartFishing(u8 rod)
gTasks[taskId].tFishingRod = rod;
Task_Fishing(taskId);
- if (sub_8150474(2) == TRUE)
- sub_8112C9C();
+ if (QuestLogTryRecordPlayerAvatarGfxTransition(QL_PLAYER_GFX_FISH) == TRUE)
+ QL_AfterRecordFishActionSuccessful();
}
@@ -1705,7 +1706,7 @@ static bool8 Fishing2(struct Task *task)
playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventClearHeldMovementIfActive(playerObjEvent);
playerObjEvent->enableAnim = 1;
- sub_805CC2C(playerObjEvent->facingDirection);
+ StartPlayerAvatarFishAnim(playerObjEvent->facingDirection);
task->tStep++;
return FALSE;
}
diff --git a/src/field_poison.c b/src/field_poison.c
index d4ed5e45f..1e2a30c0c 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -33,7 +33,7 @@ static void FaintFromFieldPoison(u8 partyIdx)
{
struct Pokemon *pokemon = gPlayerParty + partyIdx;
u32 status = STATUS1_NONE;
- AdjustFriendship(pokemon, 8);
+ AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE);
SetMonData(pokemon, MON_DATA_STATUS, &status);
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
StringGetEnd10(gStringVar1);
diff --git a/src/field_specials.c b/src/field_specials.c
index 8e5c79cb1..fdb26e9e7 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -109,9 +109,9 @@ void ResetCyclingRoadChallengeData(void)
u8 GetPlayerAvatarBike(void)
{
- if (TestPlayerAvatarFlags(4))
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
return 1;
- else if (TestPlayerAvatarFlags(2))
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
return 2;
else
return 0;
@@ -1800,10 +1800,10 @@ void SetUsedPkmnCenterQuestLogEvent(void)
}
static const struct {
- u16 grp;
- u16 num;
- u16 grp2;
- u16 num2;
+ u16 inside_grp;
+ u16 inside_num;
+ u16 outside_grp;
+ u16 outside_num;
} sInsideOutsidePairs[51] = {
[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)},
@@ -1858,85 +1858,87 @@ static const struct {
[QL_LOCATION_CERULEAN_CAVE] = {MAP(CERULEAN_CAVE_1F), MAP(CERULEAN_CITY)}
};
-void sub_80CC534(void)
+void QuestLog_CheckDepartingIndoorsMap(void)
{
u8 i;
for (i = 0; i < NELEMS(sInsideOutsidePairs); i++)
{
- if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].num)
+ if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].inside_grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].inside_num)
{
- if (VarGet(VAR_0x404D) != QL_LOCATION_ROCKET_HIDEOUT || i != QL_LOCATION_GAME_CORNER)
+ if (VarGet(VAR_QL_ENTRANCE) != QL_LOCATION_ROCKET_HIDEOUT || i != QL_LOCATION_GAME_CORNER)
{
- VarSet(VAR_0x404D, i);
- FlagSet(FLAG_0x808);
+ VarSet(VAR_QL_ENTRANCE, i);
+ FlagSet(FLAG_SYS_QL_DEPARTED);
}
break;
}
}
}
-void sub_80CC59C(void)
+struct QuestLogDepartedData {
+ u8 map_section_id;
+ u8 entrance_id;
+};
+
+void QuestLog_TryRecordDepartedLocation(void)
{
s16 x, y;
- struct {
- u8 unk0;
- u8 unk1;
- } sp0;
- u16 r5 = VarGet(VAR_0x404D);
- sp0.unk0 = 0;
- sp0.unk1 = 0;
- if (FlagGet(FLAG_0x808))
- {
- if (r5 == QL_LOCATION_VIRIDIAN_FOREST_1)
+ struct QuestLogDepartedData event_buffer;
+ u16 ql_entrance_id = VarGet(VAR_QL_ENTRANCE);
+ event_buffer.map_section_id = 0;
+ event_buffer.entrance_id = 0;
+ if (FlagGet(FLAG_SYS_QL_DEPARTED))
+ {
+ if (ql_entrance_id == 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)))
{
- sp0.unk0 = MAPSEC_ROUTE_2;
+ event_buffer.map_section_id = MAPSEC_ROUTE_2;
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE))
- sp0.unk1 = r5;
+ event_buffer.entrance_id = ql_entrance_id;
else
- sp0.unk1 = r5 + 1;
- SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0);
- FlagClear(FLAG_0x808);
+ event_buffer.entrance_id = ql_entrance_id + 1;
+ SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
return;
}
}
- else if (r5 == QL_LOCATION_LEAGUE_GATE_1)
+ else if (ql_entrance_id == QL_LOCATION_LEAGUE_GATE_1)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
{
- sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
+ event_buffer.map_section_id = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[ql_entrance_id].inside_grp, sInsideOutsidePairs[ql_entrance_id].inside_num)->regionMapSectionId;
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22))
- sp0.unk1 = r5;
+ event_buffer.entrance_id = ql_entrance_id;
else
- sp0.unk1 = r5 + 1;
- SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0);
- FlagClear(FLAG_0x808);
+ event_buffer.entrance_id = ql_entrance_id + 1;
+ SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
return;
}
}
- if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[r5].grp2 && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[r5].num2)
+ if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[ql_entrance_id].outside_grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[ql_entrance_id].outside_num)
{
- sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
- sp0.unk1 = r5;
- if (r5 == QL_LOCATION_ROCK_TUNNEL_1)
+ event_buffer.map_section_id = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[ql_entrance_id].inside_grp, sInsideOutsidePairs[ql_entrance_id].inside_num)->regionMapSectionId;
+ event_buffer.entrance_id = ql_entrance_id;
+ if (ql_entrance_id == QL_LOCATION_ROCK_TUNNEL_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 15 || y != 26)
- sp0.unk1++;
+ event_buffer.entrance_id++;
}
- else if (r5 == QL_LOCATION_SEAFOAM_ISLANDS_1)
+ else if (ql_entrance_id == QL_LOCATION_SEAFOAM_ISLANDS_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 67 || y != 15)
- sp0.unk1++;
+ event_buffer.entrance_id++;
}
- SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0);
- FlagClear(FLAG_0x808);
- if (r5 == QL_LOCATION_ROCKET_HIDEOUT)
+ SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
+ if (ql_entrance_id == QL_LOCATION_ROCKET_HIDEOUT)
{
- VarSet(VAR_0x404D, QL_LOCATION_GAME_CORNER);
- FlagSet(FLAG_0x808);
+ VarSet(VAR_QL_ENTRANCE, QL_LOCATION_GAME_CORNER);
+ FlagSet(FLAG_SYS_QL_DEPARTED);
}
}
}
@@ -2064,7 +2066,7 @@ void RunMassageCooldownStepCounter(void)
void DaisyMassageServices(void)
{
- AdjustFriendship(&gPlayerParty[gSpecialVar_0x8004], 6);
+ AdjustFriendship(&gPlayerParty[gSpecialVar_0x8004], FRIENDSHIP_EVENT_MASSAGE);
VarSet(VAR_MASSAGE_COOLDOWN_STEP_COUNTER, 0);
}
@@ -2143,7 +2145,7 @@ void DoPokemonLeagueLightingEffect(void)
LoadPalette(sEliteFourLightingPalettes[0], 0x70, 0x20);
}
data[1] = 0;
- sub_8059948(7, 1);
+ Fieldmap_ApplyGlobalTintToPaletteSlot(7, 1);
}
}
@@ -2153,7 +2155,7 @@ static void Task_RunPokemonLeagueLightingEffect(u8 taskId)
if (!gPaletteFade.active
&& FlagGet(FLAG_TEMP_2) != FALSE
&& FlagGet(FLAG_TEMP_5) != TRUE
- && gUnknown_2036E28 != 3
+ && gGlobalFieldTintMode != QL_TINT_BACKUP_GRAYSCALE
&& --data[0] == 0
)
{
@@ -2170,7 +2172,7 @@ static void Task_RunPokemonLeagueLightingEffect(u8 taskId)
data[0] = sEliteFourLightingTimers[data[1]];
LoadPalette(sEliteFourLightingPalettes[data[1]], 0x70, 0x20);
}
- sub_8059948(7, 1);
+ Fieldmap_ApplyGlobalTintToPaletteSlot(7, 1);
}
}
@@ -2187,7 +2189,7 @@ static void Task_CancelPokemonLeagueLightingEffect(u8 taskId)
{
LoadPalette(sEliteFourLightingPalettes[11], 0x70, 0x20);
}
- sub_8059948(7, 1);
+ Fieldmap_ApplyGlobalTintToPaletteSlot(7, 1);
if (gPaletteFade.active)
{
BlendPalettes(0x00000080, 16, RGB_BLACK);
@@ -2400,7 +2402,7 @@ static void MoveDeoxysObject(u8 num)
{
u8 mapObjId;
LoadPalette(sDeoxysObjectPals[num], 0x1A0, 0x08);
- sub_8083598(10);
+ ApplyGlobalFieldPaletteTint(10);
TryGetObjectEventIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjId);
if (num == 0)
PlaySE(SE_M_CONFUSE_RAY);
@@ -2446,7 +2448,7 @@ void SetDeoxysTrianglePalette(void)
{
u8 num = VarGet(VAR_DEOXYS_INTERACTION_NUM);
LoadPalette(sDeoxysObjectPals[num], 0x1A0, 0x08);
- sub_8083598(10);
+ ApplyGlobalFieldPaletteTint(10);
}
bool8 IsBadEggInParty(void)
@@ -2481,7 +2483,7 @@ void BrailleCursorToggle(void)
if (gSpecialVar_0x8006 == 0)
sBrailleTextCursorSpriteID = CreateTextCursorSpriteForOakSpeech(0, x, gSpecialVar_0x8005, 0, 0);
else
- sub_8006398(sBrailleTextCursorSpriteID);
+ DestroyTextCursorSprite(sBrailleTextCursorSpriteID);
}
}
diff --git a/src/field_weather.c b/src/field_weather.c
index b097524bc..e36f1a23c 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -43,7 +43,7 @@ struct WeatherCallbacks
static EWRAM_DATA struct Weather sWeather = {};
static EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {};
static EWRAM_DATA const u8 *sPaletteGammaTypes = NULL;
-static EWRAM_DATA u16 gUnknown_20386A8 = 0;
+static EWRAM_DATA u16 sDroughtFrameDelay = 0;
static void Task_WeatherMain(u8 taskId);
static void Task_WeatherInit(u8 taskId);
@@ -127,7 +127,7 @@ static const u8 sBasePaletteGammaTypes[32] = {
GAMMA_NORMAL,
};
-const u16 gUnknown_83C2CE0[] = INCBIN_U16("graphics/field_effects/unk_83C2CE0.gbapal");
+const u16 gDefaultWeatherSpritePalette[] = INCBIN_U16("graphics/weather/default.gbapal");
const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal");
const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal");
const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp");
@@ -146,8 +146,8 @@ void StartWeather(void)
if (!FuncIsActiveTask(Task_WeatherMain))
{
u8 index = AllocSpritePalette(0x1200);
- CpuCopy32(gUnknown_83C2CE0, &gPlttBufferUnfaded[0x100 + index * 16], 32);
- sub_8083598(index);
+ CpuCopy32(gDefaultWeatherSpritePalette, &gPlttBufferUnfaded[0x100 + index * 16], 32);
+ ApplyGlobalFieldPaletteTint(index);
BuildGammaShiftTables();
gWeatherPtr->altGammaSpritePalIndex = index;
gWeatherPtr->weatherPicSpritePalIndex = index;
@@ -350,8 +350,8 @@ static void UpdateWeatherGammaShift(void)
static void FadeInScreenWithWeather(void)
{
- if (++gWeatherPtr->unknown_6CB > 1)
- gWeatherPtr->unknown_6CA = 0;
+ if (++gWeatherPtr->fadeInCounter > 1)
+ gWeatherPtr->fadeInActive = 0;
switch (gWeatherPtr->currWeather)
{
@@ -692,7 +692,7 @@ static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
return FALSE;
}
-void sub_807A790(s8 gammaIndex)
+void WeatherShiftGammaIfPalStateIdle(s8 gammaIndex)
{
if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
@@ -701,7 +701,7 @@ void sub_807A790(s8 gammaIndex)
}
}
-void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
+void WeatherBeginGammaFade(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
{
if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
@@ -710,7 +710,7 @@ void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
gWeatherPtr->gammaStepFrameCounter = 0;
gWeatherPtr->gammaStepDelay = gammaStepDelay;
- sub_807A790(gammaIndex);
+ WeatherShiftGammaIfPalStateIdle(gammaIndex);
}
}
@@ -761,7 +761,7 @@ void FadeScreen(u8 mode, s8 delay)
if (fadeOut)
{
if (useWeatherPal)
- CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE);
BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
@@ -775,8 +775,8 @@ void FadeScreen(u8 mode, s8 delay)
BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
- gWeatherPtr->unknown_6CA = 1;
- gWeatherPtr->unknown_6CB = 0;
+ gWeatherPtr->fadeInActive = 1;
+ gWeatherPtr->fadeInCounter = 0;
Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
gWeatherPtr->readyForInit = TRUE;
}
@@ -843,8 +843,8 @@ void FadeSelectedPals(u8 mode, s8 delay, u32 selectedPalettes)
BeginNormalPaletteFade(selectedPalettes, delay, 16, 0, fadeColor);
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
- gWeatherPtr->unknown_6CA = 1;
- gWeatherPtr->unknown_6CB = 0;
+ gWeatherPtr->fadeInActive = 1;
+ gWeatherPtr->fadeInCounter = 0;
Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
gWeatherPtr->readyForInit = TRUE;
}
@@ -864,7 +864,7 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
switch (gWeatherPtr->palProcessingState)
{
case WEATHER_PAL_STATE_SCREEN_FADING_IN:
- if (gWeatherPtr->unknown_6CA != 0)
+ if (gWeatherPtr->fadeInActive != 0)
{
if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
MarkFogSpritePalToLighten(paletteIndex);
@@ -899,10 +899,10 @@ void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
-static u8 sub_80ABF20(void)
+static u8 IsWeatherFadingIn(void)
{
if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
- return gWeatherPtr->unknown_6CA;
+ return gWeatherPtr->fadeInActive;
else
return 0;
}
@@ -937,51 +937,54 @@ bool8 LoadDroughtWeatherPalettes(void)
return FALSE;
}
-static void sub_807AC50(s8 gammaIndex)
+static void SetDroughtGamma(s8 gammaIndex)
{
- sub_807A790(-gammaIndex - 1);
+ WeatherShiftGammaIfPalStateIdle(-gammaIndex - 1);
}
-void sub_807AC60(void)
+void DroughtStateInit(void)
{
- gWeatherPtr->unknown_73C = 0;
- gWeatherPtr->unknown_740 = 0;
- gWeatherPtr->unknown_742 = 0;
- gWeatherPtr->unknown_73E = 0;
- gUnknown_20386A8 = 5;
+ gWeatherPtr->droughtBrightnessStage = 0;
+ gWeatherPtr->droughtTimer = 0;
+ gWeatherPtr->droughtState = 0;
+ gWeatherPtr->droughtLastBrightnessStage = 0;
+ sDroughtFrameDelay = 5;
}
-void sub_807AC98(void)
+void DroughtStateRun(void)
{
- switch (gWeatherPtr->unknown_742)
+ switch (gWeatherPtr->droughtState)
{
case 0:
- if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ // Ramp up
+ if (++gWeatherPtr->droughtTimer > sDroughtFrameDelay)
{
- gWeatherPtr->unknown_740 = 0;
- sub_807AC50(gWeatherPtr->unknown_73C++);
- if (gWeatherPtr->unknown_73C > 5)
+ gWeatherPtr->droughtTimer = 0;
+ SetDroughtGamma(gWeatherPtr->droughtBrightnessStage++);
+ if (gWeatherPtr->droughtBrightnessStage > 5)
{
- gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
- gWeatherPtr->unknown_742 = 1;
- gWeatherPtr->unknown_740 = 0x3C;
+ gWeatherPtr->droughtLastBrightnessStage = gWeatherPtr->droughtBrightnessStage;
+ gWeatherPtr->droughtState = 1;
+ gWeatherPtr->droughtTimer = 60;
}
}
break;
case 1:
- gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F;
- gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2;
- if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E)
- sub_807AC50(gWeatherPtr->unknown_73C);
- gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ // Oscillate
+ gWeatherPtr->droughtTimer = (gWeatherPtr->droughtTimer + 3) & 0x7F;
+ gWeatherPtr->droughtBrightnessStage = ((gSineTable[gWeatherPtr->droughtTimer] - 1) >> 6) + 2;
+ if (gWeatherPtr->droughtBrightnessStage != gWeatherPtr->droughtLastBrightnessStage)
+ SetDroughtGamma(gWeatherPtr->droughtBrightnessStage);
+ gWeatherPtr->droughtLastBrightnessStage = gWeatherPtr->droughtBrightnessStage;
break;
case 2:
- if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ // Ramp down
+ if (++gWeatherPtr->droughtTimer > sDroughtFrameDelay)
{
- gWeatherPtr->unknown_740 = 0;
- sub_807AC50(--gWeatherPtr->unknown_73C);
- if (gWeatherPtr->unknown_73C == 3)
- gWeatherPtr->unknown_742 = 0;
+ gWeatherPtr->droughtTimer = 0;
+ SetDroughtGamma(--gWeatherPtr->droughtBrightnessStage);
+ if (gWeatherPtr->droughtBrightnessStage == 3)
+ gWeatherPtr->droughtState = 0;
}
break;
}
@@ -1042,7 +1045,7 @@ bool8 Weather_UpdateBlend(void)
return FALSE;
}
-static void sub_807AF00(u8 a)
+UNUSED static void Unused_SetWeather(u8 a)
{
switch (a)
{
@@ -1137,7 +1140,7 @@ void SetWeatherScreenFadeOut(void)
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
}
-void sub_807B070(void)
+void WeatherProcessingIdle(void)
{
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
@@ -1154,7 +1157,7 @@ void ResetPreservedPalettesInWeather(void)
sPaletteGammaTypes = sBasePaletteGammaTypes;
}
-void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size)
+void SlightlyDarkenPalsInWeather(u16 *palbuf, u16 *unused, u32 size)
{
switch (gWeatherPtr->currWeather)
{
@@ -1163,7 +1166,7 @@ void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size)
case WEATHER_RAIN_THUNDERSTORM:
case WEATHER_SHADE:
case WEATHER_DOWNPOUR:
- sub_8045314(palbuf, RGB_BLACK, 3, size);
+ BlendPalettesAt(palbuf, RGB_BLACK, 3, size);
break;
}
}
diff --git a/src/field_weather_effects.c b/src/field_weather_effects.c
index f935b3afb..40af10b73 100644
--- a/src/field_weather_effects.c
+++ b/src/field_weather_effects.c
@@ -239,19 +239,19 @@ void Drought_Main(void)
gWeatherPtr->initStep++;
break;
case 3:
- sub_807AC60();
+ DroughtStateInit();
gWeatherPtr->initStep++;
break;
case 4:
- sub_807AC98();
- if (gWeatherPtr->unknown_73C == 6)
+ DroughtStateRun();
+ if (gWeatherPtr->droughtBrightnessStage == 6)
{
gWeatherPtr->weatherGfxLoaded = TRUE;
gWeatherPtr->initStep++;
}
break;
default:
- sub_807AC98();
+ DroughtStateRun();
break;
}
}
@@ -1064,7 +1064,7 @@ void Thunderstorm_Main(void)
gWeatherPtr->initStep++;
// fall through
case 8:
- sub_807A790(19);
+ WeatherShiftGammaIfPalStateIdle(19);
if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
SetThunderCounter(20);
@@ -1074,7 +1074,7 @@ void Thunderstorm_Main(void)
case 9:
if (--gWeatherPtr->unknown_6E6 == 0)
{
- sub_807A790(3);
+ WeatherShiftGammaIfPalStateIdle(3);
gWeatherPtr->unknown_6EA = 1;
if (--gWeatherPtr->unknown_6EC != 0)
{
@@ -1103,7 +1103,7 @@ void Thunderstorm_Main(void)
if (--gWeatherPtr->unknown_6E6 == 0)
{
SetThunderCounter(100);
- sub_807A790(19);
+ WeatherShiftGammaIfPalStateIdle(19);
gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
gWeatherPtr->initStep++;
}
@@ -1111,7 +1111,7 @@ void Thunderstorm_Main(void)
case 13:
if (--gWeatherPtr->unknown_6E6 == 0)
{
- sub_807A7C4(19, 3, 5);
+ WeatherBeginGammaFade(19, 3, 5);
gWeatherPtr->initStep++;
}
break;
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 53110396d..7ece8b622 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -31,7 +31,7 @@ EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {};
EWRAM_DATA struct MapHeader gMapHeader = {};
EWRAM_DATA struct Camera gCamera = {};
static EWRAM_DATA struct ConnectionFlags gMapConnectionFlags = {};
-EWRAM_DATA u8 gUnknown_2036E28 = 0;
+EWRAM_DATA u8 gGlobalFieldTintMode = QL_TINT_NONE;
static const struct ConnectionFlags sDummyConnectionFlags = {};
@@ -890,48 +890,48 @@ static void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 nu
}
}
-static void sub_80598CC(u16 a0, u16 a1)
+static void Fieldmap_ApplyGlobalTintToPaletteEntries(u16 offset, u16 size)
{
- switch (gUnknown_2036E28)
+ switch (gGlobalFieldTintMode)
{
- case 0:
+ case QL_TINT_NONE:
return;
- case 1:
- TintPalette_GrayScale(gPlttBufferUnfaded + a0, a1);
+ case QL_TINT_GRAYSCALE:
+ TintPalette_GrayScale(gPlttBufferUnfaded + offset, size);
break;
- case 2:
- TintPalette_SepiaTone(gPlttBufferUnfaded + a0, a1);
+ case QL_TINT_SEPIA:
+ TintPalette_SepiaTone(gPlttBufferUnfaded + offset, size);
break;
- case 3:
- sub_8111F38(a0, a1);
- TintPalette_GrayScale(gPlttBufferUnfaded + a0, a1);
+ case QL_TINT_BACKUP_GRAYSCALE:
+ QuestLog_BackUpPalette(offset, size);
+ TintPalette_GrayScale(gPlttBufferUnfaded + offset, size);
break;
default:
return;
}
- CpuCopy16(gPlttBufferUnfaded + a0, gPlttBufferFaded + a0, a1 * sizeof(u16));
+ CpuCopy16(gPlttBufferUnfaded + offset, gPlttBufferFaded + offset, size * sizeof(u16));
}
-void sub_8059948(u8 a0, u8 a1)
+void Fieldmap_ApplyGlobalTintToPaletteSlot(u8 slot, u8 count)
{
- switch (gUnknown_2036E28)
+ switch (gGlobalFieldTintMode)
{
- case 0:
+ case QL_TINT_NONE:
return;
- case 1:
- TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16);
+ case QL_TINT_GRAYSCALE:
+ TintPalette_GrayScale(gPlttBufferUnfaded + slot * 16, count * 16);
break;
- case 2:
- TintPalette_SepiaTone(gPlttBufferUnfaded + a0 * 16, a1 * 16);
+ case QL_TINT_SEPIA:
+ TintPalette_SepiaTone(gPlttBufferUnfaded + slot * 16, count * 16);
break;
- case 3:
- sub_8111F38(a0 * 16, a1 * 16);
- TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16);
+ case QL_TINT_BACKUP_GRAYSCALE:
+ QuestLog_BackUpPalette(slot * 16, count * 16);
+ TintPalette_GrayScale(gPlttBufferUnfaded + slot * 16, count * 16);
break;
default:
return;
}
- CpuFastCopy(gPlttBufferUnfaded + a0 * 16, gPlttBufferFaded + a0 * 16, a1 * 16 * sizeof(u16));
+ CpuFastCopy(gPlttBufferUnfaded + slot * 16, gPlttBufferFaded + slot * 16, count * 16 * sizeof(u16));
}
static void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size)
@@ -944,17 +944,17 @@ static void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOff
{
LoadPalette(&black, destOffset, 2);
LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2);
- sub_80598CC(destOffset + 1, (size - 2) >> 1);
+ Fieldmap_ApplyGlobalTintToPaletteEntries(destOffset + 1, (size - 2) >> 1);
}
else if (tileset->isSecondary == TRUE)
{
LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
- sub_80598CC(destOffset, size >> 1);
+ Fieldmap_ApplyGlobalTintToPaletteEntries(destOffset, size >> 1);
}
else
{
LoadCompressedPalette((u32*)tileset->palettes, destOffset, size);
- sub_80598CC(destOffset, size >> 1);
+ Fieldmap_ApplyGlobalTintToPaletteEntries(destOffset, size >> 1);
}
}
}
diff --git a/src/fire.c b/src/fire.c
index 3a3e6be9b..938fb4796 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -29,7 +29,7 @@ static void AnimFireRing_Step3(struct Sprite *sprite);
static void UpdateFireRingCircleOffset(struct Sprite *sprite);
static void sub_80ACE28(struct Sprite *sprite);
static void sub_80ACE50(struct Sprite *sprite);
-static void sub_80ACF14(u8 taskId);
+static void AnimTask_EruptionLaunchRocks_Step(u8 taskId);
static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3);
static u16 sub_80AD374(u8 spriteId);
static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y);
@@ -741,17 +741,17 @@ void AnimTask_EruptionLaunchRocks(u8 taskId) // initialize animation task for Mo
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
task->data[6] = 0;
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
- task->func = sub_80ACF14;
+ task->func = AnimTask_EruptionLaunchRocks_Step;
}
-static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
+static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) // animate Move_ERUPTION?
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
- sub_80765D4(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20);
++task->data[0];
// fall through
case 1:
@@ -771,7 +771,7 @@ static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
++gSprites[task->data[15]].pos1.y;
}
}
- if(!sub_8076640(task))
+ if(!BattleAnimHelper_RunSpriteSquash(task))
{
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
@@ -785,15 +785,15 @@ static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
if (++task->data[1] > 4)
{
if (task->data[5])
- sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6);
else
- sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6);
task->data[1] = 0;
++task->data[0];
}
break;
case 3:
- if (!sub_8076640(task))
+ if (!BattleAnimHelper_RunSpriteSquash(task))
{
sub_80AD1F8(task->data[15], taskId, 6);
++task->data[0];
@@ -811,9 +811,9 @@ static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
if (++task->data[3] > 0x18)
{
if (task->data[5])
- sub_80765D4(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8);
else
- sub_80765D4(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8);
if (task->data[2] & 1)
gSprites[task->data[15]].pos2.y -= 3;
task->data[1] = 0;
@@ -825,7 +825,7 @@ static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION?
case 5:
if (task->data[5])
--gSprites[task->data[15]].pos1.y;
- if (!sub_8076640(task))
+ if (!BattleAnimHelper_RunSpriteSquash(task))
{
gSprites[task->data[15]].pos1.y = task->data[4];
ResetSpriteRotScale(task->data[15]);
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index ef11affd7..c5bc0d072 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -60,7 +60,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId)
}
else
{
- sub_805CB70();
+ StartPlayerAvatarSummonMonForFieldMoveAnim();
ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
gTasks[taskId].func = Task_FieldEffectShowMon_WaitPlayerAnim;
}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 082a7b184..e9373bd05 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -10,7 +10,7 @@
#include "wild_encounter.h"
#include "constants/songs.h"
-static EWRAM_DATA u8 *gUnknown_203AAB0 = NULL;
+static EWRAM_DATA u8 *sPlttBufferBak = NULL;
static void FieldCallback_SweetScent(void);
static void StartSweetScentFieldEffect(void);
@@ -51,9 +51,9 @@ static void StartSweetScentFieldEffect(void)
u8 taskId;
PlaySE(SE_M_SWEET_SCENT);
- gUnknown_203AAB0 = (u8 *)Alloc(0x400);
- CpuFastSet(gPlttBufferUnfaded, gUnknown_203AAB0, 0x100);
- CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100);
+ sPlttBufferBak = (u8 *)Alloc(PLTT_SIZE);
+ CpuFastCopy(gPlttBufferUnfaded, sPlttBufferBak, PLTT_SIZE);
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE);
BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB(31, 0, 0));
taskId = CreateTask(TrySweetScentEncounter, 0);
gTasks[taskId].data[0] = 0;
@@ -71,7 +71,7 @@ static void TrySweetScentEncounter(u8 taskId)
data[0] = 0;
if (SweetScentWildEncounter() == TRUE)
{
- Free(gUnknown_203AAB0);
+ Free(sPlttBufferBak);
DestroyTask(taskId);
}
else
@@ -91,9 +91,9 @@ static void FailSweetScentEncounter(u8 taskId)
{
if (!gPaletteFade.active)
{
- CpuFastSet(gUnknown_203AAB0, gPlttBufferUnfaded, 0x100);
- sub_807B070();
- Free(gUnknown_203AAB0);
+ CpuFastCopy(sPlttBufferBak, gPlttBufferUnfaded, PLTT_SIZE);
+ WeatherProcessingIdle();
+ Free(sPlttBufferBak);
ScriptContext1_SetupScript(EventScript_FailSweetScent);
DestroyTask(taskId);
}
diff --git a/src/flying.c b/src/flying.c
index c68fda99f..fd8f69e89 100644
--- a/src/flying.c
+++ b/src/flying.c
@@ -1159,7 +1159,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->pos2.y = t2;
if (sprite->data[2] == 24)
{
- sub_8075AD8(sprite);
+ TryResetSpriteAffineState(sprite);
DestroyAnimSprite(sprite);
}
break;
diff --git a/src/ghost.c b/src/ghost.c
index 0efcc28d4..c8ddf3c12 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -643,7 +643,7 @@ static void sub_80B5AD4(u8 taskId)
break;
case 1:
task->data[14] = (task->data[14] + 16) * 16;
- CpuSet(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 0x4000008);
+ CpuCopy32(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 0x20);
BlendPalette(task->data[4], 16, 10, RGB(13, 0, 15));
++task->data[15];
break;
diff --git a/src/help_system.c b/src/help_system.c
index 196053274..27ec64baa 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -1,1203 +1,2480 @@
#include "global.h"
#include "gflib.h"
-#include "decompress.h"
-#include "m4a.h"
#include "event_data.h"
+#include "event_scripts.h"
+#include "field_player_avatar.h"
#include "help_system.h"
-#include "list_menu.h"
+#include "item.h"
+#include "link.h"
+#include "overworld.h"
+#include "pokedex.h"
+#include "quest_log.h"
+#include "save.h"
+#include "save_location.h"
#include "strings.h"
-#include "event_data.h"
+#include "constants/items.h"
+#include "constants/maps.h"
#include "constants/songs.h"
-#if !defined(NONMATCHING) && MODERN
-#define static
-#endif
+#define HELP_NONE 0
+#define HELP_END 0xFF
-extern u8 gGlyphInfo[];
+// Help Main Topics
+enum HelpSystemTopics
+{
+ TOPIC_WHAT_TO_DO,
+ TOPIC_HOW_TO_DO,
+ TOPIC_TERMS,
+ TOPIC_ABOUT_GAME,
+ TOPIC_TYPE_MATCHUP,
+ TOPIC_EXIT,
+ TOPIC_COUNT
+};
-bool8 gHelpSystemEnabled;
+static EWRAM_DATA u16 sHelpSystemContextId = 0;
+static EWRAM_DATA u8 sSeenHelpSystemIntro = 0;
-struct HelpSystemVideoState
+struct HelpSystemState
{
- /*0x00*/ MainCallback savedVblankCb;
- /*0x04*/ MainCallback savedHblankCb;
- /*0x08*/ u16 savedDispCnt;
- /*0x0a*/ u16 savedBg0Cnt;
- /*0x0c*/ u16 savedBg0Hofs;
- /*0x0e*/ u16 savedBg0Vofs;
- /*0x10*/ u16 savedBldCnt;
- /*0x12*/ u8 savedTextColor[3];
- /*0x15*/ u8 state;
-};
-
-static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
-EWRAM_DATA u8 gUnknown_203F174 = 0;
-EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE;
-static EWRAM_DATA u8 sDelayTimer = 0;
-static EWRAM_DATA u8 sInHelpSystem = 0;
-static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
-EWRAM_DATA struct HelpSystemListMenu gHelpSystemListMenu = {0};
-EWRAM_DATA struct ListMenuItem gHelpSystemListMenuItems[52] = {0};
-
-static const u16 sTiles[] = INCBIN_U16("graphics/help_system/unk_8464008.4bpp");
-static const u16 sPals[] = INCBIN_U16("graphics/help_system/unk_8464008.gbapal");
-
-u8 RunHelpSystemCallback(void)
+ // 0: Top level
+ // 1: Submenu
+ // 2: Help content
+ u8 level;
+
+ // enum HelpSystemTopics
+ u8 topic;
+
+ // Where the player's cursor was at top level
+ u8 scrollMain;
+
+ // Where the player's cursor was at submenu
+ u8 scrollSub;
+};
+
+struct HelpSystemState gHelpSystemState;
+u16 gHelpContextIdBackup;
+
+static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static bool8 HelpSystem_ShouldShowBasicTerms(void);
+static bool8 IsHelpSystemSubmenuEnabled(u8);
+static bool8 HasGottenAtLeastOneHM(void);
+
+static void PrintWelcomeMessageOnPanel1(void);
+static void PrintTextOnPanel2Row52RightAlign(const u8 *);
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0);
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+
+static const u8 *const sHelpSystemTopicPtrs[TOPIC_COUNT] = {
+ [TOPIC_WHAT_TO_DO] = Help_Text_WhatShouldIDo,
+ [TOPIC_HOW_TO_DO] = Help_Text_HowDoIDoThis,
+ [TOPIC_TERMS] = Help_Text_WhatDoesThisTermMean,
+ [TOPIC_ABOUT_GAME] = Help_Text_AboutThisGame,
+ [TOPIC_TYPE_MATCHUP] = Help_Text_TypeMatchupList,
+ [TOPIC_EXIT] = Help_Text_Exit
+};
+
+static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[TOPIC_COUNT] = {
+ [TOPIC_WHAT_TO_DO] = Help_Text_DescWhatShouldIDo,
+ [TOPIC_HOW_TO_DO] = Help_Text_DescHowDoIDoThis,
+ [TOPIC_TERMS] = Help_Text_DescWhatDoesThisTermMean,
+ [TOPIC_ABOUT_GAME] = Help_Text_DescAboutThisGame,
+ [TOPIC_TYPE_MATCHUP] = Help_Text_DescTypeMatchupList,
+ [TOPIC_EXIT] = Help_Text_DescExit
+};
+
+// Submenu IDs for TOPIC_WHAT_TO_DO
+enum
{
- s32 i;
+ HELP_PLAYING_FOR_FIRST_TIME = 1,
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_CANT_GET_OUT_OF_ROOM,
+ HELP_CANT_FIND_PERSON_I_WANT,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_I_CANT_GO_ON,
+ HELP_OUT_OF_THINGS_TO_DO,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
+ HELP_HOW_ARE_CAVES_DIFFERENT,
+ HELP_HOW_DO_I_PROGRESS,
+ HELP_WHEN_CAN_I_USE_ITEM,
+ HELP_WHATS_A_BATTLE,
+ HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_CANT_CATCH_MONS,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_CAN_I_BUY_POKEBALLS,
+ HELP_WHATS_A_TRAINER,
+ HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
+ HELP_WHERE_DO_MONS_APPEAR,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WHAT_ARE_HIDDEN_MOVES,
+ HELP_WHAT_MOVES_SHOULD_I_USE,
+ HELP_WANT_TO_ADD_MORE_MOVES,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_WHAT_DO_I_DO_IN_CAVE,
+ HELP_NOTHING_I_WANT_TO_KNOW,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WANT_TO_END_GAME,
+ HELP_WHATS_A_MON,
+ HELP_WHAT_IS_THAT_PERSON_LIKE,
+ HELP_WHAT_DOES_HIDDEN_MOVE_DO,
+ HELP_WHAT_DO_I_DO_IN_SAFARI,
+ HELP_WHAT_ARE_SAFARI_RULES,
+ HELP_WANT_TO_END_SAFARI,
+ HELP_WHAT_IS_A_GYM,
+};
- switch (sVideoState.state)
- {
- case 0:
- sInHelpSystem = 0;
- if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
- return 0;
- if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE)
- return 0;
- if (JOY_NEW(L_BUTTON | R_BUTTON))
- {
- if (!sub_812B45C() || !gHelpSystemEnabled)
- {
- PlaySE(SE_HELP_ERROR);
- return 0;
- }
- m4aMPlayStop(&gMPlayInfo_SE1);
- m4aMPlayStop(&gMPlayInfo_SE2);
- PlaySE(SE_HELP_OPEN);
- if (!gUnknown_203F174)
- m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
- SaveCallbacks();
- sInHelpSystem = 1;
- sVideoState.state = 1;
- }
- break;
- case 1:
- SaveMapTiles();
- SaveMapGPURegs();
- SaveMapTextColors();
- (*(vu16 *)PLTT) = sPals[15];
- SetGpuReg(REG_OFFSET_DISPCNT, 0);
- sVideoState.state = 2;
- break;
- case 2:
- RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
- RequestDma3Copy(sPals, (void *)PLTT, sizeof(sPals), DMA3_16BIT);
- RequestDma3Copy(sTiles, gDecompressionBuffer + 0x3EE0, sizeof(sTiles), DMA3_16BIT);
- sVideoState.state = 3;
- break;
- case 3:
- sub_813BCF4();
- HelpSystem_FillPanel3();
- HelpSystem_FillPanel2();
- HelpSystem_PrintText_Row61(gString_Help);
- sub_813BD14(1);
- if (HelpSystem_UpdateHasntSeenIntro() == TRUE)
- HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems);
- else
- HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems);
- sub_813BE78(1);
- sub_813BF50(1);
- CommitTilemap();
- sVideoState.state = 4;
- break;
- case 4:
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BG0HOFS, 0);
- SetGpuReg(REG_OFFSET_BG0VOFS, 0);
- SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
- sVideoState.state = 5;
- break;
- case 5:
- if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems))
- {
- PlaySE(SE_HELP_CLOSE);
- sVideoState.state = 6;
- }
- break;
- case 6:
- SetGpuReg(REG_OFFSET_DISPCNT, 0);
- RestoreMapTiles();
- for (i = 0; i < 0x200; i += 2)
- {
- *((vu16 *)(PLTT + 0x000 + i)) = sPals[15];
- *((vu16 *)(PLTT + 0x200 + i)) = sPals[15];
- }
- sVideoState.state = 7;
- break;
- case 7:
- if (!gUnknown_203F174)
- m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
- RestoreMapTextColors();
- RestoreGPURegs();
- sVideoState.state = 8;
- break;
- case 8:
- RestoreCallbacks();
- sInHelpSystem = 0;
- sVideoState.state = 0;
- break;
- }
- return sVideoState.state;
-}
+static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_PlayingForFirstTime,
+ [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_WhatShouldIBeDoing,
+ [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_CantGetOutOfRoom,
+ [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_CantFindPersonIWant,
+ [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_TalkedToEveryoneNowWhat,
+ [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_SomeoneBlockingMyWay,
+ [HELP_I_CANT_GO_ON] = Help_Text_ICantGoOn,
+ [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_OutOfThingsToDo,
+ [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_WhatHappenedToItemIGot,
+ [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_WhatAreMyAdventureBasics,
+ [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_HowAreRoadsForestsDifferent,
+ [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_HowAreCavesDifferent,
+ [HELP_HOW_DO_I_PROGRESS] = Help_Text_HowDoIProgress,
+ [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_WhenCanIUseItem,
+ [HELP_WHATS_A_BATTLE] = Help_Text_WhatsABattle,
+ [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_HowDoIPrepareForBattle,
+ [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_WhatIsAMonsVitality,
+ [HELP_MY_MONS_ARE_HURT] = Help_Text_MyMonsAreHurt,
+ [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_WhatIsStatusProblem,
+ [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_WhatHappensIfAllMyMonsFaint,
+ [HELP_CANT_CATCH_MONS] = Help_Text_CantCatchMons,
+ [HELP_RAN_OUT_OF_POTIONS] = Help_Text_RanOutOfPotions,
+ [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_CanIBuyPokeBalls,
+ [HELP_WHATS_A_TRAINER] = Help_Text_WhatsATrainer,
+ [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_HowDoIWinAgainstTrainer,
+ [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_WhereDoMonsAppear,
+ [HELP_WHAT_ARE_MOVES] = Help_Text_WhatAreMoves,
+ [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_WhatAreHiddenMoves,
+ [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_WhatMovesShouldIUse,
+ [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_WantToAddMoreMoves,
+ [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_WantToMakeMonStronger,
+ [HELP_FOE_MONS_TOO_STRONG] = Help_Text_FoeMonsTooStrong,
+ [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_WhatDoIDoInCave,
+ [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_NothingIWantToKnow,
+ [HELP_WHATS_POKEMON_CENTER] = Help_Text_WhatsPokemonCenter,
+ [HELP_WHATS_POKEMON_MART] = Help_Text_WhatsPokemonMart,
+ [HELP_WANT_TO_END_GAME] = Help_Text_WantToEndGame,
+ [HELP_WHATS_A_MON] = Help_Text_WhatsAMon,
+ [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_WhatIsThatPersonLike,
+ [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_WhatDoesHiddenMoveDo,
+ [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_WhatDoIDoInSafari,
+ [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_WhatAreSafariRules,
+ [HELP_WANT_TO_END_SAFARI] = Help_Text_WantToEndSafari,
+ [HELP_WHAT_IS_A_GYM] = Help_Text_WhatIsAGym
+};
+
+static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_AnswerPlayingForFirstTime,
+ [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_AnswerWhatShouldIBeDoing,
+ [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_AnswerCantGetOutOfRoom,
+ [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_AnswerCantFindPersonIWant,
+ [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_AnswerTalkedToEveryoneNowWhat,
+ [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_AnswerSomeoneBlockingMyWay,
+ [HELP_I_CANT_GO_ON] = Help_Text_AnswerICantGoOn,
+ [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_AnswerOutOfThingsToDo,
+ [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_AnswerWhatHappenedToItemIGot,
+ [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_AnswerWhatAreMyAdventureBasics,
+ [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_AnswerHowAreRoadsForestsDifferent,
+ [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_AnswerHowAreCavesDifferent,
+ [HELP_HOW_DO_I_PROGRESS] = Help_Text_AnswerHowDoIProgress,
+ [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_AnswerWhenCanIUseItem,
+ [HELP_WHATS_A_BATTLE] = Help_Text_AnswerWhatsABattle,
+ [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_AnswerHowDoIPrepareForBattle,
+ [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_AnswerWhatIsAMonsVitality,
+ [HELP_MY_MONS_ARE_HURT] = Help_Text_AnswerMyMonsAreHurt,
+ [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_AnswerWhatIsStatusProblem,
+ [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_AnswerWhatHappensIfAllMyMonsFaint,
+ [HELP_CANT_CATCH_MONS] = Help_Text_AnswerCantCatchMons,
+ [HELP_RAN_OUT_OF_POTIONS] = Help_Text_AnswerRanOutOfPotions,
+ [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_AnswerCanIBuyPokeBalls,
+ [HELP_WHATS_A_TRAINER] = Help_Text_AnswerWhatsATrainer,
+ [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_AnswerHowDoIWinAgainstTrainer,
+ [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_AnswerWhereDoMonsAppear,
+ [HELP_WHAT_ARE_MOVES] = Help_Text_AnswerWhatAreMoves,
+ [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_AnswerWhatAreHiddenMoves,
+ [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_AnswerWhatMovesShouldIUse,
+ [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_AnswerWantToAddMoreMoves,
+ [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_AnswerWantToMakeMonStronger,
+ [HELP_FOE_MONS_TOO_STRONG] = Help_Text_AnswerFoeMonsTooStrong,
+ [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_AnswerWhatDoIDoInCave,
+ [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_AnswerNothingIWantToKnow,
+ [HELP_WHATS_POKEMON_CENTER] = Help_Text_AnswerWhatsPokemonCenter,
+ [HELP_WHATS_POKEMON_MART] = Help_Text_AnswerWhatsPokemonMart,
+ [HELP_WANT_TO_END_GAME] = Help_Text_AnswerWantToEndGame,
+ [HELP_WHATS_A_MON] = Help_Text_AnswerWhatsAMon,
+ [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_AnswerWhatIsThatPersonLike,
+ [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_AnswerWhatDoesHiddenMoveDo,
+ [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_AnswerWhatDoIDoInSafari,
+ [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_AnswerWhatAreSafariRules,
+ [HELP_WANT_TO_END_SAFARI] = Help_Text_AnswerWantToEndSafari,
+ [HELP_WHAT_IS_A_GYM] = Help_Text_AnswerWhatIsAGym
+};
-void SaveCallbacks(void)
+// Submenu IDs for TOPIC_HOW_TO_DO
+enum
{
- vu16 * dma;
- sVideoState.savedVblankCb = gMain.vblankCallback;
- sVideoState.savedHblankCb = gMain.hblankCallback;
- gMain.vblankCallback = NULL;
- gMain.hblankCallback = NULL;
-
- dma = (void *)REG_ADDR_DMA0;
- dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT);
- dma[5] &= ~DMA_ENABLE;
- dma[5];
-}
+ HELP_USING_POKEDEX = 1,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_RIDING_BICYCLE,
+ HELP_ENTERING_NAME,
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_OPENING_MENU,
+ HELP_USING_FIGHT,
+ HELP_USING_POKEMON2,
+ HELP_USING_SHIFT,
+ HELP_USING_SUMMARY2,
+ HELP_USING_BAG2,
+ HELP_READING_POKEDEX,
+ HELP_USING_HOME_PC,
+ HELP_USING_ITEM_STORAGE,
+ HELP_USING_WITHDRAW_ITEM2,
+ HELP_USING_DEPOSIT_ITEM2,
+ HELP_USING_MAILBOX2,
+ HELP_USING_RUN,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_BALL,
+ HELP_USING_BAIT,
+ HELP_USING_ROCK,
+ HELP_USING_HALL_OF_FAME,
+};
+
+static const u8 *const sHelpSystemMenuTopicTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_USING_POKEDEX] = Help_Text_UsingPokedex,
+ [HELP_USING_POKEMON] = Help_Text_UsingPokemon,
+ [HELP_USING_SUMMARY] = Help_Text_UsingSummary,
+ [HELP_USING_SWITCH] = Help_Text_UsingSwitch,
+ [HELP_USING_ITEM] = Help_Text_UsingItem,
+ [HELP_USING_BAG] = Help_Text_UsingBag,
+ [HELP_USING_AN_ITEM] = Help_Text_UsingAnItem,
+ [HELP_USING_KEYITEM] = Help_Text_UsingKeyItem,
+ [HELP_USING_POKEBALL] = Help_Text_UsingPokeBall,
+ [HELP_USING_PLAYER] = Help_Text_UsingPlayer,
+ [HELP_USING_SAVE] = Help_Text_UsingSave,
+ [HELP_USING_OPTION] = Help_Text_UsingOption,
+ [HELP_USING_POTION] = Help_Text_UsingPotion,
+ [HELP_USING_TOWN_MAP] = Help_Text_UsingTownMap,
+ [HELP_USING_TM] = Help_Text_UsingTM,
+ [HELP_USING_HM] = Help_Text_UsingHM,
+ [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_UsingMoveOutsideOfBattle,
+ [HELP_RIDING_BICYCLE] = Help_Text_RidingBicycle,
+ [HELP_ENTERING_NAME] = Help_Text_EnteringName,
+ [HELP_USING_PC] = Help_Text_UsingPC,
+ [HELP_USING_BILLS_PC] = Help_Text_UsingBillsPC,
+ [HELP_USING_WITHDRAW] = Help_Text_UsingWithdraw,
+ [HELP_USING_DEPOSIT] = Help_Text_UsingDeposit,
+ [HELP_USING_MOVE] = Help_Text_UsingMove,
+ [HELP_MOVING_ITEMS] = Help_Text_MovingItems,
+ [HELP_USING_PLAYERS_PC] = Help_Text_UsingPlayersPC,
+ [HELP_USING_WITHDRAW_ITEM] = Help_Text_UsingWithdrawItem,
+ [HELP_USING_DEPOSIT_ITEM] = Help_Text_UsingDepositItem,
+ [HELP_USING_MAILBOX] = Help_Text_UsingMailbox,
+ [HELP_USING_PROF_OAKS_PC] = Help_Text_UsingProfOaksPC,
+ [HELP_OPENING_MENU] = Help_Text_OpeningMenu,
+ [HELP_USING_FIGHT] = Help_Text_UsingFight,
+ [HELP_USING_POKEMON2] = Help_Text_UsingPokemon2,
+ [HELP_USING_SHIFT] = Help_Text_UsingShift,
+ [HELP_USING_SUMMARY2] = Help_Text_UsingSummary2,
+ [HELP_USING_BAG2] = Help_Text_UsingBag2,
+ [HELP_READING_POKEDEX] = Help_Text_ReadingPokedex,
+ [HELP_USING_HOME_PC] = Help_Text_UsingHomePC,
+ [HELP_USING_ITEM_STORAGE] = Help_Text_UsingItemStorage,
+ [HELP_USING_WITHDRAW_ITEM2] = Help_Text_UsingWithdrawItem2,
+ [HELP_USING_DEPOSIT_ITEM2] = Help_Text_UsingDepositItem2,
+ [HELP_USING_MAILBOX2] = Help_Text_UsingMailbox2,
+ [HELP_USING_RUN] = Help_Text_UsingRun,
+ [HELP_REGISTER_KEY_ITEM] = Help_Text_RegisterKeyItem,
+ [HELP_USING_BALL] = Help_Text_UsingBall,
+ [HELP_USING_BAIT] = Help_Text_UsingBait,
+ [HELP_USING_ROCK] = Help_Text_UsingRock,
+ [HELP_USING_HALL_OF_FAME] = Help_Text_UsingHallOfFame
+};
+
+static const u8 *const sHelpSystemHowToUseMenuTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_USING_POKEDEX] = Help_Text_HowToUsePokedex,
+ [HELP_USING_POKEMON] = Help_Text_HowToUsePokemon,
+ [HELP_USING_SUMMARY] = Help_Text_HowToUseSummary,
+ [HELP_USING_SWITCH] = Help_Text_HowToUseSwitch,
+ [HELP_USING_ITEM] = Help_Text_HowToUseItem,
+ [HELP_USING_BAG] = Help_Text_HowToUseBag,
+ [HELP_USING_AN_ITEM] = Help_Text_HowToUseAnItem,
+ [HELP_USING_KEYITEM] = Help_Text_HowToUseKeyItem,
+ [HELP_USING_POKEBALL] = Help_Text_HowToUsePokeBall,
+ [HELP_USING_PLAYER] = Help_Text_HowToUsePlayer,
+ [HELP_USING_SAVE] = Help_Text_HowToUseSave,
+ [HELP_USING_OPTION] = Help_Text_HowToUseOption,
+ [HELP_USING_POTION] = Help_Text_HowToUsePotion,
+ [HELP_USING_TOWN_MAP] = Help_Text_HowToUseTownMap,
+ [HELP_USING_TM] = Help_Text_HowToUseTM,
+ [HELP_USING_HM] = Help_Text_HowToUseHM,
+ [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_HowToUseMoveOutsideOfBattle,
+ [HELP_RIDING_BICYCLE] = Help_Text_HowToRideBicycle,
+ [HELP_ENTERING_NAME] = Help_Text_HowToEnterName,
+ [HELP_USING_PC] = Help_Text_HowToUsePC,
+ [HELP_USING_BILLS_PC] = Help_Text_HowToUseBillsPC,
+ [HELP_USING_WITHDRAW] = Help_Text_HowToUseWithdraw,
+ [HELP_USING_DEPOSIT] = Help_Text_HowToUseDeposit,
+ [HELP_USING_MOVE] = Help_Text_HowToUseMove,
+ [HELP_MOVING_ITEMS] = Help_Text_HowToMoveItems,
+ [HELP_USING_PLAYERS_PC] = Help_Text_HowToUsePlayersPC,
+ [HELP_USING_WITHDRAW_ITEM] = Help_Text_HowToUseWithdrawItem,
+ [HELP_USING_DEPOSIT_ITEM] = Help_Text_HowToUseDepositItem,
+ [HELP_USING_MAILBOX] = Help_Text_HowToUseMailbox,
+ [HELP_USING_PROF_OAKS_PC] = Help_Text_HowToUseProfOaksPC,
+ [HELP_OPENING_MENU] = Help_Text_HowToOpenMenu,
+ [HELP_USING_FIGHT] = Help_Text_HowToUseFight,
+ [HELP_USING_POKEMON2] = Help_Text_HowToUsePokemon2,
+ [HELP_USING_SHIFT] = Help_Text_HowToUseShift,
+ [HELP_USING_SUMMARY2] = Help_Text_HowToUseSummary2,
+ [HELP_USING_BAG2] = Help_Text_HowToUseBag2,
+ [HELP_READING_POKEDEX] = Help_Text_HowToReadPokedex,
+ [HELP_USING_HOME_PC] = Help_Text_HowToUseHomePC,
+ [HELP_USING_ITEM_STORAGE] = Help_Text_HowToUseItemStorage,
+ [HELP_USING_WITHDRAW_ITEM2] = Help_Text_HowToUseWithdrawItem2,
+ [HELP_USING_DEPOSIT_ITEM2] = Help_Text_HowToUseDepositItem2,
+ [HELP_USING_MAILBOX2] = Help_Text_HowToUseMailbox2,
+ [HELP_USING_RUN] = Help_Text_HowToUseRun,
+ [HELP_REGISTER_KEY_ITEM] = Help_Text_HowToRegisterKeyItem,
+ [HELP_USING_BALL] = Help_Text_HowToUseBall,
+ [HELP_USING_BAIT] = Help_Text_HowToUseBait,
+ [HELP_USING_ROCK] = Help_Text_HowToUseRock,
+ [HELP_USING_HALL_OF_FAME] = Help_Text_HowToUseHallOfFame
+};
+
+// Submenu IDs for TOPIC_TERMS
+enum
+{
+ HELP_TERM_HP = 1,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_LEVEL,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MONEY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_NATURE,
+ HELP_TERM_ID_NO,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_TERM_FNT,
+ HELP_TERM_ITEMS,
+ HELP_TERM_KEYITEMS,
+ HELP_TERM_POKEBALLS,
+ HELP_TERM_POKEDEX,
+ HELP_TERM_PLAY_TIME,
+ HELP_TERM_BADGES,
+ HELP_TERM_TEXT_SPEED,
+ HELP_TERM_BATTLE_SCENE,
+ HELP_TERM_BATTLE_STYLE,
+ HELP_TERM_SOUND,
+ HELP_TERM_BUTTON_MODE,
+ HELP_TERM_FRAME,
+ HELP_TERM_CANCEL,
+ HELP_TERM_TM,
+ HELP_TERM_HM,
+ HELP_TERM_HM_MOVE,
+ HELP_TERM_EVOLUTION,
+ HELP_TERM_STATUS_PROBLEM,
+ HELP_TERM_POKEMON,
+ HELP_TERM_ID_NO2,
+ HELP_TERM_MONEY2,
+ HELP_TERM_BADGES2,
+};
+
+static const u8 *const sHelpSystemTermTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_TERM_HP] = Help_Text_HP,
+ [HELP_TERM_EXP] = Help_Text_EXP,
+ [HELP_TERM_MOVES] = Help_Text_Moves,
+ [HELP_TERM_ATTACK] = Help_Text_Attack,
+ [HELP_TERM_DEFENSE] = Help_Text_Defense,
+ [HELP_TERM_SPATK] = Help_Text_SpAtk,
+ [HELP_TERM_SPDEF] = Help_Text_SpDef,
+ [HELP_TERM_SPEED] = Help_Text_Speed,
+ [HELP_TERM_LEVEL] = Help_Text_Level,
+ [HELP_TERM_TYPE] = Help_Text_Type,
+ [HELP_TERM_OT] = Help_Text_OT,
+ [HELP_TERM_ITEM] = Help_Text_Item,
+ [HELP_TERM_ABILITY] = Help_Text_Ability,
+ [HELP_TERM_MONEY] = Help_Text_Money,
+ [HELP_TERM_MOVE_TYPE] = Help_Text_MoveType,
+ [HELP_TERM_NATURE] = Help_Text_Nature,
+ [HELP_TERM_ID_NO] = Help_Text_IDNo,
+ [HELP_TERM_PP] = Help_Text_PP,
+ [HELP_TERM_POWER] = Help_Text_Power,
+ [HELP_TERM_ACCURACY] = Help_Text_Accuracy,
+ [HELP_TERM_FNT] = Help_Text_FNT,
+ [HELP_TERM_ITEMS] = Help_Text_Items,
+ [HELP_TERM_KEYITEMS] = Help_Text_KeyItems,
+ [HELP_TERM_POKEBALLS] = Help_Text_PokeBalls,
+ [HELP_TERM_POKEDEX] = Help_Text_Pokedex,
+ [HELP_TERM_PLAY_TIME] = Help_Text_PlayTime,
+ [HELP_TERM_BADGES] = Help_Text_Badges,
+ [HELP_TERM_TEXT_SPEED] = Help_Text_TextSpeed,
+ [HELP_TERM_BATTLE_SCENE] = Help_Text_BattleScene,
+ [HELP_TERM_BATTLE_STYLE] = Help_Text_BattleStyle,
+ [HELP_TERM_SOUND] = Help_Text_Sound,
+ [HELP_TERM_BUTTON_MODE] = Help_Text_ButtonMode,
+ [HELP_TERM_FRAME] = Help_Text_Frame,
+ [HELP_TERM_CANCEL] = Help_Text_Cancel2,
+ [HELP_TERM_TM] = Help_Text_TM,
+ [HELP_TERM_HM] = Help_Text_HM,
+ [HELP_TERM_HM_MOVE] = Help_Text_HMMove,
+ [HELP_TERM_EVOLUTION] = Help_Text_Evolution,
+ [HELP_TERM_STATUS_PROBLEM] = Help_Text_StatusProblem,
+ [HELP_TERM_POKEMON] = Help_Text_Pokemon,
+ [HELP_TERM_ID_NO2] = Help_Text_IDNo2,
+ [HELP_TERM_MONEY2] = Help_Text_Money2,
+ [HELP_TERM_BADGES2] = Help_Text_Badges2
+};
+
+static const u8 *const sHelpSystemTermDefinitionsTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_TERM_HP] = Help_Text_DefineHP,
+ [HELP_TERM_EXP] = Help_Text_DefineEXP,
+ [HELP_TERM_MOVES] = Help_Text_DefineMoves,
+ [HELP_TERM_ATTACK] = Help_Text_DefineAttack,
+ [HELP_TERM_DEFENSE] = Help_Text_DefineDefense,
+ [HELP_TERM_SPATK] = Help_Text_DefineSpAtk,
+ [HELP_TERM_SPDEF] = Help_Text_DefineSpDef,
+ [HELP_TERM_SPEED] = Help_Text_DefineSpeed,
+ [HELP_TERM_LEVEL] = Help_Text_DefineLevel,
+ [HELP_TERM_TYPE] = Help_Text_DefineType,
+ [HELP_TERM_OT] = Help_Text_DefineOT,
+ [HELP_TERM_ITEM] = Help_Text_DefineItem,
+ [HELP_TERM_ABILITY] = Help_Text_DefineAbility,
+ [HELP_TERM_MONEY] = Help_Text_DefineMoney,
+ [HELP_TERM_MOVE_TYPE] = Help_Text_DefineMoveType,
+ [HELP_TERM_NATURE] = Help_Text_DefineNature,
+ [HELP_TERM_ID_NO] = Help_Text_DefineIDNo,
+ [HELP_TERM_PP] = Help_Text_DefinePP,
+ [HELP_TERM_POWER] = Help_Text_DefinePower,
+ [HELP_TERM_ACCURACY] = Help_Text_DefineAccuracy,
+ [HELP_TERM_FNT] = Help_Text_DefineFNT,
+ [HELP_TERM_ITEMS] = Help_Text_DefineItems,
+ [HELP_TERM_KEYITEMS] = Help_Text_DefineKeyItems,
+ [HELP_TERM_POKEBALLS] = Help_Text_DefinePokeBalls,
+ [HELP_TERM_POKEDEX] = Help_Text_DefinePokedex,
+ [HELP_TERM_PLAY_TIME] = Help_Text_DefinePlayTime,
+ [HELP_TERM_BADGES] = Help_Text_DefineBadges,
+ [HELP_TERM_TEXT_SPEED] = Help_Text_DefineTextSpeed,
+ [HELP_TERM_BATTLE_SCENE] = Help_Text_DefineBattleScene,
+ [HELP_TERM_BATTLE_STYLE] = Help_Text_DefineBattleStyle,
+ [HELP_TERM_SOUND] = Help_Text_DefineSound,
+ [HELP_TERM_BUTTON_MODE] = Help_Text_DefineButtonMode,
+ [HELP_TERM_FRAME] = Help_Text_DefineFrame,
+ [HELP_TERM_CANCEL] = Help_Text_DefineCancel2,
+ [HELP_TERM_TM] = Help_Text_DefineTM,
+ [HELP_TERM_HM] = Help_Text_DefineHM,
+ [HELP_TERM_HM_MOVE] = Help_Text_DefineHMMove,
+ [HELP_TERM_EVOLUTION] = Help_Text_DefineEvolution,
+ [HELP_TERM_STATUS_PROBLEM] = Help_Text_DefineStatusProblem,
+ [HELP_TERM_POKEMON] = Help_Text_DefinePokemon,
+ [HELP_TERM_ID_NO2] = Help_Text_DefineIDNo2,
+ [HELP_TERM_MONEY2] = Help_Text_DefineMoney2,
+ [HELP_TERM_BADGES2] = Help_Text_DefineBadges2
+};
-void SaveMapGPURegs(void)
+// Submenu IDs for TOPIC_ABOUT_GAME
+enum
{
- sVideoState.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT);
- sVideoState.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
- sVideoState.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS);
- sVideoState.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS);
- sVideoState.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT);
+ HELP_THE_HELP_SYSTEM = 1,
+ HELP_THE_GAME,
+ HELP_WIRELESS_ADAPTER,
+ HELP_GAME_FUNDAMENTALS_1,
+ HELP_GAME_FUNDAMENTALS_2,
+ HELP_GAME_FUNDAMENTALS_3,
+ HELP_WHAT_ARE_POKEMON,
+};
+
+static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_THE_HELP_SYSTEM] = Help_Text_TheHelpSystem,
+ [HELP_THE_GAME] = Help_Text_TheGame,
+ [HELP_WIRELESS_ADAPTER] = Help_Text_WirelessAdapter,
+ [HELP_GAME_FUNDAMENTALS_1] = Help_Text_GameFundamentals1,
+ [HELP_GAME_FUNDAMENTALS_2] = Help_Text_GameFundamentals2,
+ [HELP_GAME_FUNDAMENTALS_3] = Help_Text_GameFundamentals3,
+ [HELP_WHAT_ARE_POKEMON] = Help_Text_WhatArePokemon
+};
+
+static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [HELP_THE_HELP_SYSTEM] = Help_Text_DescTheHelpSystem,
+ [HELP_THE_GAME] = Help_Text_DescTheGame,
+ [HELP_WIRELESS_ADAPTER] = Help_Text_DescWirelessAdapter,
+ [HELP_GAME_FUNDAMENTALS_1] = Help_Text_DescGameFundamentals1,
+ [HELP_GAME_FUNDAMENTALS_2] = Help_Text_DescGameFundamentals2,
+ [HELP_GAME_FUNDAMENTALS_3] = Help_Text_DescGameFundamentals3,
+ [HELP_WHAT_ARE_POKEMON] = Help_Text_DescWhatArePokemon
+};
+
+// An enum for the type matchups isn't necessary, when used they're always used in their entirety
+// Macro below is used to reference the entire group at once
+#define HELP_TYPE_MATCHUPS \
+ 1, \
+ 2, 3, \
+ 4, 5, \
+ 6, 7, \
+ 8, 9, \
+ 10, 11, \
+ 12, 13, \
+ 14, 15, \
+ 16, 17, \
+ 18, 19, \
+ 20, 21, \
+ 22, 23, \
+ 24, 25, \
+ 26, 27, \
+ 28, 29, \
+ 30, 31, \
+ 32, 33, \
+ 34, 35 \
+
+static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [1] = Help_Text_UsingTypeMatchupList,
+ [2] = Help_Text_OwnMoveDark,
+ [3] = Help_Text_OwnPokemonDark,
+ [4] = Help_Text_OwnMoveRock,
+ [5] = Help_Text_OwnPokemonRock,
+ [6] = Help_Text_OwnMovePsychic,
+ [7] = Help_Text_OwnPokemonPsychic,
+ [8] = Help_Text_OwnMoveFighting,
+ [9] = Help_Text_OwnPokemonFighting,
+ [10] = Help_Text_OwnMoveGrass,
+ [11] = Help_Text_OwnPokemonGrass,
+ [12] = Help_Text_OwnMoveGhost,
+ [13] = Help_Text_OwnPokemonGhost,
+ [14] = Help_Text_OwnMoveIce,
+ [15] = Help_Text_OwnPokemonIce,
+ [16] = Help_Text_OwnMoveGround,
+ [17] = Help_Text_OwnPokemonGround,
+ [18] = Help_Text_OwnMoveElectric,
+ [19] = Help_Text_OwnPokemonElectric,
+ [20] = Help_Text_OwnMovePoison,
+ [21] = Help_Text_OwnPokemonPoison,
+ [22] = Help_Text_OwnMoveDragon,
+ [23] = Help_Text_OwnPokemonDragon,
+ [24] = Help_Text_OwnMoveNormal,
+ [25] = Help_Text_OwnPokemonNormal,
+ [26] = Help_Text_OwnMoveSteel,
+ [27] = Help_Text_OwnPokemonSteel,
+ [28] = Help_Text_OwnMoveFlying,
+ [29] = Help_Text_OwnPokemonFlying,
+ [30] = Help_Text_OwnMoveFire,
+ [31] = Help_Text_OwnPokemonFire,
+ [32] = Help_Text_OwnMoveWater,
+ [33] = Help_Text_OwnPokemonWater,
+ [34] = Help_Text_OwnMoveBug,
+ [35] = Help_Text_OwnPokemonBug
+};
+
+static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = {
+ [HELP_NONE] = NULL,
+ [1] = Help_Text_HowToUseTypeMatchupList,
+ [2] = Help_Text_TypeMatchupOwnMoveDark,
+ [3] = Help_Text_TypeMatchupOwnPokemonDark,
+ [4] = Help_Text_TypeMatchupOwnMoveRock,
+ [5] = Help_Text_TypeMatchupOwnPokemonRock,
+ [6] = Help_Text_TypeMatchupOwnMovePsychic,
+ [7] = Help_Text_TypeMatchupOwnPokemonPsychic,
+ [8] = Help_Text_TypeMatchupOwnMoveFighting,
+ [9] = Help_Text_TypeMatchupOwnPokemonFighting,
+ [10] = Help_Text_TypeMatchupOwnMoveGrass,
+ [11] = Help_Text_TypeMatchupOwnPokemonGrass,
+ [12] = Help_Text_TypeMatchupOwnMoveGhost,
+ [13] = Help_Text_TypeMatchupOwnPokemonGhost,
+ [14] = Help_Text_TypeMatchupOwnMoveIce,
+ [15] = Help_Text_TypeMatchupOwnPokemonIce,
+ [16] = Help_Text_TypeMatchupOwnMoveGround,
+ [17] = Help_Text_TypeMatchupOwnPokemonGround,
+ [18] = Help_Text_TypeMatchupOwnMoveElectric,
+ [19] = Help_Text_TypeMatchupOwnPokemonElectric,
+ [20] = Help_Text_TypeMatchupOwnMovePoison,
+ [21] = Help_Text_TypeMatchupOwnPokemonPoison,
+ [22] = Help_Text_TypeMatchupOwnMoveDragon,
+ [23] = Help_Text_TypeMatchupOwnPokemonDragon,
+ [24] = Help_Text_TypeMatchupOwnMoveNormal,
+ [25] = Help_Text_TypeMatchupOwnPokemonNormal,
+ [26] = Help_Text_TypeMatchupOwnMoveSteel,
+ [27] = Help_Text_TypeMatchupOwnPokemonSteel,
+ [28] = Help_Text_TypeMatchupOwnMoveFlying,
+ [29] = Help_Text_TypeMatchupOwnPokemonFlying,
+ [30] = Help_Text_TypeMatchupOwnMoveFire,
+ [31] = Help_Text_TypeMatchupOwnPokemonFire,
+ [32] = Help_Text_TypeMatchupOwnMoveWater,
+ [33] = Help_Text_TypeMatchupOwnPokemonWater,
+ [34] = Help_Text_TypeMatchupOwnMoveBug,
+ [35] = Help_Text_TypeMatchupOwnPokemonBug
+};
+
+static const u8 sAboutGame_TitleScreen[] = {
+ HELP_THE_HELP_SYSTEM,
+ HELP_THE_GAME,
+ HELP_WIRELESS_ADAPTER,
+ HELP_END
+};
+
+static const u8 sAboutGame_NewGame[] = {
+ HELP_THE_HELP_SYSTEM,
+ HELP_THE_GAME,
+ HELP_WIRELESS_ADAPTER,
+ HELP_END
+};
+
+static const u8 sHowTo_NamingScreen[] = {
+ HELP_ENTERING_NAME,
+ HELP_END
+};
+
+static const u8 sAboutGame_NamingScreen[] = {
+ HELP_THE_HELP_SYSTEM,
+ HELP_THE_GAME,
+ HELP_WIRELESS_ADAPTER,
+ HELP_END
+};
+
+static const u8 sHowTo_Pokedex[] = {
+ HELP_USING_POKEDEX,
+ HELP_READING_POKEDEX,
+ HELP_END
+};
+
+static const u8 sHowTo_PartyMenu[] = {
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_PartyMenu[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_END
+};
+
+static const u8 sHowTo_PokemonInfo[] = {
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_END
+};
+
+static const u8 sTerms_PokemonInfo[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ID_NO,
+ HELP_TERM_ITEM,
+ HELP_TERM_NATURE,
+ HELP_END
+};
+
+static const u8 sTerms_PokemonSkills[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_EXP,
+ HELP_TERM_ABILITY,
+ HELP_END
+};
+
+static const u8 sTerms_PokemonMoves[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_MOVES,
+ HELP_TERM_TYPE,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_END
+};
+
+static const u8 sHowTo_Bag[] = {
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_RIDING_BICYCLE,
+ HELP_END
+};
+
+static const u8 sTerms_Bag[] = {
+ HELP_TERM_ITEMS,
+ HELP_TERM_KEYITEMS,
+ HELP_TERM_POKEBALLS,
+ HELP_END
+};
+
+static const u8 sHowTo_TrainerCardFront[] = {
+ HELP_USING_PLAYER,
+ HELP_END
+};
+
+static const u8 sTerms_TrainerCardFront[] = {
+ HELP_TERM_ID_NO,
+ HELP_TERM_MONEY,
+ HELP_TERM_POKEDEX,
+ HELP_TERM_PLAY_TIME,
+ HELP_TERM_BADGES,
+ HELP_END
+};
+
+static const u8 sHowTo_TrainerCardBack[] = {
+ HELP_USING_PLAYER,
+ HELP_END
+};
+
+static const u8 sHowTo_Save[] = {
+ HELP_USING_SAVE,
+ HELP_END
+};
+
+static const u8 sTerms_Save[] = {
+ HELP_TERM_BADGES2,
+ HELP_TERM_POKEDEX,
+ HELP_TERM_PLAY_TIME,
+ HELP_END
+};
+
+static const u8 sHowTo_Options[] = {
+ HELP_USING_OPTION,
+ HELP_END
+};
+
+static const u8 sTerms_Options[] = {
+ HELP_TERM_TEXT_SPEED,
+ HELP_TERM_BATTLE_SCENE,
+ HELP_TERM_BATTLE_STYLE,
+ HELP_TERM_SOUND,
+ HELP_TERM_BUTTON_MODE,
+ HELP_TERM_FRAME,
+ HELP_TERM_CANCEL,
+ HELP_END
+};
+
+static const u8 sWhatToDo_PlayersHouse[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_CANT_GET_OUT_OF_ROOM,
+ HELP_CANT_FIND_PERSON_I_WANT,
+ HELP_END
+};
+
+static const u8 sAboutGame_PlayersHouse[] = {
+ HELP_THE_HELP_SYSTEM,
+ HELP_THE_GAME,
+ HELP_WIRELESS_ADAPTER,
+ HELP_WHAT_ARE_POKEMON,
+ HELP_END
+};
+
+static const u8 sWhatToDo_OaksLab[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_CANT_FIND_PERSON_I_WANT,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_OaksLab[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_OaksLab[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_TYPE,
+ HELP_TERM_POKEMON,
+ HELP_END
+};
+
+static const u8 sWhatToDo_PokeCenter[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_PokeCenter[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_USING_PC,
+ HELP_END
+};
+
+static const u8 sTerms_PokeCenter[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_TYPE,
+ HELP_TERM_POKEMON,
+ HELP_END
+};
+
+static const u8 sAboutGame_PokeCenter[] = {
+ HELP_WIRELESS_ADAPTER,
+ HELP_WHAT_ARE_POKEMON,
+ HELP_GAME_FUNDAMENTALS_1,
+ HELP_GAME_FUNDAMENTALS_2,
+ HELP_GAME_FUNDAMENTALS_3,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Mart[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Mart[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Mart[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_TYPE,
+ HELP_TERM_ITEM,
+ HELP_TERM_MONEY,
+ HELP_TERM_ITEMS,
+ HELP_TERM_KEYITEMS,
+ HELP_TERM_POKEBALLS,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Gym[] = {
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Gym[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Gym[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_TYPE,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sTypeMatchups_Gym[] = {
+ HELP_TYPE_MATCHUPS,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Indoors[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_CANT_FIND_PERSON_I_WANT,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_I_CANT_GO_ON,
+ HELP_HOW_DO_I_PROGRESS,
+ HELP_WHAT_IS_THAT_PERSON_LIKE,
+ HELP_OUT_OF_THINGS_TO_DO,
+ HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
+ HELP_WHAT_DO_I_DO_IN_CAVE,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_IS_A_GYM,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WHEN_CAN_I_USE_ITEM,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_CAN_I_BUY_POKEBALLS,
+ HELP_WHATS_A_BATTLE,
+ HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_WHERE_DO_MONS_APPEAR,
+ HELP_CANT_CATCH_MONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_WHATS_A_TRAINER,
+ HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WANT_TO_ADD_MORE_MOVES,
+ HELP_WHAT_ARE_HIDDEN_MOVES,
+ HELP_WHAT_DOES_HIDDEN_MOVE_DO,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Indoors[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_SUMMARY,
+ HELP_USING_SWITCH,
+ HELP_USING_ITEM,
+ HELP_USING_BAG,
+ HELP_USING_AN_ITEM,
+ HELP_USING_KEYITEM,
+ HELP_REGISTER_KEY_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_POTION,
+ HELP_USING_TOWN_MAP,
+ HELP_USING_TM,
+ HELP_USING_HM,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Indoors[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Overworld[] = {
+ HELP_WHAT_SHOULD_I_BE_DOING,
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_CANT_FIND_PERSON_I_WANT,
+ HELP_TALKED_TO_EVERYONE_NOW_WHAT,
+ HELP_SOMEONE_BLOCKING_MY_WAY,
+ HELP_I_CANT_GO_ON,
+ HELP_HOW_DO_I_PROGRESS,
+ HELP_WHAT_IS_THAT_PERSON_LIKE,
+ HELP_OUT_OF_THINGS_TO_DO,
+ HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
+ HELP_WHAT_DO_I_DO_IN_CAVE,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_IS_A_GYM,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WHEN_CAN_I_USE_ITEM,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_CAN_I_BUY_POKEBALLS,
+ HELP_WHATS_A_BATTLE,
+ HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_WHERE_DO_MONS_APPEAR,
+ HELP_CANT_CATCH_MONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_WHATS_A_TRAINER,
+ HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WANT_TO_ADD_MORE_MOVES,
+ HELP_WHAT_ARE_HIDDEN_MOVES,
+ HELP_WHAT_DOES_HIDDEN_MOVE_DO,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Overworld[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_BAG,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Overworld[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_FNT,
+ HELP_TERM_POKEMON,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Dungeon[] = {
+ HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
+ HELP_I_CANT_GO_ON,
+ HELP_HOW_DO_I_PROGRESS,
+ HELP_WHAT_IS_THAT_PERSON_LIKE,
+ HELP_OUT_OF_THINGS_TO_DO,
+ HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
+ HELP_WHAT_DO_I_DO_IN_CAVE,
+ HELP_WHATS_POKEMON_CENTER,
+ HELP_WHATS_POKEMON_MART,
+ HELP_WHAT_IS_A_GYM,
+ HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
+ HELP_WHEN_CAN_I_USE_ITEM,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_WHATS_A_BATTLE,
+ HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_WHERE_DO_MONS_APPEAR,
+ HELP_CANT_CATCH_MONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_WHATS_A_TRAINER,
+ HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WANT_TO_ADD_MORE_MOVES,
+ HELP_WHAT_ARE_HIDDEN_MOVES,
+ HELP_WHAT_DOES_HIDDEN_MOVE_DO,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Dungeon[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_BAG,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Dungeon[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sWhatToDo_Surfing[] = {
+ HELP_I_CANT_GO_ON,
+ HELP_WHAT_IS_THAT_PERSON_LIKE,
+ HELP_OUT_OF_THINGS_TO_DO,
+ HELP_WHAT_IS_A_GYM,
+ HELP_CANT_CATCH_MONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_WHATS_A_TRAINER,
+ HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WANT_TO_ADD_MORE_MOVES,
+ HELP_WHAT_ARE_HIDDEN_MOVES,
+ HELP_WHAT_DOES_HIDDEN_MOVE_DO,
+ HELP_WANT_TO_END_GAME,
+ HELP_END
+};
+
+static const u8 sHowTo_Surfing[] = {
+ HELP_OPENING_MENU,
+ HELP_USING_POKEDEX,
+ HELP_USING_POKEMON,
+ HELP_USING_BAG,
+ HELP_USING_PLAYER,
+ HELP_USING_SAVE,
+ HELP_USING_OPTION,
+ HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
+ HELP_END
+};
+
+static const u8 sTerms_Surfing[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sWhatToDo_WildBattle[] = {
+ HELP_WHATS_A_BATTLE,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WHAT_MOVES_SHOULD_I_USE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_CANT_CATCH_MONS,
+ HELP_CAN_I_BUY_POKEBALLS,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_END
+};
+
+static const u8 sHowTo_WildBattle[] = {
+ HELP_USING_FIGHT,
+ HELP_USING_POKEMON2,
+ HELP_USING_SHIFT,
+ HELP_USING_SUMMARY2,
+ HELP_USING_BAG2,
+ HELP_USING_AN_ITEM,
+ HELP_USING_POKEBALL,
+ HELP_USING_RUN,
+ HELP_END
+};
+
+static const u8 sTerms_WildBattle[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_TYPE,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_TERM_STATUS_PROBLEM,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sTypeMatchups_WildBattle[] = {
+ HELP_TYPE_MATCHUPS,
+ HELP_END
+};
+
+static const u8 sWhatToDo_TrainerBattleSingle[] = {
+ HELP_WHATS_A_BATTLE,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WHAT_MOVES_SHOULD_I_USE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_END
+};
+
+static const u8 sHowTo_TrainerBattleSingle[] = {
+ HELP_USING_FIGHT,
+ HELP_USING_POKEMON2,
+ HELP_USING_SHIFT,
+ HELP_USING_SUMMARY2,
+ HELP_USING_BAG2,
+ HELP_USING_AN_ITEM,
+ HELP_USING_RUN,
+ HELP_END
+};
+
+static const u8 sTerms_TrainerBattleSingle[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_TYPE,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_TERM_STATUS_PROBLEM,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sTypeMatchups_TrainerBattleSingle[] = {
+ HELP_TYPE_MATCHUPS,
+ HELP_END
+};
+
+static const u8 sWhatToDo_TrainerBattleDouble[] = {
+ HELP_WHATS_A_BATTLE,
+ HELP_WHAT_ARE_MOVES,
+ HELP_WHAT_MOVES_SHOULD_I_USE,
+ HELP_WHAT_IS_A_MONS_VITALITY,
+ HELP_MY_MONS_ARE_HURT,
+ HELP_RAN_OUT_OF_POTIONS,
+ HELP_WANT_TO_MAKE_MON_STRONGER,
+ HELP_FOE_MONS_TOO_STRONG,
+ HELP_WHAT_IS_STATUS_PROBLEM,
+ HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
+ HELP_END
+};
+
+static const u8 sHowTo_TrainerBattleDouble[] = {
+ HELP_USING_FIGHT,
+ HELP_USING_POKEMON2,
+ HELP_USING_SHIFT,
+ HELP_USING_SUMMARY2,
+ HELP_USING_BAG2,
+ HELP_USING_AN_ITEM,
+ HELP_USING_RUN,
+ HELP_END
+};
+
+static const u8 sTerms_TrainerBattleDouble[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_TYPE,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_TERM_STATUS_PROBLEM,
+ HELP_TERM_FNT,
+ HELP_END
+};
+
+static const u8 sTypeMatchups_TrainerBattleDouble[] = {
+ HELP_TYPE_MATCHUPS,
+ HELP_END
+};
+
+static const u8 sWhatToDo_SafariBattle[] = {
+ HELP_WHAT_DO_I_DO_IN_SAFARI,
+ HELP_WHAT_ARE_SAFARI_RULES,
+ HELP_WANT_TO_END_SAFARI,
+ HELP_END
+};
+
+static const u8 sHowTo_SafariBattle[] = {
+ HELP_USING_BALL,
+ HELP_USING_BAIT,
+ HELP_USING_ROCK,
+ HELP_USING_RUN,
+ HELP_END
+};
+
+static const u8 sTerms_SafariBattle[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_TYPE,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_END
+};
+
+static const u8 sTypeMatchups_SafariBattle[] = {
+ HELP_TYPE_MATCHUPS,
+ HELP_END
+};
+
+static const u8 sHowTo_PC[] = {
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_USING_HALL_OF_FAME,
+ HELP_END
+};
+
+static const u8 sHowTo_BillsPC[] = {
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_USING_HALL_OF_FAME,
+ HELP_END
+};
+
+static const u8 sHowTo_PlayersPCItems[] = {
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_USING_HALL_OF_FAME,
+ HELP_END
+};
+
+static const u8 sHowTo_PlayersPCMailbox[] = {
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_USING_HALL_OF_FAME,
+ HELP_END
+};
+
+static const u8 sHowTo_PCMisc[] = {
+ HELP_USING_PC,
+ HELP_USING_BILLS_PC,
+ HELP_USING_WITHDRAW,
+ HELP_USING_DEPOSIT,
+ HELP_USING_MOVE,
+ HELP_MOVING_ITEMS,
+ HELP_USING_PLAYERS_PC,
+ HELP_USING_WITHDRAW_ITEM,
+ HELP_USING_DEPOSIT_ITEM,
+ HELP_USING_MAILBOX,
+ HELP_USING_PROF_OAKS_PC,
+ HELP_USING_HALL_OF_FAME,
+ HELP_END
+};
+
+static const u8 sHowTo_BedroomPC[] = {
+ HELP_USING_HOME_PC,
+ HELP_USING_ITEM_STORAGE,
+ HELP_USING_WITHDRAW_ITEM2,
+ HELP_USING_DEPOSIT_ITEM2,
+ HELP_USING_MAILBOX2,
+ HELP_END
+};
+
+static const u8 sHowTo_BedroomPCItems[] = {
+ HELP_USING_HOME_PC,
+ HELP_USING_ITEM_STORAGE,
+ HELP_USING_WITHDRAW_ITEM2,
+ HELP_USING_DEPOSIT_ITEM2,
+ HELP_USING_MAILBOX2,
+ HELP_END
+};
+
+static const u8 sHowTo_BedroomPCMailbox[] = {
+ HELP_USING_HOME_PC,
+ HELP_USING_ITEM_STORAGE,
+ HELP_USING_WITHDRAW_ITEM2,
+ HELP_USING_DEPOSIT_ITEM2,
+ HELP_USING_MAILBOX2,
+ HELP_END
+};
+
+static const u8 sTerms_Basic[] = {
+ HELP_TERM_LEVEL,
+ HELP_TERM_HP,
+ HELP_TERM_EXP,
+ HELP_TERM_MOVES,
+ HELP_TERM_TM,
+ HELP_TERM_HM_MOVE,
+ HELP_TERM_HM,
+ HELP_TERM_ATTACK,
+ HELP_TERM_DEFENSE,
+ HELP_TERM_SPATK,
+ HELP_TERM_SPDEF,
+ HELP_TERM_SPEED,
+ HELP_TERM_TYPE,
+ HELP_TERM_OT,
+ HELP_TERM_ITEM,
+ HELP_TERM_ABILITY,
+ HELP_TERM_MOVE_TYPE,
+ HELP_TERM_NATURE,
+ HELP_TERM_ID_NO,
+ HELP_TERM_PP,
+ HELP_TERM_POWER,
+ HELP_TERM_ACCURACY,
+ HELP_TERM_STATUS_PROBLEM,
+ HELP_TERM_FNT,
+ HELP_TERM_EVOLUTION,
+ HELP_TERM_ITEMS,
+ HELP_TERM_KEYITEMS,
+ HELP_TERM_POKEBALLS,
+ HELP_TERM_PLAY_TIME,
+ HELP_TERM_MONEY,
+ HELP_TERM_BADGES,
+ HELP_END
+};
+
+
+// Cant get this to match as a 2D array but it probably should be one, [HELPCONTEXT_COUNT][TOPIC_COUNT - 1] (Excludes TOPIC_EXIT)
+static const u8 *const sHelpSystemSubmenuItemLists[HELPCONTEXT_COUNT * (TOPIC_COUNT - 1)] = {
+ NULL, NULL, NULL, NULL, NULL, // HELPCONTEXT_NONE
+ NULL, NULL, NULL, sAboutGame_TitleScreen, NULL, // HELPCONTEXT_TITLE_SCREEN
+ NULL, NULL, NULL, sAboutGame_NewGame, NULL, // HELPCONTEXT_NEW_GAME
+ NULL, sHowTo_NamingScreen, NULL, sAboutGame_NamingScreen, NULL, // HELPCONTEXT_NAMING_SCREEN
+ NULL, sHowTo_Pokedex, NULL, NULL, NULL, // HELPCONTEXT_POKEDEX
+ NULL, sHowTo_PartyMenu, sTerms_PartyMenu, NULL, NULL, // HELPCONTEXT_PARTY_MENU
+ NULL, sHowTo_PokemonInfo, sTerms_PokemonInfo, NULL, NULL, // HELPCONTEXT_POKEMON_INFO
+ NULL, NULL, sTerms_PokemonSkills, NULL, NULL, // HELPCONTEXT_POKEMON_SKILLS
+ NULL, NULL, sTerms_PokemonMoves, NULL, NULL, // HELPCONTEXT_POKEMON_MOVES
+ NULL, sHowTo_Bag, sTerms_Bag, NULL, NULL, // HELPCONTEXT_BAG
+ NULL, sHowTo_TrainerCardFront, sTerms_TrainerCardFront, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_FRONT
+ NULL, sHowTo_TrainerCardBack, NULL, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_BACK
+ NULL, sHowTo_Save, sTerms_Save, NULL, NULL, // HELPCONTEXT_SAVE
+ NULL, sHowTo_Options, sTerms_Options, NULL, NULL, // HELPCONTEXT_OPTIONS
+ sWhatToDo_PlayersHouse, NULL, NULL, sAboutGame_PlayersHouse, NULL, // HELPCONTEXT_PLAYERS_HOUSE
+ sWhatToDo_OaksLab, sHowTo_OaksLab, sTerms_OaksLab, NULL, NULL, // HELPCONTEXT_OAKS_LAB
+ sWhatToDo_PokeCenter, sHowTo_PokeCenter, sTerms_PokeCenter, sAboutGame_PokeCenter, NULL, // HELPCONTEXT_POKECENTER
+ sWhatToDo_Mart, sHowTo_Mart, sTerms_Mart, NULL, NULL, // HELPCONTEXT_MART
+ sWhatToDo_Gym, sHowTo_Gym, sTerms_Gym, NULL, sTypeMatchups_Gym, // HELPCONTEXT_GYM
+ sWhatToDo_Indoors, sHowTo_Indoors, sTerms_Indoors, NULL, NULL, // HELPCONTEXT_INDOORS
+ sWhatToDo_Overworld, sHowTo_Overworld, sTerms_Overworld, NULL, NULL, // HELPCONTEXT_OVERWORLD
+ sWhatToDo_Dungeon, sHowTo_Dungeon, sTerms_Dungeon, NULL, NULL, // HELPCONTEXT_DUNGEON
+ sWhatToDo_Surfing, sHowTo_Surfing, sTerms_Surfing, NULL, NULL, // HELPCONTEXT_SURFING
+ sWhatToDo_WildBattle, sHowTo_WildBattle, sTerms_WildBattle, NULL, sTypeMatchups_WildBattle, // HELPCONTEXT_WILD_BATTLE
+ sWhatToDo_TrainerBattleSingle, sHowTo_TrainerBattleSingle, sTerms_TrainerBattleSingle, NULL, sTypeMatchups_TrainerBattleSingle, // HELPCONTEXT_TRAINER_BATTLE_SINGLE
+ sWhatToDo_TrainerBattleDouble, sHowTo_TrainerBattleDouble, sTerms_TrainerBattleDouble, NULL, sTypeMatchups_TrainerBattleDouble, // HELPCONTEXT_TRAINER_BATTLE_DOUBLE
+ sWhatToDo_SafariBattle, sHowTo_SafariBattle, sTerms_SafariBattle, NULL, sTypeMatchups_SafariBattle, // HELPCONTEXT_SAFARI_BATTLE
+ NULL, sHowTo_PC, NULL, NULL, NULL, // HELPCONTEXT_PC
+ NULL, sHowTo_BillsPC, NULL, NULL, NULL, // HELPCONTEXT_BILLS_PC
+ NULL, sHowTo_PlayersPCItems, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_ITEMS
+ NULL, sHowTo_PlayersPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_MAILBOX
+ NULL, sHowTo_PCMisc, NULL, NULL, NULL, // HELPCONTEXT_PC_MISC
+ NULL, sHowTo_BedroomPC, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC
+ NULL, sHowTo_BedroomPCItems, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_ITEMS
+ NULL, sHowTo_BedroomPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_MAILBOX
+ NULL, NULL, NULL, NULL, NULL // HELPCONTEXT_UNUSED
+};
+
+static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin");
+
+static const u8 sHelpSystemContextTopicOrder[TOPIC_COUNT] = {
+ TOPIC_ABOUT_GAME,
+ TOPIC_WHAT_TO_DO,
+ TOPIC_HOW_TO_DO,
+ TOPIC_TERMS,
+ TOPIC_TYPE_MATCHUP,
+ TOPIC_EXIT
+};
+
+#define CONTEXT_TOPIC_FLAGS(whatToDo, howToDo, terms, aboutGame, typeMatchup, exit) \
+ { \
+ [TOPIC_WHAT_TO_DO] = whatToDo, \
+ [TOPIC_HOW_TO_DO] = howToDo, \
+ [TOPIC_TERMS] = terms, \
+ [TOPIC_ABOUT_GAME] = aboutGame, \
+ [TOPIC_TYPE_MATCHUP] = typeMatchup, \
+ [TOPIC_EXIT] = exit \
+ } \
+
+static const bool8 sHelpSystemContextTopicFlags[HELPCONTEXT_COUNT + 1][TOPIC_COUNT] = {
+ [HELPCONTEXT_NONE] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_TITLE_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE),
+ [HELPCONTEXT_NEW_GAME] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE),
+ [HELPCONTEXT_NAMING_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE),
+ [HELPCONTEXT_POKEDEX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_PARTY_MENU] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_POKEMON_INFO] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_POKEMON_SKILLS] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_POKEMON_MOVES] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_BAG] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_TRAINER_CARD_FRONT] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_TRAINER_CARD_BACK] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_SAVE] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_OPTIONS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_PLAYERS_HOUSE] = CONTEXT_TOPIC_FLAGS( TRUE, FALSE, FALSE, TRUE, FALSE, TRUE),
+ [HELPCONTEXT_OAKS_LAB] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_POKECENTER] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, TRUE, FALSE, TRUE),
+ [HELPCONTEXT_MART] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_GYM] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
+ [HELPCONTEXT_INDOORS] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_OVERWORLD] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_DUNGEON] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_SURFING] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_WILD_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
+ [HELPCONTEXT_TRAINER_BATTLE_SINGLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
+ [HELPCONTEXT_TRAINER_BATTLE_DOUBLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
+ [HELPCONTEXT_SAFARI_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
+ [HELPCONTEXT_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_BILLS_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_PLAYERS_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_PLAYERS_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_PC_MISC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_BEDROOM_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_BEDROOM_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_BEDROOM_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
+ [HELPCONTEXT_UNUSED] = {},
+ [HELPCONTEXT_COUNT] = {}
+};
+
+static const u16 sMartMaps[] = {
+ MAP_VIRIDIAN_CITY_MART,
+ MAP_PEWTER_CITY_MART,
+ MAP_CERULEAN_CITY_MART,
+ MAP_LAVENDER_TOWN_MART,
+ MAP_VERMILION_CITY_MART,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_1F,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_2F,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_3F,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_4F,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_5F,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_ROOF,
+ MAP_CELADON_CITY_DEPARTMENT_STORE_ELEVATOR,
+ MAP_FUCHSIA_CITY_MART,
+ MAP_CINNABAR_ISLAND_MART,
+ MAP_SAFFRON_CITY_MART,
+ MAP_THREE_ISLAND_MART,
+ MAP_FOUR_ISLAND_MART,
+ MAP_SEVEN_ISLAND_MART,
+ MAP_SIX_ISLAND_MART,
+ MAP_UNDEFINED
+};
+
+static const u16 sGymMaps[] = {
+ MAP_PEWTER_CITY_GYM,
+ MAP_CERULEAN_CITY_GYM,
+ MAP_VERMILION_CITY_GYM,
+ MAP_CELADON_CITY_GYM,
+ MAP_FUCHSIA_CITY_GYM,
+ MAP_SAFFRON_CITY_GYM,
+ MAP_CINNABAR_ISLAND_GYM,
+ MAP_VIRIDIAN_CITY_GYM,
+ MAP_UNDEFINED
+};
+
+static const u8 sDungeonMaps[][3] = {
+ { MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), 1 },
+ { MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), 3 },
+ { MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), 2 },
+ { MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), 3 },
+ { MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), 5 },
+ { MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), 3 },
+ { MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), 3 },
+ { MAP_GROUP(MT_EMBER_RUBY_PATH_B4F), MAP_NUM(MT_EMBER_RUBY_PATH_B4F), 1 },
+ { MAP_GROUP(MT_EMBER_SUMMIT_PATH_1F), MAP_NUM(MT_EMBER_SUMMIT_PATH_1F), 3 },
+ { MAP_GROUP(MT_EMBER_RUBY_PATH_B5F), MAP_NUM(MT_EMBER_RUBY_PATH_B5F), 7 },
+ { MAP_GROUP(THREE_ISLAND_BERRY_FOREST), MAP_NUM(THREE_ISLAND_BERRY_FOREST), 1 },
+ { MAP_GROUP(SIX_ISLAND_PATTERN_BUSH), MAP_NUM(SIX_ISLAND_PATTERN_BUSH), 1 },
+ { MAP_GROUP(FIVE_ISLAND_LOST_CAVE_ENTRANCE), MAP_NUM(FIVE_ISLAND_LOST_CAVE_ENTRANCE), 15 },
+ { MAP_GROUP(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), MAP_NUM(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), 4 },
+ { MAP_GROUP(SIX_ISLAND_ALTERING_CAVE), MAP_NUM(SIX_ISLAND_ALTERING_CAVE), 1 },
+ { MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), 7 }
+};
+
+void SetHelpContextDontCheckBattle(u8 contextId)
+{
+ sHelpSystemContextId = contextId;
}
-void SaveMapTiles(void)
+void SetHelpContext(u8 contextId)
{
- RequestDma3Copy((void *)BG_CHAR_ADDR(3), sMapTilesBackup, BG_CHAR_SIZE, DMA3_16BIT);
+ switch (sHelpSystemContextId)
+ {
+ case HELPCONTEXT_WILD_BATTLE:
+ case HELPCONTEXT_TRAINER_BATTLE_SINGLE:
+ case HELPCONTEXT_TRAINER_BATTLE_DOUBLE:
+ case HELPCONTEXT_SAFARI_BATTLE:
+ if (contextId == HELPCONTEXT_BAG
+ || contextId == HELPCONTEXT_PARTY_MENU
+ || contextId == HELPCONTEXT_POKEMON_INFO
+ || contextId == HELPCONTEXT_POKEMON_SKILLS
+ || contextId == HELPCONTEXT_POKEMON_MOVES)
+ break;
+ // fallthrough
+ default:
+ sHelpSystemContextId = contextId;
+ break;
+ }
}
-void SaveMapTextColors(void)
+void Script_SetHelpContext(void)
{
- SaveTextColors(
- &sVideoState.savedTextColor[0],
- &sVideoState.savedTextColor[1],
- &sVideoState.savedTextColor[2]
- );
+ sHelpSystemContextId = gSpecialVar_0x8004;
}
-void RestoreCallbacks(void)
+void BackupHelpContext(void)
{
- gMain.vblankCallback = sVideoState.savedVblankCb;
- gMain.hblankCallback = sVideoState.savedHblankCb;
+ gHelpContextIdBackup = sHelpSystemContextId;
}
-void RestoreGPURegs(void)
+void RestoreHelpContext(void)
{
- SetGpuReg(REG_OFFSET_BLDCNT, sVideoState.savedBldCnt);
- SetGpuReg(REG_OFFSET_BG0HOFS, sVideoState.savedBg0Hofs);
- SetGpuReg(REG_OFFSET_BG0VOFS, sVideoState.savedBg0Vofs);
- SetGpuReg(REG_OFFSET_BG0CNT, sVideoState.savedBg0Cnt);
- SetGpuReg(REG_OFFSET_DISPCNT, sVideoState.savedDispCnt);
+ sHelpSystemContextId = gHelpContextIdBackup;
}
-void RestoreMapTiles(void)
+static bool32 IsInMartMap(void)
{
- RequestDma3Copy(sMapTilesBackup, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
+ return IsCurrentMapInArray(sMartMaps);
}
-void RestoreMapTextColors(void)
+static bool32 IsInGymMap(void)
{
- RestoreTextColors(
- &sVideoState.savedTextColor[0],
- &sVideoState.savedTextColor[1],
- &sVideoState.savedTextColor[2]
- );
+ return IsCurrentMapInArray(sGymMaps);
}
-void CommitTilemap(void)
+static bool32 IsCurrentMapInArray(const u16 * mapIdxs)
{
- RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
+ u16 mapIdx = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum;
+ s32 i;
+
+ for (i = 0; mapIdxs[i] != MAP_UNDEFINED; i++)
+ {
+ if (mapIdxs[i] == mapIdx)
+ return TRUE;
+ }
+
+ return FALSE;
}
-void HS_DrawBgTilemapRect(u16 baseTile, u8 left, u8 top, u8 width, u8 height, u16 increment)
+static bool8 IsInDungeonMap(void)
{
- u16 i, j;
+ u8 i, j;
- for (i = top; i < top + height; i++)
+ for (i = 0; i < NELEMS(sDungeonMaps); i++)
{
- for (j = left; j < left + width; j++)
+ for (j = 0; j < sDungeonMaps[i][2]; j++)
{
- *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseTile;
- baseTile += increment;
+ if (
+ sDungeonMaps[i][0] == gSaveBlock1Ptr->location.mapGroup
+ && sDungeonMaps[i][1] + j == gSaveBlock1Ptr->location.mapNum
+ && (i != 15 /* TANOBY */ || FlagGet(FLAG_SYS_UNLOCKED_TANOBY_RUINS) == TRUE)
+ )
+ return TRUE;
}
}
- CommitTilemap();
+ return FALSE;
}
-void sub_813BCF4(void)
-{
- HS_DrawBgTilemapRect(0x1FF, 0, 0, 30, 20, 0);
-}
+#define IN_PLAYERS_HOUSE \
+ ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) \
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) \
+ || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) \
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F))) \
+
+ #define IN_OAKS_LAB \
+ (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB) \
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB)) \
-void sub_813BD14(u8 mode)
+void SetHelpContextForMap(void)
{
- switch (mode)
+ HelpSystem_EnableToggleWithRButton();
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ SetHelpContext(HELPCONTEXT_SURFING);
+ else if (IsInDungeonMap())
+ SetHelpContext(HELPCONTEXT_DUNGEON);
+ else if (IsMapTypeIndoors(gMapHeader.mapType))
{
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 1, 0, 7, 2, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1E8, 1, 0, 7, 2, 1);
- break;
+ if (IN_PLAYERS_HOUSE)
+ SetHelpContext(HELPCONTEXT_PLAYERS_HOUSE);
+ else if (IN_OAKS_LAB)
+ SetHelpContext(HELPCONTEXT_OAKS_LAB);
+ else if (IsCurMapPokeCenter() == TRUE)
+ SetHelpContext(HELPCONTEXT_POKECENTER);
+ else if (IsInMartMap() == TRUE)
+ SetHelpContext(HELPCONTEXT_MART);
+ else if (IsInGymMap() == TRUE)
+ SetHelpContext(HELPCONTEXT_GYM);
+ else
+ SetHelpContext(HELPCONTEXT_INDOORS);
}
+ else
+ SetHelpContext(HELPCONTEXT_OVERWORLD);
}
-void sub_813BD5C(u8 mode)
+bool8 HelpSystem_UpdateHasntSeenIntro(void)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 13, 0, 16, 2, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1A0, 13, 0, 16, 2, 1);
- break;
- }
+ if (sSeenHelpSystemIntro == TRUE)
+ return FALSE;
+
+ if (gSaveFileStatus != SAVE_STATUS_EMPTY && gSaveFileStatus != SAVE_STATUS_INVALID && FlagGet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO))
+ return FALSE;
+
+ FlagSet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO);
+ sSeenHelpSystemIntro = TRUE;
+ return TRUE;
}
-void sub_813BDA4(u8 mode)
+bool8 HelpSystem_IsSinglePlayer(void)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 2, 3, 26, 16, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x000, 2, 3, 26, 16, 1);
- break;
- }
+ if (gReceivedRemoteLinkPlayers == TRUE)
+ return FALSE;
+ return TRUE;
}
-void sub_813BDE8(u8 mode)
+void HelpSystem_Disable(void)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 1, 3, 28, 16, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1FA, 1, 3, 28, 17, 0);
- break;
- }
+ gHelpSystemEnabled = FALSE;
}
-void sub_813BE30(u8 mode)
+void HelpSystem_Enable(void)
{
- switch (mode)
+ if (!QL_IS_PLAYBACK_STATE)
{
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 2, 14, 26, 5, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x11E, 2, 14, 26, 5, 1);
- break;
+ gHelpSystemEnabled = TRUE;
+ HelpSystem_EnableToggleWithRButton();
}
}
-void sub_813BE78(u8 mode)
+void HelpSystem_DisableToggleWithRButton(void)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
- HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1F7, 1, 2, 28, 1, 0);
- HS_DrawBgTilemapRect(0x1F8, 1, 19, 28, 1, 0);
- break;
- }
+ gHelpSystemToggleWithRButtonDisabled = TRUE;
}
-void sub_813BEE4(u8 mode)
+void HelpSystem_EnableToggleWithRButton(void)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
- HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1FB, 1, 2, 28, 1, 0);
- HS_DrawBgTilemapRect(0x1FC, 1, 19, 28, 1, 0);
- break;
- }
+ gHelpSystemToggleWithRButtonDisabled = FALSE;
}
-void sub_813BF50(u8 mode)
+static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 0, 0, 1, 20, 0);
- HS_DrawBgTilemapRect(0x1FF, 29, 0, 1, 20, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1F9, 0, 0, 1, 20, 0);
- HS_DrawBgTilemapRect(0x1F9, 29, 0, 1, 20, 0);
- break;
- }
+ helpListMenu->sub.items = listMenuItemsBuffer;
+ helpListMenu->sub.totalItems = 1;
+ helpListMenu->sub.maxShowed = 1;
+ helpListMenu->sub.left = 1;
+ helpListMenu->sub.top = 4;
}
-void sub_813BFC0(u8 mode)
+static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- switch (mode)
- {
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 1, 5, 28, 1, 0);
- break;
- case 1:
- HS_DrawBgTilemapRect(0x1FC, 1, 5, 28, 1, 0);
- break;
- }
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_PickOkEnd);
+ HelpSystem_InitListMenuController(helpListMenu, 0, gHelpSystemState.scrollMain);
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
+ HS_ShowOrHideMainWindowText(1);
+ HS_ShowOrHideControlsGuideInTopRight(1);
}
-void sub_813C004(u8 a0, u8 mode)
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- switch (mode)
+ u8 i;
+ u8 totalItems = 0;
+ for (i = 0; i < TOPIC_COUNT; i++)
{
- case 0:
- HS_DrawBgTilemapRect(0x1FF, 28, 3, 1, 1, 0);
- HS_DrawBgTilemapRect(0x1FF, 28, 18, 1, 1, 0);
- break;
- case 1:
- if (a0 == 0)
- HS_DrawBgTilemapRect(0x1FE, 28, 3, 1, 1, 0);
- else
- HS_DrawBgTilemapRect(0x1FD, 28, 18, 1, 1, 0);
- break;
+ if (sHelpSystemContextTopicFlags[sHelpSystemContextId][sHelpSystemContextTopicOrder[i]] == TRUE)
+ {
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]];
+ listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i];
+ totalItems++;
+ }
}
+ listMenuItemsBuffer[totalItems - 1].index = -2;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = totalItems;
+ helpListMenu->sub.left = 0;
}
-#define HelpSystemHandleRenderGlyph(character) ({\
- do {DecompressAndRenderGlyph(font, character, &srcBlit, &destBlit, dest, x, y, width, height);} while (0); font;\
-})
+static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
+{
+ HS_SetMainWindowBgBrightness(0);
+ HS_ShowOrHideHeaderLine_Darker_FooterStyle(0);
+ HS_ShowOrHideHeaderAndFooterLines_Lighter(1);
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_PickOkCancel);
+ HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos);
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0);
+ HS_ShowOrHideMainWindowText(1);
+ HS_ShowOrHideControlsGuideInTopRight(1);
+}
-#ifdef NONMATCHING
-void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height)
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- // font -> sp+24
- // dest -> sp+28
- // src -> r9
- // x -> sp+34
- // y -> r10
- // width -> sp+2C
- // height -> sp+30
- struct Bitmap srcBlit;
- struct Bitmap destBlit;
+ u8 totalItems = 0;
+ const u8 * submenuItems = sHelpSystemSubmenuItemLists[sHelpSystemContextId * 5 + gHelpSystemState.topic]; // accessing as 2D array
u8 i;
- u8 orig_x = x;
- s32 clearPixels;
-
- while (1)
+ for (i = 0; submenuItems[i] != HELP_END; i++)
{
- u16 curChar = *src++;
- switch (curChar)
+ if (IsHelpSystemSubmenuEnabled(submenuItems[i]) == TRUE)
{
- case EOS:
- return;
- case PLACEHOLDER_BEGIN:
- curChar = *src++;
- if (curChar == 1) {
- for (i = 0; i < 10; i++)
- {
- if (gSaveBlock2Ptr->playerName[i] == EOS)
- break;
- HelpSystemHandleRenderGlyph(gSaveBlock2Ptr->playerName[i]);
- x += gGlyphInfo[0x80];
- }
- }
- else if (curChar == 2)
- {
- for (i = 0; ; i++)
- {
- if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC) == TRUE)
- {
- if (gString_Bill[i] == EOS)
- break;
- HelpSystemHandleRenderGlyph(gString_Bill[i]);
- }
- else
- {
- if (gString_Someone[i] == EOS)
- break;
- HelpSystemHandleRenderGlyph(gString_Someone[i]);
- }
- x += gGlyphInfo[0x80];
- }
- }
- break;
- case CHAR_PROMPT_SCROLL:
- case CHAR_PROMPT_CLEAR:
- case CHAR_NEWLINE:
- x = orig_x;
- y += gGlyphInfo[0x81] + 1;
- break;
- case EXT_CTRL_CODE_BEGIN:
- curChar = *src++;
- switch (curChar)
- {
- case 4:
- src++;
- //fallthrough
- case 11:
- case 16:
- src++;
- //fallthrough
- case 1:
- case 2:
- case 3:
- case 5:
- case 6:
- case 8:
- case 12:
- case 13:
- case 14:
- src++;
- break;
- case 19:
- clearPixels = *src + orig_x - x;
- if (clearPixels > 0)
- {
- destBlit.pixels = dest;
- destBlit.width = width * 8;
- destBlit.height = height * 8;
- FillBitmapRect4Bit(&destBlit, x, y, clearPixels, GetFontAttribute(font, 1), 0);
- x += clearPixels;
- }
- src++;
- break;
- case 17:
- case 18:
- case 20:
- src++;
- break;
- case 7:
- case 9:
- case 10:
- case 15:
- case 21:
- case 22:
- break;
- }
- break;
- case CHAR_KEYPAD_ICON:
- curChar = *src++;
- srcBlit.pixels = (u8 *)gKeypadIconTiles + 0x20 * GetKeypadIconTileOffset(curChar);
- srcBlit.width = 0x80;
- srcBlit.height = 0x80;
- destBlit.pixels = dest;
- destBlit.width = width * 8;
- destBlit.height = height * 8;
- BlitBitmapRect4Bit(&srcBlit, &destBlit, 0, 0, x, y, GetKeypadIconWidth(curChar), GetKeypadIconHeight(curChar), 0);
- x += GetKeypadIconWidth(curChar);
- break;
- case CHAR_EXTRA_EMOJI:
- curChar = 0x100 | *src++;
- //fallthrough
- default:
- if (curChar == CHAR_SPACE)
- {
- if (font == 0)
- x += 5;
- else
- x += 4;
- }
- else
- {
- HelpSystemHandleRenderGlyph(curChar);
- x += gGlyphInfo[0x80];
- }
- break;
+ if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[submenuItems[i]];
+ else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[submenuItems[i]];
+ else if (gHelpSystemState.topic == TOPIC_TERMS)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]];
+ else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[submenuItems[i]];
+ else // TOPIC_TYPE_MATCHUP
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[submenuItems[i]];
+ listMenuItemsBuffer[totalItems].index = submenuItems[i];
+ totalItems++;
+ }
+ }
+ if (HelpSystem_ShouldShowBasicTerms() == TRUE)
+ {
+ for (i = 0, submenuItems = sTerms_Basic; submenuItems[i] != HELP_END; i++)
+ {
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]];
+ listMenuItemsBuffer[totalItems].index = submenuItems[i];
+ totalItems++;
}
}
+ listMenuItemsBuffer[totalItems].label = Help_Text_Cancel;
+ listMenuItemsBuffer[totalItems].index = -2;
+ totalItems++;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = 7;
+ helpListMenu->sub.left = 0;
+ helpListMenu->sub.top = 21;
}
-#else
-NAKED
-void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height)
+
+static bool8 HelpSystem_ShouldShowBasicTerms(void)
{
- 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, 0x38\n"
- "\tstr r1, [sp, 0x28]\n"
- "\tmov r9, r2\n"
- "\tldr r1, [sp, 0x58]\n"
- "\tldr r2, [sp, 0x5C]\n"
- "\tldr r4, [sp, 0x60]\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstr r0, [sp, 0x24]\n"
- "\tlsls r3, 24\n"
- "\tlsrs r7, r3, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r10, r1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tstr r2, [sp, 0x2C]\n"
- "\tlsls r4, 24\n"
- "\tlsrs r4, 24\n"
- "\tstr r4, [sp, 0x30]\n"
- "\tstr r7, [sp, 0x34]\n"
- "_0813C0AC_masterLoop:\n"
- "\tmov r0, r9\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r2, 0x1\n"
- "\tadd r9, r2\n"
- "\tadds r0, r1, 0\n"
- "\tsubs r0, 0xF8\n"
- "\tcmp r0, 0x7\n"
- "\tbls _0813C0BE\n"
- "\tb _0813C358\n"
- "_0813C0BE:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _0813C0C8 @ =_0813C0CC\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_0813C0C8: .4byte _0813C0CC\n"
- "\t.align 2, 0\n"
- "_0813C0CC:\n"
- "\t.4byte _0813C2D4\n"
- "\t.4byte _0813C348\n"
- "\t.4byte _0813C1E4\n"
- "\t.4byte _0813C1E4\n"
- "\t.4byte _0813C200\n"
- "\t.4byte _0813C0EC\n"
- "\t.4byte _0813C1E4\n"
- "\t.4byte _0813C39C\n"
- "_0813C0EC:\n"
- "\tmov r0, r9\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r2, 0x1\n"
- "\tadd r9, r2\n"
- "\tcmp r1, 0x1\n"
- "\tbne _0813C154\n"
- "\tmovs r4, 0\n"
- "\tldr r0, _0813C14C @ =gSaveBlock2Ptr\n"
- "\tldr r1, [r0]\n"
- "\tldrb r1, [r1]\n"
- "\tcmp r1, 0xFF\n"
- "\tbeq _0813C0AC_masterLoop\n"
- "\tldr r5, _0813C150 @ =gGlyphInfo + 0x80\n"
- "_0813C106:\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r4\n"
- "\tldrb r1, [r0]\n"
- "\tldr r0, [sp, 0x28]\n"
- "\tstr r0, [sp]\n"
- "\tstr r7, [sp, 0x4]\n"
- "\tmov r2, r10\n"
- "\tstr r2, [sp, 0x8]\n"
- "\tldr r0, [sp, 0x2C]\n"
- "\tstr r0, [sp, 0xC]\n"
- "\tldr r2, [sp, 0x30]\n"
- "\tstr r2, [sp, 0x10]\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tadd r2, sp, 0x14\n"
- "\tadd r3, sp, 0x1C\n"
- "\tbl DecompressAndRenderGlyph\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tldrb r0, [r5]\n"
- "\tadds r0, r7, r0\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r0, r4, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r4, 0x9\n"
- "\tbhi _0813C0AC_masterLoop\n"
- "\tldr r0, _0813C14C @ =gSaveBlock2Ptr\n"
- "\tldr r1, [r0]\n"
- "\tadds r1, r4\n"
- "\tldrb r1, [r1]\n"
- "\tcmp r1, 0xFF\n"
- "\tbne _0813C106\n"
- "\tb _0813C0AC_masterLoop\n"
- "\t.align 2, 0\n"
- "_0813C14C: .4byte gSaveBlock2Ptr\n"
- "_0813C150: .4byte gGlyphInfo + 0x80\n"
- "_0813C154:\n"
- "\tcmp r1, 0x2\n"
- "\tbne _0813C0AC_masterLoop\n"
- "\tmovs r4, 0\n"
- "\tldr r5, _0813C160 @ =gGlyphInfo + 0x80\n"
- "\tb _0813C1BC\n"
- "\t.align 2, 0\n"
- "_0813C160: .4byte gGlyphInfo + 0x80\n"
- "_0813C164:\n"
- "\tldrb r1, [r1]\n"
- "\tldr r2, [sp, 0x28]\n"
- "\tstr r2, [sp]\n"
- "\tstr r7, [sp, 0x4]\n"
- "\tmov r0, r10\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tldr r2, [sp, 0x2C]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tldr r0, [sp, 0x30]\n"
- "\tstr r0, [sp, 0x10]\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tadd r2, sp, 0x14\n"
- "\tadd r3, sp, 0x1C\n"
- "\tbl DecompressAndRenderGlyph\n"
- "\tb _0813C1AC\n"
- "_0813C184:\n"
- "\tldr r0, _0813C1D8 @ =gString_Someone\n"
- "\tadds r1, r4, r0\n"
- "\tldrb r0, [r1]\n"
- "\tcmp r0, 0xFF\n"
- "\tbeq _0813C0AC_masterLoop\n"
- "\tadds r1, r0, 0\n"
- "\tldr r2, [sp, 0x28]\n"
- "\tstr r2, [sp]\n"
- "\tstr r7, [sp, 0x4]\n"
- "\tmov r0, r10\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tldr r2, [sp, 0x2C]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tldr r0, [sp, 0x30]\n"
- "\tstr r0, [sp, 0x10]\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tadd r2, sp, 0x14\n"
- "\tadd r3, sp, 0x1C\n"
- "\tbl DecompressAndRenderGlyph\n"
- "_0813C1AC:\n"
- "\tldr r1, [sp, 0x24]\n"
- "\tldrb r0, [r5]\n"
- "\tadds r0, r7, r0\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r0, r4, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "_0813C1BC:\n"
- "\tldr r0, _0813C1DC @ =0x00000834\n"
- "\tbl FlagGet\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0813C184\n"
- "\tldr r0, _0813C1E0 @ =gString_Bill\n"
- "\tadds r1, r4, r0\n"
- "\tldrb r0, [r1]\n"
- "\tcmp r0, 0xFF\n"
- "\tbne _0813C164\n"
- "\tb _0813C0AC_masterLoop\n"
- "\t.align 2, 0\n"
- "_0813C1D8: .4byte gString_Someone\n"
- "_0813C1DC: .4byte 0x00000834\n"
- "_0813C1E0: .4byte gString_Bill\n"
- "_0813C1E4:\n"
- "\tldr r7, [sp, 0x34]\n"
- "\tldr r1, _0813C1FC @ =gGlyphInfo\n"
- "\tadds r1, 0x81\n"
- "\tmov r0, r10\n"
- "\tadds r0, 0x1\n"
- "\tldrb r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "\tb _0813C0AC_masterLoop\n"
- "\t.align 2, 0\n"
- "_0813C1FC: .4byte gGlyphInfo\n"
- "_0813C200:\n"
- "\tmov r2, r9\n"
- "\tldrb r1, [r2]\n"
- "\tmovs r0, 0x1\n"
- "\tadd r9, r0\n"
- "\tsubs r0, r1, 0x1\n"
- "\tcmp r0, 0x15\n"
- "\tbls _0813C210\n"
- "\tb _0813C0AC_masterLoop\n"
- "_0813C210:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _0813C21C @ =_0813C220\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_0813C21C: .4byte _0813C220\n"
- "\t.align 2, 0\n"
- "_0813C220:\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C278\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "\t.4byte _0813C27C\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C2C8\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "\t.4byte _0813C27C\n"
- "\t.4byte _0813C2CE\n"
- "\t.4byte _0813C2CE\n"
- "\t.4byte _0813C282\n"
- "\t.4byte _0813C2CE\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "\t.4byte _0813C0AC_masterLoop\n"
- "_0813C278:\n"
- "\tmovs r1, 0x1\n"
- "\tadd r9, r1\n"
- "_0813C27C:\n"
- "\tmovs r2, 0x1\n"
- "\tadd r9, r2\n"
- "\tb _0813C2C8\n"
- "_0813C282:\n"
- "\tmov r2, r9\n"
- "\tldrb r0, [r2]\n"
- "\tldr r1, [sp, 0x34]\n"
- "\tadds r0, r1\n"
- "\tsubs r6, r0, r7\n"
- "\tcmp r6, 0\n"
- "\tble _0813C2C8\n"
- "\tldr r2, [sp, 0x28]\n"
- "\tstr r2, [sp, 0x1C]\n"
- "\tldr r1, [sp, 0x2C]\n"
- "\tlsls r0, r1, 3\n"
- "\tadd r4, sp, 0x1C\n"
- "\tmovs r5, 0\n"
- "\tstrh r0, [r4, 0x4]\n"
- "\tldr r2, [sp, 0x30]\n"
- "\tlsls r0, r2, 3\n"
- "\tstrh r0, [r4, 0x6]\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetFontAttribute\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tlsls r3, r6, 16\n"
- "\tlsrs r3, 16\n"
- "\tstr r0, [sp]\n"
- "\tstr r5, [sp, 0x4]\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r7, 0\n"
- "\tmov r2, r10\n"
- "\tbl FillBitmapRect4Bit\n"
- "\tadds r0, r7, r6\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "_0813C2C8:\n"
- "\tmovs r0, 0x1\n"
- "\tadd r9, r0\n"
- "\tb _0813C0AC_masterLoop\n"
- "_0813C2CE:\n"
- "\tmovs r1, 0x1\n"
- "\tadd r9, r1\n"
- "\tb _0813C0AC_masterLoop\n"
- "_0813C2D4:\n"
- "\tmov r2, r9\n"
- "\tldrb r1, [r2]\n"
- "\tmovs r0, 0x1\n"
- "\tadd r9, r0\n"
- "\tadds r6, r1, 0\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetKeypadIconTileOffset\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 19\n"
- "\tldr r1, _0813C344 @ =gKeypadIconTiles\n"
- "\tadds r0, r1\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tadd r1, sp, 0x14\n"
- "\tmovs r2, 0\n"
- "\tmov r8, r2\n"
- "\tmovs r0, 0x80\n"
- "\tstrh r0, [r1, 0x4]\n"
- "\tstrh r0, [r1, 0x6]\n"
- "\tldr r0, [sp, 0x28]\n"
- "\tstr r0, [sp, 0x1C]\n"
- "\tldr r1, [sp, 0x2C]\n"
- "\tlsls r0, r1, 3\n"
- "\tadd r5, sp, 0x1C\n"
- "\tstrh r0, [r5, 0x4]\n"
- "\tldr r2, [sp, 0x30]\n"
- "\tlsls r0, r2, 3\n"
- "\tstrh r0, [r5, 0x6]\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetKeypadIconWidth\n"
- "\tadds r4, r0, 0\n"
- "\tlsls r4, 24\n"
- "\tlsrs r4, 24\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetKeypadIconHeight\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstr r7, [sp]\n"
- "\tmov r1, r10\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tstr r4, [sp, 0x8]\n"
- "\tstr r0, [sp, 0xC]\n"
- "\tmov r2, r8\n"
- "\tstr r2, [sp, 0x10]\n"
- "\tadd r0, sp, 0x14\n"
- "\tadds r1, r5, 0\n"
- "\tmovs r2, 0\n"
- "\tmovs r3, 0\n"
- "\tbl BlitBitmapRect4Bit\n"
- "\tadds r0, r6, 0\n"
- "\tbl GetKeypadIconWidth\n"
- "\tb _0813C38E\n"
- "\t.align 2, 0\n"
- "_0813C344: .4byte gKeypadIconTiles\n"
- "_0813C348:\n"
- "\tmov r0, r9\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 1\n"
- "\tadds r0, r2, 0\n"
- "\torrs r1, r0\n"
- "\tmovs r0, 0x1\n"
- "\tadd r9, r0\n"
- "_0813C358:\n"
- "\tcmp r1, 0\n"
- "\tbne _0813C36A\n"
- "\tldr r1, [sp, 0x24]\n"
- "\tcmp r1, 0\n"
- "\tbne _0813C366\n"
- "\tadds r0, r7, 0x5\n"
- "\tb _0813C390\n"
- "_0813C366:\n"
- "\tadds r0, r7, 0x4\n"
- "\tb _0813C390\n"
- "_0813C36A:\n"
- "\tadd r3, sp, 0x1C\n"
- "\tldr r2, [sp, 0x28]\n"
- "\tstr r2, [sp]\n"
- "\tstr r7, [sp, 0x4]\n"
- "\tmov r0, r10\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tldr r2, [sp, 0x2C]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tldr r0, [sp, 0x30]\n"
- "\tstr r0, [sp, 0x10]\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tadd r2, sp, 0x14\n"
- "\tbl DecompressAndRenderGlyph\n"
- "\tldr r1, [sp, 0x24]\n"
- "\tldr r0, _0813C398 @ =gGlyphInfo\n"
- "\tadds r0, 0x80\n"
- "\tldrb r0, [r0]\n"
- "_0813C38E:\n"
- "\tadds r0, r7, r0\n"
- "_0813C390:\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tb _0813C0AC_masterLoop\n"
- "\t.align 2, 0\n"
- "_0813C398: .4byte gGlyphInfo\n"
- "_0813C39C:\n"
- "\tadd sp, 0x38\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");
+ if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gHelpSystemState.topic == TOPIC_TERMS)
+ return TRUE;
+ return FALSE;
}
-#endif //NONMATCHING
-void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height)
+static bool8 IsHelpSystemSubmenuEnabled(u8 id)
{
- if (font == 0)
- DecompressGlyphFont0(glyph, FALSE);
- else if (font == 5)
- DecompressGlyphFont5(glyph, FALSE);
- else
- DecompressGlyphFont2(glyph, FALSE);
- srcBlit->pixels = gGlyphInfo;
- srcBlit->width = 16;
- srcBlit->height = 16;
- destBlit->pixels = destBuffer;
- destBlit->width = width * 8;
- destBlit->height = height * 8;
- BlitBitmapRect4Bit(srcBlit, destBlit, 0, 0, x, y, gGlyphInfo[0x80], gGlyphInfo[0x81], 0);
+ u8 i = 0;
+
+ if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO)
+ {
+ switch (id)
+ {
+ case HELP_PLAYING_FOR_FIRST_TIME:
+ case HELP_WHAT_SHOULD_I_BE_DOING:
+ case HELP_CANT_GET_OUT_OF_ROOM:
+ case HELP_TALKED_TO_EVERYONE_NOW_WHAT:
+ case HELP_OUT_OF_THINGS_TO_DO:
+ case HELP_NOTHING_I_WANT_TO_KNOW:
+ case HELP_WHATS_A_MON:
+ case HELP_WHAT_DO_I_DO_IN_SAFARI:
+ case HELP_WHAT_ARE_SAFARI_RULES:
+ case HELP_WANT_TO_END_SAFARI:
+ return TRUE;
+ case HELP_CANT_FIND_PERSON_I_WANT:
+ return FlagGet(FLAG_VISITED_OAKS_LAB);
+ case HELP_SOMEONE_BLOCKING_MY_WAY:
+ case HELP_WHAT_ARE_MY_ADVENTURE_BASICS:
+ case HELP_HOW_DO_I_PREPARE_FOR_BATTLE:
+ case HELP_WHAT_IS_STATUS_PROBLEM:
+ case HELP_RAN_OUT_OF_POTIONS:
+ case HELP_WHATS_POKEMON_CENTER:
+ case HELP_WHATS_POKEMON_MART:
+ return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_CITY);
+ case HELP_I_CANT_GO_ON:
+ return FlagGet(FLAG_WORLD_MAP_VERMILION_CITY);
+ case HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT:
+ case HELP_WHATS_A_TRAINER:
+ return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST);
+ case HELP_WHAT_HAPPENED_TO_ITEM_I_GOT:
+ case HELP_WHEN_CAN_I_USE_ITEM:
+ case HELP_HOW_DO_I_PROGRESS:
+ case HELP_WHATS_A_BATTLE:
+ case HELP_WHAT_IS_A_MONS_VITALITY:
+ case HELP_MY_MONS_ARE_HURT:
+ case HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT:
+ case HELP_WHERE_DO_MONS_APPEAR:
+ case HELP_WHAT_MOVES_SHOULD_I_USE:
+ case HELP_WANT_TO_MAKE_MON_STRONGER:
+ case HELP_WANT_TO_END_GAME:
+ return FlagGet(FLAG_SYS_POKEMON_GET);
+ case HELP_CANT_CATCH_MONS:
+ case HELP_CAN_I_BUY_POKEBALLS:
+ return FlagGet(FLAG_SYS_POKEDEX_GET);
+ case HELP_HOW_ARE_CAVES_DIFFERENT:
+ case HELP_WHAT_DO_I_DO_IN_CAVE:
+ case HELP_HOW_DO_I_WIN_AGAINST_TRAINER:
+ case HELP_FOE_MONS_TOO_STRONG:
+ case HELP_WHAT_ARE_MOVES:
+ case HELP_WANT_TO_ADD_MORE_MOVES:
+ return FlagGet(FLAG_BADGE01_GET);
+ case HELP_WHAT_ARE_HIDDEN_MOVES:
+ case HELP_WHAT_DOES_HIDDEN_MOVE_DO:
+ return HasGottenAtLeastOneHM();
+ case HELP_WHAT_IS_THAT_PERSON_LIKE:
+ return FlagGet(FLAG_GOT_FAME_CHECKER);
+ case HELP_WHAT_IS_A_GYM:
+ return FlagGet(FLAG_WORLD_MAP_PEWTER_CITY);
+ }
+ return FALSE;
+ }
+ if (gHelpSystemState.topic == TOPIC_HOW_TO_DO)
+ {
+ switch (id)
+ {
+ case HELP_USING_BAG:
+ case HELP_USING_PLAYER:
+ case HELP_USING_SAVE:
+ case HELP_USING_OPTION:
+ case HELP_ENTERING_NAME:
+ case HELP_USING_PC:
+ case HELP_USING_BILLS_PC:
+ case HELP_USING_WITHDRAW:
+ case HELP_USING_DEPOSIT:
+ case HELP_USING_MOVE:
+ case HELP_MOVING_ITEMS:
+ case HELP_USING_PLAYERS_PC:
+ case HELP_USING_WITHDRAW_ITEM:
+ case HELP_USING_DEPOSIT_ITEM:
+ case HELP_USING_MAILBOX:
+ case HELP_OPENING_MENU:
+ case HELP_USING_BAG2:
+ case HELP_USING_HOME_PC:
+ case HELP_USING_ITEM_STORAGE:
+ case HELP_USING_WITHDRAW_ITEM2:
+ case HELP_USING_DEPOSIT_ITEM2:
+ case HELP_USING_MAILBOX2:
+ case HELP_USING_BALL:
+ case HELP_USING_BAIT:
+ case HELP_USING_ROCK:
+ return TRUE;
+ case HELP_USING_POKEDEX:
+ case HELP_USING_PROF_OAKS_PC:
+ case HELP_READING_POKEDEX:
+ return FlagGet(FLAG_SYS_POKEDEX_GET);
+ case HELP_USING_TOWN_MAP:
+ return CheckBagHasItem(ITEM_TOWN_MAP, 1);
+ case HELP_USING_POKEMON:
+ case HELP_USING_SUMMARY:
+ case HELP_USING_ITEM:
+ case HELP_USING_AN_ITEM:
+ case HELP_USING_KEYITEM:
+ case HELP_USING_POKEBALL:
+ case HELP_USING_POTION:
+ case HELP_USING_FIGHT:
+ case HELP_USING_POKEMON2:
+ case HELP_USING_SUMMARY2:
+ case HELP_USING_RUN:
+ case HELP_REGISTER_KEY_ITEM:
+ return FlagGet(FLAG_SYS_POKEMON_GET);
+ case HELP_USING_SWITCH:
+ case HELP_USING_SHIFT:
+ // Only show if player has caught mon after starter
+ if (GetKantoPokedexCount(1) > 1)
+ return TRUE;
+ return FALSE;
+ case HELP_USING_TM:
+ return FlagGet(FLAG_BADGE01_GET);
+ case HELP_USING_HM:
+ case HELP_USING_MOVE_OUTSIDE_OF_BATTLE:
+ return HasGottenAtLeastOneHM();
+ case HELP_RIDING_BICYCLE:
+ return FlagGet(FLAG_GOT_BICYCLE);
+ case HELP_USING_HALL_OF_FAME:
+ return FlagGet(FLAG_SYS_GAME_CLEAR);
+ }
+ return FALSE;
+ }
+ if (gHelpSystemState.topic == TOPIC_TERMS)
+ {
+ if (HelpSystem_ShouldShowBasicTerms() == TRUE)
+ {
+ // After defeating Brock, all basic terms are added
+ // This checks to make sure they arent added twice
+ for (i = 0; sTerms_Basic[i] != HELP_END; i++)
+ {
+ if (sTerms_Basic[i] == id)
+ return FALSE;
+ }
+ }
+ switch (id)
+ {
+ case HELP_TERM_MONEY:
+ case HELP_TERM_ID_NO:
+ case HELP_TERM_ITEMS:
+ case HELP_TERM_KEYITEMS:
+ case HELP_TERM_POKEBALLS:
+ case HELP_TERM_POKEDEX:
+ case HELP_TERM_PLAY_TIME:
+ case HELP_TERM_BADGES:
+ case HELP_TERM_TEXT_SPEED:
+ case HELP_TERM_BATTLE_SCENE:
+ case HELP_TERM_BATTLE_STYLE:
+ case HELP_TERM_SOUND:
+ case HELP_TERM_BUTTON_MODE:
+ case HELP_TERM_FRAME:
+ case HELP_TERM_CANCEL:
+ case HELP_TERM_TM:
+ case HELP_TERM_EVOLUTION:
+ return TRUE;
+ case HELP_TERM_HP:
+ case HELP_TERM_EXP:
+ case HELP_TERM_ATTACK:
+ case HELP_TERM_DEFENSE:
+ case HELP_TERM_SPATK:
+ case HELP_TERM_SPDEF:
+ case HELP_TERM_SPEED:
+ case HELP_TERM_LEVEL:
+ case HELP_TERM_TYPE:
+ case HELP_TERM_OT:
+ case HELP_TERM_ITEM:
+ case HELP_TERM_ABILITY:
+ case HELP_TERM_NATURE:
+ case HELP_TERM_POWER:
+ case HELP_TERM_ACCURACY:
+ case HELP_TERM_FNT:
+ return FlagGet(FLAG_SYS_POKEMON_GET);
+ case HELP_TERM_HM:
+ case HELP_TERM_HM_MOVE:
+ return HasGottenAtLeastOneHM();
+ case HELP_TERM_MOVES:
+ case HELP_TERM_MOVE_TYPE:
+ case HELP_TERM_PP:
+ case HELP_TERM_STATUS_PROBLEM:
+ return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST);
+ }
+ return TRUE;
+ }
+ if (gHelpSystemState.topic == TOPIC_ABOUT_GAME)
+ {
+ switch (id)
+ {
+ case HELP_GAME_FUNDAMENTALS_2:
+ return FlagGet(FLAG_BADGE01_GET);
+ case HELP_GAME_FUNDAMENTALS_3:
+ return FlagGet(FLAG_BADGE02_GET);
+ }
+ return TRUE;
+ }
+ if (gHelpSystemState.topic == TOPIC_TYPE_MATCHUP)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
}
-void HelpSystem_PrintText_Row61(const u8 * str)
+static bool8 HasGottenAtLeastOneHM(void)
{
- GenerateFontHalfRowLookupTable(1, 15, 2);
- HelpSystemRenderText(5, gDecompressionBuffer + 0x3D00, str, 6, 2, 7, 2);
+ if (FlagGet(FLAG_GOT_HM01) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_GOT_HM02) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_GOT_HM03) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_GOT_HM04) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_GOT_HM05) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_GOT_HM06) == TRUE)
+ return TRUE;
+ if (FlagGet(FLAG_HIDE_FOUR_ISLAND_ICEFALL_CAVE_1F_HM07) == TRUE)
+ return TRUE;
+ return FALSE;
}
-void HelpSystem_PrintTextRightAlign_Row52(const u8 * str)
+bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- s32 left = 0x7C - GetStringWidth(0, str, 0);
- GenerateFontHalfRowLookupTable(1, 15, 2);
- HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2);
+ switch (helpListMenu->state)
+ {
+ case 8:
+ return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer);
+ case 9:
+ return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer);
+ case 10:
+ return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer);
+ case 0:
+ return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer);
+ case 1:
+ return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer);
+ case 2:
+ return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer);
+ case 3:
+ return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer);
+ case 4:
+ return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer);
+ case 5:
+ return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer);
+ case 6:
+ return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer);
+ }
+ return FALSE;
}
-void HelpSystem_PrintTextAt(const u8 * str, u8 x, u8 y)
+bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- GenerateFontHalfRowLookupTable(1, 15, 2);
- HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str, x, y, 26, 16);
+ PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_A_Next);
+ PrintWelcomeMessageOnPanel1();
+ HS_ShowOrHideMainWindowText(1);
+ HS_ShowOrHideControlsGuideInTopRight(1);
+ helpListMenu->state = 9;
+ return TRUE;
}
-void HelpSystem_PrintTwoStrings(const u8 * str1, const u8 * str2)
+bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- CpuFill16(0xEEEE, gDecompressionBuffer + 0x0000, 0x3400);
- GenerateFontHalfRowLookupTable(1, 14, 2);
- HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str1, 0, 0, 26, 16);
- HelpSystemRenderText(2, gDecompressionBuffer + 0x09C0, str2, 0, 0, 26, 13);
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ helpListMenu->state = 10;
+ }
+ return TRUE;
}
-void HelpSystem_PrintText_813C584(const u8 * str)
+bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- CpuFill16(0x1111, gDecompressionBuffer + 0x23C0, 0x1040);
- GenerateFontHalfRowLookupTable(2, 1, 3);
- HelpSystemRenderText(2, gDecompressionBuffer + 0x23C0, str, 2, 6, 26, 5);
+ gHelpSystemState.scrollMain = 0;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
+ return TRUE;
}
-void HelpSystem_FillPanel3(void)
+bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- CpuFill16(0xFFFF, gDecompressionBuffer + 0x3D00, 0x1C0);
+ s32 input = HelpSystem_GetMenuInput();
+ switch (input)
+ {
+ case -6:
+ case -2:
+ return FALSE;
+ case -5:
+ case -4:
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
+ break;
+ case -3:
+ case -1:
+ break;
+ default:
+ gHelpSystemState.topic = input;
+ helpListMenu->state = 1;
+ break;
+ }
+ return TRUE;
}
-void HelpSystem_FillPanel2(void)
+bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- CpuFill16(0xFFFF, gDecompressionBuffer + 0x3400, 0x400);
+ gHelpSystemState.level = 1;
+ gHelpSystemState.scrollMain = helpListMenu->cursorPos;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
+ HS_UpdateMenuScrollArrows();
+ HelpSystem_SetInputDelay(2);
+ helpListMenu->state = 3;
+ return TRUE;
}
-void HelpSystem_FillPanel1(void)
+bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- CpuFill16(0xFFFF, gDecompressionBuffer + 0x0000, 0x3400);
+ HS_ShowOrHideScrollArrows(0, 0);
+ HS_ShowOrHideScrollArrows(1, 0);
+ gHelpSystemState.level = 0;
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
+ return TRUE;
}
-void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
+bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gHelpSystemListMenu.sub = a0->sub;
- gHelpSystemListMenu.itemsAbove = a1;
- gHelpSystemListMenu.cursorPos = a2;
- gHelpSystemListMenu.state = 0;
- if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
- gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
- sub_813BDA4(0);
- HelpSystem_FillPanel1();
- PrintListMenuItems();
- PlaceListMenuCursor();
+ s32 input = HelpSystem_GetMenuInput();
+ switch (input)
+ {
+ case -6:
+ return FALSE;
+ case -2:
+ helpListMenu->state = 2;
+ break;
+ case -5:
+ case -4:
+ case -3:
+ case -1:
+ break;
+ default:
+ gHelpSystemState.scrollSub = input;
+ helpListMenu->state = 4;
+ break;
+ }
+ return TRUE;
}
-void HelpSystem_SetInputDelay(u8 a0)
+void HelpSystem_PrintTopicLabel(void)
{
- sDelayTimer = a0;
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState.topic], 0, 0);
}
-s32 HelpSystem_GetMenuInput(void)
+bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- if (sDelayTimer != 0)
- {
- sDelayTimer--;
- return -1;
- }
- else if (JOY_NEW(A_BUTTON))
- {
- PlaySE(SE_SELECT);
- return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index;
- }
- else if (JOY_NEW(B_BUTTON))
- {
- PlaySE(SE_SELECT);
- return -2;
- }
- else if (JOY_NEW(L_BUTTON | R_BUTTON))
+ gHelpSystemState.level = 2;
+ HS_ShowOrHideMainWindowText(0);
+ HelpSystem_FillPanel1();
+ PrintTextOnPanel2Row52RightAlign(gText_HelpSystemControls_AorBtoCancel);
+ HS_SetMainWindowBgBrightness(1);
+ HS_ShowOrHideHeaderAndFooterLines_Darker(1);
+
+ if (gHelpSystemState.topic == TOPIC_WHAT_TO_DO)
{
- return -6;
+ HelpSystem_PrintQuestionAndAnswerPair(sHelpSystemSpecializedQuestionTextPtrs[gHelpSystemState.scrollSub], sHelpSystemSpecializedAnswerTextPtrs[gHelpSystemState.scrollSub]);
}
- else if (JOY_REPT(DPAD_UP))
+ else if (gHelpSystemState.topic == TOPIC_HOW_TO_DO)
{
- if (!MoveCursor(1, 0))
- PlaySE(SE_SELECT);
- return -4;
+ HelpSystem_PrintQuestionAndAnswerPair(sHelpSystemMenuTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemHowToUseMenuTextPtrs[gHelpSystemState.scrollSub]);
}
- else if (JOY_REPT(DPAD_DOWN))
+ else if (gHelpSystemState.topic == TOPIC_TERMS)
{
- if (!MoveCursor(1, 1))
- PlaySE(SE_SELECT);
- return -5;
+ HelpSystem_PrintQuestionAndAnswerPair(sHelpSystemTermTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTermDefinitionsTextPtrs[gHelpSystemState.scrollSub]);
}
- else if (JOY_REPT(DPAD_LEFT))
+ else if (gHelpSystemState.topic == TOPIC_ABOUT_GAME)
{
- if (!MoveCursor(7, 0))
- PlaySE(SE_SELECT);
- return -4;
+ HelpSystem_PrintQuestionAndAnswerPair(sHelpSystemGeneralTopicTextPtrs[gHelpSystemState.scrollSub], sHelpSystemGeneralTopicDescriptionTextPtrs[gHelpSystemState.scrollSub]);
}
- else if (JOY_REPT(DPAD_RIGHT))
+ else // TOPIC_TYPE_MATCHUP
{
- if (!MoveCursor(7, 1))
- PlaySE(SE_SELECT);
- return -5;
+ HelpSystem_PrintQuestionAndAnswerPair(sHelpSystemTypeMatchupTextPtrs[gHelpSystemState.scrollSub], sHelpSystemTypeMatchupDescriptionTextPtrs[gHelpSystemState.scrollSub]);
}
- else
- return -1;
+ HS_ShowOrHideMainWindowText(1);
+ HS_ShowOrHideControlsGuideInTopRight(1);
+ helpListMenu->state = 6;
+ return TRUE;
}
-void sub_813C75C(void)
+bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- u8 r6 = gHelpSystemListMenu.sub.totalItems - 7;
- if (gHelpSystemListMenu.sub.totalItems > 7)
- {
- s32 r4 = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos;
- sub_813C004(0, 0);
- if (r4 == 0)
- sub_813C004(1, 1);
- else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0)
- sub_813C004(1, 1);
- else if (gHelpSystemListMenu.itemsAbove == r6)
- sub_813C004(0, 1);
- else if (gHelpSystemListMenu.itemsAbove != 0)
- {
- sub_813C004(0, 1);
- sub_813C004(1, 1);
- }
- }
+ gHelpSystemState.level = 1;
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
+ HS_UpdateMenuScrollArrows();
+ HelpSystem_SetInputDelay(2);
+ helpListMenu->state = 3;
+ return TRUE;
}
-void PrintListMenuItems(void)
+bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- u8 glyphHeight = GetFontAttribute(2, 1) + 1;
- s32 i;
- s32 r5 = gHelpSystemListMenu.itemsAbove;
-
- for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
+ if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
- u8 x = gHelpSystemListMenu.sub.left + 8;
- u8 y = gHelpSystemListMenu.sub.top + glyphHeight * i;
- HelpSystem_PrintTextAt(gHelpSystemListMenu.sub.items[r5].label, x, y);
- r5++;
+ PlaySE(SE_SELECT);
+ helpListMenu->state = 5;
+ return TRUE;
}
+ if (JOY_NEW(L_BUTTON | R_BUTTON))
+ return FALSE;
+ return TRUE;
}
-void PlaceListMenuCursor(void)
+static void PrintWelcomeMessageOnPanel1(void)
{
- u8 glyphHeight = GetFontAttribute(2, 1) + 1;
- u8 x = gHelpSystemListMenu.sub.left;
- u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
- HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y);
+ HelpSystem_FillPanel1();
+ HelpSystem_PrintTextAt(Help_Text_Greetings, 0, 0);
}
-void sub_813C860(u8 i)
+static void PrintTextOnPanel2Row52RightAlign(const u8 * str)
{
- u8 glyphHeight = GetFontAttribute(2, 1) + 1;
- u8 x = gHelpSystemListMenu.sub.left;
- u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight;
- HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y);
+ HelpSystem_FillPanel2();
+ HelpSystem_PrintTextRightAlign_Row52(str);
}
-u8 TryMoveCursor1(u8 dirn)
+u8 GetHelpSystemMenuLevel(void)
{
- u16 r4;
- if (dirn == 0)
- {
- if (gHelpSystemListMenu.sub.maxShowed == 1)
- r4 = 0;
- else
- r4 = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
- if (gHelpSystemListMenu.itemsAbove == 0)
- {
- if (gHelpSystemListMenu.cursorPos != 0)
- {
- gHelpSystemListMenu.cursorPos--;
- return 1;
- }
- else
- return 0;
- }
- if (gHelpSystemListMenu.cursorPos > r4)
- {
- gHelpSystemListMenu.cursorPos--;
- return 1;
- }
- else
- {
- gHelpSystemListMenu.itemsAbove--;
- return 2;
- }
- }
- else
- {
- if (gHelpSystemListMenu.sub.maxShowed == 1)
- r4 = 0;
- else
- r4 = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
- if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
- {
- if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1)
- {
- gHelpSystemListMenu.cursorPos++;
- return 1;
- }
- else
- return 0;
- }
- else if (gHelpSystemListMenu.cursorPos < r4)
- {
- gHelpSystemListMenu.cursorPos++;
- return 1;
- }
- else
- {
- gHelpSystemListMenu.itemsAbove++;
- return 2;
- }
- }
+ return gHelpSystemState.level;
}
-bool8 MoveCursor(u8 by, u8 dirn)
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu)
{
- u8 r7 = gHelpSystemListMenu.cursorPos;
- u8 flags = 0;
- s32 i;
- for (i = 0; i < by; i++)
- flags |= TryMoveCursor1(dirn);
+ helpListMenu->itemsAbove = 0;
+ helpListMenu->cursorPos = 0;
+}
- switch (flags)
- {
- case 0:
- default:
- // neither changed
- return TRUE;
- case 1:
- // changed cursorPos only
- sub_813C860(r7);
- PlaceListMenuCursor();
- CommitTilemap();
- break;
- case 2:
- case 3:
- // changed itemsAbove
- if (sub_812BF88() == TRUE)
- {
- HelpSystem_SetInputDelay(2);
- HelpSystem_FillPanel1();
- PrintListMenuItems();
- PlaceListMenuCursor();
- HelpSystem_PrintTopicLabel();
- sub_813C75C();
- }
- else
- {
- sub_813BDA4(0);
- HelpSystem_FillPanel1();
- PrintListMenuItems();
- PlaceListMenuCursor();
- sub_813BDA4(1);
- }
- CommitTilemap();
- break;
- }
- return FALSE;
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
+{
+ s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index;
+ if (index == -2)
+ HelpSystem_PrintTopicMouseoverDescription(sHelpSystemTopicMouseoverDescriptionPtrs[5]);
+ else
+ HelpSystem_PrintTopicMouseoverDescription(sHelpSystemTopicMouseoverDescriptionPtrs[index]);
+ HS_ShowOrHideToplevelTooltipWindow(1);
}
diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c
deleted file mode 100644
index d9ee16cfa..000000000
--- a/src/help_system_812B1E0.c
+++ /dev/null
@@ -1,2463 +0,0 @@
-#include "global.h"
-#include "gflib.h"
-#include "event_data.h"
-#include "event_scripts.h"
-#include "field_player_avatar.h"
-#include "help_system.h"
-#include "item.h"
-#include "link.h"
-#include "overworld.h"
-#include "pokedex.h"
-#include "quest_log.h"
-#include "save.h"
-#include "save_location.h"
-#include "strings.h"
-#include "constants/items.h"
-#include "constants/maps.h"
-#include "constants/songs.h"
-
-static EWRAM_DATA u16 sHelpSystemContextId = 0;
-static EWRAM_DATA u8 sSeenHelpSystemIntro = 0;
-
-u8 gHelpSystemState[4];
-u16 gHelpContextIdBackup;
-
-static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
-static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static bool8 HelpSystem_ShouldShowBasicTerms(void);
-static bool8 IsHelpSystemSubmenuEnabled(u8);
-static bool8 HasGottenAtLeastOneHM(void);
-
-static void PrintWelcomeMessageOnPanel1(void);
-static void PrintTextOnPanel2Row52RightAlign(const u8 *);
-static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0);
-static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-
-#define HELP_NONE 0
-#define HELP_END 0xFF
-
-// Help Main Topics
-enum
-{
- TOPIC_WHAT_TO_DO,
- TOPIC_HOW_TO_DO,
- TOPIC_TERMS,
- TOPIC_ABOUT_GAME,
- TOPIC_TYPE_MATCHUP,
- TOPIC_EXIT,
- TOPIC_COUNT
-};
-
-static const u8 *const sHelpSystemTopicPtrs[TOPIC_COUNT] = {
- [TOPIC_WHAT_TO_DO] = Help_Text_WhatShouldIDo,
- [TOPIC_HOW_TO_DO] = Help_Text_HowDoIDoThis,
- [TOPIC_TERMS] = Help_Text_WhatDoesThisTermMean,
- [TOPIC_ABOUT_GAME] = Help_Text_AboutThisGame,
- [TOPIC_TYPE_MATCHUP] = Help_Text_TypeMatchupList,
- [TOPIC_EXIT] = Help_Text_Exit
-};
-
-static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[TOPIC_COUNT] = {
- [TOPIC_WHAT_TO_DO] = Help_Text_DescWhatShouldIDo,
- [TOPIC_HOW_TO_DO] = Help_Text_DescHowDoIDoThis,
- [TOPIC_TERMS] = Help_Text_DescWhatDoesThisTermMean,
- [TOPIC_ABOUT_GAME] = Help_Text_DescAboutThisGame,
- [TOPIC_TYPE_MATCHUP] = Help_Text_DescTypeMatchupList,
- [TOPIC_EXIT] = Help_Text_DescExit
-};
-
-// Submenu IDs for TOPIC_WHAT_TO_DO
-enum
-{
- HELP_PLAYING_FOR_FIRST_TIME = 1,
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_CANT_GET_OUT_OF_ROOM,
- HELP_CANT_FIND_PERSON_I_WANT,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_I_CANT_GO_ON,
- HELP_OUT_OF_THINGS_TO_DO,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
- HELP_HOW_ARE_CAVES_DIFFERENT,
- HELP_HOW_DO_I_PROGRESS,
- HELP_WHEN_CAN_I_USE_ITEM,
- HELP_WHATS_A_BATTLE,
- HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_MY_MONS_ARE_HURT,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_CANT_CATCH_MONS,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_CAN_I_BUY_POKEBALLS,
- HELP_WHATS_A_TRAINER,
- HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
- HELP_WHERE_DO_MONS_APPEAR,
- HELP_WHAT_ARE_MOVES,
- HELP_WHAT_ARE_HIDDEN_MOVES,
- HELP_WHAT_MOVES_SHOULD_I_USE,
- HELP_WANT_TO_ADD_MORE_MOVES,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_WHAT_DO_I_DO_IN_CAVE,
- HELP_NOTHING_I_WANT_TO_KNOW,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WANT_TO_END_GAME,
- HELP_WHATS_A_MON,
- HELP_WHAT_IS_THAT_PERSON_LIKE,
- HELP_WHAT_DOES_HIDDEN_MOVE_DO,
- HELP_WHAT_DO_I_DO_IN_SAFARI,
- HELP_WHAT_ARE_SAFARI_RULES,
- HELP_WANT_TO_END_SAFARI,
- HELP_WHAT_IS_A_GYM,
-};
-
-static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_PlayingForFirstTime,
- [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_WhatShouldIBeDoing,
- [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_CantGetOutOfRoom,
- [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_CantFindPersonIWant,
- [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_TalkedToEveryoneNowWhat,
- [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_SomeoneBlockingMyWay,
- [HELP_I_CANT_GO_ON] = Help_Text_ICantGoOn,
- [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_OutOfThingsToDo,
- [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_WhatHappenedToItemIGot,
- [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_WhatAreMyAdventureBasics,
- [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_HowAreRoadsForestsDifferent,
- [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_HowAreCavesDifferent,
- [HELP_HOW_DO_I_PROGRESS] = Help_Text_HowDoIProgress,
- [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_WhenCanIUseItem,
- [HELP_WHATS_A_BATTLE] = Help_Text_WhatsABattle,
- [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_HowDoIPrepareForBattle,
- [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_WhatIsAMonsVitality,
- [HELP_MY_MONS_ARE_HURT] = Help_Text_MyMonsAreHurt,
- [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_WhatIsStatusProblem,
- [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_WhatHappensIfAllMyMonsFaint,
- [HELP_CANT_CATCH_MONS] = Help_Text_CantCatchMons,
- [HELP_RAN_OUT_OF_POTIONS] = Help_Text_RanOutOfPotions,
- [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_CanIBuyPokeBalls,
- [HELP_WHATS_A_TRAINER] = Help_Text_WhatsATrainer,
- [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_HowDoIWinAgainstTrainer,
- [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_WhereDoMonsAppear,
- [HELP_WHAT_ARE_MOVES] = Help_Text_WhatAreMoves,
- [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_WhatAreHiddenMoves,
- [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_WhatMovesShouldIUse,
- [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_WantToAddMoreMoves,
- [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_WantToMakeMonStronger,
- [HELP_FOE_MONS_TOO_STRONG] = Help_Text_FoeMonsTooStrong,
- [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_WhatDoIDoInCave,
- [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_NothingIWantToKnow,
- [HELP_WHATS_POKEMON_CENTER] = Help_Text_WhatsPokemonCenter,
- [HELP_WHATS_POKEMON_MART] = Help_Text_WhatsPokemonMart,
- [HELP_WANT_TO_END_GAME] = Help_Text_WantToEndGame,
- [HELP_WHATS_A_MON] = Help_Text_WhatsAMon,
- [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_WhatIsThatPersonLike,
- [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_WhatDoesHiddenMoveDo,
- [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_WhatDoIDoInSafari,
- [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_WhatAreSafariRules,
- [HELP_WANT_TO_END_SAFARI] = Help_Text_WantToEndSafari,
- [HELP_WHAT_IS_A_GYM] = Help_Text_WhatIsAGym
-};
-
-static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_PLAYING_FOR_FIRST_TIME] = Help_Text_AnswerPlayingForFirstTime,
- [HELP_WHAT_SHOULD_I_BE_DOING] = Help_Text_AnswerWhatShouldIBeDoing,
- [HELP_CANT_GET_OUT_OF_ROOM] = Help_Text_AnswerCantGetOutOfRoom,
- [HELP_CANT_FIND_PERSON_I_WANT] = Help_Text_AnswerCantFindPersonIWant,
- [HELP_TALKED_TO_EVERYONE_NOW_WHAT] = Help_Text_AnswerTalkedToEveryoneNowWhat,
- [HELP_SOMEONE_BLOCKING_MY_WAY] = Help_Text_AnswerSomeoneBlockingMyWay,
- [HELP_I_CANT_GO_ON] = Help_Text_AnswerICantGoOn,
- [HELP_OUT_OF_THINGS_TO_DO] = Help_Text_AnswerOutOfThingsToDo,
- [HELP_WHAT_HAPPENED_TO_ITEM_I_GOT] = Help_Text_AnswerWhatHappenedToItemIGot,
- [HELP_WHAT_ARE_MY_ADVENTURE_BASICS] = Help_Text_AnswerWhatAreMyAdventureBasics,
- [HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT] = Help_Text_AnswerHowAreRoadsForestsDifferent,
- [HELP_HOW_ARE_CAVES_DIFFERENT] = Help_Text_AnswerHowAreCavesDifferent,
- [HELP_HOW_DO_I_PROGRESS] = Help_Text_AnswerHowDoIProgress,
- [HELP_WHEN_CAN_I_USE_ITEM] = Help_Text_AnswerWhenCanIUseItem,
- [HELP_WHATS_A_BATTLE] = Help_Text_AnswerWhatsABattle,
- [HELP_HOW_DO_I_PREPARE_FOR_BATTLE] = Help_Text_AnswerHowDoIPrepareForBattle,
- [HELP_WHAT_IS_A_MONS_VITALITY] = Help_Text_AnswerWhatIsAMonsVitality,
- [HELP_MY_MONS_ARE_HURT] = Help_Text_AnswerMyMonsAreHurt,
- [HELP_WHAT_IS_STATUS_PROBLEM] = Help_Text_AnswerWhatIsStatusProblem,
- [HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT] = Help_Text_AnswerWhatHappensIfAllMyMonsFaint,
- [HELP_CANT_CATCH_MONS] = Help_Text_AnswerCantCatchMons,
- [HELP_RAN_OUT_OF_POTIONS] = Help_Text_AnswerRanOutOfPotions,
- [HELP_CAN_I_BUY_POKEBALLS] = Help_Text_AnswerCanIBuyPokeBalls,
- [HELP_WHATS_A_TRAINER] = Help_Text_AnswerWhatsATrainer,
- [HELP_HOW_DO_I_WIN_AGAINST_TRAINER] = Help_Text_AnswerHowDoIWinAgainstTrainer,
- [HELP_WHERE_DO_MONS_APPEAR] = Help_Text_AnswerWhereDoMonsAppear,
- [HELP_WHAT_ARE_MOVES] = Help_Text_AnswerWhatAreMoves,
- [HELP_WHAT_ARE_HIDDEN_MOVES] = Help_Text_AnswerWhatAreHiddenMoves,
- [HELP_WHAT_MOVES_SHOULD_I_USE] = Help_Text_AnswerWhatMovesShouldIUse,
- [HELP_WANT_TO_ADD_MORE_MOVES] = Help_Text_AnswerWantToAddMoreMoves,
- [HELP_WANT_TO_MAKE_MON_STRONGER] = Help_Text_AnswerWantToMakeMonStronger,
- [HELP_FOE_MONS_TOO_STRONG] = Help_Text_AnswerFoeMonsTooStrong,
- [HELP_WHAT_DO_I_DO_IN_CAVE] = Help_Text_AnswerWhatDoIDoInCave,
- [HELP_NOTHING_I_WANT_TO_KNOW] = Help_Text_AnswerNothingIWantToKnow,
- [HELP_WHATS_POKEMON_CENTER] = Help_Text_AnswerWhatsPokemonCenter,
- [HELP_WHATS_POKEMON_MART] = Help_Text_AnswerWhatsPokemonMart,
- [HELP_WANT_TO_END_GAME] = Help_Text_AnswerWantToEndGame,
- [HELP_WHATS_A_MON] = Help_Text_AnswerWhatsAMon,
- [HELP_WHAT_IS_THAT_PERSON_LIKE] = Help_Text_AnswerWhatIsThatPersonLike,
- [HELP_WHAT_DOES_HIDDEN_MOVE_DO] = Help_Text_AnswerWhatDoesHiddenMoveDo,
- [HELP_WHAT_DO_I_DO_IN_SAFARI] = Help_Text_AnswerWhatDoIDoInSafari,
- [HELP_WHAT_ARE_SAFARI_RULES] = Help_Text_AnswerWhatAreSafariRules,
- [HELP_WANT_TO_END_SAFARI] = Help_Text_AnswerWantToEndSafari,
- [HELP_WHAT_IS_A_GYM] = Help_Text_AnswerWhatIsAGym
-};
-
-// Submenu IDs for TOPIC_HOW_TO_DO
-enum
-{
- HELP_USING_POKEDEX = 1,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_USING_POKEBALL,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_RIDING_BICYCLE,
- HELP_ENTERING_NAME,
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_OPENING_MENU,
- HELP_USING_FIGHT,
- HELP_USING_POKEMON2,
- HELP_USING_SHIFT,
- HELP_USING_SUMMARY2,
- HELP_USING_BAG2,
- HELP_READING_POKEDEX,
- HELP_USING_HOME_PC,
- HELP_USING_ITEM_STORAGE,
- HELP_USING_WITHDRAW_ITEM2,
- HELP_USING_DEPOSIT_ITEM2,
- HELP_USING_MAILBOX2,
- HELP_USING_RUN,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_BALL,
- HELP_USING_BAIT,
- HELP_USING_ROCK,
- HELP_USING_HALL_OF_FAME,
-};
-
-static const u8 *const sHelpSystemMenuTopicTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_USING_POKEDEX] = Help_Text_UsingPokedex,
- [HELP_USING_POKEMON] = Help_Text_UsingPokemon,
- [HELP_USING_SUMMARY] = Help_Text_UsingSummary,
- [HELP_USING_SWITCH] = Help_Text_UsingSwitch,
- [HELP_USING_ITEM] = Help_Text_UsingItem,
- [HELP_USING_BAG] = Help_Text_UsingBag,
- [HELP_USING_AN_ITEM] = Help_Text_UsingAnItem,
- [HELP_USING_KEYITEM] = Help_Text_UsingKeyItem,
- [HELP_USING_POKEBALL] = Help_Text_UsingPokeBall,
- [HELP_USING_PLAYER] = Help_Text_UsingPlayer,
- [HELP_USING_SAVE] = Help_Text_UsingSave,
- [HELP_USING_OPTION] = Help_Text_UsingOption,
- [HELP_USING_POTION] = Help_Text_UsingPotion,
- [HELP_USING_TOWN_MAP] = Help_Text_UsingTownMap,
- [HELP_USING_TM] = Help_Text_UsingTM,
- [HELP_USING_HM] = Help_Text_UsingHM,
- [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_UsingMoveOutsideOfBattle,
- [HELP_RIDING_BICYCLE] = Help_Text_RidingBicycle,
- [HELP_ENTERING_NAME] = Help_Text_EnteringName,
- [HELP_USING_PC] = Help_Text_UsingPC,
- [HELP_USING_BILLS_PC] = Help_Text_UsingBillsPC,
- [HELP_USING_WITHDRAW] = Help_Text_UsingWithdraw,
- [HELP_USING_DEPOSIT] = Help_Text_UsingDeposit,
- [HELP_USING_MOVE] = Help_Text_UsingMove,
- [HELP_MOVING_ITEMS] = Help_Text_MovingItems,
- [HELP_USING_PLAYERS_PC] = Help_Text_UsingPlayersPC,
- [HELP_USING_WITHDRAW_ITEM] = Help_Text_UsingWithdrawItem,
- [HELP_USING_DEPOSIT_ITEM] = Help_Text_UsingDepositItem,
- [HELP_USING_MAILBOX] = Help_Text_UsingMailbox,
- [HELP_USING_PROF_OAKS_PC] = Help_Text_UsingProfOaksPC,
- [HELP_OPENING_MENU] = Help_Text_OpeningMenu,
- [HELP_USING_FIGHT] = Help_Text_UsingFight,
- [HELP_USING_POKEMON2] = Help_Text_UsingPokemon2,
- [HELP_USING_SHIFT] = Help_Text_UsingShift,
- [HELP_USING_SUMMARY2] = Help_Text_UsingSummary2,
- [HELP_USING_BAG2] = Help_Text_UsingBag2,
- [HELP_READING_POKEDEX] = Help_Text_ReadingPokedex,
- [HELP_USING_HOME_PC] = Help_Text_UsingHomePC,
- [HELP_USING_ITEM_STORAGE] = Help_Text_UsingItemStorage,
- [HELP_USING_WITHDRAW_ITEM2] = Help_Text_UsingWithdrawItem2,
- [HELP_USING_DEPOSIT_ITEM2] = Help_Text_UsingDepositItem2,
- [HELP_USING_MAILBOX2] = Help_Text_UsingMailbox2,
- [HELP_USING_RUN] = Help_Text_UsingRun,
- [HELP_REGISTER_KEY_ITEM] = Help_Text_RegisterKeyItem,
- [HELP_USING_BALL] = Help_Text_UsingBall,
- [HELP_USING_BAIT] = Help_Text_UsingBait,
- [HELP_USING_ROCK] = Help_Text_UsingRock,
- [HELP_USING_HALL_OF_FAME] = Help_Text_UsingHallOfFame
-};
-
-static const u8 *const sHelpSystemHowToUseMenuTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_USING_POKEDEX] = Help_Text_HowToUsePokedex,
- [HELP_USING_POKEMON] = Help_Text_HowToUsePokemon,
- [HELP_USING_SUMMARY] = Help_Text_HowToUseSummary,
- [HELP_USING_SWITCH] = Help_Text_HowToUseSwitch,
- [HELP_USING_ITEM] = Help_Text_HowToUseItem,
- [HELP_USING_BAG] = Help_Text_HowToUseBag,
- [HELP_USING_AN_ITEM] = Help_Text_HowToUseAnItem,
- [HELP_USING_KEYITEM] = Help_Text_HowToUseKeyItem,
- [HELP_USING_POKEBALL] = Help_Text_HowToUsePokeBall,
- [HELP_USING_PLAYER] = Help_Text_HowToUsePlayer,
- [HELP_USING_SAVE] = Help_Text_HowToUseSave,
- [HELP_USING_OPTION] = Help_Text_HowToUseOption,
- [HELP_USING_POTION] = Help_Text_HowToUsePotion,
- [HELP_USING_TOWN_MAP] = Help_Text_HowToUseTownMap,
- [HELP_USING_TM] = Help_Text_HowToUseTM,
- [HELP_USING_HM] = Help_Text_HowToUseHM,
- [HELP_USING_MOVE_OUTSIDE_OF_BATTLE] = Help_Text_HowToUseMoveOutsideOfBattle,
- [HELP_RIDING_BICYCLE] = Help_Text_HowToRideBicycle,
- [HELP_ENTERING_NAME] = Help_Text_HowToEnterName,
- [HELP_USING_PC] = Help_Text_HowToUsePC,
- [HELP_USING_BILLS_PC] = Help_Text_HowToUseBillsPC,
- [HELP_USING_WITHDRAW] = Help_Text_HowToUseWithdraw,
- [HELP_USING_DEPOSIT] = Help_Text_HowToUseDeposit,
- [HELP_USING_MOVE] = Help_Text_HowToUseMove,
- [HELP_MOVING_ITEMS] = Help_Text_HowToMoveItems,
- [HELP_USING_PLAYERS_PC] = Help_Text_HowToUsePlayersPC,
- [HELP_USING_WITHDRAW_ITEM] = Help_Text_HowToUseWithdrawItem,
- [HELP_USING_DEPOSIT_ITEM] = Help_Text_HowToUseDepositItem,
- [HELP_USING_MAILBOX] = Help_Text_HowToUseMailbox,
- [HELP_USING_PROF_OAKS_PC] = Help_Text_HowToUseProfOaksPC,
- [HELP_OPENING_MENU] = Help_Text_HowToOpenMenu,
- [HELP_USING_FIGHT] = Help_Text_HowToUseFight,
- [HELP_USING_POKEMON2] = Help_Text_HowToUsePokemon2,
- [HELP_USING_SHIFT] = Help_Text_HowToUseShift,
- [HELP_USING_SUMMARY2] = Help_Text_HowToUseSummary2,
- [HELP_USING_BAG2] = Help_Text_HowToUseBag2,
- [HELP_READING_POKEDEX] = Help_Text_HowToReadPokedex,
- [HELP_USING_HOME_PC] = Help_Text_HowToUseHomePC,
- [HELP_USING_ITEM_STORAGE] = Help_Text_HowToUseItemStorage,
- [HELP_USING_WITHDRAW_ITEM2] = Help_Text_HowToUseWithdrawItem2,
- [HELP_USING_DEPOSIT_ITEM2] = Help_Text_HowToUseDepositItem2,
- [HELP_USING_MAILBOX2] = Help_Text_HowToUseMailbox2,
- [HELP_USING_RUN] = Help_Text_HowToUseRun,
- [HELP_REGISTER_KEY_ITEM] = Help_Text_HowToRegisterKeyItem,
- [HELP_USING_BALL] = Help_Text_HowToUseBall,
- [HELP_USING_BAIT] = Help_Text_HowToUseBait,
- [HELP_USING_ROCK] = Help_Text_HowToUseRock,
- [HELP_USING_HALL_OF_FAME] = Help_Text_HowToUseHallOfFame
-};
-
-// Submenu IDs for TOPIC_TERMS
-enum
-{
- HELP_TERM_HP = 1,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_LEVEL,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_MONEY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_NATURE,
- HELP_TERM_ID_NO,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_TERM_FNT,
- HELP_TERM_ITEMS,
- HELP_TERM_KEYITEMS,
- HELP_TERM_POKEBALLS,
- HELP_TERM_POKEDEX,
- HELP_TERM_PLAY_TIME,
- HELP_TERM_BADGES,
- HELP_TERM_TEXT_SPEED,
- HELP_TERM_BATTLE_SCENE,
- HELP_TERM_BATTLE_STYLE,
- HELP_TERM_SOUND,
- HELP_TERM_BUTTON_MODE,
- HELP_TERM_FRAME,
- HELP_TERM_CANCEL,
- HELP_TERM_TM,
- HELP_TERM_HM,
- HELP_TERM_HM_MOVE,
- HELP_TERM_EVOLUTION,
- HELP_TERM_STATUS_PROBLEM,
- HELP_TERM_POKEMON,
- HELP_TERM_ID_NO2,
- HELP_TERM_MONEY2,
- HELP_TERM_BADGES2,
-};
-
-static const u8 *const sHelpSystemTermTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_TERM_HP] = Help_Text_HP,
- [HELP_TERM_EXP] = Help_Text_EXP,
- [HELP_TERM_MOVES] = Help_Text_Moves,
- [HELP_TERM_ATTACK] = Help_Text_Attack,
- [HELP_TERM_DEFENSE] = Help_Text_Defense,
- [HELP_TERM_SPATK] = Help_Text_SpAtk,
- [HELP_TERM_SPDEF] = Help_Text_SpDef,
- [HELP_TERM_SPEED] = Help_Text_Speed,
- [HELP_TERM_LEVEL] = Help_Text_Level,
- [HELP_TERM_TYPE] = Help_Text_Type,
- [HELP_TERM_OT] = Help_Text_OT,
- [HELP_TERM_ITEM] = Help_Text_Item,
- [HELP_TERM_ABILITY] = Help_Text_Ability,
- [HELP_TERM_MONEY] = Help_Text_Money,
- [HELP_TERM_MOVE_TYPE] = Help_Text_MoveType,
- [HELP_TERM_NATURE] = Help_Text_Nature,
- [HELP_TERM_ID_NO] = Help_Text_IDNo,
- [HELP_TERM_PP] = Help_Text_PP,
- [HELP_TERM_POWER] = Help_Text_Power,
- [HELP_TERM_ACCURACY] = Help_Text_Accuracy,
- [HELP_TERM_FNT] = Help_Text_FNT,
- [HELP_TERM_ITEMS] = Help_Text_Items,
- [HELP_TERM_KEYITEMS] = Help_Text_KeyItems,
- [HELP_TERM_POKEBALLS] = Help_Text_PokeBalls,
- [HELP_TERM_POKEDEX] = Help_Text_Pokedex,
- [HELP_TERM_PLAY_TIME] = Help_Text_PlayTime,
- [HELP_TERM_BADGES] = Help_Text_Badges,
- [HELP_TERM_TEXT_SPEED] = Help_Text_TextSpeed,
- [HELP_TERM_BATTLE_SCENE] = Help_Text_BattleScene,
- [HELP_TERM_BATTLE_STYLE] = Help_Text_BattleStyle,
- [HELP_TERM_SOUND] = Help_Text_Sound,
- [HELP_TERM_BUTTON_MODE] = Help_Text_ButtonMode,
- [HELP_TERM_FRAME] = Help_Text_Frame,
- [HELP_TERM_CANCEL] = Help_Text_Cancel2,
- [HELP_TERM_TM] = Help_Text_TM,
- [HELP_TERM_HM] = Help_Text_HM,
- [HELP_TERM_HM_MOVE] = Help_Text_HMMove,
- [HELP_TERM_EVOLUTION] = Help_Text_Evolution,
- [HELP_TERM_STATUS_PROBLEM] = Help_Text_StatusProblem,
- [HELP_TERM_POKEMON] = Help_Text_Pokemon,
- [HELP_TERM_ID_NO2] = Help_Text_IDNo2,
- [HELP_TERM_MONEY2] = Help_Text_Money2,
- [HELP_TERM_BADGES2] = Help_Text_Badges2
-};
-
-static const u8 *const sHelpSystemTermDefinitionsTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_TERM_HP] = Help_Text_DefineHP,
- [HELP_TERM_EXP] = Help_Text_DefineEXP,
- [HELP_TERM_MOVES] = Help_Text_DefineMoves,
- [HELP_TERM_ATTACK] = Help_Text_DefineAttack,
- [HELP_TERM_DEFENSE] = Help_Text_DefineDefense,
- [HELP_TERM_SPATK] = Help_Text_DefineSpAtk,
- [HELP_TERM_SPDEF] = Help_Text_DefineSpDef,
- [HELP_TERM_SPEED] = Help_Text_DefineSpeed,
- [HELP_TERM_LEVEL] = Help_Text_DefineLevel,
- [HELP_TERM_TYPE] = Help_Text_DefineType,
- [HELP_TERM_OT] = Help_Text_DefineOT,
- [HELP_TERM_ITEM] = Help_Text_DefineItem,
- [HELP_TERM_ABILITY] = Help_Text_DefineAbility,
- [HELP_TERM_MONEY] = Help_Text_DefineMoney,
- [HELP_TERM_MOVE_TYPE] = Help_Text_DefineMoveType,
- [HELP_TERM_NATURE] = Help_Text_DefineNature,
- [HELP_TERM_ID_NO] = Help_Text_DefineIDNo,
- [HELP_TERM_PP] = Help_Text_DefinePP,
- [HELP_TERM_POWER] = Help_Text_DefinePower,
- [HELP_TERM_ACCURACY] = Help_Text_DefineAccuracy,
- [HELP_TERM_FNT] = Help_Text_DefineFNT,
- [HELP_TERM_ITEMS] = Help_Text_DefineItems,
- [HELP_TERM_KEYITEMS] = Help_Text_DefineKeyItems,
- [HELP_TERM_POKEBALLS] = Help_Text_DefinePokeBalls,
- [HELP_TERM_POKEDEX] = Help_Text_DefinePokedex,
- [HELP_TERM_PLAY_TIME] = Help_Text_DefinePlayTime,
- [HELP_TERM_BADGES] = Help_Text_DefineBadges,
- [HELP_TERM_TEXT_SPEED] = Help_Text_DefineTextSpeed,
- [HELP_TERM_BATTLE_SCENE] = Help_Text_DefineBattleScene,
- [HELP_TERM_BATTLE_STYLE] = Help_Text_DefineBattleStyle,
- [HELP_TERM_SOUND] = Help_Text_DefineSound,
- [HELP_TERM_BUTTON_MODE] = Help_Text_DefineButtonMode,
- [HELP_TERM_FRAME] = Help_Text_DefineFrame,
- [HELP_TERM_CANCEL] = Help_Text_DefineCancel2,
- [HELP_TERM_TM] = Help_Text_DefineTM,
- [HELP_TERM_HM] = Help_Text_DefineHM,
- [HELP_TERM_HM_MOVE] = Help_Text_DefineHMMove,
- [HELP_TERM_EVOLUTION] = Help_Text_DefineEvolution,
- [HELP_TERM_STATUS_PROBLEM] = Help_Text_DefineStatusProblem,
- [HELP_TERM_POKEMON] = Help_Text_DefinePokemon,
- [HELP_TERM_ID_NO2] = Help_Text_DefineIDNo2,
- [HELP_TERM_MONEY2] = Help_Text_DefineMoney2,
- [HELP_TERM_BADGES2] = Help_Text_DefineBadges2
-};
-
-// Submenu IDs for TOPIC_ABOUT_GAME
-enum
-{
- HELP_THE_HELP_SYSTEM = 1,
- HELP_THE_GAME,
- HELP_WIRELESS_ADAPTER,
- HELP_GAME_FUNDAMENTALS_1,
- HELP_GAME_FUNDAMENTALS_2,
- HELP_GAME_FUNDAMENTALS_3,
- HELP_WHAT_ARE_POKEMON,
-};
-
-static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_THE_HELP_SYSTEM] = Help_Text_TheHelpSystem,
- [HELP_THE_GAME] = Help_Text_TheGame,
- [HELP_WIRELESS_ADAPTER] = Help_Text_WirelessAdapter,
- [HELP_GAME_FUNDAMENTALS_1] = Help_Text_GameFundamentals1,
- [HELP_GAME_FUNDAMENTALS_2] = Help_Text_GameFundamentals2,
- [HELP_GAME_FUNDAMENTALS_3] = Help_Text_GameFundamentals3,
- [HELP_WHAT_ARE_POKEMON] = Help_Text_WhatArePokemon
-};
-
-static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = {
- [HELP_NONE] = NULL,
- [HELP_THE_HELP_SYSTEM] = Help_Text_DescTheHelpSystem,
- [HELP_THE_GAME] = Help_Text_DescTheGame,
- [HELP_WIRELESS_ADAPTER] = Help_Text_DescWirelessAdapter,
- [HELP_GAME_FUNDAMENTALS_1] = Help_Text_DescGameFundamentals1,
- [HELP_GAME_FUNDAMENTALS_2] = Help_Text_DescGameFundamentals2,
- [HELP_GAME_FUNDAMENTALS_3] = Help_Text_DescGameFundamentals3,
- [HELP_WHAT_ARE_POKEMON] = Help_Text_DescWhatArePokemon
-};
-
-// An enum for the type matchups isn't necessary, when used they're always used in their entirety
-// Macro below is used to reference the entire group at once
-#define HELP_TYPE_MATCHUPS \
- 1, \
- 2, 3, \
- 4, 5, \
- 6, 7, \
- 8, 9, \
- 10, 11, \
- 12, 13, \
- 14, 15, \
- 16, 17, \
- 18, 19, \
- 20, 21, \
- 22, 23, \
- 24, 25, \
- 26, 27, \
- 28, 29, \
- 30, 31, \
- 32, 33, \
- 34, 35 \
-
-static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = {
- [HELP_NONE] = NULL,
- [1] = Help_Text_UsingTypeMatchupList,
- [2] = Help_Text_OwnMoveDark,
- [3] = Help_Text_OwnPokemonDark,
- [4] = Help_Text_OwnMoveRock,
- [5] = Help_Text_OwnPokemonRock,
- [6] = Help_Text_OwnMovePsychic,
- [7] = Help_Text_OwnPokemonPsychic,
- [8] = Help_Text_OwnMoveFighting,
- [9] = Help_Text_OwnPokemonFighting,
- [10] = Help_Text_OwnMoveGrass,
- [11] = Help_Text_OwnPokemonGrass,
- [12] = Help_Text_OwnMoveGhost,
- [13] = Help_Text_OwnPokemonGhost,
- [14] = Help_Text_OwnMoveIce,
- [15] = Help_Text_OwnPokemonIce,
- [16] = Help_Text_OwnMoveGround,
- [17] = Help_Text_OwnPokemonGround,
- [18] = Help_Text_OwnMoveElectric,
- [19] = Help_Text_OwnPokemonElectric,
- [20] = Help_Text_OwnMovePoison,
- [21] = Help_Text_OwnPokemonPoison,
- [22] = Help_Text_OwnMoveDragon,
- [23] = Help_Text_OwnPokemonDragon,
- [24] = Help_Text_OwnMoveNormal,
- [25] = Help_Text_OwnPokemonNormal,
- [26] = Help_Text_OwnMoveSteel,
- [27] = Help_Text_OwnPokemonSteel,
- [28] = Help_Text_OwnMoveFlying,
- [29] = Help_Text_OwnPokemonFlying,
- [30] = Help_Text_OwnMoveFire,
- [31] = Help_Text_OwnPokemonFire,
- [32] = Help_Text_OwnMoveWater,
- [33] = Help_Text_OwnPokemonWater,
- [34] = Help_Text_OwnMoveBug,
- [35] = Help_Text_OwnPokemonBug
-};
-
-static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = {
- [HELP_NONE] = NULL,
- [1] = Help_Text_HowToUseTypeMatchupList,
- [2] = Help_Text_TypeMatchupOwnMoveDark,
- [3] = Help_Text_TypeMatchupOwnPokemonDark,
- [4] = Help_Text_TypeMatchupOwnMoveRock,
- [5] = Help_Text_TypeMatchupOwnPokemonRock,
- [6] = Help_Text_TypeMatchupOwnMovePsychic,
- [7] = Help_Text_TypeMatchupOwnPokemonPsychic,
- [8] = Help_Text_TypeMatchupOwnMoveFighting,
- [9] = Help_Text_TypeMatchupOwnPokemonFighting,
- [10] = Help_Text_TypeMatchupOwnMoveGrass,
- [11] = Help_Text_TypeMatchupOwnPokemonGrass,
- [12] = Help_Text_TypeMatchupOwnMoveGhost,
- [13] = Help_Text_TypeMatchupOwnPokemonGhost,
- [14] = Help_Text_TypeMatchupOwnMoveIce,
- [15] = Help_Text_TypeMatchupOwnPokemonIce,
- [16] = Help_Text_TypeMatchupOwnMoveGround,
- [17] = Help_Text_TypeMatchupOwnPokemonGround,
- [18] = Help_Text_TypeMatchupOwnMoveElectric,
- [19] = Help_Text_TypeMatchupOwnPokemonElectric,
- [20] = Help_Text_TypeMatchupOwnMovePoison,
- [21] = Help_Text_TypeMatchupOwnPokemonPoison,
- [22] = Help_Text_TypeMatchupOwnMoveDragon,
- [23] = Help_Text_TypeMatchupOwnPokemonDragon,
- [24] = Help_Text_TypeMatchupOwnMoveNormal,
- [25] = Help_Text_TypeMatchupOwnPokemonNormal,
- [26] = Help_Text_TypeMatchupOwnMoveSteel,
- [27] = Help_Text_TypeMatchupOwnPokemonSteel,
- [28] = Help_Text_TypeMatchupOwnMoveFlying,
- [29] = Help_Text_TypeMatchupOwnPokemonFlying,
- [30] = Help_Text_TypeMatchupOwnMoveFire,
- [31] = Help_Text_TypeMatchupOwnPokemonFire,
- [32] = Help_Text_TypeMatchupOwnMoveWater,
- [33] = Help_Text_TypeMatchupOwnPokemonWater,
- [34] = Help_Text_TypeMatchupOwnMoveBug,
- [35] = Help_Text_TypeMatchupOwnPokemonBug
-};
-
-static const u8 sAboutGame_TitleScreen[] = {
- HELP_THE_HELP_SYSTEM,
- HELP_THE_GAME,
- HELP_WIRELESS_ADAPTER,
- HELP_END
-};
-
-static const u8 sAboutGame_NewGame[] = {
- HELP_THE_HELP_SYSTEM,
- HELP_THE_GAME,
- HELP_WIRELESS_ADAPTER,
- HELP_END
-};
-
-static const u8 sHowTo_NamingScreen[] = {
- HELP_ENTERING_NAME,
- HELP_END
-};
-
-static const u8 sAboutGame_NamingScreen[] = {
- HELP_THE_HELP_SYSTEM,
- HELP_THE_GAME,
- HELP_WIRELESS_ADAPTER,
- HELP_END
-};
-
-static const u8 sHowTo_Pokedex[] = {
- HELP_USING_POKEDEX,
- HELP_READING_POKEDEX,
- HELP_END
-};
-
-static const u8 sHowTo_PartyMenu[] = {
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_PartyMenu[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_END
-};
-
-static const u8 sHowTo_PokemonInfo[] = {
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_END
-};
-
-static const u8 sTerms_PokemonInfo[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ID_NO,
- HELP_TERM_ITEM,
- HELP_TERM_NATURE,
- HELP_END
-};
-
-static const u8 sTerms_PokemonSkills[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_EXP,
- HELP_TERM_ABILITY,
- HELP_END
-};
-
-static const u8 sTerms_PokemonMoves[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_MOVES,
- HELP_TERM_TYPE,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_END
-};
-
-static const u8 sHowTo_Bag[] = {
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_RIDING_BICYCLE,
- HELP_END
-};
-
-static const u8 sTerms_Bag[] = {
- HELP_TERM_ITEMS,
- HELP_TERM_KEYITEMS,
- HELP_TERM_POKEBALLS,
- HELP_END
-};
-
-static const u8 sHowTo_TrainerCardFront[] = {
- HELP_USING_PLAYER,
- HELP_END
-};
-
-static const u8 sTerms_TrainerCardFront[] = {
- HELP_TERM_ID_NO,
- HELP_TERM_MONEY,
- HELP_TERM_POKEDEX,
- HELP_TERM_PLAY_TIME,
- HELP_TERM_BADGES,
- HELP_END
-};
-
-static const u8 sHowTo_TrainerCardBack[] = {
- HELP_USING_PLAYER,
- HELP_END
-};
-
-static const u8 sHowTo_Save[] = {
- HELP_USING_SAVE,
- HELP_END
-};
-
-static const u8 sTerms_Save[] = {
- HELP_TERM_BADGES2,
- HELP_TERM_POKEDEX,
- HELP_TERM_PLAY_TIME,
- HELP_END
-};
-
-static const u8 sHowTo_Options[] = {
- HELP_USING_OPTION,
- HELP_END
-};
-
-static const u8 sTerms_Options[] = {
- HELP_TERM_TEXT_SPEED,
- HELP_TERM_BATTLE_SCENE,
- HELP_TERM_BATTLE_STYLE,
- HELP_TERM_SOUND,
- HELP_TERM_BUTTON_MODE,
- HELP_TERM_FRAME,
- HELP_TERM_CANCEL,
- HELP_END
-};
-
-static const u8 sWhatToDo_PlayersHouse[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_CANT_GET_OUT_OF_ROOM,
- HELP_CANT_FIND_PERSON_I_WANT,
- HELP_END
-};
-
-static const u8 sAboutGame_PlayersHouse[] = {
- HELP_THE_HELP_SYSTEM,
- HELP_THE_GAME,
- HELP_WIRELESS_ADAPTER,
- HELP_WHAT_ARE_POKEMON,
- HELP_END
-};
-
-static const u8 sWhatToDo_OaksLab[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_CANT_FIND_PERSON_I_WANT,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_OaksLab[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_OaksLab[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_TYPE,
- HELP_TERM_POKEMON,
- HELP_END
-};
-
-static const u8 sWhatToDo_PokeCenter[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_PokeCenter[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_USING_PC,
- HELP_END
-};
-
-static const u8 sTerms_PokeCenter[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_TYPE,
- HELP_TERM_POKEMON,
- HELP_END
-};
-
-static const u8 sAboutGame_PokeCenter[] = {
- HELP_WIRELESS_ADAPTER,
- HELP_WHAT_ARE_POKEMON,
- HELP_GAME_FUNDAMENTALS_1,
- HELP_GAME_FUNDAMENTALS_2,
- HELP_GAME_FUNDAMENTALS_3,
- HELP_END
-};
-
-static const u8 sWhatToDo_Mart[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Mart[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Mart[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_TYPE,
- HELP_TERM_ITEM,
- HELP_TERM_MONEY,
- HELP_TERM_ITEMS,
- HELP_TERM_KEYITEMS,
- HELP_TERM_POKEBALLS,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sWhatToDo_Gym[] = {
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Gym[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Gym[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_TYPE,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sTypeMatchups_Gym[] = {
- HELP_TYPE_MATCHUPS,
- HELP_END
-};
-
-static const u8 sWhatToDo_Indoors[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_CANT_FIND_PERSON_I_WANT,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_I_CANT_GO_ON,
- HELP_HOW_DO_I_PROGRESS,
- HELP_WHAT_IS_THAT_PERSON_LIKE,
- HELP_OUT_OF_THINGS_TO_DO,
- HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
- HELP_WHAT_DO_I_DO_IN_CAVE,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_IS_A_GYM,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WHEN_CAN_I_USE_ITEM,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_CAN_I_BUY_POKEBALLS,
- HELP_WHATS_A_BATTLE,
- HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_WHERE_DO_MONS_APPEAR,
- HELP_CANT_CATCH_MONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_MY_MONS_ARE_HURT,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_WHATS_A_TRAINER,
- HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
- HELP_WHAT_ARE_MOVES,
- HELP_WANT_TO_ADD_MORE_MOVES,
- HELP_WHAT_ARE_HIDDEN_MOVES,
- HELP_WHAT_DOES_HIDDEN_MOVE_DO,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Indoors[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_SUMMARY,
- HELP_USING_SWITCH,
- HELP_USING_ITEM,
- HELP_USING_BAG,
- HELP_USING_AN_ITEM,
- HELP_USING_KEYITEM,
- HELP_REGISTER_KEY_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_POTION,
- HELP_USING_TOWN_MAP,
- HELP_USING_TM,
- HELP_USING_HM,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Indoors[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sWhatToDo_Overworld[] = {
- HELP_WHAT_SHOULD_I_BE_DOING,
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_CANT_FIND_PERSON_I_WANT,
- HELP_TALKED_TO_EVERYONE_NOW_WHAT,
- HELP_SOMEONE_BLOCKING_MY_WAY,
- HELP_I_CANT_GO_ON,
- HELP_HOW_DO_I_PROGRESS,
- HELP_WHAT_IS_THAT_PERSON_LIKE,
- HELP_OUT_OF_THINGS_TO_DO,
- HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
- HELP_WHAT_DO_I_DO_IN_CAVE,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_IS_A_GYM,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WHEN_CAN_I_USE_ITEM,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_CAN_I_BUY_POKEBALLS,
- HELP_WHATS_A_BATTLE,
- HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_WHERE_DO_MONS_APPEAR,
- HELP_CANT_CATCH_MONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_MY_MONS_ARE_HURT,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_WHATS_A_TRAINER,
- HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
- HELP_WHAT_ARE_MOVES,
- HELP_WANT_TO_ADD_MORE_MOVES,
- HELP_WHAT_ARE_HIDDEN_MOVES,
- HELP_WHAT_DOES_HIDDEN_MOVE_DO,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Overworld[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_BAG,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Overworld[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_FNT,
- HELP_TERM_POKEMON,
- HELP_END
-};
-
-static const u8 sWhatToDo_Dungeon[] = {
- HELP_WHAT_ARE_MY_ADVENTURE_BASICS,
- HELP_I_CANT_GO_ON,
- HELP_HOW_DO_I_PROGRESS,
- HELP_WHAT_IS_THAT_PERSON_LIKE,
- HELP_OUT_OF_THINGS_TO_DO,
- HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT,
- HELP_WHAT_DO_I_DO_IN_CAVE,
- HELP_WHATS_POKEMON_CENTER,
- HELP_WHATS_POKEMON_MART,
- HELP_WHAT_IS_A_GYM,
- HELP_WHAT_HAPPENED_TO_ITEM_I_GOT,
- HELP_WHEN_CAN_I_USE_ITEM,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_WHATS_A_BATTLE,
- HELP_HOW_DO_I_PREPARE_FOR_BATTLE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_WHERE_DO_MONS_APPEAR,
- HELP_CANT_CATCH_MONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_MY_MONS_ARE_HURT,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_WHATS_A_TRAINER,
- HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
- HELP_WHAT_ARE_MOVES,
- HELP_WANT_TO_ADD_MORE_MOVES,
- HELP_WHAT_ARE_HIDDEN_MOVES,
- HELP_WHAT_DOES_HIDDEN_MOVE_DO,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Dungeon[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_BAG,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Dungeon[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sWhatToDo_Surfing[] = {
- HELP_I_CANT_GO_ON,
- HELP_WHAT_IS_THAT_PERSON_LIKE,
- HELP_OUT_OF_THINGS_TO_DO,
- HELP_WHAT_IS_A_GYM,
- HELP_CANT_CATCH_MONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_MY_MONS_ARE_HURT,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_WHATS_A_TRAINER,
- HELP_HOW_DO_I_WIN_AGAINST_TRAINER,
- HELP_WHAT_ARE_MOVES,
- HELP_WANT_TO_ADD_MORE_MOVES,
- HELP_WHAT_ARE_HIDDEN_MOVES,
- HELP_WHAT_DOES_HIDDEN_MOVE_DO,
- HELP_WANT_TO_END_GAME,
- HELP_END
-};
-
-static const u8 sHowTo_Surfing[] = {
- HELP_OPENING_MENU,
- HELP_USING_POKEDEX,
- HELP_USING_POKEMON,
- HELP_USING_BAG,
- HELP_USING_PLAYER,
- HELP_USING_SAVE,
- HELP_USING_OPTION,
- HELP_USING_MOVE_OUTSIDE_OF_BATTLE,
- HELP_END
-};
-
-static const u8 sTerms_Surfing[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sWhatToDo_WildBattle[] = {
- HELP_WHATS_A_BATTLE,
- HELP_WHAT_ARE_MOVES,
- HELP_WHAT_MOVES_SHOULD_I_USE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_MY_MONS_ARE_HURT,
- HELP_CANT_CATCH_MONS,
- HELP_CAN_I_BUY_POKEBALLS,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_END
-};
-
-static const u8 sHowTo_WildBattle[] = {
- HELP_USING_FIGHT,
- HELP_USING_POKEMON2,
- HELP_USING_SHIFT,
- HELP_USING_SUMMARY2,
- HELP_USING_BAG2,
- HELP_USING_AN_ITEM,
- HELP_USING_POKEBALL,
- HELP_USING_RUN,
- HELP_END
-};
-
-static const u8 sTerms_WildBattle[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_TYPE,
- HELP_TERM_ABILITY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_TERM_STATUS_PROBLEM,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sTypeMatchups_WildBattle[] = {
- HELP_TYPE_MATCHUPS,
- HELP_END
-};
-
-static const u8 sWhatToDo_TrainerBattleSingle[] = {
- HELP_WHATS_A_BATTLE,
- HELP_WHAT_ARE_MOVES,
- HELP_WHAT_MOVES_SHOULD_I_USE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_MY_MONS_ARE_HURT,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_END
-};
-
-static const u8 sHowTo_TrainerBattleSingle[] = {
- HELP_USING_FIGHT,
- HELP_USING_POKEMON2,
- HELP_USING_SHIFT,
- HELP_USING_SUMMARY2,
- HELP_USING_BAG2,
- HELP_USING_AN_ITEM,
- HELP_USING_RUN,
- HELP_END
-};
-
-static const u8 sTerms_TrainerBattleSingle[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_TYPE,
- HELP_TERM_ABILITY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_TERM_STATUS_PROBLEM,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sTypeMatchups_TrainerBattleSingle[] = {
- HELP_TYPE_MATCHUPS,
- HELP_END
-};
-
-static const u8 sWhatToDo_TrainerBattleDouble[] = {
- HELP_WHATS_A_BATTLE,
- HELP_WHAT_ARE_MOVES,
- HELP_WHAT_MOVES_SHOULD_I_USE,
- HELP_WHAT_IS_A_MONS_VITALITY,
- HELP_MY_MONS_ARE_HURT,
- HELP_RAN_OUT_OF_POTIONS,
- HELP_WANT_TO_MAKE_MON_STRONGER,
- HELP_FOE_MONS_TOO_STRONG,
- HELP_WHAT_IS_STATUS_PROBLEM,
- HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT,
- HELP_END
-};
-
-static const u8 sHowTo_TrainerBattleDouble[] = {
- HELP_USING_FIGHT,
- HELP_USING_POKEMON2,
- HELP_USING_SHIFT,
- HELP_USING_SUMMARY2,
- HELP_USING_BAG2,
- HELP_USING_AN_ITEM,
- HELP_USING_RUN,
- HELP_END
-};
-
-static const u8 sTerms_TrainerBattleDouble[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_TYPE,
- HELP_TERM_ABILITY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_TERM_STATUS_PROBLEM,
- HELP_TERM_FNT,
- HELP_END
-};
-
-static const u8 sTypeMatchups_TrainerBattleDouble[] = {
- HELP_TYPE_MATCHUPS,
- HELP_END
-};
-
-static const u8 sWhatToDo_SafariBattle[] = {
- HELP_WHAT_DO_I_DO_IN_SAFARI,
- HELP_WHAT_ARE_SAFARI_RULES,
- HELP_WANT_TO_END_SAFARI,
- HELP_END
-};
-
-static const u8 sHowTo_SafariBattle[] = {
- HELP_USING_BALL,
- HELP_USING_BAIT,
- HELP_USING_ROCK,
- HELP_USING_RUN,
- HELP_END
-};
-
-static const u8 sTerms_SafariBattle[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_TYPE,
- HELP_TERM_ABILITY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_END
-};
-
-static const u8 sTypeMatchups_SafariBattle[] = {
- HELP_TYPE_MATCHUPS,
- HELP_END
-};
-
-static const u8 sHowTo_PC[] = {
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_USING_HALL_OF_FAME,
- HELP_END
-};
-
-static const u8 sHowTo_BillsPC[] = {
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_USING_HALL_OF_FAME,
- HELP_END
-};
-
-static const u8 sHowTo_PlayersPCItems[] = {
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_USING_HALL_OF_FAME,
- HELP_END
-};
-
-static const u8 sHowTo_PlayersPCMailbox[] = {
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_USING_HALL_OF_FAME,
- HELP_END
-};
-
-static const u8 sHowTo_PCMisc[] = {
- HELP_USING_PC,
- HELP_USING_BILLS_PC,
- HELP_USING_WITHDRAW,
- HELP_USING_DEPOSIT,
- HELP_USING_MOVE,
- HELP_MOVING_ITEMS,
- HELP_USING_PLAYERS_PC,
- HELP_USING_WITHDRAW_ITEM,
- HELP_USING_DEPOSIT_ITEM,
- HELP_USING_MAILBOX,
- HELP_USING_PROF_OAKS_PC,
- HELP_USING_HALL_OF_FAME,
- HELP_END
-};
-
-static const u8 sHowTo_BedroomPC[] = {
- HELP_USING_HOME_PC,
- HELP_USING_ITEM_STORAGE,
- HELP_USING_WITHDRAW_ITEM2,
- HELP_USING_DEPOSIT_ITEM2,
- HELP_USING_MAILBOX2,
- HELP_END
-};
-
-static const u8 sHowTo_BedroomPCItems[] = {
- HELP_USING_HOME_PC,
- HELP_USING_ITEM_STORAGE,
- HELP_USING_WITHDRAW_ITEM2,
- HELP_USING_DEPOSIT_ITEM2,
- HELP_USING_MAILBOX2,
- HELP_END
-};
-
-static const u8 sHowTo_BedroomPCMailbox[] = {
- HELP_USING_HOME_PC,
- HELP_USING_ITEM_STORAGE,
- HELP_USING_WITHDRAW_ITEM2,
- HELP_USING_DEPOSIT_ITEM2,
- HELP_USING_MAILBOX2,
- HELP_END
-};
-
-static const u8 sTerms_Basic[] = {
- HELP_TERM_LEVEL,
- HELP_TERM_HP,
- HELP_TERM_EXP,
- HELP_TERM_MOVES,
- HELP_TERM_TM,
- HELP_TERM_HM_MOVE,
- HELP_TERM_HM,
- HELP_TERM_ATTACK,
- HELP_TERM_DEFENSE,
- HELP_TERM_SPATK,
- HELP_TERM_SPDEF,
- HELP_TERM_SPEED,
- HELP_TERM_TYPE,
- HELP_TERM_OT,
- HELP_TERM_ITEM,
- HELP_TERM_ABILITY,
- HELP_TERM_MOVE_TYPE,
- HELP_TERM_NATURE,
- HELP_TERM_ID_NO,
- HELP_TERM_PP,
- HELP_TERM_POWER,
- HELP_TERM_ACCURACY,
- HELP_TERM_STATUS_PROBLEM,
- HELP_TERM_FNT,
- HELP_TERM_EVOLUTION,
- HELP_TERM_ITEMS,
- HELP_TERM_KEYITEMS,
- HELP_TERM_POKEBALLS,
- HELP_TERM_PLAY_TIME,
- HELP_TERM_MONEY,
- HELP_TERM_BADGES,
- HELP_END
-};
-
-
-// Cant get this to match as a 2D array but it probably should be one, [HELPCONTEXT_COUNT][TOPIC_COUNT - 1] (Excludes TOPIC_EXIT)
-static const u8 *const sHelpSystemSubmenuItemLists[HELPCONTEXT_COUNT * (TOPIC_COUNT - 1)] = {
- NULL, NULL, NULL, NULL, NULL, // HELPCONTEXT_NONE
- NULL, NULL, NULL, sAboutGame_TitleScreen, NULL, // HELPCONTEXT_TITLE_SCREEN
- NULL, NULL, NULL, sAboutGame_NewGame, NULL, // HELPCONTEXT_NEW_GAME
- NULL, sHowTo_NamingScreen, NULL, sAboutGame_NamingScreen, NULL, // HELPCONTEXT_NAMING_SCREEN
- NULL, sHowTo_Pokedex, NULL, NULL, NULL, // HELPCONTEXT_POKEDEX
- NULL, sHowTo_PartyMenu, sTerms_PartyMenu, NULL, NULL, // HELPCONTEXT_PARTY_MENU
- NULL, sHowTo_PokemonInfo, sTerms_PokemonInfo, NULL, NULL, // HELPCONTEXT_POKEMON_INFO
- NULL, NULL, sTerms_PokemonSkills, NULL, NULL, // HELPCONTEXT_POKEMON_SKILLS
- NULL, NULL, sTerms_PokemonMoves, NULL, NULL, // HELPCONTEXT_POKEMON_MOVES
- NULL, sHowTo_Bag, sTerms_Bag, NULL, NULL, // HELPCONTEXT_BAG
- NULL, sHowTo_TrainerCardFront, sTerms_TrainerCardFront, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_FRONT
- NULL, sHowTo_TrainerCardBack, NULL, NULL, NULL, // HELPCONTEXT_TRAINER_CARD_BACK
- NULL, sHowTo_Save, sTerms_Save, NULL, NULL, // HELPCONTEXT_SAVE
- NULL, sHowTo_Options, sTerms_Options, NULL, NULL, // HELPCONTEXT_OPTIONS
- sWhatToDo_PlayersHouse, NULL, NULL, sAboutGame_PlayersHouse, NULL, // HELPCONTEXT_PLAYERS_HOUSE
- sWhatToDo_OaksLab, sHowTo_OaksLab, sTerms_OaksLab, NULL, NULL, // HELPCONTEXT_OAKS_LAB
- sWhatToDo_PokeCenter, sHowTo_PokeCenter, sTerms_PokeCenter, sAboutGame_PokeCenter, NULL, // HELPCONTEXT_POKECENTER
- sWhatToDo_Mart, sHowTo_Mart, sTerms_Mart, NULL, NULL, // HELPCONTEXT_MART
- sWhatToDo_Gym, sHowTo_Gym, sTerms_Gym, NULL, sTypeMatchups_Gym, // HELPCONTEXT_GYM
- sWhatToDo_Indoors, sHowTo_Indoors, sTerms_Indoors, NULL, NULL, // HELPCONTEXT_INDOORS
- sWhatToDo_Overworld, sHowTo_Overworld, sTerms_Overworld, NULL, NULL, // HELPCONTEXT_OVERWORLD
- sWhatToDo_Dungeon, sHowTo_Dungeon, sTerms_Dungeon, NULL, NULL, // HELPCONTEXT_DUNGEON
- sWhatToDo_Surfing, sHowTo_Surfing, sTerms_Surfing, NULL, NULL, // HELPCONTEXT_SURFING
- sWhatToDo_WildBattle, sHowTo_WildBattle, sTerms_WildBattle, NULL, sTypeMatchups_WildBattle, // HELPCONTEXT_WILD_BATTLE
- sWhatToDo_TrainerBattleSingle, sHowTo_TrainerBattleSingle, sTerms_TrainerBattleSingle, NULL, sTypeMatchups_TrainerBattleSingle, // HELPCONTEXT_TRAINER_BATTLE_SINGLE
- sWhatToDo_TrainerBattleDouble, sHowTo_TrainerBattleDouble, sTerms_TrainerBattleDouble, NULL, sTypeMatchups_TrainerBattleDouble, // HELPCONTEXT_TRAINER_BATTLE_DOUBLE
- sWhatToDo_SafariBattle, sHowTo_SafariBattle, sTerms_SafariBattle, NULL, sTypeMatchups_SafariBattle, // HELPCONTEXT_SAFARI_BATTLE
- NULL, sHowTo_PC, NULL, NULL, NULL, // HELPCONTEXT_PC
- NULL, sHowTo_BillsPC, NULL, NULL, NULL, // HELPCONTEXT_BILLS_PC
- NULL, sHowTo_PlayersPCItems, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_ITEMS
- NULL, sHowTo_PlayersPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_PLAYERS_PC_MAILBOX
- NULL, sHowTo_PCMisc, NULL, NULL, NULL, // HELPCONTEXT_PC_MISC
- NULL, sHowTo_BedroomPC, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC
- NULL, sHowTo_BedroomPCItems, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_ITEMS
- NULL, sHowTo_BedroomPCMailbox, NULL, NULL, NULL, // HELPCONTEXT_BEDROOM_PC_MAILBOX
- NULL, NULL, NULL, NULL, NULL // HELPCONTEXT_UNUSED
-};
-
-static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin");
-
-static const u8 sHelpSystemContextTopicOrder[TOPIC_COUNT] = {
- TOPIC_ABOUT_GAME,
- TOPIC_WHAT_TO_DO,
- TOPIC_HOW_TO_DO,
- TOPIC_TERMS,
- TOPIC_TYPE_MATCHUP,
- TOPIC_EXIT
-};
-
-#define CONTEXT_TOPIC_FLAGS(whatToDo, howToDo, terms, aboutGame, typeMatchup, exit) \
- { \
- [TOPIC_WHAT_TO_DO] = whatToDo, \
- [TOPIC_HOW_TO_DO] = howToDo, \
- [TOPIC_TERMS] = terms, \
- [TOPIC_ABOUT_GAME] = aboutGame, \
- [TOPIC_TYPE_MATCHUP] = typeMatchup, \
- [TOPIC_EXIT] = exit \
- } \
-
-static const bool8 sHelpSystemContextTopicFlags[HELPCONTEXT_COUNT + 1][TOPIC_COUNT] = {
- [HELPCONTEXT_NONE] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_TITLE_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE),
- [HELPCONTEXT_NEW_GAME] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, FALSE, TRUE, FALSE, TRUE),
- [HELPCONTEXT_NAMING_SCREEN] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE),
- [HELPCONTEXT_POKEDEX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_PARTY_MENU] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_POKEMON_INFO] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_POKEMON_SKILLS] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_POKEMON_MOVES] = CONTEXT_TOPIC_FLAGS(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_BAG] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_TRAINER_CARD_FRONT] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_TRAINER_CARD_BACK] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_SAVE] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_OPTIONS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_PLAYERS_HOUSE] = CONTEXT_TOPIC_FLAGS( TRUE, FALSE, FALSE, TRUE, FALSE, TRUE),
- [HELPCONTEXT_OAKS_LAB] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_POKECENTER] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, TRUE, FALSE, TRUE),
- [HELPCONTEXT_MART] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_GYM] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
- [HELPCONTEXT_INDOORS] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_OVERWORLD] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_DUNGEON] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_SURFING] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_WILD_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
- [HELPCONTEXT_TRAINER_BATTLE_SINGLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
- [HELPCONTEXT_TRAINER_BATTLE_DOUBLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
- [HELPCONTEXT_SAFARI_BATTLE] = CONTEXT_TOPIC_FLAGS( TRUE, TRUE, TRUE, FALSE, TRUE, TRUE),
- [HELPCONTEXT_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_BILLS_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_PLAYERS_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_PLAYERS_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_PC_MISC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_BEDROOM_PC] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_BEDROOM_PC_ITEMS] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_BEDROOM_PC_MAILBOX] = CONTEXT_TOPIC_FLAGS(FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
- [HELPCONTEXT_UNUSED] = {},
- [HELPCONTEXT_COUNT] = {}
-};
-
-static const u16 sMartMaps[] = {
- MAP_VIRIDIAN_CITY_MART,
- MAP_PEWTER_CITY_MART,
- MAP_CERULEAN_CITY_MART,
- MAP_LAVENDER_TOWN_MART,
- MAP_VERMILION_CITY_MART,
- MAP_CELADON_CITY_DEPARTMENT_STORE_1F,
- MAP_CELADON_CITY_DEPARTMENT_STORE_2F,
- MAP_CELADON_CITY_DEPARTMENT_STORE_3F,
- MAP_CELADON_CITY_DEPARTMENT_STORE_4F,
- MAP_CELADON_CITY_DEPARTMENT_STORE_5F,
- MAP_CELADON_CITY_DEPARTMENT_STORE_ROOF,
- MAP_CELADON_CITY_DEPARTMENT_STORE_ELEVATOR,
- MAP_FUCHSIA_CITY_MART,
- MAP_CINNABAR_ISLAND_MART,
- MAP_SAFFRON_CITY_MART,
- MAP_THREE_ISLAND_MART,
- MAP_FOUR_ISLAND_MART,
- MAP_SEVEN_ISLAND_MART,
- MAP_SIX_ISLAND_MART,
- MAP_UNDEFINED
-};
-
-static const u16 sGymMaps[] = {
- MAP_PEWTER_CITY_GYM,
- MAP_CERULEAN_CITY_GYM,
- MAP_VERMILION_CITY_GYM,
- MAP_CELADON_CITY_GYM,
- MAP_FUCHSIA_CITY_GYM,
- MAP_SAFFRON_CITY_GYM,
- MAP_CINNABAR_ISLAND_GYM,
- MAP_VIRIDIAN_CITY_GYM,
- MAP_UNDEFINED
-};
-
-static const u8 sDungeonMaps[][3] = {
- { MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), 1 },
- { MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), 3 },
- { MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), 2 },
- { MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), 3 },
- { MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), 5 },
- { MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), 3 },
- { MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), 3 },
- { MAP_GROUP(MT_EMBER_RUBY_PATH_B4F), MAP_NUM(MT_EMBER_RUBY_PATH_B4F), 1 },
- { MAP_GROUP(MT_EMBER_SUMMIT_PATH_1F), MAP_NUM(MT_EMBER_SUMMIT_PATH_1F), 3 },
- { MAP_GROUP(MT_EMBER_RUBY_PATH_B5F), MAP_NUM(MT_EMBER_RUBY_PATH_B5F), 7 },
- { MAP_GROUP(THREE_ISLAND_BERRY_FOREST), MAP_NUM(THREE_ISLAND_BERRY_FOREST), 1 },
- { MAP_GROUP(SIX_ISLAND_PATTERN_BUSH), MAP_NUM(SIX_ISLAND_PATTERN_BUSH), 1 },
- { MAP_GROUP(FIVE_ISLAND_LOST_CAVE_ENTRANCE), MAP_NUM(FIVE_ISLAND_LOST_CAVE_ENTRANCE), 15 },
- { MAP_GROUP(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), MAP_NUM(FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE), 4 },
- { MAP_GROUP(SIX_ISLAND_ALTERING_CAVE), MAP_NUM(SIX_ISLAND_ALTERING_CAVE), 1 },
- { MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), 7 }
-};
-
-void SetHelpContextDontCheckBattle(u8 contextId)
-{
- sHelpSystemContextId = contextId;
-}
-
-void SetHelpContext(u8 contextId)
-{
- switch (sHelpSystemContextId)
- {
- case HELPCONTEXT_WILD_BATTLE:
- case HELPCONTEXT_TRAINER_BATTLE_SINGLE:
- case HELPCONTEXT_TRAINER_BATTLE_DOUBLE:
- case HELPCONTEXT_SAFARI_BATTLE:
- if (contextId == HELPCONTEXT_BAG
- || contextId == HELPCONTEXT_PARTY_MENU
- || contextId == HELPCONTEXT_POKEMON_INFO
- || contextId == HELPCONTEXT_POKEMON_SKILLS
- || contextId == HELPCONTEXT_POKEMON_MOVES)
- break;
- // fallthrough
- default:
- sHelpSystemContextId = contextId;
- break;
- }
-}
-
-void Script_SetHelpContext(void)
-{
- sHelpSystemContextId = gSpecialVar_0x8004;
-}
-
-void BackupHelpContext(void)
-{
- gHelpContextIdBackup = sHelpSystemContextId;
-}
-
-void RestoreHelpContext(void)
-{
- sHelpSystemContextId = gHelpContextIdBackup;
-}
-
-static bool32 IsInMartMap(void)
-{
- return IsCurrentMapInArray(sMartMaps);
-}
-
-static bool32 IsInGymMap(void)
-{
- return IsCurrentMapInArray(sGymMaps);
-}
-
-static bool32 IsCurrentMapInArray(const u16 * mapIdxs)
-{
- u16 mapIdx = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum;
- s32 i;
-
- for (i = 0; mapIdxs[i] != MAP_UNDEFINED; i++)
- {
- if (mapIdxs[i] == mapIdx)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static bool8 IsInDungeonMap(void)
-{
- u8 i, j;
-
- for (i = 0; i < NELEMS(sDungeonMaps); i++)
- {
- for (j = 0; j < sDungeonMaps[i][2]; j++)
- {
- if (
- sDungeonMaps[i][0] == gSaveBlock1Ptr->location.mapGroup
- && sDungeonMaps[i][1] + j == gSaveBlock1Ptr->location.mapNum
- && (i != 15 /* TANOBY */ || FlagGet(FLAG_SYS_UNLOCKED_TANOBY_RUINS) == TRUE)
- )
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-#define IN_PLAYERS_HOUSE \
- ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) \
- && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) \
- || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) \
- && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F))) \
-
- #define IN_OAKS_LAB \
- (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB) \
- && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB)) \
-
-void SetHelpContextForMap(void)
-{
- HelpSystem_EnableToggleWithRButton();
- if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- SetHelpContext(HELPCONTEXT_SURFING);
- else if (IsInDungeonMap())
- SetHelpContext(HELPCONTEXT_DUNGEON);
- else if (IsMapTypeIndoors(gMapHeader.mapType))
- {
- if (IN_PLAYERS_HOUSE)
- SetHelpContext(HELPCONTEXT_PLAYERS_HOUSE);
- else if (IN_OAKS_LAB)
- SetHelpContext(HELPCONTEXT_OAKS_LAB);
- else if (IsCurMapPokeCenter() == TRUE)
- SetHelpContext(HELPCONTEXT_POKECENTER);
- else if (IsInMartMap() == TRUE)
- SetHelpContext(HELPCONTEXT_MART);
- else if (IsInGymMap() == TRUE)
- SetHelpContext(HELPCONTEXT_GYM);
- else
- SetHelpContext(HELPCONTEXT_INDOORS);
- }
- else
- SetHelpContext(HELPCONTEXT_OVERWORLD);
-}
-
-bool8 HelpSystem_UpdateHasntSeenIntro(void)
-{
- if (sSeenHelpSystemIntro == TRUE)
- return FALSE;
-
- if (gSaveFileStatus != SAVE_STATUS_EMPTY && gSaveFileStatus != SAVE_STATUS_INVALID && FlagGet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO))
- return FALSE;
-
- FlagSet(FLAG_SYS_SAW_HELP_SYSTEM_INTRO);
- sSeenHelpSystemIntro = TRUE;
- return TRUE;
-}
-
-bool8 sub_812B45C(void)
-{
- if (gReceivedRemoteLinkPlayers == TRUE)
- return FALSE;
- return TRUE;
-}
-
-void HelpSystem_Disable(void)
-{
- gHelpSystemEnabled = FALSE;
-}
-
-void HelpSystem_Enable(void)
-{
- if (!QL_IS_PLAYBACK_STATE)
- {
- gHelpSystemEnabled = TRUE;
- HelpSystem_EnableToggleWithRButton();
- }
-}
-
-void HelpSystem_DisableToggleWithRButton(void)
-{
- gHelpSystemToggleWithRButtonDisabled = TRUE;
-}
-
-void HelpSystem_EnableToggleWithRButton(void)
-{
- gHelpSystemToggleWithRButtonDisabled = FALSE;
-}
-
-static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- helpListMenu->sub.items = listMenuItemsBuffer;
- helpListMenu->sub.totalItems = 1;
- helpListMenu->sub.maxShowed = 1;
- helpListMenu->sub.left = 1;
- helpListMenu->sub.top = 4;
-}
-
-static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
- BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer);
- PrintTextOnPanel2Row52RightAlign(gUnknown_841DFAC);
- HelpSystem_InitListMenuController(helpListMenu, 0, gHelpSystemState[2]);
- PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
- sub_813BDA4(1);
- sub_813BD5C(1);
-}
-
-static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- u8 i;
- u8 totalItems = 0;
- for (i = 0; i < TOPIC_COUNT; i++)
- {
- if (sHelpSystemContextTopicFlags[sHelpSystemContextId][sHelpSystemContextTopicOrder[i]] == TRUE)
- {
- listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]];
- listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i];
- totalItems++;
- }
- }
- listMenuItemsBuffer[totalItems - 1].index = -2;
- helpListMenu->sub.totalItems = totalItems;
- helpListMenu->sub.maxShowed = totalItems;
- helpListMenu->sub.left = 0;
-}
-
-static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- sub_813BDE8(0);
- sub_813BFC0(0);
- sub_813BE78(1);
- ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
- SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer);
- PrintTextOnPanel2Row52RightAlign(gUnknown_841DFC9);
- HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos);
- HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState[1]], 0, 0);
- sub_813BDA4(1);
- sub_813BD5C(1);
-}
-
-static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- u8 totalItems = 0;
- const u8 * submenuItems = sHelpSystemSubmenuItemLists[sHelpSystemContextId * 5 + gHelpSystemState[1]]; // accessing as 2D array
- u8 i;
- for (i = 0; submenuItems[i] != HELP_END; i++)
- {
- if (IsHelpSystemSubmenuEnabled(submenuItems[i]) == TRUE)
- {
- if (gHelpSystemState[1] == TOPIC_WHAT_TO_DO)
- listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[submenuItems[i]];
- else if (gHelpSystemState[1] == TOPIC_HOW_TO_DO)
- listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[submenuItems[i]];
- else if (gHelpSystemState[1] == TOPIC_TERMS)
- listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]];
- else if (gHelpSystemState[1] == TOPIC_ABOUT_GAME)
- listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[submenuItems[i]];
- else // TOPIC_TYPE_MATCHUP
- listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[submenuItems[i]];
- listMenuItemsBuffer[totalItems].index = submenuItems[i];
- totalItems++;
- }
- }
- if (HelpSystem_ShouldShowBasicTerms() == TRUE)
- {
- for (i = 0, submenuItems = sTerms_Basic; submenuItems[i] != HELP_END; i++)
- {
- listMenuItemsBuffer[totalItems].label = sHelpSystemTermTextPtrs[submenuItems[i]];
- listMenuItemsBuffer[totalItems].index = submenuItems[i];
- totalItems++;
- }
- }
- listMenuItemsBuffer[totalItems].label = Help_Text_Cancel;
- listMenuItemsBuffer[totalItems].index = -2;
- totalItems++;
- helpListMenu->sub.totalItems = totalItems;
- helpListMenu->sub.maxShowed = 7;
- helpListMenu->sub.left = 0;
- helpListMenu->sub.top = 21;
-}
-
-static bool8 HelpSystem_ShouldShowBasicTerms(void)
-{
- if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gHelpSystemState[1] == TOPIC_TERMS)
- return TRUE;
- return FALSE;
-}
-
-static bool8 IsHelpSystemSubmenuEnabled(u8 id)
-{
- u8 i = 0;
-
- if (gHelpSystemState[1] == TOPIC_WHAT_TO_DO)
- {
- switch (id)
- {
- case HELP_PLAYING_FOR_FIRST_TIME:
- case HELP_WHAT_SHOULD_I_BE_DOING:
- case HELP_CANT_GET_OUT_OF_ROOM:
- case HELP_TALKED_TO_EVERYONE_NOW_WHAT:
- case HELP_OUT_OF_THINGS_TO_DO:
- case HELP_NOTHING_I_WANT_TO_KNOW:
- case HELP_WHATS_A_MON:
- case HELP_WHAT_DO_I_DO_IN_SAFARI:
- case HELP_WHAT_ARE_SAFARI_RULES:
- case HELP_WANT_TO_END_SAFARI:
- return TRUE;
- case HELP_CANT_FIND_PERSON_I_WANT:
- return FlagGet(FLAG_VISITED_OAKS_LAB);
- case HELP_SOMEONE_BLOCKING_MY_WAY:
- case HELP_WHAT_ARE_MY_ADVENTURE_BASICS:
- case HELP_HOW_DO_I_PREPARE_FOR_BATTLE:
- case HELP_WHAT_IS_STATUS_PROBLEM:
- case HELP_RAN_OUT_OF_POTIONS:
- case HELP_WHATS_POKEMON_CENTER:
- case HELP_WHATS_POKEMON_MART:
- return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_CITY);
- case HELP_I_CANT_GO_ON:
- return FlagGet(FLAG_WORLD_MAP_VERMILION_CITY);
- case HELP_HOW_ARE_ROADS_FORESTS_DIFFERENT:
- case HELP_WHATS_A_TRAINER:
- return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST);
- case HELP_WHAT_HAPPENED_TO_ITEM_I_GOT:
- case HELP_WHEN_CAN_I_USE_ITEM:
- case HELP_HOW_DO_I_PROGRESS:
- case HELP_WHATS_A_BATTLE:
- case HELP_WHAT_IS_A_MONS_VITALITY:
- case HELP_MY_MONS_ARE_HURT:
- case HELP_WHAT_HAPPENS_IF_ALL_MY_MONS_FAINT:
- case HELP_WHERE_DO_MONS_APPEAR:
- case HELP_WHAT_MOVES_SHOULD_I_USE:
- case HELP_WANT_TO_MAKE_MON_STRONGER:
- case HELP_WANT_TO_END_GAME:
- return FlagGet(FLAG_SYS_POKEMON_GET);
- case HELP_CANT_CATCH_MONS:
- case HELP_CAN_I_BUY_POKEBALLS:
- return FlagGet(FLAG_SYS_POKEDEX_GET);
- case HELP_HOW_ARE_CAVES_DIFFERENT:
- case HELP_WHAT_DO_I_DO_IN_CAVE:
- case HELP_HOW_DO_I_WIN_AGAINST_TRAINER:
- case HELP_FOE_MONS_TOO_STRONG:
- case HELP_WHAT_ARE_MOVES:
- case HELP_WANT_TO_ADD_MORE_MOVES:
- return FlagGet(FLAG_BADGE01_GET);
- case HELP_WHAT_ARE_HIDDEN_MOVES:
- case HELP_WHAT_DOES_HIDDEN_MOVE_DO:
- return HasGottenAtLeastOneHM();
- case HELP_WHAT_IS_THAT_PERSON_LIKE:
- return FlagGet(FLAG_GOT_FAME_CHECKER);
- case HELP_WHAT_IS_A_GYM:
- return FlagGet(FLAG_WORLD_MAP_PEWTER_CITY);
- }
- return FALSE;
- }
- if (gHelpSystemState[1] == TOPIC_HOW_TO_DO)
- {
- switch (id)
- {
- case HELP_USING_BAG:
- case HELP_USING_PLAYER:
- case HELP_USING_SAVE:
- case HELP_USING_OPTION:
- case HELP_ENTERING_NAME:
- case HELP_USING_PC:
- case HELP_USING_BILLS_PC:
- case HELP_USING_WITHDRAW:
- case HELP_USING_DEPOSIT:
- case HELP_USING_MOVE:
- case HELP_MOVING_ITEMS:
- case HELP_USING_PLAYERS_PC:
- case HELP_USING_WITHDRAW_ITEM:
- case HELP_USING_DEPOSIT_ITEM:
- case HELP_USING_MAILBOX:
- case HELP_OPENING_MENU:
- case HELP_USING_BAG2:
- case HELP_USING_HOME_PC:
- case HELP_USING_ITEM_STORAGE:
- case HELP_USING_WITHDRAW_ITEM2:
- case HELP_USING_DEPOSIT_ITEM2:
- case HELP_USING_MAILBOX2:
- case HELP_USING_BALL:
- case HELP_USING_BAIT:
- case HELP_USING_ROCK:
- return TRUE;
- case HELP_USING_POKEDEX:
- case HELP_USING_PROF_OAKS_PC:
- case HELP_READING_POKEDEX:
- return FlagGet(FLAG_SYS_POKEDEX_GET);
- case HELP_USING_TOWN_MAP:
- return CheckBagHasItem(ITEM_TOWN_MAP, 1);
- case HELP_USING_POKEMON:
- case HELP_USING_SUMMARY:
- case HELP_USING_ITEM:
- case HELP_USING_AN_ITEM:
- case HELP_USING_KEYITEM:
- case HELP_USING_POKEBALL:
- case HELP_USING_POTION:
- case HELP_USING_FIGHT:
- case HELP_USING_POKEMON2:
- case HELP_USING_SUMMARY2:
- case HELP_USING_RUN:
- case HELP_REGISTER_KEY_ITEM:
- return FlagGet(FLAG_SYS_POKEMON_GET);
- case HELP_USING_SWITCH:
- case HELP_USING_SHIFT:
- // Only show if player has caught mon after starter
- if (GetKantoPokedexCount(1) > 1)
- return TRUE;
- return FALSE;
- case HELP_USING_TM:
- return FlagGet(FLAG_BADGE01_GET);
- case HELP_USING_HM:
- case HELP_USING_MOVE_OUTSIDE_OF_BATTLE:
- return HasGottenAtLeastOneHM();
- case HELP_RIDING_BICYCLE:
- return FlagGet(FLAG_GOT_BICYCLE);
- case HELP_USING_HALL_OF_FAME:
- return FlagGet(FLAG_SYS_GAME_CLEAR);
- }
- return FALSE;
- }
- if (gHelpSystemState[1] == TOPIC_TERMS)
- {
- if (HelpSystem_ShouldShowBasicTerms() == TRUE)
- {
- // After defeating Brock, all basic terms are added
- // This checks to make sure they arent added twice
- for (i = 0; sTerms_Basic[i] != HELP_END; i++)
- {
- if (sTerms_Basic[i] == id)
- return FALSE;
- }
- }
- switch (id)
- {
- case HELP_TERM_MONEY:
- case HELP_TERM_ID_NO:
- case HELP_TERM_ITEMS:
- case HELP_TERM_KEYITEMS:
- case HELP_TERM_POKEBALLS:
- case HELP_TERM_POKEDEX:
- case HELP_TERM_PLAY_TIME:
- case HELP_TERM_BADGES:
- case HELP_TERM_TEXT_SPEED:
- case HELP_TERM_BATTLE_SCENE:
- case HELP_TERM_BATTLE_STYLE:
- case HELP_TERM_SOUND:
- case HELP_TERM_BUTTON_MODE:
- case HELP_TERM_FRAME:
- case HELP_TERM_CANCEL:
- case HELP_TERM_TM:
- case HELP_TERM_EVOLUTION:
- return TRUE;
- case HELP_TERM_HP:
- case HELP_TERM_EXP:
- case HELP_TERM_ATTACK:
- case HELP_TERM_DEFENSE:
- case HELP_TERM_SPATK:
- case HELP_TERM_SPDEF:
- case HELP_TERM_SPEED:
- case HELP_TERM_LEVEL:
- case HELP_TERM_TYPE:
- case HELP_TERM_OT:
- case HELP_TERM_ITEM:
- case HELP_TERM_ABILITY:
- case HELP_TERM_NATURE:
- case HELP_TERM_POWER:
- case HELP_TERM_ACCURACY:
- case HELP_TERM_FNT:
- return FlagGet(FLAG_SYS_POKEMON_GET);
- case HELP_TERM_HM:
- case HELP_TERM_HM_MOVE:
- return HasGottenAtLeastOneHM();
- case HELP_TERM_MOVES:
- case HELP_TERM_MOVE_TYPE:
- case HELP_TERM_PP:
- case HELP_TERM_STATUS_PROBLEM:
- return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST);
- }
- return TRUE;
- }
- if (gHelpSystemState[1] == TOPIC_ABOUT_GAME)
- {
- switch (id)
- {
- case HELP_GAME_FUNDAMENTALS_2:
- return FlagGet(FLAG_BADGE01_GET);
- case HELP_GAME_FUNDAMENTALS_3:
- return FlagGet(FLAG_BADGE02_GET);
- }
- return TRUE;
- }
- if (gHelpSystemState[1] == TOPIC_TYPE_MATCHUP)
- {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static bool8 HasGottenAtLeastOneHM(void)
-{
- if (FlagGet(FLAG_GOT_HM01) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_GOT_HM02) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_GOT_HM03) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_GOT_HM04) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_GOT_HM05) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_GOT_HM06) == TRUE)
- return TRUE;
- if (FlagGet(FLAG_HIDE_FOUR_ISLAND_ICEFALL_CAVE_1F_HM07) == TRUE)
- return TRUE;
- return FALSE;
-}
-
-bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- switch (helpListMenu->state)
- {
- case 8:
- return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer);
- case 9:
- return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer);
- case 10:
- return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer);
- case 0:
- return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer);
- case 1:
- return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer);
- case 2:
- return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer);
- case 3:
- return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer);
- case 4:
- return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer);
- case 5:
- return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer);
- case 6:
- return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer);
- }
- return FALSE;
-}
-
-bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- PrintTextOnPanel2Row52RightAlign(gUnknown_841DFA5);
- PrintWelcomeMessageOnPanel1();
- sub_813BDA4(1);
- sub_813BD5C(1);
- helpListMenu->state = 9;
- return TRUE;
-}
-
-bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- if (JOY_NEW(A_BUTTON))
- {
- PlaySE(SE_SELECT);
- helpListMenu->state = 10;
- }
- return TRUE;
-}
-
-bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- gHelpSystemState[2] = 0;
- ResetHelpSystemCursor(helpListMenu);
- BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
- helpListMenu->state = 0;
- return TRUE;
-}
-
-bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- s32 input = HelpSystem_GetMenuInput();
- switch (input)
- {
- case -6:
- case -2:
- return FALSE;
- case -5:
- case -4:
- PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
- break;
- case -3:
- case -1:
- break;
- default:
- gHelpSystemState[1] = input;
- helpListMenu->state = 1;
- break;
- }
- return TRUE;
-}
-
-bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- gHelpSystemState[0] = 1;
- gHelpSystemState[2] = helpListMenu->cursorPos;
- ResetHelpSystemCursor(helpListMenu);
- BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
- sub_813C75C();
- HelpSystem_SetInputDelay(2);
- helpListMenu->state = 3;
- return TRUE;
-}
-
-bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- sub_813C004(0, 0);
- sub_813C004(1, 0);
- gHelpSystemState[0] = 0;
- BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
- helpListMenu->state = 0;
- return TRUE;
-}
-
-bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- s32 input = HelpSystem_GetMenuInput();
- switch (input)
- {
- case -6:
- return FALSE;
- case -2:
- helpListMenu->state = 2;
- break;
- case -5:
- case -4:
- case -3:
- case -1:
- break;
- default:
- gHelpSystemState[3] = input;
- helpListMenu->state = 4;
- break;
- }
- return TRUE;
-}
-
-void HelpSystem_PrintTopicLabel(void)
-{
- HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[gHelpSystemState[1]], 0, 0);
-}
-
-bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- gHelpSystemState[0] = 2;
- sub_813BDA4(0);
- HelpSystem_FillPanel1();
- PrintTextOnPanel2Row52RightAlign(gUnknown_841DFBE);
- sub_813BDE8(1);
- sub_813BEE4(1);
-
- if (gHelpSystemState[1] == TOPIC_WHAT_TO_DO)
- {
- HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[gHelpSystemState[3]], sHelpSystemSpecializedAnswerTextPtrs[gHelpSystemState[3]]);
- }
- else if (gHelpSystemState[1] == TOPIC_HOW_TO_DO)
- {
- HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[gHelpSystemState[3]], sHelpSystemHowToUseMenuTextPtrs[gHelpSystemState[3]]);
- }
- else if (gHelpSystemState[1] == TOPIC_TERMS)
- {
- HelpSystem_PrintTwoStrings(sHelpSystemTermTextPtrs[gHelpSystemState[3]], sHelpSystemTermDefinitionsTextPtrs[gHelpSystemState[3]]);
- }
- else if (gHelpSystemState[1] == TOPIC_ABOUT_GAME)
- {
- HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[gHelpSystemState[3]], sHelpSystemGeneralTopicDescriptionTextPtrs[gHelpSystemState[3]]);
- }
- else // TOPIC_TYPE_MATCHUP
- {
- HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[gHelpSystemState[3]], sHelpSystemTypeMatchupDescriptionTextPtrs[gHelpSystemState[3]]);
- }
- sub_813BDA4(1);
- sub_813BD5C(1);
- helpListMenu->state = 6;
- return TRUE;
-}
-
-bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- gHelpSystemState[0] = 1;
- BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
- sub_813C75C();
- HelpSystem_SetInputDelay(2);
- helpListMenu->state = 3;
- return TRUE;
-}
-
-bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
- {
- PlaySE(SE_SELECT);
- helpListMenu->state = 5;
- return TRUE;
- }
- if (JOY_NEW(L_BUTTON | R_BUTTON))
- return FALSE;
- return TRUE;
-}
-
-static void PrintWelcomeMessageOnPanel1(void)
-{
- HelpSystem_FillPanel1();
- HelpSystem_PrintTextAt(Help_Text_Greetings, 0, 0);
-}
-
-static void PrintTextOnPanel2Row52RightAlign(const u8 * str)
-{
- HelpSystem_FillPanel2();
- HelpSystem_PrintTextRightAlign_Row52(str);
-}
-
-u8 sub_812BF88(void)
-{
- return gHelpSystemState[0];
-}
-
-static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu)
-{
- helpListMenu->itemsAbove = 0;
- helpListMenu->cursorPos = 0;
-}
-
-static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
-{
- s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index;
- if (index == -2)
- HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]);
- else
- HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]);
- sub_813BE30(1);
-}
diff --git a/src/help_system_util.c b/src/help_system_util.c
new file mode 100644
index 000000000..cd7bd1acf
--- /dev/null
+++ b/src/help_system_util.c
@@ -0,0 +1,856 @@
+#include "global.h"
+#include "gflib.h"
+#include "decompress.h"
+#include "m4a.h"
+#include "event_data.h"
+#include "help_system.h"
+#include "list_menu.h"
+#include "strings.h"
+#include "constants/songs.h"
+
+#define ZERO 0
+
+bool8 gHelpSystemEnabled;
+
+struct HelpSystemVideoState
+{
+ /*0x00*/ MainCallback savedVblankCb;
+ /*0x04*/ MainCallback savedHblankCb;
+ /*0x08*/ u16 savedDispCnt;
+ /*0x0a*/ u16 savedBg0Cnt;
+ /*0x0c*/ u16 savedBg0Hofs;
+ /*0x0e*/ u16 savedBg0Vofs;
+ /*0x10*/ u16 savedBldCnt;
+ /*0x12*/ u8 savedTextColor[3];
+ /*0x15*/ u8 state;
+};
+
+static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
+EWRAM_DATA u8 gDisableHelpSystemVolumeReduce = 0;
+EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE;
+static EWRAM_DATA u8 sDelayTimer = 0;
+static EWRAM_DATA u8 sInHelpSystem = 0;
+static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
+EWRAM_DATA struct HelpSystemListMenu gHelpSystemListMenu = {0};
+EWRAM_DATA struct ListMenuItem gHelpSystemListMenuItems[52] = {0};
+
+static const u16 sTiles[] = INCBIN_U16("graphics/help_system/bg_tiles.4bpp");
+static const u16 sPals[] = INCBIN_U16("graphics/help_system/bg_tiles.gbapal");
+
+u8 RunHelpSystemCallback(void)
+{
+ s32 i;
+
+ switch (sVideoState.state)
+ {
+ case 0:
+ sInHelpSystem = 0;
+ if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
+ return 0;
+ if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE)
+ return 0;
+ if (JOY_NEW(L_BUTTON | R_BUTTON))
+ {
+ if (!HelpSystem_IsSinglePlayer() || !gHelpSystemEnabled)
+ {
+ PlaySE(SE_HELP_ERROR);
+ return 0;
+ }
+ m4aMPlayStop(&gMPlayInfo_SE1);
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ PlaySE(SE_HELP_OPEN);
+ if (!gDisableHelpSystemVolumeReduce)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
+ SaveCallbacks();
+ sInHelpSystem = 1;
+ sVideoState.state = 1;
+ }
+ break;
+ case 1:
+ SaveMapTiles();
+ SaveMapGPURegs();
+ SaveMapTextColors();
+ (*(vu16 *)PLTT) = sPals[15];
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sVideoState.state = 2;
+ break;
+ case 2:
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
+ RequestDma3Copy(sPals, (void *)PLTT, sizeof(sPals), DMA3_16BIT);
+ RequestDma3Copy(sTiles, gDecompressionBuffer + 0x3EE0, sizeof(sTiles), DMA3_16BIT);
+ sVideoState.state = 3;
+ break;
+ case 3:
+ HS_BufferFillMapWithTile1FF();
+ HelpSystem_FillPanel3();
+ HelpSystem_FillPanel2();
+ HelpSystem_PrintTextInTopLeftCorner(gString_Help);
+ HS_ShowOrHideWordHELPinTopLeft(1);
+ if (HelpSystem_UpdateHasntSeenIntro() == TRUE)
+ HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ else
+ HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ HS_ShowOrHideHeaderAndFooterLines_Lighter(1);
+ HS_ShowOrHideVerticalBlackBarsAlongSides(1);
+ CommitTilemap();
+ sVideoState.state = 4;
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
+ sVideoState.state = 5;
+ break;
+ case 5:
+ if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems))
+ {
+ PlaySE(SE_HELP_CLOSE);
+ sVideoState.state = 6;
+ }
+ break;
+ case 6:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ RestoreMapTiles();
+ for (i = 0; i < 0x200; i += 2)
+ {
+ *((vu16 *)(PLTT + 0x000 + i)) = sPals[15];
+ *((vu16 *)(PLTT + 0x200 + i)) = sPals[15];
+ }
+ sVideoState.state = 7;
+ break;
+ case 7:
+ if (!gDisableHelpSystemVolumeReduce)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ RestoreMapTextColors();
+ RestoreGPURegs();
+ sVideoState.state = 8;
+ break;
+ case 8:
+ RestoreCallbacks();
+ sInHelpSystem = 0;
+ sVideoState.state = 0;
+ break;
+ }
+ return sVideoState.state;
+}
+
+void SaveCallbacks(void)
+{
+ vu16 * dma;
+ sVideoState.savedVblankCb = gMain.vblankCallback;
+ sVideoState.savedHblankCb = gMain.hblankCallback;
+ gMain.vblankCallback = NULL;
+ gMain.hblankCallback = NULL;
+
+ dma = (void *)REG_ADDR_DMA0;
+ dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT);
+ dma[5] &= ~DMA_ENABLE;
+ dma[5];
+}
+
+void SaveMapGPURegs(void)
+{
+ sVideoState.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT);
+ sVideoState.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
+ sVideoState.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS);
+ sVideoState.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS);
+ sVideoState.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT);
+}
+
+void SaveMapTiles(void)
+{
+ RequestDma3Copy((void *)BG_CHAR_ADDR(3), sMapTilesBackup, BG_CHAR_SIZE, DMA3_16BIT);
+}
+
+void SaveMapTextColors(void)
+{
+ SaveTextColors(
+ &sVideoState.savedTextColor[0],
+ &sVideoState.savedTextColor[1],
+ &sVideoState.savedTextColor[2]
+ );
+}
+
+void RestoreCallbacks(void)
+{
+ gMain.vblankCallback = sVideoState.savedVblankCb;
+ gMain.hblankCallback = sVideoState.savedHblankCb;
+}
+
+void RestoreGPURegs(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, sVideoState.savedBldCnt);
+ SetGpuReg(REG_OFFSET_BG0HOFS, sVideoState.savedBg0Hofs);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sVideoState.savedBg0Vofs);
+ SetGpuReg(REG_OFFSET_BG0CNT, sVideoState.savedBg0Cnt);
+ SetGpuReg(REG_OFFSET_DISPCNT, sVideoState.savedDispCnt);
+}
+
+void RestoreMapTiles(void)
+{
+ RequestDma3Copy(sMapTilesBackup, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
+}
+
+void RestoreMapTextColors(void)
+{
+ RestoreTextColors(
+ &sVideoState.savedTextColor[0],
+ &sVideoState.savedTextColor[1],
+ &sVideoState.savedTextColor[2]
+ );
+}
+
+void CommitTilemap(void)
+{
+ RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, DMA3_16BIT);
+}
+
+void HS_DrawBgTilemapRect(u16 baseTile, u8 left, u8 top, u8 width, u8 height, u16 increment)
+{
+ u16 i, j;
+
+ for (i = top; i < top + height; i++)
+ {
+ for (j = left; j < left + width; j++)
+ {
+ *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseTile;
+ baseTile += increment;
+ }
+ }
+
+ CommitTilemap();
+}
+
+void HS_BufferFillMapWithTile1FF(void)
+{
+ HS_DrawBgTilemapRect(0x1FF, 0, 0, 30, 20, 0);
+}
+
+void HS_ShowOrHideWordHELPinTopLeft(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 0, 7, 2, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1E8, 1, 0, 7, 2, 1);
+ break;
+ }
+}
+
+void HS_ShowOrHideControlsGuideInTopRight(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 13, 0, 16, 2, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1A0, 13, 0, 16, 2, 1);
+ break;
+ }
+}
+
+void HS_ShowOrHideMainWindowText(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 2, 3, 26, 16, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x000, 2, 3, 26, 16, 1);
+ break;
+ }
+}
+
+void HS_SetMainWindowBgBrightness(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ // Brighter
+ HS_DrawBgTilemapRect(0x1FF, 1, 3, 28, 16, 0);
+ break;
+ case 1:
+ // Darker
+ HS_DrawBgTilemapRect(0x1FA, 1, 3, 28, 17, 0);
+ break;
+ }
+}
+
+void HS_ShowOrHideToplevelTooltipWindow(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 2, 14, 26, 5, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x11E, 2, 14, 26, 5, 1);
+ break;
+ }
+}
+
+void HS_ShowOrHideHeaderAndFooterLines_Lighter(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1F7, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1F8, 1, 19, 28, 1, 0);
+ break;
+ }
+}
+
+void HS_ShowOrHideHeaderAndFooterLines_Darker(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1FB, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FC, 1, 19, 28, 1, 0);
+ break;
+ }
+}
+
+void HS_ShowOrHideVerticalBlackBarsAlongSides(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 0, 0, 1, 20, 0);
+ HS_DrawBgTilemapRect(0x1FF, 29, 0, 1, 20, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1F9, 0, 0, 1, 20, 0);
+ HS_DrawBgTilemapRect(0x1F9, 29, 0, 1, 20, 0);
+ break;
+ }
+}
+
+void HS_ShowOrHideHeaderLine_Darker_FooterStyle(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 5, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1FC, 1, 5, 28, 1, 0);
+ break;
+ }
+}
+
+void HS_ShowOrHideScrollArrows(u8 which, u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 28, 3, 1, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 28, 18, 1, 1, 0);
+ break;
+ case 1:
+ if (which == 0) // top
+ HS_DrawBgTilemapRect(0x1FE, 28, 3, 1, 1, 0);
+ else // bottom
+ HS_DrawBgTilemapRect(0x1FD, 28, 18, 1, 1, 0);
+ break;
+ }
+}
+
+void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height)
+{
+ // font -> sp+24
+ // dest -> sp+28
+ // src -> r9
+ // x -> sp+34
+ // y -> r10
+ // width -> sp+2C
+ // height -> sp+30
+ struct Bitmap srcBlit;
+ struct Bitmap destBlit;
+ u8 orig_x = x;
+ u8 i = 0;
+ s32 clearPixels = 0;
+
+ while (1)
+ {
+ u16 curChar = *src;
+ src++;
+ switch (curChar)
+ {
+ case EOS:
+ return;
+ case CHAR_NEWLINE:
+ x = orig_x;
+ y += gGlyphInfo.height + 1;
+ break;
+ case PLACEHOLDER_BEGIN:
+ curChar = *src;
+ src++;
+ if (curChar == PLACEHOLDER_ID_PLAYER) {
+ for (i = 0; i < 10; i++)
+ {
+ if (gSaveBlock2Ptr->playerName[i] == EOS)
+ {
+ break;
+ }
+ DecompressAndRenderGlyph(font, gSaveBlock2Ptr->playerName[i], &srcBlit, &destBlit, dest, x, y, width, height);
+ // This is required to match a dummy [sp+#0x24] read here
+ if (font == 0)
+ {
+ x += gGlyphInfo.width;
+ }
+ else
+ {
+ x += gGlyphInfo.width + ZERO;
+ }
+ }
+ }
+ else if (curChar == PLACEHOLDER_ID_STRING_VAR_1)
+ {
+ for (i = 0; ; i++)
+ {
+ if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC) == TRUE)
+ {
+ if (gString_Bill[i] == EOS)
+ {
+ break;
+ }
+ DecompressAndRenderGlyph(font, gString_Bill[i], &srcBlit, &destBlit, dest, x, y, width, height);
+ }
+ else
+ {
+ if (gString_Someone[i] == EOS)
+ {
+ break;
+ }
+ DecompressAndRenderGlyph(font, gString_Someone[i], &srcBlit, &destBlit, dest, x, y, width, height);
+ }
+ if (font == 0)
+ {
+ x += gGlyphInfo.width;
+ }
+ else
+ {
+ x += gGlyphInfo.width + ZERO;
+ }
+ }
+ }
+ break;
+ case CHAR_PROMPT_SCROLL:
+ case CHAR_PROMPT_CLEAR:
+ x = orig_x;
+ y += gGlyphInfo.height + 1;
+ break;
+ case EXT_CTRL_CODE_BEGIN:
+ curChar = *src;
+ src++;
+ switch (curChar)
+ {
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
+ src++;
+ //fallthrough
+ case EXT_CTRL_CODE_PLAY_BGM:
+ case EXT_CTRL_CODE_PLAY_SE:
+ src++;
+ //fallthrough
+ case EXT_CTRL_CODE_COLOR:
+ case EXT_CTRL_CODE_HIGHLIGHT:
+ case EXT_CTRL_CODE_SHADOW:
+ case EXT_CTRL_CODE_PALETTE:
+ case EXT_CTRL_CODE_FONT:
+ case EXT_CTRL_CODE_PAUSE:
+ case EXT_CTRL_CODE_ESCAPE:
+ case EXT_CTRL_CODE_SHIFT_RIGHT:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
+ src++;
+ break;
+ case EXT_CTRL_CODE_CLEAR_TO:
+ {
+#ifdef NONMATCHING
+ curChar = *src;
+ clearPixels = curChar + orig_x - x;
+#else // dumb fakematch
+ s32 r0;
+ register const u8 * _src asm("r2") = src;
+ asm("":::"r1");
+ r0 = *_src;
+ r0 += orig_x;
+ clearPixels = r0 - x;
+#endif
+ if (clearPixels > 0)
+ {
+ destBlit.pixels = dest;
+ destBlit.width = width * 8;
+ destBlit.height = height * 8;
+ FillBitmapRect4Bit(&destBlit, x, y, clearPixels, GetFontAttribute(font, FONTATTR_MAX_LETTER_HEIGHT),
+ 0);
+ x += clearPixels;
+ }
+ src++;
+ break;
+ }
+ case EXT_CTRL_CODE_CLEAR:
+ case EXT_CTRL_CODE_SKIP:
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
+ src++;
+ break;
+ case EXT_CTRL_CODE_RESET_FONT:
+ case EXT_CTRL_CODE_WAIT_BUTTON:
+ case EXT_CTRL_CODE_WAIT_SE:
+ case EXT_CTRL_CODE_FILL_WINDOW:
+ break;
+ case EXT_CTRL_CODE_JPN:
+ case EXT_CTRL_CODE_ENG:
+ break;
+ }
+ break;
+ case CHAR_KEYPAD_ICON:
+ curChar = *src;
+ src++;
+ srcBlit.pixels = (u8 *)gKeypadIconTiles + 0x20 * GetKeypadIconTileOffset(curChar);
+ srcBlit.width = 0x80;
+ srcBlit.height = 0x80;
+ destBlit.pixels = dest;
+ destBlit.width = width * 8;
+ destBlit.height = height * 8;
+ BlitBitmapRect4Bit(&srcBlit, &destBlit, 0, 0, x, y, GetKeypadIconWidth(curChar), GetKeypadIconHeight(curChar), 0);
+ x += GetKeypadIconWidth(curChar);
+ break;
+ case CHAR_EXTRA_EMOJI:
+ curChar = *src + 0x100;
+ src++;
+ //fallthrough
+ default:
+ if (curChar == CHAR_SPACE)
+ {
+ if (font == 0)
+ {
+ x += 5;
+ }
+ else
+ {
+ x += 4;
+ }
+ }
+ else
+ {
+ DecompressAndRenderGlyph(font, curChar, &srcBlit, &destBlit, dest, x, y, width, height);
+ if (font == 0)
+ {
+ x += gGlyphInfo.width;
+ }
+ else
+ {
+ x += gGlyphInfo.width + ZERO;
+ }
+ }
+ break;
+ }
+ }
+}
+
+void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height)
+{
+ if (font == 0)
+ DecompressGlyphFont0(glyph, FALSE);
+ else if (font == 5)
+ DecompressGlyphFont5(glyph, FALSE);
+ else
+ DecompressGlyphFont2(glyph, FALSE);
+ srcBlit->pixels = gGlyphInfo.pixels;
+ srcBlit->width = 16;
+ srcBlit->height = 16;
+ destBlit->pixels = destBuffer;
+ destBlit->width = width * 8;
+ destBlit->height = height * 8;
+ BlitBitmapRect4Bit(srcBlit, destBlit, 0, 0, x, y, gGlyphInfo.width, gGlyphInfo.height, 0);
+}
+
+void HelpSystem_PrintTextInTopLeftCorner(const u8 * str)
+{
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(5, gDecompressionBuffer + 0x3D00, str, 6, 2, 7, 2);
+}
+
+void HelpSystem_PrintTextRightAlign_Row52(const u8 * str)
+{
+ s32 left = 0x7C - GetStringWidth(0, str, 0);
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2);
+}
+
+void HelpSystem_PrintTextAt(const u8 * str, u8 x, u8 y)
+{
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str, x, y, 26, 16);
+}
+
+void HelpSystem_PrintQuestionAndAnswerPair(const u8 * question, const u8 * answer)
+{
+ CpuFill16(0xEEEE, gDecompressionBuffer + 0x0000, 0x3400);
+ GenerateFontHalfRowLookupTable(1, 14, 2);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, question, 0, 0, 26, 16);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x09C0, answer, 0, 0, 26, 13);
+}
+
+void HelpSystem_PrintTopicMouseoverDescription(const u8 * str)
+{
+ CpuFill16(0x1111, gDecompressionBuffer + 0x23C0, 0x1040);
+ GenerateFontHalfRowLookupTable(2, 1, 3);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x23C0, str, 2, 6, 26, 5);
+}
+
+void HelpSystem_FillPanel3(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x3D00, 0x1C0);
+}
+
+void HelpSystem_FillPanel2(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x3400, 0x400);
+}
+
+void HelpSystem_FillPanel1(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x0000, 0x3400);
+}
+
+void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
+{
+ gHelpSystemListMenu.sub = a0->sub;
+ gHelpSystemListMenu.itemsAbove = a1;
+ gHelpSystemListMenu.cursorPos = a2;
+ gHelpSystemListMenu.state = 0;
+ if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
+ gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
+ HS_ShowOrHideMainWindowText(0);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+}
+
+void HelpSystem_SetInputDelay(u8 a0)
+{
+ sDelayTimer = a0;
+}
+
+s32 HelpSystem_GetMenuInput(void)
+{
+ if (sDelayTimer != 0)
+ {
+ sDelayTimer--;
+ return -1;
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return -2;
+ }
+ else if (JOY_NEW(L_BUTTON | R_BUTTON))
+ {
+ return -6;
+ }
+ else if (JOY_REPT(DPAD_UP))
+ {
+ if (!MoveCursor(1, 0))
+ PlaySE(SE_SELECT);
+ return -4;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (!MoveCursor(1, 1))
+ PlaySE(SE_SELECT);
+ return -5;
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (!MoveCursor(7, 0))
+ PlaySE(SE_SELECT);
+ return -4;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (!MoveCursor(7, 1))
+ PlaySE(SE_SELECT);
+ return -5;
+ }
+ else
+ return -1;
+}
+
+void HS_UpdateMenuScrollArrows(void)
+{
+ u8 topItemIdx = gHelpSystemListMenu.sub.totalItems - 7;
+ if (gHelpSystemListMenu.sub.totalItems > 7)
+ {
+ s32 cursorPos = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos;
+ HS_ShowOrHideScrollArrows(0, 0); // Hide both
+ if (cursorPos == 0)
+ HS_ShowOrHideScrollArrows(1, 1); // Show bottom
+ else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0)
+ HS_ShowOrHideScrollArrows(1, 1); // Show bottom
+ else if (gHelpSystemListMenu.itemsAbove == topItemIdx)
+ HS_ShowOrHideScrollArrows(0, 1); // Show top
+ else if (gHelpSystemListMenu.itemsAbove != 0)
+ {
+ // Show both
+ HS_ShowOrHideScrollArrows(0, 1);
+ HS_ShowOrHideScrollArrows(1, 1);
+ }
+ }
+}
+
+void PrintListMenuItems(void)
+{
+ u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
+ s32 i;
+ s32 r5 = gHelpSystemListMenu.itemsAbove;
+
+ for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
+ {
+ u8 x = gHelpSystemListMenu.sub.left + 8;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * i;
+ HelpSystem_PrintTextAt(gHelpSystemListMenu.sub.items[r5].label, x, y);
+ r5++;
+ }
+}
+
+void PlaceListMenuCursor(void)
+{
+ u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
+ u8 x = gHelpSystemListMenu.sub.left;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
+ HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y);
+}
+
+void HS_RemoveSelectionCursorAt(u8 i)
+{
+ u8 glyphHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
+ u8 x = gHelpSystemListMenu.sub.left;
+ u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight;
+ HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y);
+}
+
+u8 TryMoveCursor1(u8 dirn)
+{
+ u16 midPoint;
+ if (dirn == 0)
+ {
+ if (gHelpSystemListMenu.sub.maxShowed == 1)
+ midPoint = 0;
+ else
+ midPoint = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
+ if (gHelpSystemListMenu.itemsAbove == 0)
+ {
+ if (gHelpSystemListMenu.cursorPos != 0)
+ {
+ gHelpSystemListMenu.cursorPos--;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ if (gHelpSystemListMenu.cursorPos > midPoint)
+ {
+ gHelpSystemListMenu.cursorPos--;
+ return 1;
+ }
+ else
+ {
+ gHelpSystemListMenu.itemsAbove--;
+ return 2;
+ }
+ }
+ else
+ {
+ if (gHelpSystemListMenu.sub.maxShowed == 1)
+ midPoint = 0;
+ else
+ midPoint = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
+ if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
+ {
+ if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1)
+ {
+ gHelpSystemListMenu.cursorPos++;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ else if (gHelpSystemListMenu.cursorPos < midPoint)
+ {
+ gHelpSystemListMenu.cursorPos++;
+ return 1;
+ }
+ else
+ {
+ gHelpSystemListMenu.itemsAbove++;
+ return 2;
+ }
+ }
+}
+
+bool8 MoveCursor(u8 by, u8 dirn)
+{
+ u8 r7 = gHelpSystemListMenu.cursorPos;
+ u8 flags = 0;
+ s32 i;
+ for (i = 0; i < by; i++)
+ flags |= TryMoveCursor1(dirn);
+
+ switch (flags)
+ {
+ case 0:
+ default:
+ // neither changed
+ return TRUE;
+ case 1:
+ // changed cursorPos only
+ HS_RemoveSelectionCursorAt(r7);
+ PlaceListMenuCursor();
+ CommitTilemap();
+ break;
+ case 2:
+ case 3:
+ // changed itemsAbove
+ if (GetHelpSystemMenuLevel() == 1)
+ {
+ HelpSystem_SetInputDelay(2);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+ HelpSystem_PrintTopicLabel();
+ HS_UpdateMenuScrollArrows();
+ }
+ else
+ {
+ HS_ShowOrHideMainWindowText(0);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+ HS_ShowOrHideMainWindowText(1);
+ }
+ CommitTilemap();
+ break;
+ }
+ return FALSE;
+}
diff --git a/src/ice.c b/src/ice.c
index ed0c93430..fc3d80dea 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -533,7 +533,7 @@ static void sub_80AF108(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[2] + targetX;
sprite->data[3] = gBattleAnimArgs[1] + attackerY;
sprite->data[4] = gBattleAnimArgs[3] + targetY;
- sub_8074C80(sprite);
+ SetupLinearTranslationWithFixedDuration(sprite);
// won't match with while loop
for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2])
;
@@ -548,7 +548,7 @@ static void sub_80AF108(struct Sprite *sprite)
sprite->data[2] = targetX;
sprite->data[3] = attackerY;
sprite->data[4] = targetY;
- sub_8074C80(sprite);
+ SetupLinearTranslationWithFixedDuration(sprite);
sprite->data[3] = gBattleAnimArgs[5];
sprite->data[4] = gBattleAnimArgs[6];
sprite->callback = sub_80AF28C;
@@ -686,7 +686,7 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
sprite->pos2.x = sprite->pos2.y = 0;
for (i = 0; i < 8; ++i)
sprite->data[i] = tempDataHolder[i];
- sprite->callback = sub_8075830;
+ sprite->callback = InitAndStartAnimFastLinearTranslationWithSpeed;
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2);
}
@@ -944,7 +944,7 @@ void AnimTask_Haze1(u8 taskId)
GetBattleAnimBg1Data(&animBg);
LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
- LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
+ LoadPalette(&gDefaultWeatherSpritePalette, animBg.paletteId * 16, 32);
if (IsContest())
sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0);
gTasks[taskId].func = AnimTask_Haze2;
@@ -1042,7 +1042,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
GetBattleAnimBg1Data(&animBg);
LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
- LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
+ LoadPalette(&gDefaultWeatherSpritePalette, animBg.paletteId * 16, 32);
if (IsContest())
sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0);
gTasks[taskId].data[15] = -1;
diff --git a/src/link.c b/src/link.c
index 4a0f8561f..d9de614ea 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1369,7 +1369,7 @@ static void LinkCB_WaitAckCommand5FFF(void)
}
if (count == linkPlayerCount)
{
- gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000);
+ gBattleTypeFlags &= ~(BATTLE_TYPE_LINK_ESTABLISHED | 0xFFFF0000);
gLinkVSyncDisabled = TRUE;
CloseLink();
gLinkCallback = NULL;
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 31e76dfd0..cf23098d7 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -1325,7 +1325,7 @@ static void RfuFunc_WaitAck5F00(void)
}
if (count == playerCount)
{
- gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000);
+ gBattleTypeFlags &= ~(BATTLE_TYPE_LINK_ESTABLISHED | 0xFFFF0000);
if (Rfu.parent_child == MODE_CHILD)
{
Rfu.errorState = 3;
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index 4539c884b..4728ca05c 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -850,7 +850,7 @@ bool8 MetatileBehavior_IsStrengthButton(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsPlayerFacingMB_8D(u8 tile, u8 playerDirection)
+bool8 MetatileBehavior_IsPlayerFacingCableClubWirelessMonitor(u8 tile, u8 playerDirection)
{
if(playerDirection != DIR_NORTH)
return FALSE;
@@ -986,8 +986,8 @@ bool8 MetatileBehavior_IsCup(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse_19(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_20(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsPolishedWindow(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsBeautifulSkyWindow(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsBlinkingLights(u8 metatileBehavior)
{
@@ -997,9 +997,9 @@ bool8 MetatileBehavior_IsBlinkingLights(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsMB9F(u8 metatileBehavior)
+bool8 MetatileBehavior_IsNeatlyLinedUpTools(u8 metatileBehavior)
{
- if(metatileBehavior == MB_9F)
+ if(metatileBehavior == MB_NEATLY_LINED_UP_TOOLS)
return TRUE;
else
return FALSE;
@@ -1029,9 +1029,9 @@ bool8 MetatileBehavior_IsBurglary(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsMBA3(u8 metatileBehavior)
+bool8 MetatileBehavior_IsTrainerTowerMonitor(u8 metatileBehavior)
{
- if(metatileBehavior == MB_A3)
+ if(metatileBehavior == MB_TRAINER_TOWER_MONITOR)
return TRUE;
else
return FALSE;
diff --git a/src/mevent_show_card.c b/src/mevent_show_card.c
index f6687eab7..86864dc4a 100644
--- a/src/mevent_show_card.c
+++ b/src/mevent_show_card.c
@@ -317,7 +317,7 @@ static void sub_8145A98(void)
}
for (i = 0, r6 = 0; i < 40; i++)
{
- if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_SPECIAL_F7)
+ if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_DYNAMIC_PLACEHOLDER)
{
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.unk_122[i];
r6++;
diff --git a/src/new_game.c b/src/new_game.c
index 30508cd9a..f96dca32e 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -138,7 +138,7 @@ void NewGameInitData(void)
gSaveBlock1Ptr->registeredItem = 0;
ClearBag();
NewGameInitPCItems();
- sub_809C794();
+ ClearEnigmaBerries();
InitEasyChatPhrases();
ResetTrainerFanClub();
UnionRoomChat_InitializeRegisteredTexts();
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 35864576f..96ba0adee 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -704,7 +704,7 @@ static void Task_OakSpeech5(u8 taskId)
}
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 2, 30, 18);
CopyBgTilemapBufferToVram(1);
- sub_8006398(gTasks[taskId].data[5]);
+ DestroyTextCursorSprite(gTasks[taskId].data[5]);
sOakSpeechResources->unk_0014[0] = RGB_BLACK;
LoadPalette(sOakSpeechResources->unk_0014, 0, 2);
gTasks[taskId].data[3] = 32;
@@ -822,7 +822,7 @@ static void Task_OakSpeech7(u8 taskId)
}
break;
case 4:
- sub_8006398(gTasks[taskId].data[5]);
+ DestroyTextCursorSprite(gTasks[taskId].data[5]);
PlayBGM(MUS_NEW_GAME_EXIT);
data[15] = 24;
gMain.state++;
diff --git a/src/overworld.c b/src/overworld.c
index e3e8fb885..10a700e1f 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -292,8 +292,8 @@ void Overworld_ResetStateAfterFly(void)
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_FLASH_ACTIVE);
- FlagClear(FLAG_0x808);
- VarSet(VAR_0x404D, 0);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
+ VarSet(VAR_QL_ENTRANCE, 0);
}
void Overworld_ResetStateAfterTeleport(void)
@@ -306,8 +306,8 @@ void Overworld_ResetStateAfterTeleport(void)
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_FLASH_ACTIVE);
- FlagClear(FLAG_0x808);
- VarSet(VAR_0x404D, 0);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
+ VarSet(VAR_QL_ENTRANCE, 0);
}
void Overworld_ResetStateAfterDigEscRope(void)
@@ -320,8 +320,8 @@ void Overworld_ResetStateAfterDigEscRope(void)
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_FLASH_ACTIVE);
- FlagClear(FLAG_0x808);
- VarSet(VAR_0x404D, 0);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
+ VarSet(VAR_QL_ENTRANCE, 0);
}
static void Overworld_ResetStateAfterWhitingOut(void)
@@ -334,8 +334,8 @@ static void Overworld_ResetStateAfterWhitingOut(void)
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_FLASH_ACTIVE);
- FlagClear(FLAG_0x808);
- VarSet(VAR_0x404D, 0);
+ FlagClear(FLAG_SYS_QL_DEPARTED);
+ VarSet(VAR_QL_ENTRANCE, 0);
}
static void Overworld_ResetStateOnContinue(void)
@@ -1393,7 +1393,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
struct FieldInput fieldInput;
sub_8112B3C();
- sub_805BEB8();
+ UpdatePlayerAvatarTransitionState();
FieldClearPlayerInput(&fieldInput);
FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
FieldInput_HandleCancelSignpost(&fieldInput);
@@ -1419,7 +1419,7 @@ static void DoCB1_Overworld_QuestLogPlayback(void)
struct FieldInput fieldInput;
sub_8112B3C();
- sub_805BEB8();
+ UpdatePlayerAvatarTransitionState();
sub_8111C68();
FieldClearPlayerInput(&fieldInput);
fieldInput = gQuestLogFieldInput;
@@ -1848,7 +1848,7 @@ static bool32 load_map_stuff(u8 *state, bool32 a1)
(*state)++;
break;
case 1:
- sub_8111F14();
+ QuestLog_InitPalettesBackup();
(*state)++;
break;
case 2:
@@ -1865,8 +1865,8 @@ static bool32 load_map_stuff(u8 *state, bool32 a1)
sub_8057114();
if (gQuestLogState != QL_STATE_PLAYBACK)
{
- sub_80CC534();
- sub_80CC59C();
+ QuestLog_CheckDepartingIndoorsMap();
+ QuestLog_TryRecordDepartedLocation();
}
SetHelpContextForMap();
(*state)++;
@@ -1931,7 +1931,7 @@ static bool32 sub_8056CD8(u8 *state)
{
case 0:
InitOverworldBgs();
- sub_8111F14();
+ QuestLog_InitPalettesBackup();
sub_8057024(FALSE);
sub_8057100();
sub_8057114();
@@ -1965,7 +1965,7 @@ static bool32 map_loading_iteration_2_link(u8 *state)
(*state)++;
break;
case 1:
- sub_8111F14();
+ QuestLog_InitPalettesBackup();
sub_8057024(1);
(*state)++;
break;
@@ -2203,7 +2203,7 @@ static void CreateLinkPlayerSprites(void)
void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void)
{
FieldClearVBlankHBlankCallbacks();
- gUnknown_2036E28 = 1;
+ gGlobalFieldTintMode = QL_TINT_GRAYSCALE;
ScriptContext1_Init();
ScriptContext2_Disable();
SetMainCallback1(NULL);
@@ -2214,7 +2214,7 @@ void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void)
void CB2_SetUpOverworldForQLPlayback(void)
{
FieldClearVBlankHBlankCallbacks();
- gUnknown_2036E28 = 1;
+ gGlobalFieldTintMode = QL_TINT_GRAYSCALE;
LoadSaveblockMapHeader();
ScriptContext1_Init();
ScriptContext2_Disable();
@@ -2243,7 +2243,7 @@ static bool32 LoadMap_QLPlayback(u8 *state)
case 0:
InitOverworldBgs();
FieldClearVBlankHBlankCallbacks();
- sub_8111F14();
+ QuestLog_InitPalettesBackup();
sub_81113E4();
sub_8111438();
if (GetQuestLogStartType() == QL_START_WARP)
@@ -2316,7 +2316,7 @@ void CB2_EnterFieldFromQuestLog(void)
{
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
- gUnknown_2036E28 = 3;
+ gGlobalFieldTintMode = QL_TINT_BACKUP_GRAYSCALE;
ResetSafariZoneFlag_();
LoadSaveblockMapHeader();
LoadSaveblockObjEventScripts();
@@ -2367,10 +2367,10 @@ static bool8 FieldCB2_Credits_WaitFade(void)
return FALSE;
}
-bool32 Overworld_DoScrollSceneForCredits(u8 *state_p, const struct CreditsOverworldCmd * script, u8 a2)
+bool32 Overworld_DoScrollSceneForCredits(u8 *state_p, const struct CreditsOverworldCmd * script, u8 tintMode)
{
sCreditsOverworld_Script = script;
- gUnknown_2036E28 = a2;
+ gGlobalFieldTintMode = tintMode;
return SetUpScrollSceneForCredits(state_p, 0);
}
diff --git a/src/party_menu.c b/src/party_menu.c
index 1acbc04ea..8dcc1d450 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -4315,7 +4315,7 @@ static void sub_8124E48(void)
&& PSA_IsCancelDisabled() == TRUE)
{
GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId));
- AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4);
+ AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], FRIENDSHIP_EVENT_LEARN_TMHM);
if (gSpecialVar_ItemId <= ITEM_TM50)
RemoveBagItem(gSpecialVar_ItemId, 1);
SetMainCallback2(gPartyMenu.exitCallback);
@@ -4336,7 +4336,7 @@ static void sub_8124EFC(void)
RemoveMonPPBonus(mon, moveIdx);
SetMonMoveSlot(mon, ItemIdToBattleMoveId(gSpecialVar_ItemId), moveIdx);
- AdjustFriendship(mon, 4);
+ AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM);
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, mon, gSpecialVar_ItemId, move);
if (gSpecialVar_ItemId <= ITEM_TM50)
RemoveBagItem(gSpecialVar_ItemId, 1);
@@ -4837,7 +4837,7 @@ static void Task_LearnedMove(u8 taskId)
if (move[1] == 0)
{
- AdjustFriendship(mon, 4);
+ AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM);
if (item < ITEM_HM01_CUT)
RemoveBagItem(item, 1);
}
diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c
index b3f3d18ad..3c05010ae 100644
--- a/src/pokedex_screen.c
+++ b/src/pokedex_screen.c
@@ -868,7 +868,7 @@ void sub_810250C(void)
gUnknown_203ACF0->field_6C = sub_8104BBC(1, 1);
gUnknown_203ACF0->field_66 = sub_8104BBC(0, 0);
gUnknown_203ACF0->field_68 = sub_8104BBC(1, 0);
- sub_8072474(0x80);
+ SetBGMVolume_SuppressHelpSystemReduction(0x80);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -925,7 +925,7 @@ bool8 sub_8102798(void)
FREE_IF_NOT_NULL(GetBgTilemapBuffer(1));
FREE_IF_NOT_NULL(GetBgTilemapBuffer(2));
FREE_IF_NOT_NULL(GetBgTilemapBuffer(3));
- sub_807249C();
+ BGMVolumeMax_EnableHelpSystemReduction();
break;
}
return TRUE;
diff --git a/src/pokemon.c b/src/pokemon.c
index f8c03ea02..563073237 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1594,16 +1594,16 @@ static const u8 sStatsToRaise[] =
static const s8 sFriendshipEventDeltas[][3] =
{
- { 5, 3, 2 },
- { 5, 3, 2 },
- { 1, 1, 0 },
- { 3, 2, 1 },
- { 1, 1, 0 },
- { 1, 1, 1 },
- { 3, 3, 3 },
- {-1, -1, -1 },
- {-5, -5, -10 },
- {-5, -5, -10 },
+ [FRIENDSHIP_EVENT_GROW_LEVEL] = { 5, 3, 2 },
+ [FRIENDSHIP_EVENT_VITAMIN] = { 5, 3, 2 },
+ [FRIENDSHIP_EVENT_BATTLE_ITEM] = { 1, 1, 0 },
+ [FRIENDSHIP_EVENT_LEAGUE_BATTLE] = { 3, 2, 1 },
+ [FRIENDSHIP_EVENT_LEARN_TMHM] = { 1, 1, 0 },
+ [FRIENDSHIP_EVENT_WALKING] = { 1, 1, 1 },
+ [FRIENDSHIP_EVENT_MASSAGE] = { 3, 3, 3 },
+ [FRIENDSHIP_EVENT_FAINT_SMALL] = {-1, -1, -1 },
+ [FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE] = {-5, -5, -10 },
+ [FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10 },
};
static const u16 sHMMoves[] =
@@ -1622,7 +1622,7 @@ static const u16 sDeoxysBaseStats[] =
180, // Sp.Attack
20, // Sp.Defense
};
-#elif defined LEAFGREEN
+#elif defined(LEAFGREEN)
static const u16 sDeoxysBaseStats[] =
{
50, // Hp
@@ -4410,7 +4410,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId)
{
- u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
+ u32 status = GetMonData(mon, MON_DATA_STATUS, NULL);
if (status & healMask)
{
@@ -4874,7 +4874,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
u8 GetNature(struct Pokemon *mon)
{
- return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25;
+ return GetMonData(mon, MON_DATA_PERSONALITY, NULL) % 25;
}
static u8 GetNatureFromPersonality(u32 personality)
@@ -4886,12 +4886,12 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
{
int i;
u16 targetSpecies = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
u8 level;
u16 friendship;
- u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0);
+ u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, NULL);
u16 upperPersonality = personality >> 16;
u8 holdEffect;
@@ -4906,8 +4906,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
switch (type)
{
case EVO_MODE_NORMAL:
- level = GetMonData(mon, MON_DATA_LEVEL, 0);
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+ level = GetMonData(mon, MON_DATA_LEVEL, NULL);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
for (i = 0; i < 5; i++)
{
@@ -4938,17 +4938,17 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
break;
case EVO_LEVEL_ATK_GT_DEF:
if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0))
+ if (GetMonData(mon, MON_DATA_ATK, NULL) > GetMonData(mon, MON_DATA_DEF, NULL))
targetSpecies = gEvolutionTable[species][i].targetSpecies;
break;
case EVO_LEVEL_ATK_EQ_DEF:
if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0))
+ if (GetMonData(mon, MON_DATA_ATK, NULL) == GetMonData(mon, MON_DATA_DEF, NULL))
targetSpecies = gEvolutionTable[species][i].targetSpecies;
break;
case EVO_LEVEL_ATK_LT_DEF:
if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0))
+ if (GetMonData(mon, MON_DATA_ATK, NULL) < GetMonData(mon, MON_DATA_DEF, NULL))
targetSpecies = gEvolutionTable[species][i].targetSpecies;
break;
case EVO_LEVEL_SILCOON:
@@ -5237,15 +5237,10 @@ static u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
return n;
}
-// TODO: Move these to constants/trainers.h
-#define TRAINER_CLASS_ELITE_FOUR 0x54
-#define TRAINER_CLASS_LEADER 0x57
-#define TRAINER_CLASS_CHAMPION 0x5A
-
void AdjustFriendship(struct Pokemon *mon, u8 event)
{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL);
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
u8 holdEffect;
if (heldItem == ITEM_ENIGMA_BERRY)
@@ -5262,40 +5257,56 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
if (species && species != SPECIES_EGG)
{
+ s8 delta;
+ // Friendship level refers to the column in sFriendshipEventDeltas.
+ // 0-99: Level 0 (maximum increase, typically)
+ // 100-199: Level 1
+ // 200-255: Level 2
u8 friendshipLevel = 0;
- s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
- if (friendship > 99)
+ s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
+ if (friendship >= 100)
friendshipLevel++;
- if (friendship > 199)
+ if (friendship >= 200)
friendshipLevel++;
- if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
- && (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE
- || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
+ if (event == FRIENDSHIP_EVENT_WALKING)
{
- s8 delta = sFriendshipEventDeltas[event][friendshipLevel];
- if (delta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- delta = (150 * delta) / 100;
-
- friendship += delta;
- if (delta > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == GetCurrentRegionMapSectionId())
- friendship++;
- }
+ // 50% chance every 128 steps
+ if (Random() & 1)
+ return;
+ }
+ if (event == FRIENDSHIP_EVENT_LEAGUE_BATTLE)
+ {
+ // Only if it's a trainer battle with league progression significance
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
+ return;
+ if (!(gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_LEADER_2
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_ELITE_FOUR_2
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION_2))
+ return;
+ }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
+ delta = sFriendshipEventDeltas[event][friendshipLevel];
+ if (delta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ // 50% increase, rounding down
+ delta = (150 * delta) / 100;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
+ friendship += delta;
+ if (delta > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
+ friendship++;
}
+
+ // Clamp to u8
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
}
@@ -5310,7 +5321,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
for (i = 0; i < NUM_STATS; i++)
{
- evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0);
+ evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, NULL);
totalEVs += evs[i];
}
@@ -5351,7 +5362,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
break;
}
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
if (heldItem == ITEM_ENIGMA_BERRY)
{
@@ -5390,7 +5401,7 @@ u16 GetMonEVCount(struct Pokemon *mon)
u16 count = 0;
for (i = 0; i < NUM_STATS; i++)
- count += GetMonData(mon, MON_DATA_HP_EV + i, 0);
+ count += GetMonData(mon, MON_DATA_HP_EV + i, NULL);
return count;
}
@@ -5417,7 +5428,7 @@ u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
{
do
{
- if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF))
+ if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, NULL) & 0xF))
retVal |= curBit;
partyIndex++;
curBit <<= 1;
@@ -5425,7 +5436,7 @@ u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
}
while (selection);
}
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF)
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, NULL) & 0xF)
{
retVal = 1;
}
@@ -5445,7 +5456,7 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
{
do
{
- if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0))
+ if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, NULL))
retVal |= curBit;
partyIndex++;
curBit <<= 1;
@@ -5453,7 +5464,7 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
}
while (selection);
}
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0))
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, NULL))
{
retVal = 1;
}
@@ -5511,7 +5522,7 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon)
u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL);
if (species == SPECIES_EGG)
{
return 0;
@@ -5532,12 +5543,12 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
{
u16 learnedMoves[4];
u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
int i, j, k;
for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
for (i = 0; i < 20; i++)
{
@@ -5583,15 +5594,15 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
u16 learnedMoves[4];
u16 moves[20];
u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
int i, j, k;
if (species == SPECIES_EGG)
return 0;
for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
for (i = 0; i < 20; i++)
{
@@ -5685,9 +5696,9 @@ void PlayMapChosenOrBattleBGM(u16 songId)
const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality);
}
@@ -5707,9 +5718,9 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p
const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon)
{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, NULL);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
}
@@ -5757,7 +5768,7 @@ bool8 IsTradedMon(struct Pokemon *mon)
u8 otName[PLAYER_NAME_LENGTH];
u32 otId;
GetMonData(mon, MON_DATA_OT_NAME, otName);
- otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
return IsOtherTrainer(otId, otName);
}
@@ -5824,7 +5835,7 @@ void SetWildMonHeldItem(void)
if (!(gBattleTypeFlags & (BATTLE_TYPE_POKEDUDE | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER)))
{
u16 rnd = Random() % 100;
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
+ u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
if (gBaseStats[species].item1 == gBaseStats[species].item2)
{
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
@@ -5843,8 +5854,8 @@ void SetWildMonHeldItem(void)
bool8 IsMonShiny(struct Pokemon *mon)
{
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
return IsShinyOtIdPersonality(otId, personality);
}
@@ -5893,7 +5904,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
case 0:
default:
return FALSE;
- case 1:
+ case DEOXYS_CHECK_BATTLE_SPRITE:
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE;
if (!gMain.inBattle)
@@ -5903,7 +5914,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
break;
case 2:
break;
- case 3:
+ case DEOXYS_CHECK_TRADE_MAIN:
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE;
if (!gMain.inBattle)
@@ -5913,7 +5924,7 @@ bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
return FALSE;
case 4:
break;
- case 5:
+ case DEOXYS_CHECK_BATTLE_ANIM:
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (!gMain.inBattle)
@@ -5948,7 +5959,7 @@ static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId)
u16 statValue;
u8 nature;
- if (gBattleTypeFlags & BATTLE_TYPE_20 || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK_ESTABLISHED || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
{
return statValue = 0;
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index b2ff1209b..0d10e9948 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -3996,16 +3996,16 @@ static void sub_813995C(void)
if (sMonSummaryScreen->savedCallback == CB2_ReturnToTradeMenuFromSummary)
{
if (sMonSummaryScreen->isEnemyParty == TRUE)
- spriteId = CreateMonPicSprite(species, trainerId, personality, 1, 60, 65, 12, 0xffff, 1);
+ spriteId = CreateMonPicSprite(species, trainerId, personality, TRUE, 60, 65, 12, 0xffff, TRUE);
else
- spriteId = CreateMonPicSprite_HandleDeoxys(species, trainerId, personality, 1, 60, 65, 12, 0xffff);
+ spriteId = CreateMonPicSprite_HandleDeoxys(species, trainerId, personality, TRUE, 60, 65, 12, 0xffff);
}
else
{
- if (ShouldIgnoreDeoxysForm(3, sLastViewedMonIndex))
- spriteId = CreateMonPicSprite(species, trainerId, personality, 1, 60, 65, 12, 0xffff, 1);
+ if (ShouldIgnoreDeoxysForm(DEOXYS_CHECK_TRADE_MAIN, sLastViewedMonIndex))
+ spriteId = CreateMonPicSprite(species, trainerId, personality, TRUE, 60, 65, 12, 0xffff, TRUE);
else
- spriteId = CreateMonPicSprite_HandleDeoxys(species, trainerId, personality, 1, 60, 65, 12, 0xffff);
+ spriteId = CreateMonPicSprite_HandleDeoxys(species, trainerId, personality, TRUE, 60, 65, 12, 0xffff);
}
FreeSpriteOamMatrix(&gSprites[spriteId]);
@@ -4130,7 +4130,7 @@ static void sub_8139DBC(void)
}
else
{
- if (ShouldIgnoreDeoxysForm(3, sLastViewedMonIndex))
+ if (ShouldIgnoreDeoxysForm(DEOXYS_CHECK_TRADE_MAIN, sLastViewedMonIndex))
sMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 0);
else
sMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 1);
diff --git a/src/quest_log.c b/src/quest_log.c
index 3ea558356..a9686ab6f 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -77,7 +77,7 @@ 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 u16 *sPalettesBackup = NULL;
static EWRAM_DATA struct UnkStruct_203AE94 sQuestLogCurrentScene = {0};
static EWRAM_DATA struct QuestLogEntry sQuestLogSceneRecordBuffer[32] = {0};
EWRAM_DATA u16 sQuestLogCursor = 0;
@@ -121,7 +121,7 @@ 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 QL_SlightlyDarkenSomePals(void);
static void TogglePlaybackStateForOverworldLock(u8);
static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16);
static bool8 RecordHeadAtEndOfEntryOrScriptContext2Enabled(void);
@@ -420,7 +420,7 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId)
{
u8 i;
- sub_811381C();
+ QL_EnableRecordingSteps();
sNumScenes = 0;
for (i = 0; i < QUEST_LOG_SCENE_COUNT; i++)
{
@@ -1066,15 +1066,15 @@ static void QuestLog_WaitFadeAndCancelPlayback(void)
}
}
-void sub_8111F14(void)
+void QuestLog_InitPalettesBackup(void)
{
if (gQuestLogState == QL_STATE_PLAYBACK_LAST)
- gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16));
+ sPalettesBackup = AllocZeroed(PLTT_SIZE);
}
-void sub_8111F38(u16 a0, u16 a1)
+void QuestLog_BackUpPalette(u16 offset, u16 size)
{
- CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1);
+ CpuCopy16(gPlttBufferUnfaded + offset, sPalettesBackup + offset, size * 2);
}
static bool8 FieldCB2_FinalScene(void)
@@ -1152,7 +1152,7 @@ static void Task_EndQuestLog(u8 taskId)
case 0:
gDisableMapMusicChangeOnMapLoad = 0;
Overworld_PlaySpecialMapMusic();
- sub_811229C();
+ QL_SlightlyDarkenSomePals();
FillWindowPixelRect(sQuestLogHeaderWindowIds[0], 0xF, 0, 0, sQuestLogHeaderWindowTemplates[0].width * 8, sQuestLogHeaderWindowTemplates[0].height * 8);
tState++;
break;
@@ -1178,13 +1178,13 @@ static void Task_EndQuestLog(u8 taskId)
default:
if (sQuestLogCurrentScene.sceneEndMode == 1)
ShowMapNamePopup(TRUE);
- CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
- Free(gUnknown_203AE90);
+ CpuCopy16(sPalettesBackup, gPlttBufferUnfaded, PLTT_SIZE);
+ Free(sPalettesBackup);
sQuestLogCurrentScene = (struct UnkStruct_203AE94){};
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
ScriptContext2_Disable();
gTextFlags.autoScroll = FALSE;
- gUnknown_2036E28 = 0;
+ gGlobalFieldTintMode = QL_TINT_NONE;
DisableWildEncounters(FALSE);
gHelpSystemEnabled = TRUE;
DestroyTask(taskId);
@@ -1212,16 +1212,16 @@ static bool8 sub_81121D8(u8 taskId)
return FALSE;
}
-static void sub_811229C(void)
+static void QL_SlightlyDarkenSomePals(void)
{
- u16 *buffer = Alloc(0x400);
- CpuCopy16(gUnknown_203AE90, buffer, 0x400);
- sub_807B0C4(gUnknown_203AE90, gUnknown_203AE90, 0xd0);
- sub_807B0C4(gUnknown_203AE90 + 0x110, gUnknown_203AE90 + 0x110, 0x10);
- sub_807B0C4(gUnknown_203AE90 + 0x160, gUnknown_203AE90 + 0x160, 0x40);
- sub_807B0C4(gUnknown_203AE90 + 0x1b0, gUnknown_203AE90 + 0x1b0, 0x50);
- CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
- CpuCopy16(buffer, gUnknown_203AE90, 0x400);
+ u16 *buffer = Alloc(PLTT_SIZE);
+ CpuCopy16(sPalettesBackup, buffer, PLTT_SIZE);
+ SlightlyDarkenPalsInWeather(sPalettesBackup, sPalettesBackup, 13 * 16);
+ SlightlyDarkenPalsInWeather(sPalettesBackup + 17 * 16, sPalettesBackup + 17 * 16, 1 * 16);
+ SlightlyDarkenPalsInWeather(sPalettesBackup + 22 * 16, sPalettesBackup + 22 * 16, 4 * 16);
+ SlightlyDarkenPalsInWeather(sPalettesBackup + 27 * 16, sPalettesBackup + 27 * 16, 5 * 16);
+ CpuCopy16(sPalettesBackup, gPlttBufferUnfaded, PLTT_SIZE);
+ CpuCopy16(buffer, sPalettesBackup, PLTT_SIZE);
Free(buffer);
}
@@ -1295,10 +1295,10 @@ void sub_811246C(struct Sprite *sprite)
ObjectEventSetHeldMovement(objectEvent, sMovementScripts[0][0]);
sMovementScripts[0][0] = 0xFF;
}
- if (sMovementScripts[0][1] != OBJ_EVENT_ID_PLAYER)
+ if (sMovementScripts[0][1] != 0xFF)
{
- sub_8150454();
- sMovementScripts[0][1] = OBJ_EVENT_ID_PLAYER;
+ QuestLogUpdatePlayerSprite(sMovementScripts[0][1]);
+ sMovementScripts[0][1] = 0xFF;
}
sub_8063E28(objectEvent, sprite);
}
@@ -1313,7 +1313,7 @@ void sub_811246C(struct Sprite *sprite)
}
}
-void sub_81124EC(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId)
+void QuestLogRecordNPCStep(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId)
{
if (!RecordHeadAtEndOfEntryOrScriptContext2Enabled())
{
@@ -1328,7 +1328,7 @@ void sub_81124EC(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId)
}
}
-void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration)
+void QuestLogRecordNPCStepWithDuration(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration)
{
if (!RecordHeadAtEndOfEntry())
{
@@ -1343,7 +1343,7 @@ void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 dur
}
}
-void sub_8112628(u8 movementActionId)
+void QuestLogRecordPlayerStep(u8 movementActionId)
{
if (!RecordHeadAtEndOfEntryOrScriptContext2Enabled())
{
@@ -1360,7 +1360,7 @@ void sub_8112628(u8 movementActionId)
}
}
-void sub_81126AC(u8 movementActionId, u8 duration)
+void QuestLogRecordPlayerStepWithDuration(u8 movementActionId, u8 duration)
{
if (!RecordHeadAtEndOfEntry())
{
@@ -1374,7 +1374,7 @@ void sub_81126AC(u8 movementActionId, u8 duration)
}
}
-void sub_8112720(u8 movementActionId)
+void QuestLogRecordPlayerAvatarGfxTransition(u8 movementActionId)
{
if (!RecordHeadAtEndOfEntry())
{
@@ -1387,7 +1387,7 @@ void sub_8112720(u8 movementActionId)
}
}
-void sub_811278C(u8 movementActionId, u8 duration)
+void QuestLogRecordPlayerAvatarGfxTransitionWithDuration(u8 movementActionId, u8 duration)
{
if (!RecordHeadAtEndOfEntry())
{
@@ -1404,13 +1404,21 @@ void sub_81127F8(struct FieldInput * a0)
{
if (sQuestLogCursor < sNumEventsInLogEntry)
{
+ // Retain only the following fields:
+ // - pressedAButton
+ // - checkStandardWildEncounter
+ // - heldDirection
+ // - heldDirection2
+ // - tookStep
+ // - pressedBButton
+ // - dpadDirection
u32 r2 = *(u32 *)a0 & 0x00FF00F3;
sCurQuestLogEntry[sQuestLogCursor].duration = sNextStepDelay;
sCurQuestLogEntry[sQuestLogCursor].command = 2;
sCurQuestLogEntry[sQuestLogCursor].localId = r2;
- sCurQuestLogEntry[sQuestLogCursor].mapNum = r2 >> 8;
+ sCurQuestLogEntry[sQuestLogCursor].mapNum = r2 >> 8; // always 0
sCurQuestLogEntry[sQuestLogCursor].mapGroup = r2 >> 16;
- sCurQuestLogEntry[sQuestLogCursor].animId = r2 >> 24;
+ sCurQuestLogEntry[sQuestLogCursor].animId = r2 >> 24; // always 0
sQuestLogCursor++;
if (ScriptContext2_IsEnabled())
sNextStepDelay = TRUE;
@@ -1434,13 +1442,13 @@ static void TogglePlaybackStateForOverworldLock(u8 a0)
}
}
-void sub_81128BC(u8 a0)
+void QuestLog_OnEscalatorWarp(u8 direction)
{
u8 r1 = sub_8112CAC();
- switch (a0)
+ switch (direction)
{
- case 1:
+ case QL_ESCALATOR_OUT: // warp out
if (r1 == 1)
gQuestLogPlaybackState = 3;
else if (r1 == 2)
@@ -1452,7 +1460,7 @@ void sub_81128BC(u8 a0)
gQuestLogPlaybackState = 4;
}
break;
- case 2:
+ case QL_ESCALATOR_IN: // warp in
if (r1 == 1)
gQuestLogPlaybackState = 1;
else if (r1 == 2)
@@ -1546,9 +1554,11 @@ void sub_8112B3C(void)
switch (sCurQuestLogEntry[sQuestLogCursor].command)
{
case 0:
+ // NPC movement action
sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].localId][0] = sCurQuestLogEntry[sQuestLogCursor].animId;
break;
case 1:
+ // State transition
sMovementScripts[sCurQuestLogEntry[sQuestLogCursor].localId][1] = sCurQuestLogEntry[sQuestLogCursor].animId;
break;
case 2:
@@ -1556,6 +1566,7 @@ void sub_8112B3C(void)
*(u32 *)&gQuestLogFieldInput = ((sCurQuestLogEntry[sQuestLogCursor].animId << 24) | (sCurQuestLogEntry[sQuestLogCursor].mapGroup << 16) | (sCurQuestLogEntry[sQuestLogCursor].mapNum << 8) | (sCurQuestLogEntry[sQuestLogCursor].localId << 0));
break;
case 3:
+ // End
gQuestLogPlaybackState = 3;
break;
case 0xFE:
@@ -1596,7 +1607,7 @@ void sub_8112B3C(void)
}
}
-void sub_8112C9C(void)
+void QL_AfterRecordFishActionSuccessful(void)
{
sNextStepDelay++;
}
diff --git a/src/quest_log_events.c b/src/quest_log_events.c
index 84a14f5e8..8fe66e183 100644
--- a/src/quest_log_events.c
+++ b/src/quest_log_events.c
@@ -173,10 +173,10 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
if (eventId == QL_EVENT_DEPARTED && sEventShouldNotRecordSteps == 2)
{
- sub_811381C();
+ QL_EnableRecordingSteps();
return;
}
- sub_811381C();
+ QL_EnableRecordingSteps();
if (gQuestLogState == QL_STATE_PLAYBACK)
return;
@@ -348,7 +348,7 @@ static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16 eventId, const u16 *
return FALSE;
}
-void sub_811381C(void)
+void QL_EnableRecordingSteps(void)
{
sEventShouldNotRecordSteps = 0;
}
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index da1c2b76e..4dcb13af2 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -7,71 +7,72 @@
#include "field_effect.h"
#include "field_effect_helpers.h"
#include "quest_log.h"
-
-static void sub_81504A8(void);
-static void sub_81504E8(void);
-static void sub_8150530(void);
-static void sub_81505C4(u8 taskId);
-static void sub_8150708(void);
-static void sub_815077C(void);
-static void sub_8150794(u8 taskId);
-static void sub_81507CC(void);
-static void sub_81507D8(void);
-static void sub_81507E4(void);
-static void sub_81507F0(void);
-static void sub_81507BC(struct ObjectEvent *a0, u8 a1);
-
-static void (*const gUnknown_8471EDC[])(void) = {
- sub_81504A8,
- sub_81504E8,
- sub_8150530,
- sub_8150708,
- sub_81507CC,
- sub_81507D8,
- sub_81507E4,
- sub_81507F0,
- sub_815077C
+#include "quest_log_player.h"
+
+static void QL_GfxTransition_Normal(void);
+static void QL_GfxTransition_Bike(void);
+static void QL_GfxTransition_Fish(void);
+static void Task_QLFishMovement(u8 taskId);
+static void QL_GfxTransition_StartSurf(void);
+static void QL_GfxTransition_VSSeeker(void);
+static void Task_QLVSSeekerMovement(u8 taskId);
+static void QL_GfxTransition_StopSurfSouth(void);
+static void QL_GfxTransition_StopSurfNorth(void);
+static void QL_GfxTransition_StopSurfWest(void);
+static void QL_GfxTransition_StopSurfEast(void);
+static void QL_SetObjectGraphicsId(struct ObjectEvent *object, u8 graphicsId);
+
+static void (*const sQLGfxTransitions[])(void) = {
+ [QL_PLAYER_GFX_NORMAL] = QL_GfxTransition_Normal,
+ [QL_PLAYER_GFX_BIKE] = QL_GfxTransition_Bike,
+ [QL_PLAYER_GFX_FISH] = QL_GfxTransition_Fish,
+ [QL_PLAYER_GFX_SURF] = QL_GfxTransition_StartSurf,
+ [QL_PLAYER_GFX_STOP_SURF_S] = QL_GfxTransition_StopSurfSouth,
+ [QL_PLAYER_GFX_STOP_SURF_N] = QL_GfxTransition_StopSurfNorth,
+ [QL_PLAYER_GFX_STOP_SURF_W] = QL_GfxTransition_StopSurfWest,
+ [QL_PLAYER_GFX_STOP_SURF_E] = QL_GfxTransition_StopSurfEast,
+ [QL_PLAYER_GFX_VSSEEKER] = QL_GfxTransition_VSSeeker
};
-void sub_8150454(u8 a0)
+void QuestLogUpdatePlayerSprite(u8 state)
{
- if (a0 < NELEMS(gUnknown_8471EDC))
- gUnknown_8471EDC[a0]();
+ if (state < NELEMS(sQLGfxTransitions))
+ sQLGfxTransitions[state]();
}
-bool32 sub_8150474(u8 a0)
+bool32 QuestLogTryRecordPlayerAvatarGfxTransition(u8 state)
{
if (gQuestLogPlaybackState == 2)
{
- sub_8112720(a0);
+ QuestLogRecordPlayerAvatarGfxTransition(state);
return TRUE;
}
return FALSE;
}
-void sub_8150498(u8 a0)
+void QuestLogCallUpdatePlayerSprite(u8 state)
{
- return sub_8150454(a0);
+ return QuestLogUpdatePlayerSprite(state);
}
-static void sub_81504A8(void)
+static void QL_GfxTransition_Normal(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_NORMAL));
ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
}
-static void sub_81504E8(void)
+static void QL_GfxTransition_Bike(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(1));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_BIKE));
ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE);
InitPlayerAvatarBikeState(0, 0);
}
-static void sub_8150530(void)
+static void QL_GfxTransition_Fish(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
@@ -81,17 +82,17 @@ static void sub_8150530(void)
u8 taskId;
ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE;
- taskId = CreateTask(sub_81505C4, 0xFF);
+ taskId = CreateTask(Task_QLFishMovement, 0xFF);
gTasks[taskId].data[0] = 0;
}
else
{
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_FISH));
StartSpriteAnim(sprite, GetFishingDirectionAnimNum(objectEvent->facingDirection));
}
}
-static void sub_81505C4(u8 taskId)
+static void Task_QLFishMovement(u8 taskId)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
@@ -101,7 +102,7 @@ static void sub_81505C4(u8 taskId)
case 0:
ObjectEventClearHeldMovementIfActive(objectEvent);
objectEvent->enableAnim = TRUE;
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(4));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_FISH));
StartSpriteAnim(sprite, GetFishingDirectionAnimNum(objectEvent->facingDirection));
gTasks[taskId].data[0]++;
gTasks[taskId].data[1] = 0;
@@ -122,9 +123,9 @@ static void sub_81505C4(u8 taskId)
if (sprite->animEnded)
{
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_NORMAL));
else
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
ObjectEventTurn(objectEvent, objectEvent->movementDirection);
sprite->pos2.x = 0;
sprite->pos2.y = 0;
@@ -135,14 +136,14 @@ static void sub_81505C4(u8 taskId)
}
}
-static void sub_8150708(void)
+static void QL_GfxTransition_StartSurf(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
u8 fieldEffectId;
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
{
- sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ QL_SetObjectGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_RIDE));
ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
gFieldEffectArguments[0] = objectEvent->currentCoords.x;
@@ -154,13 +155,13 @@ static void sub_8150708(void)
}
}
-static void sub_815077C(void)
+static void QL_GfxTransition_VSSeeker(void)
{
FieldEffectStart(FLDEFF_USE_VS_SEEKER);
- CreateTask(sub_8150794, 0x00);
+ CreateTask(Task_QLVSSeekerMovement, 0x00);
}
-static void sub_8150794(u8 taskId)
+static void Task_QLVSSeekerMovement(u8 taskId)
{
if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER))
{
@@ -170,27 +171,27 @@ static void sub_8150794(u8 taskId)
}
}
-static void sub_81507BC(struct ObjectEvent * a0, u8 a1)
+static void QL_SetObjectGraphicsId(struct ObjectEvent * object, u8 graphicsId)
{
- ObjectEventSetGraphicsId(a0, a1);
+ ObjectEventSetGraphicsId(object, graphicsId);
}
-static void sub_81507CC(void)
+static void QL_GfxTransition_StopSurfSouth(void)
{
- CreateStopSurfingTask_NoMusicChange(1);
+ CreateStopSurfingTask_NoMusicChange(DIR_SOUTH);
}
-static void sub_81507D8(void)
+static void QL_GfxTransition_StopSurfNorth(void)
{
- CreateStopSurfingTask_NoMusicChange(2);
+ CreateStopSurfingTask_NoMusicChange(DIR_NORTH);
}
-static void sub_81507E4(void)
+static void QL_GfxTransition_StopSurfWest(void)
{
- CreateStopSurfingTask_NoMusicChange(3);
+ CreateStopSurfingTask_NoMusicChange(DIR_WEST);
}
-static void sub_81507F0(void)
+static void QL_GfxTransition_StopSurfEast(void)
{
- CreateStopSurfingTask_NoMusicChange(4);
+ CreateStopSurfingTask_NoMusicChange(DIR_EAST);
}
diff --git a/src/save.c b/src/save.c
index 894b420f6..353ad5cb2 100644
--- a/src/save.c
+++ b/src/save.c
@@ -702,7 +702,7 @@ OK:
return 1;
}
-u8 sub_80DA3AC(void)
+u8 SaveGame_AfterLinkTrade(void)
{
if (gFlashMemoryPresent != TRUE)
return 1;
@@ -712,18 +712,18 @@ u8 sub_80DA3AC(void)
return 0;
}
-bool8 sub_80DA3D8(void)
+bool8 AfterLinkTradeSaveFailed(void)
{
u8 retVal = sub_80D9AA4(0xE, gRamSaveSectionLocations);
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_NORMAL);
- if (retVal == 0xFF)
+ if (retVal == SAVE_STATUS_ERROR)
return 1;
else
return 0;
}
-u8 sub_80DA40C(void)
+u8 ClearSaveAfterLinkTradeSaveFailure(void)
{
sub_80D9B04(0xE, gRamSaveSectionLocations);
if (gDamagedSaveSectors)
@@ -865,7 +865,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId)
break;
case 3:
SetContinueGameWarpStatusToDynamicWarp();
- sub_80DA3AC();
+ SaveGame_AfterLinkTrade();
gTasks[taskId].data[0] = 4;
break;
case 4:
@@ -876,13 +876,13 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId)
}
break;
case 5:
- if (sub_80DA3D8())
+ if (AfterLinkTradeSaveFailed())
gTasks[taskId].data[0] = 6;
else
gTasks[taskId].data[0] = 4;
break;
case 6:
- sub_80DA40C();
+ ClearSaveAfterLinkTradeSaveFailure();
gTasks[taskId].data[0] = 7;
break;
case 7:
diff --git a/src/sound.c b/src/sound.c
index e956896e8..e14cd4c4e 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -16,7 +16,7 @@ struct Fanfare
// TODO: what are these
extern u8 gDisableMapMusicChangeOnMapLoad;
-extern u8 gUnknown_203F174;
+extern u8 gDisableHelpSystemVolumeReduce;
// ewram
EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL;
@@ -630,14 +630,14 @@ bool8 IsSpecialSEPlaying(void)
return TRUE;
}
-void sub_8072474(u16 volume)
+void SetBGMVolume_SuppressHelpSystemReduction(u16 volume)
{
- gUnknown_203F174 = 1;
+ gDisableHelpSystemVolumeReduce = TRUE;
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, volume);
}
-void sub_807249C(void)
+void BGMVolumeMax_EnableHelpSystemReduction(void)
{
- gUnknown_203F174 = 0;
+ gDisableHelpSystemVolumeReduce = FALSE;
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
}
diff --git a/src/strings.c b/src/strings.c
index d620cdc80..e183e5167 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1173,10 +1173,10 @@ const u8 gUnknown_841DF8B[] = _("BRONZE");
const u8 gUnknown_841DF92[] = _("COPPER");
const u8 gUnknown_841DF99[] = _("SILVER");
const u8 gUnknown_841DFA0[] = _("GOLD");
-const u8 gUnknown_841DFA5[] = _("{A_BUTTON}NEXT");
-const u8 gUnknown_841DFAC[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}END");
-const u8 gUnknown_841DFBE[] = _("{A_BUTTON}{B_BUTTON}CANCEL");
-const u8 gUnknown_841DFC9[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL");
+const u8 gText_HelpSystemControls_A_Next[] = _("{A_BUTTON}NEXT");
+const u8 gText_HelpSystemControls_PickOkEnd[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}END");
+const u8 gText_HelpSystemControls_AorBtoCancel[] = _("{A_BUTTON}{B_BUTTON}CANCEL");
+const u8 gText_HelpSystemControls_PickOkCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL");
const u8 gEasyChatGroupName_Pokemon[] = _("POKéMON");
const u8 gEasyChatGroupName_Trainer[] = _("TRAINER");
const u8 gEasyChatGroupName_Status[] = _("STATUS");
diff --git a/src/teachy_tv.c b/src/teachy_tv.c
index 3baaa094a..0ad510721 100644
--- a/src/teachy_tv.c
+++ b/src/teachy_tv.c
@@ -1283,7 +1283,7 @@ static void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u1
if (ts)
{
if (!ts->isCompressed)
- CpuFastSet(ts->tiles, dstBuffer, 8 * size);
+ CpuFastCopy(ts->tiles, dstBuffer, 0x20 * size);
else
LZDecompressWram(ts->tiles, dstBuffer);
}
@@ -1291,7 +1291,7 @@ static void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u1
static void TeachyTvPushBackNewMapPalIndexArrayEntry(const struct MapLayout *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset)
{
- u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)];
+ u16 * metaTileEntryAddr = mapEntry < 0x280 ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)];
buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset;
buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1;
buf1[32] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2;
@@ -1316,7 +1316,7 @@ static void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBu
u8 i, j;
u8 * buffer = AllocZeroed(0x20);
u8 * src = AllocZeroed(0x20);
- CpuFastSet(tileset, buffer, 8);
+ CpuFastCopy(tileset, buffer, 0x20);
if (metaTile & 1)
{
for (i = 0; i < 8; ++i)
@@ -1328,13 +1328,13 @@ static void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBu
src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4);
}
}
- CpuFastSet(src, buffer, 8);
+ CpuFastCopy(src, buffer, 0x20);
}
if (metaTile & 2)
{
for (i = 0; i < 8; ++i)
memcpy(&src[4 * i], &buffer[4 * (7 - i)], 4);
- CpuFastSet(src, buffer, 8);
+ CpuFastCopy(src, buffer, 0x20);
}
for (i = 0; i < 32; ++i)
{
diff --git a/src/text.c b/src/text.c
index 7ccaad063..fbb084244 100644
--- a/src/text.c
+++ b/src/text.c
@@ -6,7 +6,6 @@
#include "dynamic_placeholder_text_util.h"
#include "constants/songs.h"
-extern u8 gGlyphInfo[0x90];
extern const struct OamData gOamData_AffineOff_ObjNormal_16x16;
static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese);
@@ -657,22 +656,22 @@ u16 RenderText(struct TextPrinter *textPrinter)
textPrinter->printerTemplate.currentChar++;
switch (currChar)
{
- case 1:
+ case EXT_CTRL_CODE_COLOR:
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 2:
+ case EXT_CTRL_CODE_HIGHLIGHT:
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 3:
+ case EXT_CTRL_CODE_SHADOW:
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 4:
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
@@ -681,29 +680,29 @@ u16 RenderText(struct TextPrinter *textPrinter)
textPrinter->printerTemplate.currentChar++;
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
- case 5:
+ case EXT_CTRL_CODE_PALETTE:
textPrinter->printerTemplate.currentChar++;
return 2;
- case 6:
+ case EXT_CTRL_CODE_FONT:
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;
- case EXT_CTRL_CODE_UNKNOWN_7:
+ case EXT_CTRL_CODE_RESET_FONT:
return 2;
- case 8:
+ case EXT_CTRL_CODE_PAUSE:
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
textPrinter->state = 6;
return 2;
- case 9:
+ case EXT_CTRL_CODE_WAIT_BUTTON:
textPrinter->state = 1;
if (gTextFlags.autoScroll)
subStruct->autoScrollDelay = 0;
return 3;
- case 10:
+ case EXT_CTRL_CODE_WAIT_SE:
textPrinter->state = 5;
return 3;
- case 11:
+ case EXT_CTRL_CODE_PLAY_BGM:
currChar = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
currChar |= *textPrinter->printerTemplate.currentChar << 8;
@@ -711,32 +710,32 @@ u16 RenderText(struct TextPrinter *textPrinter)
if (!QL_IS_PLAYBACK_STATE)
PlayBGM(currChar);
return 2;
- case 16:
+ case EXT_CTRL_CODE_PLAY_SE:
currChar = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
currChar |= (*textPrinter->printerTemplate.currentChar << 8);
textPrinter->printerTemplate.currentChar++;
PlaySE(currChar);
return 2;
- case 12:
+ case EXT_CTRL_CODE_ESCAPE:
textPrinter->printerTemplate.currentChar++;
currChar = *textPrinter->printerTemplate.currentChar;
break;
- case 13:
+ case EXT_CTRL_CODE_SHIFT_RIGHT:
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;
- case 14:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;
- case 15:
+ case EXT_CTRL_CODE_FILL_WINDOW:
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
return 2;
- case 23:
+ case EXT_CTRL_CODE_STOP_BGM:
m4aMPlayStop(&gMPlayInfo_BGM);
return 2;
- case 24:
+ case EXT_CTRL_CODE_RESUME_BGM:
m4aMPlayContinue(&gMPlayInfo_BGM);
return 2;
case EXT_CTRL_CODE_CLEAR:
@@ -749,7 +748,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
return 0;
}
return 2;
- case 18:
+ case EXT_CTRL_CODE_SKIP:
textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x;
textPrinter->printerTemplate.currentChar++;
return 2;
@@ -792,8 +791,8 @@ u16 RenderText(struct TextPrinter *textPrinter)
break;
case CHAR_KEYPAD_ICON:
currChar = *textPrinter->printerTemplate.currentChar++;
- gGlyphInfo[0x80] = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY);
- textPrinter->printerTemplate.currentX += gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing;
+ gGlyphInfo.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY);
+ textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing;
return 0;
case EOS:
return 1;
@@ -824,8 +823,8 @@ u16 RenderText(struct TextPrinter *textPrinter)
if (textPrinter->minLetterSpacing)
{
- textPrinter->printerTemplate.currentX += gGlyphInfo[0x80];
- width = textPrinter->minLetterSpacing - gGlyphInfo[0x80];
+ textPrinter->printerTemplate.currentX += gGlyphInfo.width;
+ width = textPrinter->minLetterSpacing - gGlyphInfo.width;
if (width > 0)
{
ClearTextSpan(textPrinter, width);
@@ -835,9 +834,9 @@ u16 RenderText(struct TextPrinter *textPrinter)
else
{
if (textPrinter->japanese)
- textPrinter->printerTemplate.currentX += (gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing);
+ textPrinter->printerTemplate.currentX += (gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing);
else
- textPrinter->printerTemplate.currentX += gGlyphInfo[0x80];
+ textPrinter->printerTemplate.currentX += gGlyphInfo.width;
}
return 0;
case 1:
@@ -924,61 +923,61 @@ s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
temp = strLocal[strPos++];
switch (temp)
{
- case 0xFE:
- case 0xFF:
- lineWidths[line] = width;
- width = 0;
- line++;
- break;
- case 0xFC:
- temp2 = strLocal[strPos++];
- switch (temp2)
- {
- case 0x4:
- ++strPos;
- case 0xB:
- case 0x10:
- ++strPos;
- case 0x1:
- case 0x2:
- case 0x3:
- case 0x5:
- case 0x6:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- case 0x11:
- case 0x12:
- case 0x13:
- case 0x14:
- ++strPos;
- break;
- case 0x7:
- case 0x9:
- case 0xA:
- case 0xF:
- case 0x15:
- case 0x16:
- default:
- break;
- }
- break;
- case 0xF7:
- case 0xFD:
+ case CHAR_NEWLINE:
+ case EOS:
+ lineWidths[line] = width;
+ width = 0;
+ line++;
+ break;
+ case EXT_CTRL_CODE_BEGIN:
+ temp2 = strLocal[strPos++];
+ switch (temp2)
+ {
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
++strPos;
- break;
- case 0xFA:
- case 0xFB:
- break;
- case 0xF8:
- case 0xF9:
+ case EXT_CTRL_CODE_PLAY_BGM:
+ case EXT_CTRL_CODE_PLAY_SE:
++strPos;
+ case EXT_CTRL_CODE_COLOR:
+ case EXT_CTRL_CODE_HIGHLIGHT:
+ case EXT_CTRL_CODE_SHADOW:
+ case EXT_CTRL_CODE_PALETTE:
+ case EXT_CTRL_CODE_FONT:
+ case EXT_CTRL_CODE_PAUSE:
+ case EXT_CTRL_CODE_ESCAPE:
+ case EXT_CTRL_CODE_SHIFT_RIGHT:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
+ case EXT_CTRL_CODE_CLEAR:
+ case EXT_CTRL_CODE_SKIP:
+ case EXT_CTRL_CODE_CLEAR_TO:
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
+ ++strPos;
+ break;
+ case EXT_CTRL_CODE_RESET_FONT:
+ case EXT_CTRL_CODE_WAIT_BUTTON:
+ case EXT_CTRL_CODE_WAIT_SE:
+ case EXT_CTRL_CODE_FILL_WINDOW:
+ case EXT_CTRL_CODE_JPN:
+ case EXT_CTRL_CODE_ENG:
default:
- ++width;
break;
+ }
+ break;
+ case CHAR_DYNAMIC_PLACEHOLDER:
+ case PLACEHOLDER_BEGIN:
+ ++strPos;
+ break;
+ case CHAR_PROMPT_SCROLL:
+ case CHAR_PROMPT_CLEAR:
+ break;
+ case CHAR_KEYPAD_ICON:
+ case CHAR_EXTRA_EMOJI:
+ ++strPos;
+ default:
+ ++width;
+ break;
}
- } while (temp != 0xFF);
+ } while (temp != EOS);
for (width = 0, strPos = 0; strPos < 8; ++strPos)
{
@@ -1033,109 +1032,36 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
lineWidth = 0;
bufferPointer = NULL;
- while (*str != 0xFF)
+ while (*str != EOS)
{
switch (*str)
{
- case 0xFE:
- if (lineWidth > width)
- width = lineWidth;
- lineWidth = 0;
- break;
- case 0xFD:
- switch (*++str)
- {
- case 0x2:
- bufferPointer = gStringVar1;
- break;
- case 0x3:
- bufferPointer = gStringVar2;
- break;
- case 0x4:
- bufferPointer = gStringVar3;
- break;
- default:
- return 0;
- }
- case 0xF7:
- if (bufferPointer == NULL)
- bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str);
- while (*bufferPointer != 0xFF)
- {
- glyphWidth = func(*bufferPointer++, isJapanese);
- if (minGlyphWidth > 0)
- {
- if (glyphWidth < minGlyphWidth)
- glyphWidth = minGlyphWidth;
- }
- else if (isJapanese)
- {
- glyphWidth += localLetterSpacing;
- }
- lineWidth += glyphWidth;
- }
- bufferPointer = NULL;
- break;
- case 0xFC:
- switch (*++str)
- {
- case 0x4:
- ++str;
- case 0xB:
- case 0x10:
- ++str;
- case 0x1:
- case 0x2:
- case 0x3:
- case 0x5:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- ++str;
- break;
- case 0x6:
- func = GetFontWidthFunc(*++str);
- if (func == NULL)
- return 0;
- if (letterSpacing == -1)
- localLetterSpacing = GetFontAttribute(*str, 2);
- break;
- case 0x11:
- glyphWidth = *++str;
- lineWidth += glyphWidth;
- break;
- case 0x12:
- lineWidth = *++str;
- break;
- case 0x13:
- if (*++str > lineWidth)
- lineWidth = *str;
- break;
- case 0x14:
- minGlyphWidth = *++str;
- break;
- case 0x15:
- isJapanese = 1;
- break;
- case 0x16:
- isJapanese = 0;
- break;
- case 0x7:
- case 0x9:
- case 0xA:
- case 0xF:
- default:
- break;
- }
- break;
- case 0xF8:
- case 0xF9:
- if (*str == 0xF9)
- glyphWidth = func(*++str | 0x100, isJapanese);
- else
- glyphWidth = GetKeypadIconWidth(*++str);
-
+ case CHAR_NEWLINE:
+ if (lineWidth > width)
+ width = lineWidth;
+ lineWidth = 0;
+ break;
+ case PLACEHOLDER_BEGIN:
+ switch (*++str)
+ {
+ case PLACEHOLDER_ID_STRING_VAR_1:
+ bufferPointer = gStringVar1;
+ break;
+ case PLACEHOLDER_ID_STRING_VAR_2:
+ bufferPointer = gStringVar2;
+ break;
+ case PLACEHOLDER_ID_STRING_VAR_3:
+ bufferPointer = gStringVar3;
+ break;
+ default:
+ return 0;
+ }
+ case CHAR_DYNAMIC_PLACEHOLDER:
+ if (bufferPointer == NULL)
+ bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str);
+ while (*bufferPointer != EOS)
+ {
+ glyphWidth = func(*bufferPointer++, isJapanese);
if (minGlyphWidth > 0)
{
if (glyphWidth < minGlyphWidth)
@@ -1146,27 +1072,100 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
glyphWidth += localLetterSpacing;
}
lineWidth += glyphWidth;
+ }
+ bufferPointer = NULL;
+ break;
+ case EXT_CTRL_CODE_BEGIN:
+ switch (*++str)
+ {
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
+ ++str;
+ case EXT_CTRL_CODE_PLAY_BGM:
+ case EXT_CTRL_CODE_PLAY_SE:
+ ++str;
+ case EXT_CTRL_CODE_COLOR:
+ case EXT_CTRL_CODE_HIGHLIGHT:
+ case EXT_CTRL_CODE_SHADOW:
+ case EXT_CTRL_CODE_PALETTE:
+ case EXT_CTRL_CODE_PAUSE:
+ case EXT_CTRL_CODE_ESCAPE:
+ case EXT_CTRL_CODE_SHIFT_RIGHT:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
+ ++str;
+ break;
+ case EXT_CTRL_CODE_FONT:
+ func = GetFontWidthFunc(*++str);
+ if (func == NULL)
+ return 0;
+ if (letterSpacing == -1)
+ localLetterSpacing = GetFontAttribute(*str, 2);
+ break;
+ case EXT_CTRL_CODE_CLEAR:
+ glyphWidth = *++str;
+ lineWidth += glyphWidth;
break;
- case 0xFA:
- case 0xFB:
+ case EXT_CTRL_CODE_SKIP:
+ lineWidth = *++str;
break;
+ case EXT_CTRL_CODE_CLEAR_TO:
+ if (*++str > lineWidth)
+ lineWidth = *str;
+ break;
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
+ minGlyphWidth = *++str;
+ break;
+ case EXT_CTRL_CODE_JPN:
+ isJapanese = 1;
+ break;
+ case EXT_CTRL_CODE_ENG:
+ isJapanese = 0;
+ break;
+ case EXT_CTRL_CODE_RESET_FONT:
+ case EXT_CTRL_CODE_WAIT_BUTTON:
+ case EXT_CTRL_CODE_WAIT_SE:
+ case EXT_CTRL_CODE_FILL_WINDOW:
default:
- glyphWidth = func(*str, isJapanese);
- if (minGlyphWidth > 0)
- {
- if (glyphWidth < minGlyphWidth)
- glyphWidth = minGlyphWidth;
- lineWidth += glyphWidth;
- }
- else
+ break;
+ }
+ break;
+ case CHAR_KEYPAD_ICON:
+ case CHAR_EXTRA_EMOJI:
+ if (*str == CHAR_EXTRA_EMOJI)
+ glyphWidth = func(*++str | 0x100, isJapanese);
+ else
+ glyphWidth = GetKeypadIconWidth(*++str);
+
+ if (minGlyphWidth > 0)
+ {
+ if (glyphWidth < minGlyphWidth)
+ glyphWidth = minGlyphWidth;
+ }
+ else if (isJapanese)
+ {
+ glyphWidth += localLetterSpacing;
+ }
+ lineWidth += glyphWidth;
+ break;
+ case CHAR_PROMPT_SCROLL:
+ case CHAR_PROMPT_CLEAR:
+ break;
+ default:
+ glyphWidth = func(*str, isJapanese);
+ if (minGlyphWidth > 0)
+ {
+ if (glyphWidth < minGlyphWidth)
+ glyphWidth = minGlyphWidth;
+ lineWidth += glyphWidth;
+ }
+ else
+ {
+ if (fontId != 6 && isJapanese)
{
- if (fontId != 6 && isJapanese)
- {
- glyphWidth += localLetterSpacing;
- }
- lineWidth += glyphWidth;
+ glyphWidth += localLetterSpacing;
}
- break;
+ lineWidth += glyphWidth;
+ }
+ break;
}
++str;
}
@@ -1202,75 +1201,75 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a
temp = strLocal[strPos++];
switch (temp)
{
- case 0xFC:
- temp2 = strLocal[strPos++];
- switch (temp2)
- {
- case 0x4:
- fgColor = strLocal[strPos++];
- bgColor = strLocal[strPos++];
- shadowColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x1:
- fgColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x2:
- bgColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x3:
- shadowColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x6:
- fontId = strLocal[strPos++];
- break;
- case 0xB:
- case 0x10:
- ++strPos;
- case 0x5:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- case 0x11:
- case 0x12:
- case 0x13:
- case 0x14:
- ++strPos;
- break;
- case 0x7:
- case 0x9:
- case 0xA:
- case 0xF:
- case 0x15:
- case 0x16:
- default:
- continue;
- }
+ case EXT_CTRL_CODE_BEGIN:
+ temp2 = strLocal[strPos++];
+ switch (temp2)
+ {
+ case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
+ fgColor = strLocal[strPos++];
+ bgColor = strLocal[strPos++];
+ shadowColor = strLocal[strPos++];
+ GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
+ continue;
+ case EXT_CTRL_CODE_COLOR:
+ fgColor = strLocal[strPos++];
+ GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
+ continue;
+ case EXT_CTRL_CODE_HIGHLIGHT:
+ bgColor = strLocal[strPos++];
+ GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
+ continue;
+ case EXT_CTRL_CODE_SHADOW:
+ shadowColor = strLocal[strPos++];
+ GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
+ continue;
+ case EXT_CTRL_CODE_FONT:
+ fontId = strLocal[strPos++];
break;
- case 0xF7:
- case 0xF8:
- case 0xF9:
- case 0xFD:
+ case EXT_CTRL_CODE_PLAY_BGM:
+ case EXT_CTRL_CODE_PLAY_SE:
+ ++strPos;
+ case EXT_CTRL_CODE_PALETTE:
+ case EXT_CTRL_CODE_PAUSE:
+ case EXT_CTRL_CODE_ESCAPE:
+ case EXT_CTRL_CODE_SHIFT_RIGHT:
+ case EXT_CTRL_CODE_SHIFT_DOWN:
+ case EXT_CTRL_CODE_CLEAR:
+ case EXT_CTRL_CODE_SKIP:
+ case EXT_CTRL_CODE_CLEAR_TO:
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
++strPos;
break;
- case 0xFA:
- case 0xFB:
- case 0xFE:
- case 0xFF:
- break;
+ case EXT_CTRL_CODE_RESET_FONT:
+ case EXT_CTRL_CODE_WAIT_BUTTON:
+ case EXT_CTRL_CODE_WAIT_SE:
+ case EXT_CTRL_CODE_FILL_WINDOW:
+ case EXT_CTRL_CODE_JPN:
+ case EXT_CTRL_CODE_ENG:
default:
- DecompressGlyphFont9(temp);
- CpuCopy32(gGlyphInfo, pixels, 0x20);
- CpuCopy32(gGlyphInfo + 0x40, pixels + 0x20, 0x20);
- pixels += 0x40;
- break;
+ continue;
+ }
+ break;
+ case CHAR_DYNAMIC_PLACEHOLDER:
+ case CHAR_KEYPAD_ICON:
+ case CHAR_EXTRA_EMOJI:
+ case PLACEHOLDER_BEGIN:
+ ++strPos;
+ break;
+ case CHAR_PROMPT_SCROLL:
+ case CHAR_PROMPT_CLEAR:
+ case CHAR_NEWLINE:
+ case EOS:
+ break;
+ default:
+ DecompressGlyphFont9(temp);
+ CpuCopy32(gGlyphInfo.pixels, pixels, 0x20);
+ CpuCopy32(gGlyphInfo.pixels + 0x40, pixels + 0x20, 0x20);
+ pixels += 0x40;
+ break;
}
}
- while (temp != 0xFF);
+ while (temp != EOS);
RestoreTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]);
return 1;
@@ -1317,7 +1316,7 @@ u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8
return spriteId;
}
-void sub_8006398(u8 spriteId)
+void DestroyTextCursorSprite(u8 spriteId)
{
DestroySprite(&gSprites[spriteId]);
FreeSpriteTilesByTag(0x8000);
@@ -1362,18 +1361,18 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
if (isJapanese == 1)
{
glyphs = sFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- gGlyphInfo[0x80] = 8;
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ gGlyphInfo.width = 8;
+ gGlyphInfo.height = 12;
}
else
{
glyphs = sFont0LatinGlyphs + (0x10 * glyphId);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x40));
- gGlyphInfo[0x80] = sFont0LatinGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 13;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x40));
+ gGlyphInfo.width = sFont0LatinGlyphWidths[glyphId];
+ gGlyphInfo.height = 13;
}
}
@@ -1393,20 +1392,20 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
{
int eff;
glyphs = sFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- gGlyphInfo[0x80] = 8;
- gGlyphInfo[0x81] = 16;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ gGlyphInfo.width = 8;
+ gGlyphInfo.height = 16;
}
else
{
glyphs = sFont1LatinGlyphs + (0x20 * glyphId);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont1LatinGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 14;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont1LatinGlyphWidths[glyphId];
+ gGlyphInfo.height = 14;
}
}
@@ -1432,21 +1431,21 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// Game Freak, please. writing the same values over and over...
- gGlyphInfo[0x80] = 10;
- gGlyphInfo[0x81] = 12;
+ gGlyphInfo.width = 10;
+ gGlyphInfo.height = 12;
}
}
else
{
glyphs = sFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont2JapaneseGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont2JapaneseGlyphWidths[glyphId];
+ gGlyphInfo.height = 12;
}
}
else
@@ -1457,21 +1456,21 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// but why
- gGlyphInfo[0x80] = sFont2LatinGlyphWidths[0];
- gGlyphInfo[0x81] = 14;
+ gGlyphInfo.width = sFont2LatinGlyphWidths[0];
+ gGlyphInfo.height = 14;
}
}
else
{
glyphs = sFont2LatinGlyphs + (0x20 * glyphId);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont2LatinGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 14;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont2LatinGlyphWidths[glyphId];
+ gGlyphInfo.height = 14;
}
}
}
@@ -1505,21 +1504,21 @@ static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// Game Freak, please. writing the same values over and over...
- gGlyphInfo[0x80] = 10;
- gGlyphInfo[0x81] = 12;
+ gGlyphInfo.width = 10;
+ gGlyphInfo.height = 12;
}
}
else
{
glyphs = sFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = 10;
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = 10;
+ gGlyphInfo.height = 12;
}
}
else
@@ -1548,21 +1547,21 @@ static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// Game Freak, please. writing the same values over and over...
- gGlyphInfo[0x80] = 10;
- gGlyphInfo[0x81] = 12;
+ gGlyphInfo.width = 10;
+ gGlyphInfo.height = 12;
}
}
else
{
glyphs = sFont4JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont4JapaneseGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont4JapaneseGlyphWidths[glyphId];
+ gGlyphInfo.height = 12;
}
}
else
@@ -1573,21 +1572,21 @@ static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// but why
- gGlyphInfo[0x80] = sFont4LatinGlyphWidths[0];
- gGlyphInfo[0x81] = 14;
+ gGlyphInfo.width = sFont4LatinGlyphWidths[0];
+ gGlyphInfo.height = 14;
}
}
else
{
glyphs = sFont4LatinGlyphs + (0x20 * glyphId);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont4LatinGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 14;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont4LatinGlyphWidths[glyphId];
+ gGlyphInfo.height = 14;
}
}
}
@@ -1619,21 +1618,21 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// Game Freak, please. writing the same values over and over...
- gGlyphInfo[0x80] = 10;
- gGlyphInfo[0x81] = 12;
+ gGlyphInfo.width = 10;
+ gGlyphInfo.height = 12;
}
}
else
{
glyphs = sFont5JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont5JapaneseGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont5JapaneseGlyphWidths[glyphId];
+ gGlyphInfo.height = 12;
}
}
else
@@ -1644,21 +1643,21 @@ void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese)
for(i = 0; i < 0x80; i++)
{
- gGlyphInfo[i] = lastColor | lastColor << 4;
+ gGlyphInfo.pixels[i] = lastColor | lastColor << 4;
// but why
- gGlyphInfo[0x80] = sFont5LatinGlyphWidths[0];
- gGlyphInfo[0x81] = 14;
+ gGlyphInfo.width = sFont5LatinGlyphWidths[0];
+ gGlyphInfo.height = 14;
}
}
else
{
glyphs = sFont5LatinGlyphs + (0x20 * glyphId);
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo + 0x20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo + 0x40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo + 0x60));
- gGlyphInfo[0x80] = sFont5LatinGlyphWidths[glyphId];
- gGlyphInfo[0x81] = 14;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
+ DecompressGlyphTile(glyphs + 0x10, (u16 *)(gGlyphInfo.pixels + 0x40));
+ DecompressGlyphTile(glyphs + 0x18, (u16 *)(gGlyphInfo.pixels + 0x60));
+ gGlyphInfo.width = sFont5LatinGlyphWidths[glyphId];
+ gGlyphInfo.height = 14;
}
}
}
@@ -1679,8 +1678,8 @@ s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese)
void DecompressGlyphFont9(u16 glyphId)
{
const u16* glyphs = sFont9JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo + 0x40));
- gGlyphInfo[0x80] = 8;
- gGlyphInfo[0x81] = 12;
+ DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
+ DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
+ gGlyphInfo.width = 8;
+ gGlyphInfo.height = 12;
}
diff --git a/src/text_printer.c b/src/text_printer.c
index c39bc04e3..6f7cf788c 100644
--- a/src/text_printer.c
+++ b/src/text_printer.c
@@ -1,10 +1,6 @@
#include "global.h"
-#include "main.h"
-#include "palette.h"
-#include "string_util.h"
#include "window.h"
#include "text.h"
-#include "blit.h"
static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0};
static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0};
@@ -15,7 +11,7 @@ static u16 sLastTextFgColor;
static u16 sLastTextShadowColor;
const struct FontInfo *gFonts;
-u8 gGlyphInfo[0x90];
+struct GlyphInfo gGlyphInfo;
static const u8 sFontHalfRowOffsets[] =
{
@@ -213,68 +209,68 @@ u8 GetLastTextColor(u8 colorType)
}
}
-#define GLYPH_COPY(widthOffset, heightOffset, width, height, a4, a5, a6, sizeX) \
-{ \
- int xAdd, v1, yAdd, v3, toOrr, bits; \
- u8 * src, * dst; \
- u32 v8; \
- \
- src = gGlyphInfo + (heightOffset / 8 * 0x40) + (widthOffset / 8 * 0x20); \
- for (yAdd = 0, v3 = a6 + heightOffset; yAdd < height; yAdd++, v3++) \
- { \
- v8 = *(u32 *)src; \
- for (xAdd = 0, v1 = a5 + widthOffset; xAdd < width; xAdd++, v1++) \
- { \
- dst = (u8 *)((a4) + ((v1 >> 1) & 3) + ((v1 >> 3) << 5) + (((v3 >> 3) * (sizeX)) << 5) + ((u32)(v3 << 29) >> 27)); \
- toOrr = (v8 >> (xAdd * 4)) & 0xF; \
- if (toOrr != 0) \
- { \
- bits = (v1 & 1) * 4; \
- *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \
- } \
- } \
- src += 4; \
- } \
+#define GLYPH_COPY(widthOffset, heightOffset, width, height, tilesDest, left, top, sizeX) \
+{ \
+ int xAdd, xpos, yAdd, ypos, toOrr, bits; \
+ u8 * src, * dst; \
+ u32 _8pixbuf; \
+ \
+ src = gGlyphInfo.pixels + (heightOffset / 8 * 0x40) + (widthOffset / 8 * 0x20); \
+ for (yAdd = 0, ypos = top + heightOffset; yAdd < height; yAdd++, ypos++) \
+ { \
+ _8pixbuf = *(u32 *)src; \
+ for (xAdd = 0, xpos = left + widthOffset; xAdd < width; xAdd++, xpos++) \
+ { \
+ dst = (u8 *)((tilesDest) + ((xpos >> 1) & 3) + ((xpos >> 3) << 5) + (((ypos >> 3) * (sizeX)) << 5) + ((u32)(ypos << 29) >> 27)); \
+ toOrr = (_8pixbuf >> (xAdd * 4)) & 0xF; \
+ if (toOrr != 0) \
+ { \
+ bits = (xpos & 1) * 4; \
+ *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \
+ } \
+ } \
+ src += 4; \
+ } \
}
void CopyGlyphToWindow(struct TextPrinter *textPrinter)
{
- int r0, r1;
- u8 r2;
+ int glyphWidth, glyphHeight;
+ u8 sizeType;
- if (gWindows[textPrinter->printerTemplate.windowId].window.width * 8 - textPrinter->printerTemplate.currentX < gGlyphInfo[0x80])
- r0 = gWindows[textPrinter->printerTemplate.windowId].window.width * 8 - textPrinter->printerTemplate.currentX;
+ if (gWindows[textPrinter->printerTemplate.windowId].window.width * 8 - textPrinter->printerTemplate.currentX < gGlyphInfo.width)
+ glyphWidth = gWindows[textPrinter->printerTemplate.windowId].window.width * 8 - textPrinter->printerTemplate.currentX;
else
- r0 = gGlyphInfo[0x80];
- if (gWindows[textPrinter->printerTemplate.windowId].window.height * 8 - textPrinter->printerTemplate.currentY < gGlyphInfo[0x81])
- r1 = gWindows[textPrinter->printerTemplate.windowId].window.height * 8 - textPrinter->printerTemplate.currentY;
+ glyphWidth = gGlyphInfo.width;
+ if (gWindows[textPrinter->printerTemplate.windowId].window.height * 8 - textPrinter->printerTemplate.currentY < gGlyphInfo.height)
+ glyphHeight = gWindows[textPrinter->printerTemplate.windowId].window.height * 8 - textPrinter->printerTemplate.currentY;
else
- r1 = gGlyphInfo[0x81];
-
- r2 = 0;
- if (r0 > 8)
- r2 |= 1;
- if (r1 > 8)
- r2 |= 2;
+ glyphHeight = gGlyphInfo.height;
+
+ sizeType = 0;
+ if (glyphWidth > 8)
+ sizeType |= 1;
+ if (glyphHeight > 8)
+ sizeType |= 2;
- switch (r2)
+ switch (sizeType)
{
- case 0:
- GLYPH_COPY(0, 0, r0, r1, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ case 0: // ≤ 8x8
+ GLYPH_COPY(0, 0, glyphWidth, glyphHeight, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
return;
- case 1:
- GLYPH_COPY(0, 0, 8, r1, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
- GLYPH_COPY(8, 0, r0 - 8, r1, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ case 1: // ≤ 16x8
+ GLYPH_COPY(0, 0, 8, glyphHeight, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ GLYPH_COPY(8, 0, glyphWidth - 8, glyphHeight, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
return;
- case 2:
- GLYPH_COPY(0, 0, r0, 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
- GLYPH_COPY(0, 8, r0, r1 - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ case 2: // ≤ 8x16
+ GLYPH_COPY(0, 0, glyphWidth, 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ GLYPH_COPY(0, 8, glyphWidth, glyphHeight - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
return;
- case 3:
+ case 3: // ≤ 16x16
GLYPH_COPY(0, 0, 8, 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
- GLYPH_COPY(8, 0, r0 - 8, 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
- GLYPH_COPY(0, 8, 8, r1 - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
- GLYPH_COPY(8, 8, r0 - 8, r1 - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ GLYPH_COPY(8, 0, glyphWidth - 8, 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ GLYPH_COPY(0, 8, 8, glyphHeight - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
+ GLYPH_COPY(8, 8, glyphWidth - 8, glyphHeight - 8, gWindows[textPrinter->printerTemplate.windowId].tileData, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY, ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8 + ((gWindows[textPrinter->printerTemplate.windowId].window.width * 8) & 7)) >> 3));
return;
}
}
@@ -285,14 +281,14 @@ void sub_8003614(void * tileData, u16 currentX, u16 currentY, u16 width, u16 hei
u8 r2;
u16 r3;
- if (width - currentX < gGlyphInfo[0x80])
+ if (width - currentX < gGlyphInfo.width)
r0 = width - currentX;
else
- r0 = gGlyphInfo[0x80];
- if (height - currentY < gGlyphInfo[0x81])
+ r0 = gGlyphInfo.width;
+ if (height - currentY < gGlyphInfo.height)
r1 = height - currentY;
else
- r1 = gGlyphInfo[0x81];
+ r1 = gGlyphInfo.height;
r2 = 0;
r3 = (width + (width & 7)) >> 3;
diff --git a/src/trade_scene.c b/src/trade_scene.c
index b259ba939..f2372a42c 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -134,7 +134,7 @@ static void BufferInGameTradeMonName(void);
static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade);
static void CB2_RunTradeAnim_LinkTrade(void);
static void CB2_WaitAndAckTradeComplete(void);
-static void sub_8053E8C(void);
+static void CB2_HandleTradeEnded(void);
static void LinkTrade_TearDownAssets(void);
static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId);
static void CheckPartnersMonForRibbons(void);
@@ -144,26 +144,26 @@ static void Task_CloseCenterWhiteColumn(u8 taskId);
static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal");
static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp");
-static const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp");
-static const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
-static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
+static const u8 sPokeballSymbolTiles[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp");
+static const u16 sCableCloseupMap[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+static const u16 sPokeballSymbolMap[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal");
static const u16 sTradeGbaPal[] = INCBIN_U16("graphics/trade/gba.gbapal");
-static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal");
-static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal");
+static const u16 sShadowPalette[] = INCBIN_U16("graphics/trade/shadow.gbapal");
+static const u16 sBlackPalette[] = INCBIN_U16("graphics/trade/black.gbapal");
static const u16 sTradeGlowPal[] = INCBIN_U16("graphics/trade/misc.gbapal");
static const u8 sTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp");
static const u8 sTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp");
static const u8 sTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
static const u8 sTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
-const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin");
-static const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
+const u16 gTradeOrHatchMonShadowTilemap[] = INCBIN_U16("graphics/trade/shadow_map.bin");
+static const u8 sGbaAffineTiles[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
static const u8 sFiller_08335760[64] = {};
-static const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
-static const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
-static const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
-static const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
-static const u32 sUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz");
+static const u8 sGbaAffineMapCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
+static const u8 sGbaAffineMapWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
+static const u16 sGbaMapWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
+static const u16 sGbaMapCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
+static const u32 sWirelessCloseupMap[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz");
static const u16 sWirelessSignalAnimPals_Outbound[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
static const u16 sWirelessSignalAnimPals_Inbound[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
static const u16 sWirelessSignalAnimPals_Off[] = INCBIN_U16("graphics/trade/black.gbapal");
@@ -466,7 +466,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerPokePicAlt[
#include "data/ingame_trades.h"
-static const struct WindowTemplate gUnknown_826D1BC[] = {
+static const struct WindowTemplate sTradeMessageWindowTemplates[] = {
{
.bg = 0,
.tilemapLeft = 2,
@@ -488,7 +488,7 @@ const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate = {
.baseBlock = 0x0bc
};
-static const struct BgTemplate gUnknown_826D1D4[] = {
+static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 3,
@@ -721,7 +721,7 @@ static void CheckLinkTimeout(void)
sTradeData->linkTimeoutCheck2 = sTradeData->linkTimeoutCheck1;
}
-static u32 GetMultiplayerIdIfLinkTrade(void)
+static u32 GetMultiplayerIdOfLinkTrade(void)
{
if (gReceivedRemoteLinkPlayers)
return GetMultiplayerId();
@@ -929,7 +929,7 @@ static void TradeAnimInit_LoadGfx(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetBgsAndClearDma3BusyFlags(FALSE);
- InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4));
+ InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE));
@@ -941,7 +941,7 @@ static void TradeAnimInit_LoadGfx(void)
LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0);
LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20);
- InitWindows(gUnknown_826D1BC);
+ InitWindows(sTradeMessageWindowTemplates);
// ... and doing the same load again
DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
@@ -1123,7 +1123,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256);
LoadPalette(gTradeGba2_Pal, 0x10, 0x60);
DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000);
- DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000);
+ DmaCopy16Defvars(3, gTradeOrHatchMonShadowTilemap, (void *)BG_SCREEN_ADDR(18), 0x1000);
break;
case 1:
sTradeData->bg1hofs = 0;
@@ -1133,11 +1133,11 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512);
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000);
+ DmaCopy16Defvars(3, sGbaMapCable, (void *)BG_SCREEN_ADDR(5), 0x1000);
}
else
{
- DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000);
+ DmaCopy16Defvars(3, sGbaMapWireless, (void *)BG_SCREEN_ADDR(5), 0x1000);
}
DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
@@ -1148,13 +1148,13 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
if (!sTradeData->isCableTrade)
{
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
- LZ77UnCompVram(sUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5));
+ LZ77UnCompVram(sWirelessCloseupMap, (void *)BG_SCREEN_ADDR(5));
BlendPalettes(0x000000008, 0x10, RGB_BLACK);
}
else
{
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
- DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800);
+ DmaCopy16Defvars(3, sCableCloseupMap, (void *)BG_SCREEN_ADDR(5), 0x800);
BlendPalettes(0x00000001, 0x10, RGB_BLACK);
}
break;
@@ -1173,14 +1173,14 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
sTradeData->sXY = 0x20;
sTradeData->bg2Zoom = 0x400;
sTradeData->bg2alpha = 0;
- DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000);
+ DmaCopyLarge16(3, sGbaAffineTiles, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000);
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaAffineMapCable, (void *)BG_SCREEN_ADDR(18), 0x100);
}
else
{
- DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *)BG_SCREEN_ADDR(18), 0x100);
}
break;
case 5:
@@ -1197,14 +1197,14 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
sTradeData->bg2srcX = 0x78;
sTradeData->bg2srcY = 0x50;
sTradeData->bg2alpha = 0;
- DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000);
+ DmaCopyLarge16(3, sGbaAffineTiles, BG_CHAR_ADDR(1), 0x2840, 0x1000);
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaAffineMapCable, (void *)BG_SCREEN_ADDR(18), 0x100);
}
else
{
- DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *)BG_SCREEN_ADDR(18), 0x100);
}
break;
case 7:
@@ -1214,7 +1214,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256);
LoadPalette(gTradeGba2_Pal, 0x10, 0x60);
DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000);
- DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000);
+ DmaCopy16Defvars(3, gTradeOrHatchMonShadowTilemap, (void *)BG_SCREEN_ADDR(18), 0x1000);
break;
}
}
@@ -2279,7 +2279,7 @@ static bool8 DoTradeAnim_Wireless(void)
return FALSE;
}
-static void sub_8053788(void)
+static void CB2_TryEvolveAfterTrade(void)
{
u16 evoSpecies;
switch (gMain.state)
@@ -2289,12 +2289,12 @@ static void sub_8053788(void)
gSoftResetDisabled = TRUE;
break;
case 4:
- gCB2_AfterEvolution = sub_8053E8C;
+ gCB2_AfterEvolution = CB2_HandleTradeEnded;
evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, 0);
if (evoSpecies != SPECIES_NONE)
TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]);
else
- SetMainCallback2(sub_8053E8C);
+ SetMainCallback2(CB2_HandleTradeEnded);
gSelectedTradeMonPositions[0] = 0xFF;
break;
}
@@ -2308,12 +2308,12 @@ static void sub_8053788(void)
static void HandleLinkDataReceive(void)
{
u8 recvStatus;
- GetMultiplayerIdIfLinkTrade();
+ GetMultiplayerIdOfLinkTrade();
recvStatus = GetBlockReceivedStatus();
if (recvStatus & (1 << 0))
{
if (gBlockRecvBuffer[0][0] == 0xDCBA)
- SetMainCallback2(sub_8053788);
+ SetMainCallback2(CB2_TryEvolveAfterTrade);
if (gBlockRecvBuffer[0][0] == 0xABCD)
sTradeData->tradeStatus1 = 1;
ResetBlockReceivedFlag(0);
@@ -2521,7 +2521,7 @@ static void CB2_RunTradeAnim_LinkTrade(void)
static void CB2_WaitAndAckTradeComplete(void)
{
- u8 mpId = GetMultiplayerIdIfLinkTrade();
+ u8 mpId = GetMultiplayerIdOfLinkTrade();
HandleLinkDataReceive();
if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1)
{
@@ -2536,7 +2536,7 @@ static void CB2_WaitAndAckTradeComplete(void)
UpdatePaletteFade();
}
-static void sub_8053E8C(void)
+static void CB2_HandleTradeEnded(void)
{
switch (gMain.state)
{
@@ -2587,7 +2587,7 @@ static void sub_8053E8C(void)
MEvent_RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
}
SetContinueGameWarpStatusToDynamicWarp();
- sub_80DA3AC();
+ SaveGame_AfterLinkTrade();
gMain.state++;
sTradeData->timer = 0;
break;
@@ -2598,7 +2598,7 @@ static void sub_8053E8C(void)
}
break;
case 52:
- if (sub_80DA3D8())
+ if (AfterLinkTradeSaveFailed())
{
ClearContinueGameWarpStatus2();
gMain.state = 4;
@@ -2610,7 +2610,7 @@ static void sub_8053E8C(void)
}
break;
case 4:
- sub_80DA40C();
+ ClearSaveAfterLinkTradeSaveFailure();
gMain.state = 40;
sTradeData->timer = 0;
break;
diff --git a/src/trainer_card.c b/src/trainer_card.c
index f1af00254..d3578dfb7 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -1412,7 +1412,7 @@ static void LoadMonIconGfx(void)
{
u8 i;
- CpuSet(gMonIconPalettes, sTrainerCardDataPtr->monIconPals, NELEMS(sTrainerCardDataPtr->monIconPals));
+ CpuCopy16(gMonIconPalettes, sTrainerCardDataPtr->monIconPals, 2 * NELEMS(sTrainerCardDataPtr->monIconPals));
switch (sTrainerCardDataPtr->trainerCard.monIconTint)
{
case MON_ICON_TINT_NORMAL:
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 644b87c37..cd7e23ac8 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -356,7 +356,7 @@ static bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struc
if (ObjectEventIsMovementOverridden(playerObj) && !ObjectEventClearHeldMovementIfFinished(playerObj))
return FALSE;
- sub_805C774();
+ CancelPlayerForcedMovement();
// Uncomment to have player turn to face their opponent
// ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetFaceDirectionMovementAction(GetOppositeDirection(trainerObj->facingDirection)));
task->tFuncId++;
diff --git a/src/water.c b/src/water.c
index 8a1737e58..5f7fa4dc6 100644
--- a/src/water.c
+++ b/src/water.c
@@ -1058,7 +1058,7 @@ static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_80765D4(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
task->data[0]++;
case 1:
if (++task->data[3] > 1)
@@ -1074,7 +1074,7 @@ static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
gSprites[task->data[15]].pos2.x = -3;
}
}
- if (sub_8076640(task) == 0)
+ if (BattleAnimHelper_RunSpriteSquash(task) == 0)
{
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
@@ -1086,13 +1086,13 @@ static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
case 2:
if (++task->data[3] > 4)
{
- sub_80765D4(task, task->data[15], 224, 0x200, 384, 224, 8);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 224, 0x200, 384, 224, 8);
task->data[3] = 0;
task->data[0]++;
}
break;
case 3:
- if (sub_8076640(task) == 0)
+ if (BattleAnimHelper_RunSpriteSquash(task) == 0)
{
task->data[3] = 0;
task->data[4] = 0;
@@ -1112,7 +1112,7 @@ static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
gSprites[task->data[15]].pos2.y -= 2;
if (task->data[4] == 10)
{
- sub_80765D4(task, task->data[15], 384, 224, 0x100, 0x100, 8);
+ BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 384, 224, 0x100, 0x100, 8);
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
@@ -1121,7 +1121,7 @@ static void AnimTask_WaterSpoutLaunch_Step(u8 taskId)
break;
case 6:
gSprites[task->data[15]].pos1.y--;
- if (sub_8076640(task) == 0)
+ if (BattleAnimHelper_RunSpriteSquash(task) == 0)
{
ResetSpriteRotScale(task->data[15]);
gSprites[task->data[15]].pos1.y = task->data[5];
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 4754d9d4f..5c3e59fde 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -354,7 +354,7 @@ static bool8 DoGlobalWildEncounterDiceRoll(void)
return TRUE;
}
-bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavior)
+bool8 StandardWildEncounter(u32 currMetatileAttrs, u16 previousMetatileBehavior)
{
u16 headerId;
struct Roamer * roamer;
@@ -365,11 +365,11 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
headerId = GetCurrentMapWildMonHeaderId();
if (headerId != 0xFFFF)
{
- if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_LAND)
+ if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_LAND)
{
if (gWildMonHeaders[headerId].landMonsInfo == NULL)
return FALSE;
- else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
+ else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
return FALSE;
if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
{
@@ -403,12 +403,12 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
}
}
}
- else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_WATER
- || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR)) == TRUE))
+ else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_WATER
+ || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR)) == TRUE))
{
if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
return FALSE;
- else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
+ else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
return FALSE;
else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE)
{
@@ -707,9 +707,9 @@ void ResetEncounterRateModifiers(void)
sWildEncounterData.stepsSinceLastEncounter = 0;
}
-static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior)
+static bool8 HandleWildEncounterCooldown(u32 currMetatileAttrs)
{
- u8 encounterType = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE);
+ u8 encounterType = GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_ENCOUNTER_TYPE);
u32 minSteps;
u32 encRate;
if (encounterType == TILE_ENCOUNTER_NONE)
@@ -757,23 +757,23 @@ static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior)
return FALSE;
}
-bool8 TryStandardWildEncounter(u32 currMetatileBehavior)
+bool8 TryStandardWildEncounter(u32 currMetatileAttrs)
{
- if (!HandleWildEncounterCooldown(currMetatileBehavior))
+ if (!HandleWildEncounterCooldown(currMetatileAttrs))
{
- sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
+ sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR);
return FALSE;
}
- else if (StandardWildEncounter(currMetatileBehavior, sWildEncounterData.prevMetatileBehavior) == TRUE)
+ else if (StandardWildEncounter(currMetatileAttrs, sWildEncounterData.prevMetatileBehavior) == TRUE)
{
sWildEncounterData.encounterRateBuff = 0;
sWildEncounterData.stepsSinceLastEncounter = 0;
- sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
+ sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR);
return TRUE;
}
else
{
- sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
+ sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileAttrs, METATILE_ATTRIBUTE_BEHAVIOR);
return FALSE;
}
}