summaryrefslogtreecommitdiff
path: root/src/field
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2018-01-21 13:53:32 -0600
committerCameron Hall <cameronghall@cox.net>2018-01-21 13:53:32 -0600
commit11a9371349e1743a18dce28cc60b69dd6a29b665 (patch)
treee696d1fda7556af8b5234eae833ea2fd146fc75d /src/field
parent7383117626ebb2b3d993e5ad8855da5752c9cce8 (diff)
parent68a402883f780a61f54c2f0c8740429d0b2b3a81 (diff)
resolve merge conflicts and make it compile
Diffstat (limited to 'src/field')
-rw-r--r--src/field/berry_tag_screen.c6
-rw-r--r--src/field/choose_party.c2
-rw-r--r--src/field/coord_event_weather.c4
-rw-r--r--src/field/decoration.c45
-rw-r--r--src/field/diploma.c2
-rw-r--r--src/field/field_control_avatar.c9
-rw-r--r--src/field/field_effect.c18
-rw-r--r--src/field/field_effect_helpers.c4
-rw-r--r--src/field/field_fadetransition.c14
-rw-r--r--src/field/field_player_avatar.c2
-rw-r--r--src/field/field_specials.c24
-rw-r--r--src/field/field_weather.c796
-rw-r--r--src/field/field_weather_effects.c85
-rw-r--r--src/field/fldeff_cut.c4
-rw-r--r--src/field/fldeff_escalator.c132
-rw-r--r--src/field/item_menu.c126
-rw-r--r--src/field/item_use.c26
-rw-r--r--src/field/menu_helpers.c139
-rw-r--r--src/field/money.c4
-rw-r--r--src/field/overworld.c25
-rw-r--r--src/field/party_menu.c22
-rw-r--r--src/field/player_pc.c62
-rw-r--r--src/field/pokeblock.c48
-rw-r--r--src/field/region_map.c9
-rw-r--r--src/field/safari_zone.c2
-rw-r--r--src/field/scrcmd.c10
-rw-r--r--src/field/secret_base.c34
-rw-r--r--src/field/shop.c664
-rw-r--r--src/field/slot_machine.c19
-rw-r--r--src/field/start_menu.c45
-rw-r--r--src/field/trader.c4
-rw-r--r--src/field/tv.c24
-rw-r--r--src/field/wallclock.c19
-rw-r--r--src/field/wild_encounter.c2
34 files changed, 1191 insertions, 1240 deletions
diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c
index 56d578464..ed0ab86ae 100644
--- a/src/field/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
@@ -93,7 +93,7 @@ static bool8 sub_8146058(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
sub_8146288();
REG_BLDCNT = 0;
@@ -189,7 +189,6 @@ static void sub_8146288(void)
bool8 sub_81462B8(void)
{
u16 i;
- void *addr;
switch (gSharedMem.var_1FFFF)
{
@@ -213,8 +212,7 @@ bool8 sub_81462B8(void)
else
gBGTilemapBuffers[2][i] = 0x5042;
}
- addr = (void *)(VRAM + 0x3800);
- DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x3800), 0x800);
gSharedMem.var_1FFFF += 1;
break;
case 4:
diff --git a/src/field/choose_party.c b/src/field/choose_party.c
index b108ede5a..fd5808fc3 100644
--- a/src/field/choose_party.c
+++ b/src/field/choose_party.c
@@ -1031,7 +1031,7 @@ void sub_81231AC(void)
static void sub_81231C4(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
DestroyTask(taskId);
ScriptContext2_Disable();
diff --git a/src/field/coord_event_weather.c b/src/field/coord_event_weather.c
index db4e9c161..60b87fa30 100644
--- a/src/field/coord_event_weather.c
+++ b/src/field/coord_event_weather.c
@@ -34,7 +34,7 @@ static const struct CoordEventWeather sCoordEventWeatherFuncs[] =
{ COORD_EVENT_WEATHER_FOG_2, CoordEventWeather_DiagonalFog },
{ COORD_EVENT_WEATHER_ASH, CoordEventWeather_Ash },
{ COORD_EVENT_WEATHER_SANDSTORM, CoordEventWeather_Sandstorm },
- { COORD_EVENT_WEATHER_DARK, CoordEventWeather_Dark },
+ { COORD_EVENT_WEATHER_SHADE, CoordEventWeather_Dark },
{ COORD_EVENT_WEATHER_DROUGHT, CoordEventWeather_Drought },
{ COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle },
{ COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle },
@@ -87,7 +87,7 @@ static void CoordEventWeather_Sandstorm(void)
static void CoordEventWeather_Dark(void)
{
- SetWeather(WEATHER_DARK);
+ SetWeather(WEATHER_SHADE);
}
static void CoordEventWeather_Drought(void)
diff --git a/src/field/decoration.c b/src/field/decoration.c
index a6c0bd21f..0e7fa5f41 100644
--- a/src/field/decoration.c
+++ b/src/field/decoration.c
@@ -19,6 +19,7 @@
#include "event_data.h"
#include "field_weather.h"
#include "decoration.h"
+#include "shop.h"
#include "ewram.h"
EWRAM_DATA u8 *gUnknown_020388D0 = NULL;
@@ -1614,7 +1615,7 @@ void sub_80FE604(u8 taskId)
sub_8134104(gUnknown_020388F6);
gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items;
sub_80FEF50(taskId);
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
sub_80F9480(gUnknown_020388F7, 8);
LoadScrollIndicatorPalette();
gTasks[taskId].func = sub_80FE868;
@@ -1659,7 +1660,7 @@ void sub_80FE758(u8 taskId)
gTasks[taskId].func = Task_DecorationPCProcessMenuInput;
} else
{
- sub_80B3068(taskId);
+ Shop_RunExitSellMenuTask(taskId);
}
}
@@ -1783,17 +1784,17 @@ void sub_80FEABC(u8 taskId, u8 dummy1)
u16 i;
u16 j;
u8 ni;
- if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(0), gUnknown_020388F4 != 0))
+ if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(TOP_ARROW), gUnknown_020388F4 != 0))
{
- CreateVerticalScrollIndicators(0, 0x3c, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x3c, 0x08);
}
if (gUnknown_020388F4 + 7 == gUnknown_020388D5)
{
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
if (gUnknown_020388F4 + 7 < gUnknown_020388D5)
{
- CreateVerticalScrollIndicators(1, 0x3c, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x3c, 0x98);
}
for (i=gUnknown_020388F4; i<gUnknown_020388F4+8; i++)
{
@@ -2003,8 +2004,8 @@ void sub_80FEF50(u8 taskId)
void sub_80FEF74(void)
{
sub_80F9520(gUnknown_020388F7, 8);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 14, 19);
}
@@ -2043,8 +2044,8 @@ void sub_80FF034(u8 taskId)
void sub_80FF058(u8 taskId)
{
sub_80F9520(gUnknown_020388F7, 8);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
BuyMenuFreeMemory();
gTasks[taskId].func = sub_80FF034;
}
@@ -2238,7 +2239,7 @@ void sub_80FF5BC(u8 taskId)
{
if (sub_80FF58C() == TRUE)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_80FF6AC;
} else
@@ -2271,8 +2272,8 @@ void sub_80FF6AC(u8 taskId)
if (!gPaletteFade.active)
{
sub_80FF0E0(taskId);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
sub_80F9520(gUnknown_020388F7, 8);
BuyMenuFreeMemory();
gTasks[taskId].data[2] = 1;
@@ -2288,7 +2289,7 @@ void sub_80FF6AC(u8 taskId)
gTasks[taskId].data[2] = 2;
break;
case 2:
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[12] = 0;
sub_810065C(taskId);
@@ -3192,7 +3193,7 @@ void sub_810026C(u8 taskId)
void sub_810028C(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = c1_overworld_prev_quest;
}
@@ -3221,7 +3222,7 @@ void c1_overworld_prev_quest(u8 taskId)
void sub_8100334(u8 taskId)
{
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = sub_80FE948;
}
@@ -3628,7 +3629,7 @@ void sub_8100A0C(u8 taskId)
{
if (sub_8100D38(taskId) == 1)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8100E70;
} else
@@ -3734,7 +3735,7 @@ void sub_8100C88(u8 taskId)
gTasks[taskId].data[2] = 3;
break;
case 3:
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[13] = -1;
DisplayItemMessageOnField(taskId, gSecretBaseText_DecorReturned, sub_81010F0, 0);
@@ -3799,7 +3800,7 @@ void sub_8100E70(u8 taskId)
data[2] = 2;
break;
case 2:
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
data[12] = 1;
sub_8100EEC(taskId);
@@ -4137,7 +4138,7 @@ void sub_8101518(u8 taskId)
void sub_810153C(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8100C88;
}
@@ -4156,7 +4157,7 @@ void sub_8101590(u8 taskId)
void sub_81015B0(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_81015E0;
}
@@ -4183,7 +4184,7 @@ void sub_81015E0(u8 taskId)
void sub_8101648(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = Task_DecorationPCProcessMenuInput;
}
diff --git a/src/field/diploma.c b/src/field/diploma.c
index 978eca7eb..b31fc7dec 100644
--- a/src/field/diploma.c
+++ b/src/field/diploma.c
@@ -125,7 +125,7 @@ static void Task_DiplomaFadeOut(u8 taskId)
static void DisplayDiplomaText(void)
{
- if (sub_8090FF4())
+ if (CompletedNationalPokedex())
{
REG_BG3HOFS = 256;
StringCopy(gStringVar1, gOtherText_NationalDex);
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index dad2fb1d2..9ac5ae11d 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -620,7 +620,7 @@ int sub_8068024(struct FieldInput *input)
return TRUE;
if (input->input_field_0_6)
{
- IncrementGameStat(5);
+ IncrementGameStat(GAME_STAT_STEPS);
if (sub_80687E4(&position, r4, r6) == 1)
return TRUE;
}
@@ -1207,20 +1207,19 @@ static u8 *trigger_activate(struct CoordEvent *coordEvent)
return NULL;
}
-static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 d)
+static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
{
s32 i;
struct CoordEvent *coordEvents = mapHeader->events->coordEvents;
u8 coordEventCount = mapHeader->events->coordEventCount;
- u8 *script;
for (i = 0; i < coordEventCount; i++)
{
if ((u16)coordEvents[i].x == x && (u16)coordEvents[i].y == y)
{
- if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0)
+ if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0)
{
- script = trigger_activate(&coordEvents[i]);
+ u8 *script = trigger_activate(&coordEvents[i]);
if (script != NULL)
return script;
}
diff --git a/src/field/field_effect.c b/src/field/field_effect.c
index 5ff89574b..ad570cf7f 100644
--- a/src/field/field_effect.c
+++ b/src/field/field_effect.c
@@ -407,7 +407,7 @@ void FieldEffectScript_LoadFadedPalette(u8 **script)
{
struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script);
LoadSpritePalette(palette);
- sub_807D78C(IndexOfSpritePaletteTag(palette->tag));
+ UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag));
(*script) += 4;
}
@@ -543,7 +543,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
LoadCompressedObjectPalette(&gMonPaletteTable[species]);
GetMonSpriteTemplate_803C56C(species, 3);
gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag;
- sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10);
return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
}
@@ -556,13 +556,13 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
LoadCompressedObjectPalette(spritePalette);
GetMonSpriteTemplate_803C56C(species, 3);
gUnknown_02024E8C.paletteTag = spritePalette->tag;
- sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
}
void FreeResourcesAndDestroySprite(struct Sprite *sprite)
{
- sub_807DE68();
+ ResetPreservedPalettesInWeather();
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
if (sprite->oam.affineMode != 0)
{
@@ -1091,7 +1091,7 @@ void task00_8084310(u8 taskId)
task = &gTasks[taskId];
if (!task->data[0])
{
- if (!sub_807D770())
+ if (!IsWeatherNotFadingIn())
{
return;
}
@@ -1191,7 +1191,7 @@ bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0]
bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1]
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
task->data[0]++;
}
@@ -1813,7 +1813,7 @@ bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite
bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
gFieldEffectArguments[0] = mapObject->coords2.x;
gFieldEffectArguments[1] = mapObject->coords2.y;
@@ -2046,7 +2046,7 @@ void sub_8087A74(u8 taskId)
void sub_8087AA4(struct Task *task)
{
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
task->data[0]++;
task->data[15] = player_get_direction_lower_nybble();
@@ -2199,7 +2199,7 @@ void sub_8087E4C(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
- if (sub_807D770())
+ if (IsWeatherNotFadingIn())
{
sprite = &gSprites[gPlayerAvatar.spriteId];
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c
index e2514df90..c9d337de1 100644
--- a/src/field/field_effect_helpers.c
+++ b/src/field/field_effect_helpers.c
@@ -93,7 +93,7 @@ static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum)
{
pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum);
}
- sub_807D78C(paletteNum);
+ UpdateSpritePaletteWithWeather(paletteNum);
}
}
@@ -105,7 +105,7 @@ static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum)
if (graphicsInfo->paletteTag2 != 0x11ff)
{
pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum);
- sub_807D78C(paletteNum);
+ UpdateSpritePaletteWithWeather(paletteNum);
}
}
diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c
index 6d40c53aa..16ba50e4b 100644
--- a/src/field/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -44,18 +44,18 @@ void pal_fill_for_map_transition(void)
switch (fade_type_for_given_maplight_pair(map_light, Overworld_GetMapTypeOfSaveblockLocation()))
{
case 0:
- fade_screen(0, 0);
+ FadeScreen(0, 0);
palette_bg_fill_black();
break;
case 1:
- fade_screen(2, 0);
+ FadeScreen(2, 0);
palette_bg_fill_white();
}
}
void pal_fill_black(void)
{
- fade_screen(0, 0);
+ FadeScreen(0, 0);
palette_bg_fill_black();
}
@@ -65,10 +65,10 @@ void fade_8080918(void)
switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType))
{
case 0:
- fade_screen(1, 0);
+ FadeScreen(1, 0);
break;
case 1:
- fade_screen(3, 0);
+ FadeScreen(3, 0);
}
}
@@ -366,7 +366,7 @@ bool32 sub_8080E64(void)
bool32 sub_8080E70(void)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
return TRUE;
else
return FALSE;
@@ -483,7 +483,7 @@ void sub_8081050(u8 taskId)
{
case 0:
ClearLinkCallback_2();
- fade_screen(1, 0);
+ FadeScreen(1, 0);
sub_8053FF8();
PlaySE(SE_KAIDAN);
data[0]++;
diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c
index 795a53d0b..85cfdb829 100644
--- a/src/field/field_player_avatar.c
+++ b/src/field/field_player_avatar.c
@@ -615,7 +615,7 @@ u8 CheckForFieldObjectCollision(struct MapObject *a, s16 x, s16 y, u8 direction,
return 5;
if (ShouldJumpLedge(x, y, direction))
{
- IncrementGameStat(0x2B);
+ IncrementGameStat(GAME_STAT_JUMPED_DOWN_LEDGES);
return COLLISION_LEDGE_JUMP;
}
if (collision == 4 && sub_8058F6C(x, y, direction))
diff --git a/src/field/field_specials.c b/src/field/field_specials.c
index aade7cffd..e56d9ddbb 100644
--- a/src/field/field_specials.c
+++ b/src/field/field_specials.c
@@ -1061,7 +1061,7 @@ static void sub_810E874(void)
Menu_DrawStdWindowFrame(0, 0, 8, 11);
InitMenu(0, 1, 1, 5, 0, 7);
gUnknown_0203925C = 0;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
sub_810ECD4();
}
@@ -1283,7 +1283,7 @@ void sub_810EB90(u8 newPos, u8 maxItems)
if (newPos == 0)
{
gUnknown_0203925C ^= 0x02;
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
else
{
@@ -1296,7 +1296,7 @@ void sub_810EB90(u8 newPos, u8 maxItems)
else if (newPos + maxItems == gUnknown_0203925A)
{
gUnknown_0203925C ^= 0x01;
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
}
@@ -1347,7 +1347,7 @@ void sub_810ECB0(void)
if (gUnknown_0203925C >> 1 != 1)
{
gUnknown_0203925C |= 0x2;
- CreateVerticalScrollIndicators(0, 0x24, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x24, 0x08);
}
}
@@ -1356,7 +1356,7 @@ void sub_810ECD4(void)
if ((gUnknown_0203925C & 1) == 0)
{
gUnknown_0203925C |= 0x1;
- CreateVerticalScrollIndicators(1, 0x24, 0x48);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x24, 0x48);
}
}
@@ -1428,11 +1428,11 @@ void sub_810EEDC(void)
{
if ((gUnknown_0203925C & 1) != 0)
{
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
if ((gUnknown_0203925C >> 1) == 1)
{
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
BuyMenuFreeMemory();
}
@@ -1542,7 +1542,7 @@ void ShowGlassWorkshopMenu(void)
Menu_DrawStdWindowFrame(0, 0, 10, 11);
InitMenu(0, 1, 1, 5, 0, 9);
gUnknown_0203925C = 0;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
sub_810F2B4();
for (i=0; i<5; i++)
@@ -1721,7 +1721,7 @@ void sub_810F290(void)
if (gUnknown_0203925C >> 1 != 1)
{
gUnknown_0203925C |= 0x02;
- CreateVerticalScrollIndicators(0, 0x2c, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0x2c, 0x08);
}
}
@@ -1730,7 +1730,7 @@ void sub_810F2B4(void)
if (!(gUnknown_0203925C & 0x01))
{
gUnknown_0203925C |= 0x01;
- CreateVerticalScrollIndicators(1, 0x2c, 0x58);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0x2c, 0x58);
}
}
@@ -1739,7 +1739,7 @@ void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems)
if (newPos == 0)
{
gUnknown_0203925C ^= 0x02;
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
}
else
{
@@ -1752,7 +1752,7 @@ void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems)
else if (newPos + maxItems == gUnknown_0203925A)
{
gUnknown_0203925C ^= 0x01;
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
}
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index 4a03322d5..cf96b2e87 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -13,7 +13,13 @@
#include "trig.h"
#include "ewram.h"
-#define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00))
+#define MACRO1(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+
+enum {
+ GAMMA_NONE,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+};
struct RGBColor
{
@@ -24,7 +30,7 @@ struct RGBColor
struct WeatherPaletteData
{
- u16 data[0][0x1000]; // unknown length
+ u16 gammaShiftColors[8][0x1000]; // 0x1000 is the number of bytes that make up all palettes.
};
struct WeatherCallbacks
@@ -36,10 +42,10 @@ struct WeatherCallbacks
};
EWRAM_DATA struct Weather gWeather = {0};
-EWRAM_DATA u8 gUnknown_0202FF38[32] = {0};
+EWRAM_DATA u8 gFieldEffectPaletteGammaTypes[32] = {0};
EWRAM_DATA u16 gUnknown_0202FF58 = {0};
-static const u8 *gUnknown_030006DC;
+static const u8 *sPaletteGammaTypes;
const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz");
const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz");
@@ -56,7 +62,7 @@ static const u8 *const sCompressedDroughtPalettes[] =
DroughtPaletteData_3,
DroughtPaletteData_4,
DroughtPaletteData_5,
- gSharedMem,
+ (u8*)eDroughtPaletteData.gammaShiftColors,
};
// This is a pointer to gWeather. All code in this file accesses gWeather directly,
@@ -65,6 +71,18 @@ static const u8 *const sCompressedDroughtPalettes[] =
// this file produces the same result as accessing gWeather directly.
struct Weather *const gWeatherPtr = &gWeather;
+static bool8 LightenSpritePaletteInFog(u8);
+static void BuildGammaShiftTables(void);
+static void UpdateWeatherGammaShift(void);
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex);
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
+static bool8 FadeInScreen_RainShowShade(void);
+static bool8 FadeInScreen_Drought(void);
+static bool8 FadeInScreen_Fog1(void);
+static void FadeInScreenWithWeather(void);
+static void DoNothing(void);
void None_Init(void);
void None_Main(void);
bool8 None_Finish(void);
@@ -108,10 +126,10 @@ void Fog1_InitVars(void);
void Fog1_Main(void);
void Fog1_InitAll(void);
bool8 Fog1_Finish(void);
-void Weather11_InitVars(void);
-void Weather11_Main(void);
-void Weather11_InitAll(void);
-bool8 Weather11_Finish(void);
+void Shade_InitVars(void);
+void Shade_Main(void);
+void Shade_InitAll(void);
+bool8 Shade_Finish(void);
void Drought_InitVars(void);
void Drought_Main(void);
void Drought_InitAll(void);
@@ -130,7 +148,7 @@ static const struct WeatherCallbacks sWeatherFuncs[] =
{None_Init, None_Main, None_Init, None_Finish},
{Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
{Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish},
- {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain
+ {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish},
{Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
{MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
{Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
@@ -138,54 +156,58 @@ static const struct WeatherCallbacks sWeatherFuncs[] =
{Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
{Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
{Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
- {Weather11_InitVars, Weather11_Main, Weather11_InitAll, Weather11_Finish},
+ {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
{Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
{HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
{Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
};
-void (*const gUnknown_083970B8[])(void) =
+void (*const gWeatherPalStateFuncs[])(void) =
{
- sub_807CC24,
- sub_807CCAC,
- nullsub_39,
- nullsub_39,
+ UpdateWeatherGammaShift, // WEATHER_PAL_STATE_CHANGING_WEATHER
+ FadeInScreenWithWeather, // WEATHER_PAL_STATE_SCREEN_FADING_IN
+ DoNothing, // WEATHER_PAL_STATE_SCREEN_FADING_OUT
+ DoNothing, // WEATHER_PAL_STATE_IDLE
};
-const u8 gUnknown_083970C8[] =
+// This table specifies which of the gamma shift tables should be
+// applied to each of the background and sprite palettes.
+static const u8 sBasePaletteGammaTypes[32] =
{
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 0,
- 2,
- 1,
- 2,
- 2,
- 2,
- 2,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
+ // background palettes
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ // sprite palettes
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
};
#if DEBUG
@@ -232,13 +254,14 @@ const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
void StartWeather(void)
{
u8 index;
+
if (!FuncIsActiveTask(Task_WeatherMain))
{
index = AllocSpritePalette(0x1200);
CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
- sub_807CB10();
- gWeatherPtr->unknown_6D5 = index;
- gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201);
+ BuildGammaShiftTables();
+ gWeatherPtr->altGammaSpritePalIndex = index;
+ gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(0x1201);
gWeatherPtr->rainSpriteCount = 0;
gWeatherPtr->unknown_6D8 = 0;
gWeatherPtr->cloudSpritesCreated = 0;
@@ -249,49 +272,53 @@ void StartWeather(void)
gWeatherPtr->sandstormSprites1Created = 0;
gWeatherPtr->sandstormSprites2Created = 0;
gWeatherPtr->unknown_72E = 0;
- gWeatherPtr->unknown_6FA = 0;
+ gWeatherPtr->lightenedFogSpritePalsCount = 0;
Weather_SetBlendCoeffs(16, 0);
gWeatherPtr->currWeather = 0;
- gWeatherPtr->unknown_6C6 = 3;
- gWeatherPtr->unknown_6C8 = 0;
- gWeatherPtr->unknown_6D3 = 1;
- gWeatherPtr->unknown_6C9 = CreateTask(Task_WeatherInit, 80);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ gWeatherPtr->readyForInit = FALSE;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
}
}
-void DoWeatherEffect(u8 effect)
+void ChangeWeather(u8 weather)
{
- if (effect != WEATHER_RAIN_LIGHT && effect != WEATHER_RAIN_MED && effect != WEATHER_RAIN_HEAVY)
+ if (weather != WEATHER_RAIN_LIGHT && weather != WEATHER_RAIN_MED && weather != WEATHER_RAIN_HEAVY)
{
PlayRainSoundEffect();
}
- if (gWeatherPtr->nextWeather != effect && gWeatherPtr->currWeather == effect)
+
+ if (gWeatherPtr->nextWeather != weather && gWeatherPtr->currWeather == weather)
{
- sWeatherFuncs[effect].initVars();
+ sWeatherFuncs[weather].initVars();
}
- gWeatherPtr->unknown_6D3 = 0;
- gWeatherPtr->nextWeather = effect;
+
+ gWeatherPtr->weatherChangeComplete = FALSE;
+ gWeatherPtr->nextWeather = weather;
gWeatherPtr->finishStep = 0;
}
-void sub_807C988(u8 effect)
+void sub_807C988(u8 weather)
{
PlayRainSoundEffect();
- gWeatherPtr->currWeather = effect;
- gWeatherPtr->nextWeather = effect;
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
}
-void sub_807C9B4(u8 effect)
+void sub_807C9B4(u8 weather)
{
PlayRainSoundEffect();
- gWeatherPtr->currWeather = effect;
- gWeatherPtr->nextWeather = effect;
- gWeatherPtr->unknown_6C8 = 1;
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->readyForInit = TRUE;
}
void Task_WeatherInit(u8 taskId)
{
- if (gWeatherPtr->unknown_6C8)
+ // Waits until it's ok to initialize weather.
+ // When the screen fades in, this is set to TRUE.
+ if (gWeatherPtr->readyForInit)
{
sWeatherFuncs[gWeatherPtr->currWeather].initAll();
gTasks[taskId].func = Task_WeatherMain;
@@ -304,24 +331,26 @@ void Task_WeatherMain(u8 taskId)
{
if (!sWeatherFuncs[gWeatherPtr->currWeather].finish())
{
+ // Finished cleaning up previous weather. Now transition to next weather.
sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
- gWeatherPtr->unknown_6C3 = 0;
- gWeatherPtr->unknown_6C6 = 0;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
- gWeatherPtr->unknown_6D3 = 1;
+ gWeatherPtr->weatherChangeComplete = TRUE;
}
}
else
{
sWeatherFuncs[gWeatherPtr->currWeather].main();
}
- gUnknown_083970B8[gWeatherPtr->unknown_6C6]();
+
+ gWeatherPalStateFuncs[gWeatherPtr->palProcessingState]();
}
void None_Init(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
}
void None_Main(void)
@@ -333,7 +362,10 @@ u8 None_Finish(void)
return 0;
}
-void sub_807CB10(void)
+// Builds two tables that contain gamma shifts for palette colors.
+// It's unclear why the two tables aren't declared as const arrays, since
+// this function always builds the same two tables.
+static void BuildGammaShiftTables(void)
{
u16 v0;
u8 (*v1)[32];
@@ -346,15 +378,15 @@ void sub_807CB10(void)
u16 v11;
s16 dunno;
- gUnknown_030006DC = gUnknown_083970C8;
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
for (v0 = 0; v0 <= 1; v0++)
{
if (v0 == 0)
- v1 = gWeatherPtr->unknown_200;
+ v1 = gWeatherPtr->gammaShifts;
else
- v1 = gWeatherPtr->unk460;
+ v1 = gWeatherPtr->altGammaShifts;
- for (v2 = 0; (u16)v2 <= 0x1f; v2++)
+ for (v2 = 0; v2 < 32; v2++)
{
v4 = v2 << 8;
if (v0 == 0)
@@ -373,88 +405,86 @@ void sub_807CB10(void)
v10 += 0xf;
}
v11 = v10 >> 4;
- if (v2 <= 0xb)
+ if (v2 < 12)
{
- for (; v6 <= 0x12; v6++)
+ for (; v6 < 19; v6++)
{
v4 += v11;
dunno = v4 - v9;
if (dunno > 0)
- {
v4 -= (dunno + ((u16)dunno >> 15)) >> 1;
- }
v1[v6][v2] = v4 >> 8;
if (v1[v6][v2] > 0x1f)
- {
v1[v6][v2] = 0x1f;
- }
}
}
else
{
- for (; v6 <= 0x12; v6++)
+ for (; v6 < 19; v6++)
{
v4 += v11;
v1[v6][v2] = v4 >> 8;
if (v1[v6][v2] > 0x1f)
- {
v1[v6][v2] = 0x1f;
- }
}
}
}
}
}
-void sub_807CC24(void)
+// When the weather is changing, it gradually updates the palettes
+// towards the desired gamma shift.
+static void UpdateWeatherGammaShift(void)
{
- if (gWeatherPtr->unknown_6C0 == gWeatherPtr->unknown_6C1)
+ if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex)
{
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
else
{
- if (++gWeatherPtr->unknown_6C3 >= gWeatherPtr->unknown_6C2)
+ if (++gWeatherPtr->gammaStepFrameCounter >= gWeatherPtr->gammaStepDelay)
{
- gWeatherPtr->unknown_6C3 = 0;
- if (gWeatherPtr->unknown_6C0 < gWeatherPtr->unknown_6C1)
- gWeatherPtr->unknown_6C0++;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ if (gWeatherPtr->gammaIndex < gWeatherPtr->gammaTargetIndex)
+ gWeatherPtr->gammaIndex++;
else
- gWeatherPtr->unknown_6C0--;
- sub_807CEBC(0, 0x20, gWeatherPtr->unknown_6C0);
+ gWeatherPtr->gammaIndex--;
+
+ ApplyGammaShift(0, 32, gWeatherPtr->gammaIndex);
}
}
}
-void sub_807CCAC(void)
+static void FadeInScreenWithWeather(void)
{
if (++gWeatherPtr->unknown_6CB > 1)
gWeatherPtr->unknown_6CA = 0;
+
switch (gWeatherPtr->currWeather)
{
case WEATHER_RAIN_LIGHT:
case WEATHER_RAIN_MED:
case WEATHER_RAIN_HEAVY:
case WEATHER_SNOW:
- case WEATHER_DARK:
- if (sub_807CDC4() == 0)
+ case WEATHER_SHADE:
+ if (FadeInScreen_RainShowShade() == FALSE)
{
- gWeatherPtr->unknown_6C0 = 3;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_DROUGHT:
- if (sub_807CE24() == 0)
+ if (FadeInScreen_Drought() == FALSE)
{
- gWeatherPtr->unknown_6C0 = -6;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = -6;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_FOG_1:
- if (sub_807CE7C() == 0)
+ if (FadeInScreen_Fog1() == FALSE)
{
- gWeatherPtr->unknown_6C0 = 0;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
case WEATHER_ASH:
@@ -464,71 +494,78 @@ void sub_807CCAC(void)
default:
if (!gPaletteFade.active)
{
- gWeatherPtr->unknown_6C0 = gWeatherPtr->unknown_6C1;
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->gammaIndex = gWeatherPtr->gammaTargetIndex;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
}
}
-u8 sub_807CDC4(void)
+bool8 FadeInScreen_RainShowShade(void)
{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- if (++gWeatherPtr->unknown_6C7 >= 0x10)
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
{
- sub_807CEBC(0, 0x20, 3);
- gWeatherPtr->unknown_6C7 = 0x10;
- return 0;
+ ApplyGammaShift(0, 32, 3);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
}
- sub_807D1BC(0, 0x20, 3, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
+
+ ApplyGammaShiftWithBlend(0, 32, 3, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-u8 sub_807CE24(void)
+bool8 FadeInScreen_Drought(void)
{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- if (++gWeatherPtr->unknown_6C7 >= 0x10)
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
{
- sub_807CEBC(0, 0x20, -6);
- gWeatherPtr->unknown_6C7 = 0x10;
- return 0;
+ ApplyGammaShift(0, 32, -6);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
}
- sub_807D304(-6, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
-}
-u8 sub_807CE7C(void)
-{
- if (gWeatherPtr->unknown_6C7 == 0x10)
- return 0;
- ++gWeatherPtr->unknown_6C7;
- sub_807D424(0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
- return 1;
+ ApplyDroughtGammaShiftWithBlend(-6, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-void nullsub_39(void)
+bool8 FadeInScreen_Fog1(void)
{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ gWeatherPtr->fadeScreenCounter++;
+ ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
}
-void sub_807CEBC(u8 a, u8 b, s8 c)
+static void DoNothing(void)
+{ }
+
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
{
- u16 r4;
+ u16 curPalIndex;
u16 palOffset;
- u8 *r6;
+ u8 *gammaTable;
u16 i;
- if (c > 0)
+ if (gammaIndex > 0)
{
- c = c - 1;
- palOffset = a * 16;
- b += a;
- r4 = a;
- while (r4 < b)
+ gammaIndex--;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ // Loop through the speficied palette range and apply necessary gamma shifts to the colors.
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
+ // No palette change.
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
palOffset += 16;
}
@@ -536,25 +573,27 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
u8 r, g, b;
- if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeatherPtr->unknown_6D5)
- r6 = gWeatherPtr->unk460[c];
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_ALT || curPalIndex - 16 == gWeatherPtr->altGammaSpritePalIndex)
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
else
- r6 = gWeatherPtr->unknown_200[c];
- if (r4 == 16 || r4 > 0x1B)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+
+ if (curPalIndex == 16 || curPalIndex > 27)
{
for (i = 0; i < 16; i++)
{
- if (gPlttBufferUnfaded[palOffset] == 0x2D9F)
+ if (gPlttBufferUnfaded[palOffset] == RGB(31, 12, 11))
{
+ // Skip gamma shift for this specific color. (Why?)
palOffset++;
}
else
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
-
- r = r6[color.r];
- g = r6[color.g];
- b = r6[color.b];
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
@@ -563,39 +602,45 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
for (i = 0; i < 16; i++)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
-
- r = r6[color.r];
- g = r6[color.g];
- b = r6[color.b];
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
}
- r4++;
+
+ curPalIndex++;
}
}
- else if (c < 0)
+ else if (gammaIndex < 0)
{
- c = -c - 1;
- palOffset = a * 16;
- b += a;
- r4 = a;
- while (r4 < b)
+ // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables.
+ gammaIndex = -gammaIndex - 1;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
+ // No palette change.
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
palOffset += 16;
}
else
{
- if (r4 == 16 || r4 > 0x1B)
+ if (curPalIndex == 16 || curPalIndex > 27)
{
for (i = 0; i < 16; i++)
{
- if (gPlttBufferUnfaded[palOffset] != 0x2D9F)
- gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ // Skip gamma shift for this specific color. (Why?)
+ if (gPlttBufferUnfaded[palOffset] != RGB(31, 12, 11))
+ gPlttBufferFaded[palOffset] = eDroughtPaletteData.gammaShiftColors[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
+
palOffset++;
}
}
@@ -603,93 +648,100 @@ void sub_807CEBC(u8 a, u8 b, s8 c)
{
for (i = 0; i < 16; i++)
{
- gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ gPlttBufferFaded[palOffset] = eDroughtPaletteData.gammaShiftColors[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
palOffset++;
}
}
}
- r4++;
+
+ curPalIndex++;
}
}
else
{
- CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16));
+ // No palette blending.
+ CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
}
}
-void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e)
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor)
{
u16 palOffset;
- u16 r4;
+ u16 curPalIndex;
u16 i;
- struct RGBColor color = *(struct RGBColor *)&e;
- u8 r_ = color.r;
- u8 g_ = color.g;
- u8 b_ = color.b;
-
- palOffset = a1 * 16;
- a2 += a1;
- c = c - 1;
- r4 = a1;
- while (r4 < a2)
+ struct RGBColor color = *(struct RGBColor *)&blendColor;
+ u8 rBlend = color.r;
+ u8 gBlend = color.g;
+ u8 bBlend = color.b;
+
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ gammaIndex--;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
- BlendPalette(palOffset, 16, d, e);
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
palOffset += 16;
}
else
{
- u8 *r5;
+ u8 *gammaTable;
- if (gUnknown_030006DC[r4] == 1)
- r5 = gWeatherPtr->unknown_200[c];
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NORMAL)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
else
- r5 = gWeatherPtr->unk460[c];
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
for (i = 0; i < 16; i++)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
- u8 r = r5[color.r];
- u8 g = r5[color.g];
- u8 b = r5[color.b];
-
- r += ((r_ - r) * d) >> 4;
- g += ((g_ - g) * d) >> 4;
- b += ((b_ - b) * d) >> 4;
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = gammaTable[baseColor.r];
+ u8 g = gammaTable[baseColor.g];
+ u8 b = gammaTable[baseColor.b];
+
+ // Apply gamma shift and target blend color to the original color.
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
}
}
- r4++;
+
+ curPalIndex++;
}
}
-void sub_807D304(s8 a, u8 coeff, u16 c)
+void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor)
{
struct RGBColor color;
- u8 r_;
- u8 g_;
- u8 b_;
- u16 r4;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
u16 palOffset;
- u16 r12;
+ u16 i;
- a = -a - 1;
- color = *(struct RGBColor *)&c;
- r_ = color.r;
- g_ = color.g;
- b_ = color.b;
+ gammaIndex = -gammaIndex - 1;
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
palOffset = 0;
- for (r4 = 0; r4 < 32; r4++)
+ for (curPalIndex = 0; curPalIndex < 32; curPalIndex++)
{
- if (gUnknown_030006DC[r4] == 0)
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
{
- BlendPalette(palOffset, 16, coeff, c);
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
palOffset += 16;
}
else
{
- for (r12 = 0; r12 < 16; r12++)
+ for (i = 0; i < 16; i++)
{
u32 offset;
struct RGBColor color1;
@@ -703,14 +755,14 @@ void sub_807D304(s8 a, u8 coeff, u16 c)
b1 = color1.b;
offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1);
- color2 = *(struct RGBColor *)&eWeatherPaletteData.data[a][offset];
+ color2 = *(struct RGBColor *)&eDroughtPaletteData.gammaShiftColors[gammaIndex][offset];
r2 = color2.r;
g2 = color2.g;
b2 = color2.b;
- r2 += ((r_ - r2) * coeff) >> 4;
- g2 += ((g_ - g2) * coeff) >> 4;
- b2 += ((b_ - b2) * coeff) >> 4;
+ r2 += ((rBlend - r2) * blendCoeff) >> 4;
+ g2 += ((gBlend - g2) * blendCoeff) >> 4;
+ b2 += ((bBlend - b2) * blendCoeff) >> 4;
gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2;
}
@@ -718,33 +770,30 @@ void sub_807D304(s8 a, u8 coeff, u16 c)
}
}
-bool8 sub_807D574(u8);
-
-void sub_807D424(u8 a, u16 b)
+void ApplyFogBlend(u8 blendCoeff, u16 blendColor)
{
struct RGBColor color;
- u8 r_;
- u8 g_;
- u8 b_;
- u16 r4;
-
- BlendPalette(0, 0x100, a, b);
- color = *(struct RGBColor *)&b;
- r_ = color.r;
- g_ = color.g;
- b_ = color.b;
-
- r4 = 16;
- while (r4 < 32)
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+
+ BlendPalette(0, 0x100, blendCoeff, blendColor);
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+
+ for (curPalIndex = 16; curPalIndex < 32; curPalIndex++)
{
- if (sub_807D574(r4))
+ if (LightenSpritePaletteInFog(curPalIndex))
{
- u16 r12 = (r4 + 1) * 16;
- u16 r6 = r4 * 16;
+ u16 palEnd = (curPalIndex + 1) * 16;
+ u16 palOffset = curPalIndex * 16;
- while (r6 < r12)
+ while (palOffset < palEnd)
{
- struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[r6];
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
u8 r = color.r;
u8 g = color.g;
u8 b = color.b;
@@ -753,88 +802,88 @@ void sub_807D424(u8 a, u16 b)
g += ((31 - g) * 3) >> 2;
b += ((28 - b) * 3) >> 2;
- r += ((r_ - r) * a) >> 4;
- g += ((g_ - g) * a) >> 4;
- b += ((b_ - b) * a) >> 4;
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
- gPlttBufferFaded[r6] = (b << 10) | (g << 5) | r;
- r6++;
+ gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r;
+ palOffset++;
}
}
else
{
- BlendPalette(r4 * 16, 16, a, b);
+ BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor);
}
- r4++;
}
}
-void sub_807D540(u8 a)
+static void MarkFogSpritePalToLighten(u8 paletteIndex)
{
- if (gWeatherPtr->unknown_6FA < 6)
+ if (gWeatherPtr->lightenedFogSpritePalsCount < 6)
{
- gWeatherPtr->unknown_6F4[gWeatherPtr->unknown_6FA] = a;
- gWeatherPtr->unknown_6FA++;
+ gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex;
+ gWeatherPtr->lightenedFogSpritePalsCount++;
}
}
-bool8 sub_807D574(u8 a)
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
{
u16 i;
- for (i = 0; i < gWeatherPtr->unknown_6FA; i++)
+ for (i = 0; i < gWeatherPtr->lightenedFogSpritePalsCount; i++)
{
- if (gWeatherPtr->unknown_6F4[i] == a)
+ if (gWeatherPtr->lightenedFogSpritePals[i] == paletteIndex)
return TRUE;
}
+
return FALSE;
}
-void sub_807D5BC(s8 a)
+void sub_807D5BC(s8 gammaIndex)
{
- if (gWeatherPtr->unknown_6C6 == 3)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
- sub_807CEBC(0, 32, a);
- gWeatherPtr->unknown_6C0 = a;
+ ApplyGammaShift(0, 32, gammaIndex);
+ gWeatherPtr->gammaIndex = gammaIndex;
}
}
-void sub_807D5F0(u8 a, u8 b, u8 c)
+void sub_807D5F0(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
{
- if (gWeatherPtr->unknown_6C6 == 3)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
{
- gWeatherPtr->unknown_6C6 = 0;
- gWeatherPtr->unknown_6C0 = a;
- gWeatherPtr->unknown_6C1 = b;
- gWeatherPtr->unknown_6C3 = 0;
- gWeatherPtr->unknown_6C2 = c;
- sub_807D5BC(a);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->gammaIndex = gammaIndex;
+ gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->gammaStepDelay = gammaStepDelay;
+ sub_807D5BC(gammaIndex);
}
}
-void fade_screen(u8 a, u8 delay)
+void FadeScreen(u8 mode, u8 delay)
{
u32 fadeColor;
- u32 r1;
- u32 r2;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
- switch (a)
+ switch (mode)
{
- case 0:
+ case FADE_FROM_BLACK:
fadeColor = 0;
- r1 = 0;
+ fadeOut = FALSE;
break;
- case 2:
+ case FADE_FROM_WHITE:
fadeColor = 0xFFFF;
- r1 = 0;
+ fadeOut = FALSE;
break;
- case 1:
+ case FADE_TO_BLACK:
fadeColor = 0;
- r1 = 1;
+ fadeOut = TRUE;
break;
- case 3:
+ case FADE_TO_WHITE:
fadeColor = 0xFFFF;
- r1 = 1;
+ fadeOut = TRUE;
break;
default:
return;
@@ -847,145 +896,149 @@ void fade_screen(u8 a, u8 delay)
case WEATHER_RAIN_HEAVY:
case WEATHER_SNOW:
case WEATHER_FOG_1:
- case WEATHER_DARK:
+ case WEATHER_SHADE:
case WEATHER_DROUGHT:
- r2 = 1;
+ useWeatherPal = TRUE;
break;
default:
- r2 = 0;
+ useWeatherPal = FALSE;
break;
}
- if (r1 != 0)
+ if (fadeOut)
{
- if (r2 != 0)
+ if (useWeatherPal)
CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
- gWeatherPtr->unknown_6C6 = 2;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
}
else
{
- gWeatherPtr->unknown_6C4 = fadeColor;
- if (r2 != 0)
- gWeatherPtr->unknown_6C7 = 0;
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
else
BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
- gWeatherPtr->unknown_6C6 = 1;
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
gWeatherPtr->unknown_6CA = 1;
gWeatherPtr->unknown_6CB = 0;
Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
- gWeatherPtr->unknown_6C8 = 1;
+ gWeatherPtr->readyForInit = TRUE;
}
}
-bool8 sub_807D770(void)
+bool8 IsWeatherNotFadingIn(void)
{
- return (gWeatherPtr->unknown_6C6 != 1);
+ return (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN);
}
-void sub_807D78C(u8 a)
+void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
{
- u16 r4 = 16 + a;
+ u16 paletteIndex = 16 + spritePaletteIndex;
u16 i;
- switch (gWeatherPtr->unknown_6C6)
+ switch (gWeatherPtr->palProcessingState)
{
- case 1:
+ case WEATHER_PAL_STATE_SCREEN_FADING_IN:
if (gWeatherPtr->unknown_6CA != 0)
{
if (gWeatherPtr->currWeather == WEATHER_FOG_1)
- sub_807D540(r4);
- r4 *= 16;
+ MarkFogSpritePalToLighten(paletteIndex);
+ paletteIndex *= 16;
for (i = 0; i < 16; i++)
- gPlttBufferFaded[r4 + i] = gWeatherPtr->unknown_6C4;
+ gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor;
}
break;
- case 2:
- r4 *= 16;
- CpuFastCopy(gPlttBufferFaded + r4, gPlttBufferUnfaded + r4, 32);
- BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ case WEATHER_PAL_STATE_SCREEN_FADING_OUT:
+ paletteIndex *= 16;
+ CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32);
+ BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor);
break;
+ // WEATHER_PAL_STATE_CHANGING_WEATHER
+ // WEATHER_PAL_STATE_CHANGING_IDLE
default:
if (gWeatherPtr->currWeather != WEATHER_FOG_1)
{
- sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0);
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
else
{
- r4 *= 16;
- BlendPalette(r4, 16, 12, 0x73FC);
+ paletteIndex *= 16;
+ BlendPalette(paletteIndex, 16, 12, 0x73FC);
}
break;
}
}
-void sub_807D874(u8 a)
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
{
- sub_807CEBC(a, 1, gWeatherPtr->unknown_6C0);
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
u8 unref_sub_807D894(void)
{
- if (gWeatherPtr->unknown_6C6 == 1)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
return gWeatherPtr->unknown_6CA;
else
return 0;
}
-void sub_807D8C0(const u16 *palette)
+void LoadCustomWeatherSpritePalette(const u16 *palette)
{
- LoadPalette(palette, 0x100 + gWeatherPtr->unknown_6D4 * 16, 32);
- sub_807D78C(gWeatherPtr->unknown_6D4);
+ LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32);
+ UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
}
-void sub_807D8F0(u8 *a, u8 *b)
+static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *b)
{
- u8 r4 = *a;
+ u8 gammaIndex = *gammaIndexPtr;
u16 i;
- if (r4 < 7)
+ if (gammaIndex < 7)
{
- r4--;
- LZ77UnCompWram(sCompressedDroughtPalettes[r4], eWeatherPaletteData.data[r4]);
- if (r4 == 0)
+ gammaIndex--;
+ LZ77UnCompWram(sCompressedDroughtPalettes[gammaIndex], eDroughtPaletteData.gammaShiftColors[gammaIndex]);
+ if (gammaIndex == 0)
{
- eWeatherPaletteData.data[r4][0] = 0x421;
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][0] = RGB(1, 1, 1);
for (i = 1; i < 0x1000; i++)
- eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4][i - 1];
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][i] += eDroughtPaletteData.gammaShiftColors[gammaIndex][i - 1];
}
else
{
for (i = 0; i < 0x1000; i++)
- eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i];
+ eDroughtPaletteData.gammaShiftColors[gammaIndex][i] += eDroughtPaletteData.gammaShiftColors[gammaIndex - 1][i];
}
- if (++(*a) == 7)
+ if (++(*gammaIndexPtr) == 7)
{
- *a = 32;
+ *gammaIndexPtr = 32;
*b = 32;
}
}
}
-void sub_807D9A8(void)
+void ResetDroughtWeatherPaletteLoading(void)
{
- gWeatherPtr->unknown_74D = 1;
- gWeatherPtr->unknown_74E = 1;
+ gWeatherPtr->loadDroughtPalsIndex = 1;
+ gWeatherPtr->loadDroughtPalsOffset = 1;
}
-bool8 sub_807D9C8(void)
+bool8 LoadDroughtWeatherPalettes(void)
{
- if (gWeatherPtr->unknown_74D < 32)
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
{
- sub_807D8F0(&gWeatherPtr->unknown_74D, &gWeatherPtr->unknown_74E);
- if (gWeatherPtr->unknown_74D < 32)
+ LoadDroughtWeatherPalette(&gWeatherPtr->loadDroughtPalsIndex, &gWeatherPtr->loadDroughtPalsOffset);
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
return TRUE;
}
return FALSE;
}
-void sub_807DA04(s8 a)
+void sub_807DA04(s8 gammaIndex)
{
- sub_807D5BC(-a - 1);
+ sub_807D5BC(-gammaIndex - 1);
}
void sub_807DA14(void)
@@ -1047,8 +1100,8 @@ void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
gWeatherPtr->targetBlendEVA = eva;
gWeatherPtr->targetBlendEVB = evb;
gWeatherPtr->blendDelay = delay;
- gWeatherPtr->unknown_739 = 0;
- gWeatherPtr->unknown_738 = 0;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter = 0;
}
bool8 Weather_UpdateBlend(void)
@@ -1057,13 +1110,13 @@ bool8 Weather_UpdateBlend(void)
&& gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
return TRUE;
- if (++gWeatherPtr->unknown_739 > gWeatherPtr->blendDelay)
+ if (++gWeatherPtr->blendFrameCounter > gWeatherPtr->blendDelay)
{
- gWeatherPtr->unknown_739 = 0;
- gWeatherPtr->unknown_738++;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter++;
// Update currBlendEVA and currBlendEVB on alternate frames
- if (gWeatherPtr->unknown_738 & 1)
+ if (gWeatherPtr->blendUpdateCounter & 1)
{
if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
gWeatherPtr->currBlendEVA++;
@@ -1093,48 +1146,48 @@ void unref_sub_807DCB4(u8 a)
switch (a)
{
case 1:
- SetWeather(1);
+ SetWeather(WEATHER_CLOUDS);
break;
case 2:
- SetWeather(2);
+ SetWeather(WEATHER_SUNNY);
break;
case 3:
- SetWeather(3);
+ SetWeather(WEATHER_RAIN_LIGHT);
break;
case 4:
- SetWeather(4);
+ SetWeather(WEATHER_SNOW);
break;
case 5:
- SetWeather(5);
+ SetWeather(WEATHER_RAIN_MED);
break;
case 6:
- SetWeather(6);
+ SetWeather(WEATHER_FOG_1);
break;
case 7:
- SetWeather(9);
+ SetWeather(WEATHER_FOG_2);
break;
case 8:
- SetWeather(7);
+ SetWeather(WEATHER_ASH);
break;
case 9:
- SetWeather(8);
+ SetWeather(WEATHER_SANDSTORM);
break;
case 10:
- SetWeather(11);
+ SetWeather(WEATHER_SHADE);
break;
}
}
-u8 weather_get_current(void)
+u8 GetCurrentWeather(void)
{
return gWeatherPtr->currWeather;
}
-void SetRainStrengthFromSoundEffect(u16 sndEff)
+void SetRainStrengthFromSoundEffect(u16 soundEffect)
{
- if (gWeatherPtr->unknown_6C6 != 2)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
{
- switch (sndEff)
+ switch (soundEffect)
{
case SE_T_KOAME:
gWeatherPtr->rainStrength = 0;
@@ -1148,7 +1201,8 @@ void SetRainStrengthFromSoundEffect(u16 sndEff)
default:
return;
}
- PlaySE(sndEff);
+
+ PlaySE(soundEffect);
}
}
@@ -1172,31 +1226,31 @@ void PlayRainSoundEffect(void)
}
}
-u8 sub_807DDFC(void)
+u8 IsWeatherChangeComplete(void)
{
- return gWeatherPtr->unknown_6D3;
+ return gWeatherPtr->weatherChangeComplete;
}
-void sub_807DE10(void)
+void SetWeatherScreenFadeOut(void)
{
- gWeatherPtr->unknown_6C6 = 2;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
}
void unref_sub_807DE24(void)
{
- gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
-void sub_807DE38(u8 a)
+void PreservePaletteInWeather(u8 preservedPalIndex)
{
- CpuCopy16(gUnknown_083970C8, gUnknown_0202FF38, 32);
- gUnknown_0202FF38[a] = 0;
- gUnknown_030006DC = gUnknown_0202FF38;
+ CpuCopy16(sBasePaletteGammaTypes, gFieldEffectPaletteGammaTypes, 32);
+ gFieldEffectPaletteGammaTypes[preservedPalIndex] = GAMMA_NONE;
+ sPaletteGammaTypes = gFieldEffectPaletteGammaTypes;
}
-void sub_807DE68(void)
+void ResetPreservedPalettesInWeather(void)
{
- gUnknown_030006DC = gUnknown_083970C8;
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
}
#if DEBUG
@@ -1284,7 +1338,7 @@ u8 debug_sub_8085564(void)
._378:\n\
ldr r0, ._382\n\
ldrb r0, [r0]\n\
- bl DoWeatherEffect\n\
+ bl ChangeWeather\n\
bl CloseMenu\n\
mov r0, #0x1\n\
._379:\n\
@@ -1335,7 +1389,7 @@ u8 debug_sub_808560C(void)
.word gUnknown_0202FF58+0x2\n\
.word gWeather\n\
.word gDebugText_Weather\n\
- .word gCallback_03004AE8\n\
+ .word gMenuCallback\n\
.word debug_sub_8085564+1");
}
diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c
index 5a59d6c2a..eff702f8c 100644
--- a/src/field/field_weather_effects.c
+++ b/src/field/field_weather_effects.c
@@ -74,10 +74,7 @@ static const struct SpriteTemplate sCloudSpriteTemplate =
.callback = sub_807E0F4,
};
-extern void sub_807D5BC(s8 a);
-extern void sub_807D8C0(const u16 *palette);
-extern void sub_807D9A8(void);
-extern bool8 sub_807D9C8(void);
+extern void sub_807D5BC(s8 gammaIndex);
extern void sub_807DA14(void);
extern void sub_807DA4C(void);
extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c);
@@ -91,8 +88,8 @@ extern void sub_807D5F0(u8 a, u8 b, u8 c);
void Clouds_InitVars(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->initStep = 0;
if (gWeatherPtr->cloudSpritesCreated == FALSE)
@@ -159,8 +156,8 @@ bool8 Clouds_Finish(void)
void Weather2_InitVars(void)
{
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
}
void Weather2_InitAll(void)
@@ -184,7 +181,7 @@ void CreateCloudSprites(void)
if (gWeatherPtr->cloudSpritesCreated == TRUE)
return;
LoadSpriteSheet(&sCloudSpriteSheet);
- sub_807D8C0(gUnknown_08397108);
+ LoadCustomWeatherSpritePalette(gUnknown_08397108);
for (i = 0; i < 3; i++)
{
u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
@@ -236,8 +233,8 @@ void Drought_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
}
void Drought_Main(void);
@@ -254,15 +251,15 @@ void Drought_Main(void)
switch (gWeatherPtr->initStep)
{
case 0:
- if (gWeatherPtr->unknown_6C6 != 0)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
gWeatherPtr->initStep++;
break;
case 1:
- sub_807D9A8();
+ ResetDroughtWeatherPaletteLoading();
gWeatherPtr->initStep++;
break;
case 2:
- if (sub_807D9C8() == FALSE)
+ if (LoadDroughtWeatherPalettes() == FALSE)
gWeatherPtr->initStep++;
break;
case 3:
@@ -368,8 +365,8 @@ void LightRain_InitVars(void)
gWeatherPtr->unknown_6DB = 8;
gWeatherPtr->unknown_6DC = 0;
gWeatherPtr->unknown_6D9 = 10;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
SetRainStrengthFromSoundEffect(SE_T_KOAME);
}
@@ -885,8 +882,8 @@ void Snow_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6E5 = 16;
gWeatherPtr->unknown_6E0 = 0;
}
@@ -1074,8 +1071,8 @@ void MedRain_InitVars(void)
gWeatherPtr->unknown_6DB = 4;
gWeatherPtr->unknown_6DC = 0;
gWeatherPtr->unknown_6D9 = 16;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
gWeatherPtr->unknown_6ED = 0;
SetRainStrengthFromSoundEffect(SE_T_AME);
@@ -1102,8 +1099,8 @@ void HeavyRain_InitVars(void)
gWeatherPtr->unknown_6DB = 4;
gWeatherPtr->unknown_6DC = 1;
gWeatherPtr->unknown_6D9 = 24;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
SetRainStrengthFromSoundEffect(SE_T_OOAME);
}
@@ -1139,7 +1136,7 @@ void Rain_Main(void)
gWeatherPtr->initStep++;
break;
case 3:
- if (gWeatherPtr->unknown_6C6 == 0)
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_CHANGING_WEATHER)
break;
gWeatherPtr->initStep = 6;
break;
@@ -1213,7 +1210,7 @@ void Rain_Main(void)
gWeatherPtr->initStep++;
break;
case 14:
- if (gWeatherPtr->unknown_6C6 != 3)
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_IDLE)
break;
gWeatherPtr->unknown_6EA = 1;
gWeatherPtr->initStep = 4;
@@ -1296,8 +1293,8 @@ void Fog1_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
if (gWeatherPtr->fog1SpritesCreated == 0)
{
gWeatherPtr->unknown_6F0 = 0;
@@ -1446,8 +1443,8 @@ void Ash_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6FE = 20;
if (!gWeatherPtr->ashSpritesCreated)
{
@@ -1634,8 +1631,8 @@ void Fog2_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
gWeatherPtr->unknown_6F0 = 0;
gWeatherPtr->unknown_6F2 = 1;
if (gWeatherPtr->fog2SpritesCreated == 0)
@@ -1835,8 +1832,8 @@ void Sandstorm_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->unknown_6C1 = 0;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
if (gWeatherPtr->sandstormSprites1Created == 0)
{
gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
@@ -2015,7 +2012,7 @@ void CreateSandstormSprites_1(void)
if (!gWeatherPtr->sandstormSprites1Created)
{
LoadSpriteSheet(&sSandstormSpriteSheet);
- sub_807D8C0(gUnknown_08397128);
+ LoadCustomWeatherSpritePalette(gUnknown_08397128);
for (i = 0; i < 20; i++)
{
u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
@@ -2113,26 +2110,26 @@ void SandstormSpriteCallback3(struct Sprite *sprite)
}
//------------------------------------------------------------------------------
-// Weather 11
+// Shade
//------------------------------------------------------------------------------
-void Weather11_InitVars(void)
+void Shade_InitVars(void)
{
gWeatherPtr->initStep = 0;
- gWeatherPtr->unknown_6C1 = 3;
- gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
}
-void Weather11_InitAll(void)
+void Shade_InitAll(void)
{
- Weather11_InitVars();
+ Shade_InitVars();
}
-void Weather11_Main(void)
+void Shade_Main(void)
{
}
-bool8 Weather11_Finish(void)
+bool8 Shade_Finish(void)
{
return FALSE;
}
@@ -2322,7 +2319,7 @@ void SetSav1WeatherFromCurrMapHeader(void)
void SetWeather(u32 weather)
{
SetSav1Weather(weather);
- DoWeatherEffect(GetSav1Weather());
+ ChangeWeather(GetSav1Weather());
}
void SetWeather_Unused(u32 weather)
@@ -2333,7 +2330,7 @@ void SetWeather_Unused(u32 weather)
void DoCurrentWeather(void)
{
- DoWeatherEffect(GetSav1Weather());
+ ChangeWeather(GetSav1Weather());
}
void sub_8080750(void)
@@ -2380,5 +2377,5 @@ void UpdateRainCounter(u8 newWeather, u8 oldWeather)
{
if (newWeather != oldWeather
&& (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
- IncrementGameStat(0x28);
+ IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
}
diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c
index 7d90b9f4d..522fb01d6 100644
--- a/src/field/fldeff_cut.c
+++ b/src/field/fldeff_cut.c
@@ -231,7 +231,7 @@ bool8 FldEff_UseCutOnGrass(void)
gTasks[taskId].data[8] = (u32)sub_80A2684 >> 16;
gTasks[taskId].data[9] = (u32)sub_80A2684;
- IncrementGameStat(0x12);
+ IncrementGameStat(GAME_STAT_USED_CUT);
return FALSE;
}
@@ -247,7 +247,7 @@ bool8 FldEff_UseCutOnTree(void)
gTasks[taskId].data[8] = (u32)sub_80A2B00 >> 16;
gTasks[taskId].data[9] = (u32)sub_80A2B00;
- IncrementGameStat(0x12);
+ IncrementGameStat(GAME_STAT_USED_CUT);
return FALSE;
}
diff --git a/src/field/fldeff_escalator.c b/src/field/fldeff_escalator.c
new file mode 100644
index 000000000..981233480
--- /dev/null
+++ b/src/field/fldeff_escalator.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "task.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+
+extern u8 gUnknown_02038731;
+
+void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
+{
+ s16 r5 = gTasks[taskId].data[4] - 1;
+ s16 r3 = gTasks[taskId].data[5] - 1;
+ s16 r4 = gTasks[taskId].data[1];
+ s16 y;
+ s16 x;
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[2 - r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
+ }
+ }
+ }
+ }
+}
+
+const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
+const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
+const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
+const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
+const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
+const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
+const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
+
+void sub_80B4710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_80B45B4(taskId, gUnknown_083CC714, 0);
+ break;
+ case 1:
+ sub_80B45B4(taskId, gUnknown_083CC71A, 0);
+ break;
+ case 2:
+ sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
+ break;
+ case 3:
+ sub_80B45B4(taskId, gUnknown_083CC726, 0);
+ break;
+ case 4:
+ sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
+ break;
+ case 5:
+ sub_80B45B4(taskId, gUnknown_083CC732, 0);
+ break;
+ case 6:
+ sub_80B45B4(taskId, gUnknown_083CC738, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if (!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80B47D8(u16 var)
+{
+ u8 taskId = CreateTask(sub_80B4710, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80B4710(taskId);
+ return taskId;
+}
+
+void sub_80B4824(u8 var)
+{
+ gUnknown_02038731 = sub_80B47D8(var);
+}
+
+void sub_80B483C(void)
+{
+ DestroyTask(gUnknown_02038731);
+}
+
+bool8 sub_80B4850(void)
+{
+ if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index 7922bf69d..cf3c7ca4b 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -34,12 +34,12 @@
#include "task.h"
#include "text.h"
#include "scanline_effect.h"
+#include "menu_helpers.h"
#include "ewram.h"
// External stuff
extern void gpu_pal_allocator_reset__manage_upper_four(void);
-extern void sub_80F9020(void);
-extern void sub_80F9988();
+extern void SetVerticalScrollIndicatorPriority();
extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
extern void PauseVerticalScrollIndicator();
extern u8 sub_80F9284(void);
@@ -47,10 +47,10 @@ extern void sub_808B5B4();
extern u8 sub_80F92F4();
extern void sub_80C9C7C(u8);
extern void pal_fill_black(void);
-extern bool8 sub_807D770(void);
+extern bool8 IsWeatherNotFadingIn(void);
extern u8 sub_80F931C();
extern void sub_808A3F8(u8);
-extern void sub_80B3050(void);
+extern void Shop_FadeReturnToMartMenu(void);
extern void sub_80546B8(u8);
extern void sub_804E990(u8);
extern void sub_802E424(u8);
@@ -389,20 +389,8 @@ static void sub_80A3134(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
-
- {
- const void *src = gBGTilemapBuffers[1];
- void *dst = (void *)(VRAM + 0x2000);
-
- DmaCopy16(3, src, dst, 0x800);
- }
-
- {
- const void *src = gBGTilemapBuffers[2];
- void *dst = (void *)(VRAM + 0x6000);
-
- DmaCopy16(3, src, dst, 0x800);
- }
+ DmaCopy16Defvars(3, gBGTilemapBuffers[1], (void *)(VRAM + 0x2000), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800);
}
#if DEBUG
@@ -450,7 +438,7 @@ static bool8 SetupBagMultistep(void)
.word ._23\n\
.word ._24\n\
._8:\n\
- bl sub_80F9438\n\
+ bl ClearVideoCallbacks\n\
bl sub_80A34E8\n\
b ._61\n\
._9:\n\
@@ -468,7 +456,7 @@ static bool8 SetupBagMultistep(void)
bl gpu_pal_allocator_reset__manage_upper_four\n\
b ._61\n\
._11:\n\
- bl sub_80F9020\n\
+ bl ClearBGTilemapBuffers\n\
ldr r0, ._31\n\
ldr r1, ._31 + 4\n\
add r0, r0, r1\n\
@@ -545,7 +533,7 @@ static bool8 SetupBagMultistep(void)
._48:\n\
b ._61\n\
._18:\n\
- bl sub_80F944C\n\
+ bl ClearVerticalScrollIndicatorPalettes\n\
bl LoadScrollIndicatorPalette\n\
mov r0, #0x0\n\
mov r1, #0xac\n\
@@ -565,16 +553,16 @@ static bool8 SetupBagMultistep(void)
bl CreateVerticalScrollIndicators\n\
mov r0, #0x0\n\
mov r1, #0x2\n\
- bl sub_80F9988\n\
+ bl SetVerticalScrollIndicatorPriority\n\
mov r0, #0x1\n\
mov r1, #0x2\n\
- bl sub_80F9988\n\
+ bl SetVerticalScrollIndicatorPriority\n\
mov r0, #0x2\n\
mov r1, #0x2\n\
- bl sub_80F9988\n\
+ bl SetVerticalScrollIndicatorPriority\n\
mov r0, #0x3\n\
mov r1, #0x2\n\
- bl sub_80F9988\n\
+ bl SetVerticalScrollIndicatorPriority\n\
ldr r0, ._53\n\
ldrb r0, [r0]\n\
sub r0, r0, #0x4\n\
@@ -584,10 +572,10 @@ static bool8 SetupBagMultistep(void)
bhi ._51 @cond_branch\n\
mov r0, #0x2\n\
mov r1, #0x1\n\
- bl sub_80F979C\n\
+ bl SetVerticalScrollIndicators\n\
mov r0, #0x3\n\
mov r1, #0x1\n\
- bl sub_80F979C\n\
+ bl SetVerticalScrollIndicators\n\
._51:\n\
ldr r1, ._53 + 4\n\
ldr r0, ._53 + 8\n\
@@ -797,7 +785,7 @@ static bool8 SetupBagMultistep(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80A34E8();
gMain.state++;
break;
@@ -810,7 +798,7 @@ static bool8 SetupBagMultistep(void)
gMain.state++;
break;
case 3:
- sub_80F9020();
+ ClearBGTilemapBuffers();
ewramBagSetupStep = 0;
gMain.state++;
break;
@@ -842,20 +830,20 @@ static bool8 SetupBagMultistep(void)
gMain.state++;
break;
case 10:
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
- CreateVerticalScrollIndicators(0, 172, 12);
- CreateVerticalScrollIndicators(1, 172, 148);
- CreateVerticalScrollIndicators(2, 28, 88);
- CreateVerticalScrollIndicators(3, 100, 88);
- sub_80F9988(0, 2);
- sub_80F9988(1, 2);
- sub_80F9988(2, 2);
- sub_80F9988(3, 2);
+ CreateVerticalScrollIndicators(TOP_ARROW, 172, 12);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 172, 148);
+ CreateVerticalScrollIndicators(LEFT_ARROW, 28, 88);
+ CreateVerticalScrollIndicators(RIGHT_ARROW, 100, 88);
+ SetVerticalScrollIndicatorPriority(TOP_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(BOTTOM_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(LEFT_ARROW, 2);
+ SetVerticalScrollIndicatorPriority(RIGHT_ARROW, 2);
if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5)
{
- sub_80F979C(2, 1);
- sub_80F979C(3, 1);
+ SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE);
}
gMain.state++;
break;
@@ -1136,10 +1124,10 @@ static void sub_80A3770(void)
static void sub_80A37C0(u8 taskId)
{
gTasks[taskId].func = sub_80A50C8;
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
- StartVerticalScrollIndicators(2);
- StartVerticalScrollIndicators(3);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
+ StartVerticalScrollIndicators(LEFT_ARROW);
+ StartVerticalScrollIndicators(RIGHT_ARROW);
}
static void sub_80A37F8(u8 taskId)
@@ -1181,8 +1169,8 @@ static void sub_80A37F8(u8 taskId)
sub_80A37C0(FindTaskIdByFunc(sub_80A4F68));
DestroyTask(taskId);
ItemListMenu_InitMenu();
- sub_80F979C(2, 0);
- sub_80F979C(3, 0);
+ SetVerticalScrollIndicators(LEFT_ARROW, VISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, VISIBLE);
}
}
@@ -1984,14 +1972,14 @@ static void sub_80A47E8(u16 a, int b, int c, int d)
break;
}
if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0)
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
else
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1)
|| (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots))
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
else
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
}
static void sub_80A48E8(u16 taskId, int b, int c)
@@ -2186,14 +2174,14 @@ static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits)
static void sub_80A4E8C(s8 delta, u8 b)
{
PlaySE(SE_SELECT);
- sub_80F979C(0, 1);
- sub_80F979C(1, 1);
- sub_80F979C(2, 1);
- sub_80F979C(3, 1);
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
- PauseVerticalScrollIndicator(2);
- PauseVerticalScrollIndicator(3);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE);
+ SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
+ PauseVerticalScrollIndicator(LEFT_ARROW);
+ PauseVerticalScrollIndicator(RIGHT_ARROW);
ChangePocket(gBGTilemapBuffers[2], delta);
DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket);
sub_80A3770();
@@ -2345,10 +2333,10 @@ static void sub_80A50C8(u8 taskId)
gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos;
gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId);
- sub_80F98A4(0);
- sub_80F98A4(1);
- sub_80F98A4(2);
- sub_80F98A4(3);
+ StopVerticalScrollIndicators(TOP_ARROW);
+ StopVerticalScrollIndicators(BOTTOM_ARROW);
+ StopVerticalScrollIndicators(LEFT_ARROW);
+ StopVerticalScrollIndicators(RIGHT_ARROW);
sub_80A797C();
}
else
@@ -2380,7 +2368,7 @@ static void sub_80A50C8(u8 taskId)
}
}
-bool8 sub_80A52C4(u8 taskId, u16 b)
+bool8 SellMenu_QuantityRoller(u8 taskId, u16 b)
{
s16 *taskData = gTasks[taskId].data;
@@ -2427,7 +2415,7 @@ static bool8 sub_80A5350(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
+ if (SellMenu_QuantityRoller(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
{
// if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way
if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1)
@@ -3190,7 +3178,7 @@ void ExecuteItemUseFromBlackPalette(void)
static void Task_CallItemUseOnFieldCallback(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
gFieldItemUseCallback(taskId);
}
@@ -3442,7 +3430,7 @@ static void sub_80A62D8(void)
gUnknown_02038563 = CreateTask(sub_80A50C8, 0);
}
-void sub_80A6300(void)
+void ItemMenu_LoadSellMenu(void)
{
sReturnLocation = RETURN_TO_SHOP;
SetMainCallback2(sub_80A62D8);
@@ -3450,7 +3438,7 @@ void sub_80A6300(void)
static void OnBagClose_Shop(u8 taskId)
{
- gFieldCallback = sub_80B3050;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16;
gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch;
sub_80A5AE4(taskId);
@@ -4002,8 +3990,8 @@ static void sub_80A7230(u8 taskId)
break;
case 204:
PlaySE(SE_SELECT);
- sub_80F98A4(2);
- sub_80F98A4(3);
+ StopVerticalScrollIndicators(LEFT_ARROW);
+ StopVerticalScrollIndicators(RIGHT_ARROW);
gSpecialVar_ItemId = ITEM_POKE_BALL;
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
diff --git a/src/field/item_use.c b/src/field/item_use.c
index 55fb21814..219ef5080 100644
--- a/src/field/item_use.c
+++ b/src/field/item_use.c
@@ -40,7 +40,7 @@
extern void (*gFieldItemUseCallback)(u8);
extern void (*gFieldCallback)(void);
extern void (*gUnknown_0300485C)(void);
-extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc);
+extern void (*gPokemonItemUseCallback)(u8, u16, TaskFunc);
extern u8 gUnknown_02038561;
extern u8 gLastFieldPokeMenuOpened;
@@ -100,7 +100,7 @@ void ItemMenu_ConfirmNormalFade(u8 var)
void ItemMenu_ConfirmComplexFade(u8 var)
{
ExecuteSwitchToOverworldFromItemUse(var);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
void SetUpItemUseOnFieldCallback(u8 taskId)
@@ -259,7 +259,7 @@ void ItemUseOnFieldCB_Rod(u8 taskId)
void ItemUseOutOfBattle_Itemfinder(u8 var)
{
- IncrementGameStat(0x27);
+ IncrementGameStat(GAME_STAT_USED_ITEMFINDER);
gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Itemfinder;
SetUpItemUseOnFieldCallback(var);
}
@@ -832,7 +832,7 @@ void sub_80C9D98(u8 taskId)
void ItemUseOutOfBattle_Medicine(u8 taskId)
{
- gUnknown_03004AE4 = UseMedicine;
+ gPokemonItemUseCallback = UseMedicine;
sub_80C9D98(taskId);
}
@@ -850,26 +850,26 @@ void ItemUseOutOfBattle_SacredAsh(u8 taskId)
break;
}
}
- gUnknown_03004AE4 = sub_8070048;
+ gPokemonItemUseCallback = sub_8070048;
gUnknown_02038561 = 4;
ItemMenu_ConfirmNormalFade(taskId);
}
void ItemUseOutOfBattle_PPRecovery(u8 taskId)
{
- gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_PPUp(u8 taskId)
{
- gUnknown_03004AE4 = DoPPUpItemEffect;
+ gPokemonItemUseCallback = DoPPUpItemEffect;
sub_80C9D98(taskId);
}
void ItemUseOutOfBattle_RareCandy(u8 taskId)
{
- gUnknown_03004AE4 = DoRareCandyItemEffect;
+ gPokemonItemUseCallback = DoRareCandyItemEffect;
sub_80C9D98(taskId);
}
@@ -908,7 +908,7 @@ void sub_80C9F80(u8 var)
void sub_80C9FC0(u8 var)
{
- gUnknown_03004AE4 = TeachMonTMMove;
+ gPokemonItemUseCallback = TeachMonTMMove;
sub_80C9D98(var);
}
@@ -1009,7 +1009,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
void ItemUseOutOfBattle_EvolutionStone(u8 var)
{
- gUnknown_03004AE4 = DoEvolutionStoneItemEffect;
+ gPokemonItemUseCallback = DoEvolutionStoneItemEffect;
sub_80C9D98(var);
}
@@ -1078,19 +1078,19 @@ void sub_80CA3C0(u8 taskId)
void ItemUseInBattle_Medicine(u8 var)
{
- gUnknown_03004AE4 = UseMedicine;
+ gPokemonItemUseCallback = UseMedicine;
sub_80CA3C0(var);
}
void unref_sub_80CA410(u8 var)
{
- gUnknown_03004AE4 = sub_8070048;
+ gPokemonItemUseCallback = sub_8070048;
sub_80CA3C0(var);
}
void ItemUseInBattle_PPRecovery(u8 var)
{
- gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ gPokemonItemUseCallback = DoPPRecoveryItemEffect;
sub_80CA3C0(var);
}
diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c
index 76f0d367e..388d98ec7 100644
--- a/src/field/menu_helpers.c
+++ b/src/field/menu_helpers.c
@@ -18,7 +18,7 @@
static void sub_80F9834(struct Sprite *sprite);
-static EWRAM_DATA u8 gUnknown_020388C0[4] = {0};
+static EWRAM_DATA u8 gVerticalScrollIndicatorIds[4] = {0};
static EWRAM_DATA struct YesNoFuncTable gUnknown_020388C4 = {0};
static TaskFunc gUnknown_0300074C;
@@ -125,7 +125,7 @@ static const struct SpriteTemplate gSpriteTemplate_83E5A00 =
.callback = SpriteCallbackDummy,
};
-void sub_80F9020(void)
+void ClearBGTilemapBuffers(void)
{
memset(&gBGTilemapBuffers[1], 0, 0x800);
memset(&gBGTilemapBuffers[2], 0, 0x800);
@@ -296,9 +296,6 @@ bool8 sub_80F9344(void)
void sub_80F9368(void)
{
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
REG_BG3CNT = 0;
REG_BG2CNT = 0;
@@ -312,38 +309,24 @@ void sub_80F9368(void)
REG_BG1VOFS = 0;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
-
- addr = (u8 *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (u8 *)VRAM, 0x18000, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
}
-void sub_80F9438(void)
+void ClearVideoCallbacks(void)
{
SetVBlankCallback(NULL);
SetHBlankCallback(NULL);
}
-void sub_80F944C(void)
+void ClearVerticalScrollIndicatorPalettes(void)
{
u8 i;
for (i = 0; i < 4; i++)
{
- gUnknown_020388C0[i] = 0xFF;
+ gVerticalScrollIndicatorIds[i] = 0xFF;
}
FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG);
@@ -401,92 +384,92 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
switch (id)
{
- case 0:
- if (gUnknown_020388C0[0] == 0xFF)
+ case TOP_ARROW:
+ if (gVerticalScrollIndicatorIds[TOP_ARROW] == 0xFF)
{
- gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[0]].data[2] = -1;
- if (gUnknown_020388C0[1] != 0xFF)
+ gVerticalScrollIndicatorIds[TOP_ARROW] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[2] = -1;
+ if (gVerticalScrollIndicatorIds[BOTTOM_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1;
- gSprites[gUnknown_020388C0[0]].data[3] = gSprites[gUnknown_020388C0[1]].data[3];
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].pos2.y = gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].pos2.y * -1;
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3] = gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[0]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3] = 0;
}
}
break;
- case 1:
- if (gUnknown_020388C0[1] == 0xFF)
+ case BOTTOM_ARROW:
+ if (gVerticalScrollIndicatorIds[BOTTOM_ARROW] == 0xFF)
{
- gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[1]].data[2] = 1;
- if (gUnknown_020388C0[0] != 0xFF)
+ gVerticalScrollIndicatorIds[BOTTOM_ARROW] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[2] = 1;
+ if (gVerticalScrollIndicatorIds[TOP_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1;
- gSprites[gUnknown_020388C0[1]].data[3] = gSprites[gUnknown_020388C0[0]].data[3];
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].pos2.y = gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].pos2.y * -1;
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3] = gSprites[gVerticalScrollIndicatorIds[TOP_ARROW]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[1]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[BOTTOM_ARROW]].data[3] = 0;
}
}
break;
- case 2:
- if (gUnknown_020388C0[2] == 0xFF)
+ case LEFT_ARROW:
+ if (gVerticalScrollIndicatorIds[LEFT_ARROW] == 0xFF)
{
- gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[2]].data[0] = -1;
- if (gUnknown_020388C0[3] != 0xFF)
+ gVerticalScrollIndicatorIds[LEFT_ARROW] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[0] = -1;
+ if (gVerticalScrollIndicatorIds[RIGHT_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1;
- gSprites[gUnknown_020388C0[2]].data[1] = gSprites[gUnknown_020388C0[3]].data[1];
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].pos2.x = gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].pos2.x * -1;
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1] = gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[2]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1] = 0;
}
}
break;
- case 3:
- if (gUnknown_020388C0[3] == 0xFF)
+ case RIGHT_ARROW:
+ if (gVerticalScrollIndicatorIds[RIGHT_ARROW] == 0xFF)
{
- gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[3]].data[0] = 1;
- if (gUnknown_020388C0[2] != 0xFF)
+ gVerticalScrollIndicatorIds[RIGHT_ARROW] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[0] = 1;
+ if (gVerticalScrollIndicatorIds[LEFT_ARROW] != 0xFF)
{
- gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1;
- gSprites[gUnknown_020388C0[3]].data[1] = gSprites[gUnknown_020388C0[2]].data[1];
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].pos2.x = gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].pos2.x * -1;
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1] = gSprites[gVerticalScrollIndicatorIds[LEFT_ARROW]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[3]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[RIGHT_ARROW]].data[1] = 0;
}
}
break;
}
- StartSpriteAnim(&gSprites[gUnknown_020388C0[id]], id & 1);
+ StartSpriteAnim(&gSprites[gVerticalScrollIndicatorIds[id]], id & 1);
}
-void sub_80F979C(u8 id, bool8 invisible)
+void SetVerticalScrollIndicators(u8 id, bool8 invisible)
{
- if (id < 4 && gUnknown_020388C0[id] != 0xFF)
+ if (id < 4 && gVerticalScrollIndicatorIds[id] != 0xFF)
{
- gSprites[gUnknown_020388C0[id]].invisible = invisible;
+ gSprites[gVerticalScrollIndicatorIds[id]].invisible = invisible;
}
}
void DestroyVerticalScrollIndicator(u8 id)
{
- if (id < 4 && gUnknown_020388C0[id] != 0xFF)
+ if (id < 4 && gVerticalScrollIndicatorIds[id] != 0xFF)
{
- DestroySprite(&gSprites[gUnknown_020388C0[id]]);
- gUnknown_020388C0[id] = 0xFF;
+ DestroySprite(&gSprites[gVerticalScrollIndicatorIds[id]]);
+ gVerticalScrollIndicatorIds[id] = 0xFF;
}
}
@@ -530,43 +513,43 @@ static void sub_80F9834(struct Sprite *sprite)
}
}
-void sub_80F98A4(u8 id)
+void StopVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].callback = SpriteCallbackDummy;
+ gSprites[gVerticalScrollIndicatorIds[id]].callback = SpriteCallbackDummy;
}
}
void StartVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].callback = sub_80F9834;
+ gSprites[gVerticalScrollIndicatorIds[id]].callback = sub_80F9834;
}
}
-static void sub_80F9914(u8 id)
+static void ResetVerticalScrollIndicators(u8 id)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].pos2.x = 0;
- gSprites[gUnknown_020388C0[id]].pos2.y = 0;
- gSprites[gUnknown_020388C0[id]].data[1] = 0;
- gSprites[gUnknown_020388C0[id]].data[3] = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].pos2.x = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].pos2.y = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].data[1] = 0;
+ gSprites[gVerticalScrollIndicatorIds[id]].data[3] = 0;
}
}
void PauseVerticalScrollIndicator(u8 id)
{
- sub_80F98A4(id);
- sub_80F9914(id);
+ StopVerticalScrollIndicators(id);
+ ResetVerticalScrollIndicators(id);
}
-void sub_80F9988(u8 id, u8 priority)
+void SetVerticalScrollIndicatorPriority(u8 id, u8 priority)
{
- if (gUnknown_020388C0[id] != 0xFF && id < 4)
+ if (gVerticalScrollIndicatorIds[id] != 0xFF && id < 4)
{
- gSprites[gUnknown_020388C0[id]].oam.priority = priority;
+ gSprites[gVerticalScrollIndicatorIds[id]].oam.priority = priority;
}
}
diff --git a/src/field/money.c b/src/field/money.c
index b85ed8009..3b7268dbc 100644
--- a/src/field/money.c
+++ b/src/field/money.c
@@ -100,6 +100,8 @@ void GetMoneyAmountText(u8 *buffer, u32 amount, u8 arg2)
width = 7;
else if (amount > 99999)
width = 6;
+ // A special sprite is used for 10000 in the decoration
+ // shop, so be sure to account for this.
else if (amount > 10000)
width = 5;
else if (amount > 999)
@@ -175,7 +177,7 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top)
}
__attribute__((naked))
-void sub_80B7B34(u8 var1, u8 var2, int var3)
+void Draw10000Sprite(u8 var1, u8 var2, int var3)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
diff --git a/src/field/overworld.c b/src/field/overworld.c
index 8346ce3f9..07135080e 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -592,7 +592,7 @@ bool8 sub_80538D0(u16 x, u16 y)
void sub_80538F0(u8 mapGroup, u8 mapNum)
{
- s32 i;
+ s32 paletteIndex;
Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
sub_8053F0C();
@@ -613,8 +613,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
sub_8056D38(gMapHeader.mapData);
apply_map_tileset2_palette(gMapHeader.mapData);
- for (i = 6; i < 12; i++)
- sub_807D874(i);
+ for (paletteIndex = 6; paletteIndex < 12; paletteIndex++)
+ ApplyWeatherGammaShiftToPal(paletteIndex);
sub_8072ED0();
UpdateLocationHistoryForRoamer();
@@ -1759,29 +1759,12 @@ void do_load_map_stuff_loop(u8 *a1)
void sub_8054BA8(void)
{
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
ScanlineEffect_Stop();
DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
-
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
ResetOamRange(0, 128);
LoadOam();
}
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index e26b801bc..4fdb17786 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -1108,27 +1108,11 @@ bool8 InitPartyMenu(void)
#else
bool8 InitPartyMenu(void)
{
- u8 *addr;
- u32 size;
-
switch (gMain.state)
{
case 0:
SetVBlankCallback(NULL);
- addr = (u8 *)VRAM;
- size = VRAM_SIZE;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
-
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
@@ -1282,9 +1266,7 @@ void ReDrawPartyMonBackgrounds(void)
{
if (ewram1B000.unk261)
{
- const void *src = gBGTilemapBuffers[2];
- void *dest = (void *)(BG_VRAM + 0x3000);
- DmaCopy16(3, src, dest, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(BG_VRAM + 0x3000), 0x800);
if (ewram1B000.unk261 == 2)
{
diff --git a/src/field/player_pc.c b/src/field/player_pc.c
index 1d504586c..27427ecaa 100644
--- a/src/field/player_pc.c
+++ b/src/field/player_pc.c
@@ -29,9 +29,9 @@ extern void DestroyVerticalScrollIndicator(u8);
extern void PauseVerticalScrollIndicator(u8);
extern void LoadScrollIndicatorPalette(void);
extern void ClearMailStruct(struct MailStruct *);
-extern u8 sub_807D770(void);
+extern u8 IsWeatherNotFadingIn(void);
extern void sub_808B020(void);
-extern void sub_80F944C(void);
+extern void ClearVerticalScrollIndicatorPalettes(void);
static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
@@ -357,12 +357,12 @@ static void Task_ItemStorage_Deposit(u8 taskId)
static void ItemStorage_Deposit(u8 taskId)
{
TASK.FUNC = Task_ItemStorage_Deposit;
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
static void ItemStorage_HandleReturnToProcessInput(u8 taskId)
{
- if (sub_807D770() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
TASK.FUNC = ItemStorageMenuProcessInput;
}
@@ -563,8 +563,8 @@ static void ItemStorage_ProcessInput(u8 taskId)
static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId)
{
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_EraseWindowRect(0, 0, 29, 19);
Menu_DisplayDialogueFrame();
InitItemStorageMenu(TASK.CURRENT_ITEM_STORAGE_MENU);
@@ -576,8 +576,8 @@ static void ItemStorage_DoItemAction(u8 taskId)
s16 *data = TASK.data;
u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP;
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1); // PauseVerticalScrollIndicator
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW)
{
@@ -663,8 +663,8 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId)
{
PlaySE(SE_SELECT);
Menu_EraseWindowRect(6, 6, 0xD, 0xB);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); // why not use trueIndex?
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -724,8 +724,8 @@ static void ItemStorage_ResumeInputFromNoToss(u8 taskId)
Menu_EraseWindowRect(0x6, 0x6, 0xD, 0xB);
InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId);
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -757,8 +757,8 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON)
{
ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
TASK.FUNC = ItemStorage_ProcessInput;
}
}
@@ -766,8 +766,8 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
static void ItemStorage_HandleResumeProcessInput(u8 taskId)
{
Menu_EraseWindowRect(0x6, 0x6, 0xD, 0xB);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
ItemStorage_DrawBothListAndDescription(taskId);
TASK.FUNC = ItemStorage_ProcessInput;
}
@@ -903,14 +903,14 @@ static void ItemStorage_DrawItemList(u8 taskId)
Menu_BlankWindowRect(16, yCoord + 4, 0x1C, 0x12);
if (ITEMS_ABOVE_TOP != 0)
- CreateVerticalScrollIndicators(0, 0xB8, 8);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xB8, 8);
else
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
if (ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS)
- CreateVerticalScrollIndicators(1, 0xB8, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xB8, 0x98);
else
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void ItemStorage_PrintItemPcResponse(u16 itemId)
@@ -974,7 +974,7 @@ static void ItemStorage_GoBackToItemPCMenu(u8 taskId, u8 var)
{
s16 *data = TASK.data;
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
ItemStorage_LoadPalette();
Menu_DrawStdWindowFrame(0xF, 0, 0x1D, 0x13);
@@ -1055,19 +1055,19 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused
Menu_BlankWindowRect(0x15, yCoord + 4, 0x1C, 0x12);
if (eMailboxInfo.itemsAbove != 0)
- CreateVerticalScrollIndicators(0, 0xC8, 8);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xC8, 8);
else
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
if (eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count)
- CreateVerticalScrollIndicators(1, 0xC8, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xC8, 0x98);
else
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void Mailbox_DrawMailboxMenu(u8 taskId)
{
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
Menu_EraseWindowRect(0, 0, 0x1D, 0x13);
Menu_DrawStdWindowFrame(0, 0, 0x8, 0x3);
@@ -1137,8 +1137,8 @@ static void Mailbox_ProcessInput(u8 taskId)
static void Mailbox_CloseScrollIndicators(void)
{
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
}
static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
@@ -1196,7 +1196,7 @@ static void Mailbox_MailOptionsProcessInput(u8 taskId)
static void Mailbox_DoMailRead(u8 taskId)
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
TASK.FUNC = Mailbox_FadeAndReadMail;
}
@@ -1211,7 +1211,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId)
static void Mailbox_HandleReturnToProcessInput(u8 taskId) // Mailbox_HandleReturnToProcessInput
{
- if(sub_807D770() == TRUE) // is black fade finished? why not gPaletteFade.active?
+ if (IsWeatherNotFadingIn() == TRUE) // is black fade finished? why not gPaletteFade.active?
TASK.FUNC = Mailbox_ProcessInput;
}
@@ -1280,7 +1280,7 @@ static void Mailbox_Give(u8 taskId)
Mailbox_NoPokemonForMail(taskId); // cannot be reached normally
else
{
- fade_screen(1, 0);
+ FadeScreen(1, 0);
TASK.FUNC = Mailbox_DoGiveMailPokeMenu;
}
}
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c
index b69d8ac06..43684dfec 100644
--- a/src/field/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -1,7 +1,3 @@
-//
-
-//
-
#include "global.h"
#include "overworld.h"
#include "sprite.h"
@@ -250,14 +246,10 @@ static void sub_810B674(void)
static void sub_810B68C(void)
{
- u16 *src;
- vu16 *dest;
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- src = gBGTilemapBuffers[2];
- dest = (vu16 *)(VRAM + 0x7800);
- DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x7800), sizeof gBGTilemapBuffers[2]);
}
static bool8 sub_810B6C0(void)
@@ -266,7 +258,7 @@ static bool8 sub_810B6C0(void)
switch (gMain.state)
{
case 0:
- sub_80F9438();
+ ClearVideoCallbacks();
sub_80F9368();
REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2);
REG_BLDCNT = 0;
@@ -328,10 +320,10 @@ static bool8 sub_810B6C0(void)
}
break;
case 12:
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
- CreateVerticalScrollIndicators(0, 0xb0, 0x08);
- CreateVerticalScrollIndicators(1, 0xb0, 0x98);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xb0, 0x08);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xb0, 0x98);
gMain.state++;
break;
case 13:
@@ -577,19 +569,19 @@ static void sub_810BDAC(bool8 flag)
}
if (gUnknown_02039248.unk1)
{
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
}
else
{
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
}
if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2)
{
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
else
{
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
}
for (i=0; i<5; i++)
{
@@ -793,8 +785,8 @@ static void sub_810C23C(u8 taskId)
static void sub_810C2B0(void)
{
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
BuyMenuFreeMemory();
}
@@ -827,8 +819,8 @@ static void sub_810C368(u8 taskId)
int v0 = 0;
if (gUnknown_02039244 > 1)
v0 = 2;
- sub_80F98A4(0);
- sub_80F98A4(1);
+ StopVerticalScrollIndicators(TOP_ARROW);
+ StopVerticalScrollIndicators(BOTTOM_ARROW);
BasicInitMenuWindow(&gWindowTemplate_81E6E50);
Menu_DrawStdWindowFrame(7, v0 + 4, 13, 11);
Menu_PrintItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758);
@@ -895,7 +887,7 @@ static void sub_810C540(u8 taskId)
static void sub_810C5C0(u8 taskId)
{
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
gTasks[taskId].func = sub_810C540;
}
@@ -917,11 +909,11 @@ static void sub_810C610(u8 taskId)
static void sub_810C668(u8 taskId)
{
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2)
{
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
BasicInitMenuWindow(&gWindowTemplate_81E6E50);
Menu_EraseWindowRect(7, 6, 13, 11);
@@ -941,14 +933,14 @@ static void sub_810C704(u8 taskId)
{
BasicInitMenuWindow(&gWindowTemplate_81E6E34);
sub_810BC84(gUnknown_02039248.unk1);
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
gTasks[taskId].func = sub_810C6DC;
}
static void sub_810C748(u8 taskId)
{
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(7, 4, 13, 11);
gTasks[taskId].func = sub_810BF7C;
diff --git a/src/field/region_map.c b/src/field/region_map.c
index 9194e791d..7bfda1a81 100644
--- a/src/field/region_map.c
+++ b/src/field/region_map.c
@@ -1608,8 +1608,8 @@ static void PrintFlyTargetName(void)
{
if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)
{
- u16 i = 0;
- int zero;
+ u16 i;
+ bool32 drawFrameDisabled = FALSE;
for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++)
{
@@ -1627,9 +1627,8 @@ static void PrintFlyTargetName(void)
break;
}
}
- // This check is always true, but somehow the compiler still performed it.
- asm("mov %0, #0\n":"=r"(zero)); // zero = 0
- if (zero == 0)
+
+ if (!drawFrameDisabled)
{
Menu_DrawStdWindowFrame(16, 16, 29, 19);
Menu_PrintText(ewram0_3.regionMap.mapSectionName, 17, 17);
diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c
index 2829001f6..f371b08b3 100644
--- a/src/field/safari_zone.c
+++ b/src/field/safari_zone.c
@@ -56,7 +56,7 @@ void ResetSafariZoneFlag(void)
void EnterSafariMode(void)
{
- IncrementGameStat(0x11);
+ IncrementGameStat(GAME_STAT_ENTERED_SAFARI_ZONE);
SetSafariZoneFlag();
ClearAllPokeblockFeeders();
gNumSafariBalls = 30;
diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c
index e795fd8ed..bc5cd0b1d 100644
--- a/src/field/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -626,7 +626,7 @@ bool8 IsPaletteNotActive(void)
bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
{
- fade_screen(ScriptReadByte(ctx), 0);
+ FadeScreen(ScriptReadByte(ctx), 0);
SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -636,7 +636,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx)
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
- fade_screen(duration, delay);
+ FadeScreen(duration, delay);
SetupNativeScript(ctx, IsPaletteNotActive);
return TRUE;
}
@@ -1755,7 +1755,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreatePokemartMenu(ptr);
+ Shop_CreatePokemartMenu(ptr);
ScriptContext1_Stop();
return TRUE;
}
@@ -1764,7 +1764,7 @@ bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreateDecorationShop1Menu(ptr);
+ Shop_CreateDecorationShop1Menu(ptr);
ScriptContext1_Stop();
return TRUE;
}
@@ -1773,7 +1773,7 @@ bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
- CreateDecorationShop2Menu(ptr);
+ Shop_CreateDecorationShop2Menu(ptr);
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index 1bdc76b23..082e8ebc6 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -348,7 +348,7 @@ void sub_80BBA48(u8 taskid)
void sub_80BBAF0(void)
{
CreateTask(sub_80BBA48, 0);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1);
}
@@ -362,7 +362,7 @@ bool8 sub_80BBB24(void)
void sub_80BBB50(u8 taskid)
{
FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2);
- if (sub_807D770() == 1) {
+ if (IsWeatherNotFadingIn() == 1) {
EnableBothScriptContexts();
DestroyTask(taskid);
}
@@ -397,7 +397,7 @@ void sub_80BBC78(void)
{
u8 taskid = CreateTask(sub_80BBBEC, 0);
gTasks[taskid].data[0] = 0;
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
bool8 CurrentMapIsSecretBase(void)
@@ -534,7 +534,7 @@ void sub_80BC074(u8 taskid)
void sub_80BC0F8(void) {
CreateTask(sub_80BC074, 0);
- fade_screen(1, 0);
+ FadeScreen(1, 0);
}
void sub_80BC114(void) {
@@ -895,7 +895,7 @@ void Task_SecretBasePC_Registry(u8 taskId)
s16 *taskData;
ScriptContext2_Enable();
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
LoadScrollIndicatorPalette();
taskData = gTasks[taskId].data;
@@ -959,17 +959,17 @@ void sub_80BC6B0(u8 taskId)
{
Menu_BlankWindowRect(18, 2 * n + 2, 28, 2 * n + 3);
Menu_PrintText(gUnknownText_Exit, 18, 2 * n + 2);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (n != 7)
Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
}
else
- CreateVerticalScrollIndicators(1, 0xbc, 0x98);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xbc, 0x98);
if (taskData[2] == 0)
- DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
else
- CreateVerticalScrollIndicators(0, 0xbc, 0x08);
+ CreateVerticalScrollIndicators(TOP_ARROW, 0xbc, 0x08);
}
void sub_80BC7D8(u8 taskId)
@@ -1064,8 +1064,8 @@ u8 sub_80BC948(u8 a)
void sub_80BC980(u8 taskId)
{
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DrawStdWindowFrame(1, 0, 12, 5);
Menu_PrintItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4);
InitMenu(0, 2, 1, 2, 0, 10);
@@ -1106,8 +1106,8 @@ void sub_80BCA84(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 29, 19);
@@ -1165,8 +1165,8 @@ void sub_80BCBF8(u8 taskId)
InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
Menu_EraseWindowRect(1, 0, 12, 5);
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
gTasks[taskId].func = sub_80BC824;
}
@@ -1176,8 +1176,8 @@ void sub_80BCC54(u8 taskId)
u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE);
BuyMenuFreeMemory();
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (curBaseIndex == 0)
{
diff --git a/src/field/shop.c b/src/field/shop.c
index df271743d..852ccddda 100644
--- a/src/field/shop.c
+++ b/src/field/shop.c
@@ -28,54 +28,66 @@
#include "field_camera.h"
#include "ewram.h"
-extern bool8 sub_80A52C4(u8, u8);
+extern bool8 SellMenu_QuantityRoller(u8, u8);
extern u8 gBuyMenuFrame_Gfx[];
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
-void sub_80B39D0(int var1, int var2, bool32 hasControlCode);
-void sub_80B3A70(void);
-void sub_80B4378(u8);
-void sub_80B43F0(u8);
-void Task_ExitBuyMenu(u8);
-void sub_80B4470(u8);
-void sub_80B2EFC(u8 taskId);
-void sub_80B2F30(u8 taskId);
-void HandleShopMenuQuit(u8 taskId);
-void sub_80B3BF4(u8 taskId);
-void sub_80B3D7C(u8 taskId);
+static void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode);
+static void Shop_PrintItemDescText(void);
+static void Task_ReturnToBuyMenu(u8);
+static void Task_ExitBuyMenu(u8);
+static void Task_ExitBuyMenuDoFade(u8);
+static void Task_UpdatePurchaseHistory(u8);
+static void Task_HandleShopMenuBuy(u8 taskId);
+static void Task_HandleShopMenuSell(u8 taskId);
+static void Task_HandleShopMenuQuit(u8 taskId);
+static void Task_DoItemPurchase(u8 taskId);
+static void Task_CancelItemPurchase(u8 taskId);
+static void Task_DoBuySellMenu(u8);
+static void Shop_FadeAndRunBuySellCallback(u8);
+static void BuyMenuDrawGraphics(void);
+static void sub_80B3240(void);
+static void DrawFirstMartScrollIndicators(void);
+static void Shop_DrawViewport(void);
+static void Shop_InitMenus(int, int);
+static void Shop_PrintItemDesc(void);
+static void Shop_DoCursorAction(u8);
+static void Shop_LoadViewportObjects(void);
+static void Shop_AnimViewportObjects(void);
// iwram
static struct MartInfo gMartInfo;
// ewram
EWRAM_DATA u32 gMartTotalCost = 0;
-EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0};
-EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static
-EWRAM_DATA u8 gUnknown_02038730 = 0;
-EWRAM_DATA u8 gUnknown_02038731 = 0;
+EWRAM_DATA s16 gMartViewportObjects[16][4] = {0};
+EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3] = {0};
+EWRAM_DATA u8 gMartPurchaseHistoryId = 0;
+
+EWRAM_DATA u8 gUnknown_02038731 = 0; // This really should be in fldeff_escalator, but being in a new file aligns the ewram, which doesnt match the ROM.
// rodata
static const struct MenuAction2 sBuySellQuitMenuActions[] =
{
- { MartText_Buy, sub_80B2EFC },
- { MartText_Sell, sub_80B2F30 },
- { MartText_Quit2, HandleShopMenuQuit },
+ { MartText_Buy, Task_HandleShopMenuBuy },
+ { MartText_Sell, Task_HandleShopMenuSell },
+ { MartText_Quit2, Task_HandleShopMenuQuit },
};
-static const u8 gUnknown_083CC6E8[] = {0, 1, 2}; // BUY SELL EXIT
-static const u8 gUnknown_083CC6EB[] = {0, 2}; // BUY EXIT
+static const u8 gMartBuySellOptionList[] = {SHOP_BUY, SHOP_SELL, SHOP_EXIT};
+static const u8 gMartBuyNoSellOptionList[] = {SHOP_BUY, SHOP_EXIT};
static const u16 gUnusedMartArray[] = {0x2, 0x3, 0x4, 0xD, 0x121, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x0, 0x0};
-static const struct YesNoFuncTable gUnknown_083CC708[] =
+static const struct YesNoFuncTable sShopPurchaseYesNoFuncs[] =
{
- sub_80B3BF4,
- sub_80B3D7C
+ Task_DoItemPurchase,
+ Task_CancelItemPurchase
};
-u8 CreateShopMenu(u8 martType)
+static u8 CreateShopMenu(u8 martType)
{
ScriptContext2_Enable();
gMartInfo.martType = martType;
@@ -85,25 +97,25 @@ u8 CreateShopMenu(u8 martType)
{
gMartInfo.numChoices = 2;
Menu_DrawStdWindowFrame(0, 0, 10, 7);
- Menu_PrintItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gUnknown_083CC6E8);
+ Menu_PrintItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gMartBuySellOptionList);
}
else
{
gMartInfo.numChoices = 1;
Menu_DrawStdWindowFrame(0, 0, 10, 5);
- Menu_PrintItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gUnknown_083CC6EB);
+ Menu_PrintItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gMartBuyNoSellOptionList);
}
InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel
- return CreateTask(sub_80B2E38, 8);
+ return CreateTask(Task_DoBuySellMenu, 8);
}
-void SetShopMenuCallback(void *callbackPtr)
+static void SetShopMenuCallback(void *callbackPtr)
{
gMartInfo.callback = callbackPtr;
}
-void SetShopItemsForSale(u16 *items)
+static void SetShopItemsForSale(u16 *items)
{
u16 i = 0;
@@ -117,9 +129,9 @@ void SetShopItemsForSale(u16 *items)
}
}
-void sub_80B2E38(u8 var)
+static void Task_DoBuySellMenu(u8 taskId)
{
- const u8 local = var;
+ const u8 taskIdConst = taskId; // why is a local const needed to match?
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
@@ -142,37 +154,37 @@ void sub_80B2E38(u8 var)
PlaySE(SE_SELECT);
if (gMartInfo.martType == MART_TYPE_0)
{
- sBuySellQuitMenuActions[gUnknown_083CC6E8[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuySellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
else
{
- sBuySellQuitMenuActions[gUnknown_083CC6EB[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuyNoSellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- HandleShopMenuQuit(local);
+ Task_HandleShopMenuQuit(taskIdConst);
}
}
-void sub_80B2EFC(u8 taskId)
+static void Task_HandleShopMenuBuy(u8 taskId)
{
gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16;
gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics;
- gTasks[taskId].func = sub_80B2FA0;
- fade_screen(1, 0);
+ gTasks[taskId].func = Shop_FadeAndRunBuySellCallback;
+ FadeScreen(1, 0);
}
-void sub_80B2F30(u8 taskId)
+static void Task_HandleShopMenuSell(u8 taskId)
{
- gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16;
- gTasks[taskId].data[9] = (u32)sub_80A6300;
- gTasks[taskId].func = sub_80B2FA0;
- fade_screen(1, 0);
+ gTasks[taskId].data[8] = (u32)ItemMenu_LoadSellMenu >> 16;
+ gTasks[taskId].data[9] = (u32)ItemMenu_LoadSellMenu;
+ gTasks[taskId].func = Shop_FadeAndRunBuySellCallback;
+ FadeScreen(1, 0);
}
-void HandleShopMenuQuit(u8 taskId)
+static void Task_HandleShopMenuQuit(u8 taskId)
{
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 11, 8);
@@ -184,7 +196,7 @@ void HandleShopMenuQuit(u8 taskId)
gMartInfo.callback(); // run the callback if it exists.
}
-void sub_80B2FA0(u8 taskId)
+static void Shop_FadeAndRunBuySellCallback(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -193,15 +205,15 @@ void sub_80B2FA0(u8 taskId)
}
}
-void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
+static void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
{
CreateShopMenu(gMartInfo.martType);
DestroyTask(taskId);
}
-void Task_ExitSellMenu(u8 taskId)
+static void Task_ReturnToMartMenu(u8 taskId)
{
- if (sub_807D770() == 1)
+ if (IsWeatherNotFadingIn() == 1)
{
if (gMartInfo.martType == MART_TYPE_2)
DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0);
@@ -210,23 +222,24 @@ void Task_ExitSellMenu(u8 taskId)
}
}
-void sub_80B3050(void)
+void Shop_FadeReturnToMartMenu(void)
{
pal_fill_black();
- CreateTask(Task_ExitSellMenu, 0x8);
+ CreateTask(Task_ReturnToMartMenu, 0x8);
}
-void sub_80B3068(u8 taskId)
+void Shop_RunExitSellMenuTask(u8 taskId)
{
- Task_ExitSellMenu(taskId);
+ Task_ReturnToMartMenu(taskId);
}
-void unref_sub_80B3078(u8 taskId)
+// unused
+void Shop_LoadExitSellMenuTask(u8 taskId)
{
- gTasks[taskId].func = Task_ExitSellMenu;
+ gTasks[taskId].func = Task_ReturnToMartMenu;
}
-void sub_80B3094(void)
+static void MainCB2(void)
{
AnimateSprites();
BuildOamBuffer();
@@ -234,50 +247,43 @@ void sub_80B3094(void)
UpdatePaletteFade();
}
-void sub_80B30AC(void)
+static void VBlankCB(void)
{
- void *addr;
- void *addr2;
- void *addr3;
- u16 *tempArr;
- u16 *tempArr2;
- u16 *tempArr3;
-
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
-
- // temp vars needed to match for some dumb reason
- tempArr = gBGTilemapBuffers[1];
- addr = (void *)(VRAM + 0xE800);
- DmaCopy16(3, tempArr, addr, 0x800);
- tempArr2 = gBGTilemapBuffers[2];
- addr2 = (void *)(VRAM + 0xE000);
- DmaCopy16(3, tempArr2, addr2, 0x800);
- tempArr3 = gBGTilemapBuffers[3];
- addr3 = (void *)(VRAM + 0xF000);
- DmaCopy16(3, tempArr3, addr3, 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[1], (void *)(VRAM + 0xE800), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0xE000), 0x800);
+ DmaCopy16Defvars(3, gBGTilemapBuffers[3], (void *)(VRAM + 0xF000), 0x800);
}
-// this function is fugly. pls fix
-void BuyMenuDrawGraphics(void)
+static void BuyMenuDrawGraphics(void)
{
- void *addr;
- register u16 zero2 asm("r5");
-
- sub_80F9438();
+ ClearVideoCallbacks();
ScanlineEffect_Stop();
- REG_BG1HOFS = (zero2 = 0);
- REG_BG1VOFS = zero2;
- REG_BG2HOFS = zero2;
- REG_BG2VOFS = zero2;
- REG_BG3HOFS = zero2;
- REG_BG3VOFS = zero2;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
gPaletteFade.bufferTransferDisabled = 1;
- addr = (void*)OAM;
- {
- register const u32 zero asm("r6") = 0;
- DmaFill32(3, zero, addr, OAM_SIZE);
+
+ /*
+ THEORY: This seemingly useless loop is required in order to match this
+ function without hacks. The reason is because it alters the 0 optimization
+ of a later assignment into using 2 different 0s instead of the same register.
+ It is speculated that at some point Game Freak insert an artificial
+ breakpoint here in order to look at the contents of OAM before it is cleared,
+ possibly because a programmer made a mistake in shop.c which corrupted its
+ contents. There may have been a macro here which at one point idled on the
+ while(1) but was changed to 0 for release due to a define somewhere. A
+ while(0) also matches, but it is more correct to use do {} while(0) as it
+ was a fix to prevent compiler warnings on older compilers.
+ */
+ do {} while(0);
+
+ DmaFill32Defvars(3, 0, (void*)OAM, OAM_SIZE);
LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
LZDecompressWram(gBuyMenuFrame_Tilemap, ewram18000_2);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));
@@ -287,72 +293,72 @@ void BuyMenuDrawGraphics(void)
ResetTasks();
Text_LoadWindowTemplate(&gWindowTemplate_81E6DFC);
InitMenuWindow(&gWindowTemplate_81E6DFC);
- BuyMenuDrawMapGraphics();
- gMartInfo.cursor = zero;
- gMartInfo.choicesAbove = zero2;
+ Shop_DrawViewport();
+ gMartInfo.cursor = 0;
+ gMartInfo.choicesAbove = 0;
Menu_EraseWindowRect(0, 0, 0x20, 0x20);
OpenMoneyWindow(gSaveBlock1.money, 0, 0);
- sub_80B3764(0, 7);
- sub_80B37EC();
- sub_80B3270();
- CreateTask(sub_80B40E8, 0x8);
+ Shop_InitMenus(0, 7);
+ Shop_PrintItemDesc();
+ DrawFirstMartScrollIndicators();
+ CreateTask(Shop_DoCursorAction, 0x8);
sub_80B3240();
- asm("":::"r4"); // what??
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, zero);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
gPaletteFade.bufferTransferDisabled = 0;
- SetVBlankCallback(sub_80B30AC);
- SetMainCallback2(sub_80B3094);
- }
+ SetVBlankCallback(VBlankCB);
+ SetMainCallback2(MainCB2);
}
-void sub_80B3240(void)
+static void sub_80B3240(void)
{
- u16 tempArr[2] = {0x41EE, 0x7FFF};
+ u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE};
- LoadPalette(&tempArr[1], 0xD1, 2);
- LoadPalette(&tempArr[0], 0xD8, 2);
+ LoadPalette(&colors[1], 0xD1, sizeof colors[1]);
+ LoadPalette(&colors[0], 0xD8, sizeof colors[0]);
}
-void sub_80B3270(void)
+static void DrawFirstMartScrollIndicators(void)
{
- sub_80F944C();
+ ClearVerticalScrollIndicatorPalettes();
if (gMartInfo.itemCount > 7)
{
- CreateVerticalScrollIndicators(0, 172, 12);
- CreateVerticalScrollIndicators(1, 172, 148);
- sub_80F979C(0, 1);
+ CreateVerticalScrollIndicators(TOP_ARROW, 172, 12);
+ CreateVerticalScrollIndicators(BOTTOM_ARROW, 172, 148);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
}
}
-void sub_80B32A4(void)
+static void Shop_TryDrawVerticalScrollIndicators(void)
{
if (gMartInfo.choicesAbove == 0)
- sub_80F979C(0, 1);
+ SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
else
- sub_80F979C(0, 0);
+ SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
if (gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount)
- sub_80F979C(1, 1);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
else
- sub_80F979C(1, 0);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
-void sub_80B32EC(u16 *array, s16 offset1, s16 offset2)
+// what is the point of this function? the tiles always get overwritten by BuyMenuDrawTextboxBG.
+static void BuyMenuDrawTextboxBG_Old(u16 *array, s16 offset1, s16 offset2)
{
array[offset1 + offset2] = 0xC3E1;
array[offset1 + offset2 + 1] = 0xC3E1;
}
-void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2)
+static void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2)
{
- array[offset1 + offset2] = array2[0];
- array[offset1 + offset2 + 1] = array2[1];
- array[offset1 + offset2 + 32] = array2[2];
- array[offset1 + offset2 + 33] = array2[3];
+ // This function draws a whole 2x2 metatile.
+ array[offset1 + offset2] = array2[0]; // top left
+ array[offset1 + offset2 + 1] = array2[1]; // top right
+ array[offset1 + offset2 + 32] = array2[2]; // bottom left
+ array[offset1 + offset2 + 33] = array2[3]; // bottom right
}
-void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
+static void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
{
u8 tempVar4 = var4;
s16 offset1 = var1 * 2;
@@ -375,7 +381,8 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
}
}
-void sub_80B33D0(s16 var1, int var2, u16 *var3)
+// used to draw the border tiles around the viewport.
+static void BuyMenuDrawMapPartialMetatile(s16 var1, int var2, u16 *var3)
{
s16 offset1 = var1 * 2;
s16 offset2 = (var2 * 0x40) + 0x40;
@@ -384,7 +391,7 @@ void sub_80B33D0(s16 var1, int var2, u16 *var3)
BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4);
}
-void sub_80B3420(void)
+static void Shop_DrawViewportTiles(void)
{
s16 facingX;
s16 facingY;
@@ -413,26 +420,26 @@ void sub_80B3420(void)
else
{
if (metatileId < 512)
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
else
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
}
if (y == 0 && x != 0 && x != 6)
- sub_80B32EC(gBGTilemapBuffers[1], x * 2, 64);
+ BuyMenuDrawTextboxBG_Old(gBGTilemapBuffers[1], x * 2, 64);
}
}
}
-void BuyMenuDrawMapGraphics(void)
+static void Shop_DrawViewport(void)
{
- sub_80F9020();
- sub_80B356C();
- sub_80B368C();
- sub_80B3420();
+ ClearBGTilemapBuffers();
+ Shop_LoadViewportObjects();
+ Shop_AnimViewportObjects();
+ Shop_DrawViewportTiles();
}
-void sub_80B356C(void)
+static void Shop_LoadViewportObjects(void)
{
s16 facingX;
s16 facingY;
@@ -444,7 +451,7 @@ void sub_80B356C(void)
GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
playerHeight = PlayerGetZCoord();
for (y = 0; y < 16; y++)
- gUnknown_020386A4[y][MAP_OBJ_ID] = 16;
+ gMartViewportObjects[y][MAP_OBJ_ID] = 16;
for (y = 0; y < 5; y++)
{
for (x = 0; x < 7; x++)
@@ -453,43 +460,43 @@ void sub_80B356C(void)
if (mapObjId != 16)
{
- gUnknown_020386A4[r8][MAP_OBJ_ID] = mapObjId;
- gUnknown_020386A4[r8][X_COORD] = x;
- gUnknown_020386A4[r8][Y_COORD] = y;
+ gMartViewportObjects[r8][MAP_OBJ_ID] = mapObjId;
+ gMartViewportObjects[r8][X_COORD] = x;
+ gMartViewportObjects[r8][Y_COORD] = y;
if (gMapObjects[mapObjId].mapobj_unk_18 == 1)
- gUnknown_020386A4[r8][ANIM_NUM] = 0;
+ gMartViewportObjects[r8][ANIM_NUM] = 0;
if (gMapObjects[mapObjId].mapobj_unk_18 == 2)
- gUnknown_020386A4[r8][ANIM_NUM] = 1;
+ gMartViewportObjects[r8][ANIM_NUM] = 1;
if (gMapObjects[mapObjId].mapobj_unk_18 == 3)
- gUnknown_020386A4[r8][ANIM_NUM] = 2;
+ gMartViewportObjects[r8][ANIM_NUM] = 2;
if (gMapObjects[mapObjId].mapobj_unk_18 == 4)
- gUnknown_020386A4[r8][ANIM_NUM] = 3;
+ gMartViewportObjects[r8][ANIM_NUM] = 3;
r8++;
}
}
}
}
-void sub_80B368C(void)
+static void Shop_AnimViewportObjects(void)
{
u8 i;
for (i = 0; i < 16; i++) // max objects?
{
- if (gUnknown_020386A4[i][MAP_OBJ_ID] == 16)
+ if (gMartViewportObjects[i][MAP_OBJ_ID] == 16)
continue;
StartSpriteAnim(&gSprites[AddPseudoFieldObject(
- gMapObjects[gUnknown_020386A4[i][MAP_OBJ_ID]].graphicsId,
+ gMapObjects[gMartViewportObjects[i][MAP_OBJ_ID]].graphicsId,
SpriteCallbackDummy,
- (u16)gUnknown_020386A4[i][X_COORD] * 16 + 8,
- (u16)gUnknown_020386A4[i][Y_COORD] * 16 + 32,
+ (u16)gMartViewportObjects[i][X_COORD] * 16 + 8,
+ (u16)gMartViewportObjects[i][Y_COORD] * 16 + 32,
2)],
- gUnknown_020386A4[i][ANIM_NUM]);
+ gMartViewportObjects[i][ANIM_NUM]);
}
}
-void sub_80B3720(void)
+static void BuyMenuDrawTextboxBG(void)
{
s16 i;
@@ -500,14 +507,15 @@ void sub_80B3720(void)
}
}
-void sub_80B3764(int var1, int var2)
+static void Shop_InitMenus(int firstItemId, int lastItemId)
{
- sub_80B3720();
- sub_80B39D0(var1, var2, 0);
+ BuyMenuDrawTextboxBG();
+ Shop_DisplayPriceInList(firstItemId, lastItemId, 0);
InitMenu(0, 0xE, 0x2, 0x8, gMartInfo.cursor, 0xF);
}
-void sub_80B379C(void)
+// after printing the item quantity and price, restore the textbox tiles before the Yes/No prompt.
+static void BuyMenuDrawTextboxBG_Restore(void)
{
u16 i, j;
@@ -516,27 +524,29 @@ void sub_80B379C(void)
gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0;
}
-void sub_80B37EC(void)
+static void Shop_PrintItemDesc(void)
{
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
-void sub_80B37F8(u8 taskId)
+#define tItemCount data[1]
+
+static void Shop_DisplayPriceInCheckoutWindow(u8 taskId)
{
u16 itemListIndex = gMartInfo.choicesAbove + gMartInfo.cursor;
u16 itemId = gMartInfo.itemList[itemListIndex];
u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
- PrintMoneyAmount(gTasks[taskId].data[1] * price, 6, 6, 11);
+ PrintMoneyAmount(gTasks[taskId].tItemCount * price, 6, 6, 11);
gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
gStringVar1[1] = 0x14;
gStringVar1[2] = 0x6;
- ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].data[1], 1, 2);
+ ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].tItemCount, 1, 2);
Menu_PrintText(gOtherText_xString1, 1, 11);
sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1);
}
-void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode)
+static void Shop_DisplayNormalPriceInList(u16 itemId, u8 var2, bool32 hasControlCode)
{
u8 *stringPtr = gStringVar1;
@@ -560,7 +570,7 @@ void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode)
Menu_PrintTextPixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 1);
}
-void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
+static void Shop_DisplayDecorationPriceInList(u16 itemId, u8 var2, bool32 hasControlCode)
{
u8 *stringPtr = gStringVar1;
@@ -579,9 +589,12 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
if (hasControlCode != FALSE)
stringPtr = &gStringVar1[3];
+ // some names are the maximum string length for a shop item. Because there is no room for
+ // a 6 character price (including the currency), a sprite is instead used for anything that
+ // is the maximum decoration price in order to fit it on screen.
if (gDecorations[itemId].price == 10000)
{
- sub_80B7B34(0x19, var2, hasControlCode); // huh???
+ Draw10000Sprite(0x19, var2, hasControlCode);
}
else
{
@@ -590,16 +603,16 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
}
}
-void sub_80B39D0(int var1, int var2, bool32 hasControlCode)
+static void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode)
{
u8 i;
- for (i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
+ for (i = firstItemId; i <= lastItemId && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
{
if (gMartInfo.martType == MART_TYPE_0)
- sub_80B389C(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ Shop_DisplayNormalPriceInList(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
else
- sub_80B3930(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ Shop_DisplayDecorationPriceInList(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
}
if (i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount)
@@ -609,7 +622,7 @@ void sub_80B39D0(int var1, int var2, bool32 hasControlCode)
}
}
-void sub_80B3A70(void)
+static void Shop_PrintItemDescText(void)
{
if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount)
{
@@ -628,121 +641,122 @@ void sub_80B3A70(void)
}
}
-void sub_80B3AEC(u8 taskId)
+static void Shop_DoPremierBallCheck(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // huh???
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
PlaySE(SE_SELECT);
- if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
- DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, sub_80B4378, 0xC3E1);
+ if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].tItemCount >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
+ DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, Task_ReturnToBuyMenu, 0xC3E1);
else
- sub_80B4378(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3B80(u8 taskId)
+static void Shop_DoItemTransaction(u8 taskId)
{
- IncrementGameStat(0x26);
+ IncrementGameStat(GAME_STAT_SHOPPED);
RemoveMoney(&gSaveBlock1.money, gMartTotalCost);
PlaySE(SE_REGI);
UpdateMoneyWindow(gSaveBlock1.money, 0, 0);
- gTasks[taskId].func = sub_80B3AEC;
+ gTasks[taskId].func = Shop_DoPremierBallCheck;
}
-void sub_80B3BD0(u8 taskId)
+static void Shop_DoPricePrintAndReturnToBuyMenu(u8 taskId)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // same thing as above?
- sub_80B4378(taskId);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Task_ReturnToBuyMenu(taskId);
}
-void sub_80B3BF4(u8 taskId)
+static void Task_DoItemPurchase(u8 taskId)
{
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0);
- sub_80B379C();
- sub_80B3420();
+ BuyMenuDrawTextboxBG_Restore();
+ Shop_DrawViewportTiles();
if (IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
if (gMartInfo.martType == MART_TYPE_0)
{
- if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1]))
+ if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].tItemCount))
{
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1);
- sub_80B4470(taskId);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, Shop_DoItemTransaction, 0xC3E1);
+ Task_UpdatePurchaseHistory(taskId);
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
else // a normal mart is only type 0, so types 1 and 2 are decoration marts.
{
if (IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]))
{
if (gMartInfo.martType == MART_TYPE_1)
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, Shop_DoItemTransaction, 0xC3E1);
else
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, Shop_DoItemTransaction, 0xC3E1);
}
else
{
StringExpandPlaceholders(gStringVar4, gOtherText_SpaceForIsFull);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
}
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
-void sub_80B3D38(u8 taskId)
+static void Shop_DoYesNoPurchase(u8 taskId)
{
DisplayYesNoMenu(7, 8, 1);
sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0xC3E1);
- DoYesNoFuncWithChoice(taskId, gUnknown_083CC708);
+ DoYesNoFuncWithChoice(taskId, sShopPurchaseYesNoFuncs);
}
-void sub_80B3D7C(u8 taskId)
+static void Task_CancelItemPurchase(u8 taskId)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x8, 0x9, 0x4, 0x4, 0);
- sub_80B4378(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
-void sub_80B3DC8(u8 taskId)
+static void Shop_PrintPrice(u8 taskId)
{
- if (sub_80A52C4(taskId, gMartInfo.curItemCount) == TRUE)
- sub_80B37F8(taskId);
+ if (SellMenu_QuantityRoller(taskId, gMartInfo.curItemCount) == TRUE)
+ Shop_DisplayPriceInCheckoutWindow(taskId);
if (gMain.newKeys & A_BUTTON)
{
- gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].data[1]; // set total cost of your purchase.
+ gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].tItemCount; // set total cost of your purchase.
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
- sub_80B379C();
- sub_80B3420();
+ BuyMenuDrawTextboxBG_Restore();
+ Shop_DrawViewportTiles();
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].data[1], 0, 0x2);
+ ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].tItemCount, 0, 0x2);
ConvertIntToDecimalStringN(gStringVar3, gMartTotalCost, 0, 0x8);
StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoYesNoPurchase, 0xC3E1);
}
else if (gMain.newKeys & B_BUTTON)
{
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
- sub_80B4378(taskId);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3EFC(u8 taskId)
+// set the item count in the mart info to the maximum allowed by the player's budget.
+static void Shop_UpdateCurItemCountToMax(u8 taskId)
{
u16 var;
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tItemCount = 1;
Menu_DrawStdWindowFrame(0, 0xA, 0xD, 0xD);
- sub_80B37F8(taskId);
+ Shop_DisplayPriceInCheckoutWindow(taskId);
var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1));
if (var > 99)
@@ -750,11 +764,11 @@ void sub_80B3EFC(u8 taskId)
else
gMartInfo.curItemCount = var;
- gTasks[taskId].func = sub_80B3DC8;
+ gTasks[taskId].func = Shop_PrintPrice;
}
#ifdef NONMATCHING
-void sub_80B3F88(void)
+static void Shop_MoveItemListUp(void)
{
u16 *r1;
u16 *r2;
@@ -796,7 +810,7 @@ void sub_80B3F88(void)
}
#else
__attribute__((naked))
-void sub_80B3F88(void)
+static void Shop_MoveItemListUp(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -891,7 +905,7 @@ _080B4038: .4byte 0xfffffc40\n\
#endif
#ifdef NONMATCHING
-void sub_80B403C(void)
+static void Shop_MoveItemListDown(void)
{
u16 *r1;
u16 *r2;
@@ -935,7 +949,7 @@ void sub_80B403C(void)
}
#else
__attribute__((naked))
-void sub_80B403C(void)
+static void Shop_MoveItemListDown(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -1028,7 +1042,7 @@ _080B40E4: .4byte 0x800000f0\n\
}
#endif
-void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
+static void Shop_DoCursorAction(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1041,16 +1055,16 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove--; // since cursor is at the top and there are choices above the top, scroll the menu up by updating choicesAbove.
- sub_80B3F88();
- sub_80B39D0(0, 0, 0);
- sub_80B3A70();
- sub_80B32A4();
+ Shop_MoveItemListUp();
+ Shop_DisplayPriceInList(0, 0, 0);
+ Shop_PrintItemDescText();
+ Shop_TryDrawVerticalScrollIndicators();
}
else // if the cursor is not 0, choicesAbove cannot be updated yet since the cursor is at the top of the menu, so update cursor.
{
PlaySE(SE_SELECT);
gMartInfo.cursor = Menu_MoveCursor(-1); // move cursor up
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
}
else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed
@@ -1062,16 +1076,16 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove++;
- sub_80B403C();
- sub_80B39D0(7, 7, 0);
- sub_80B3A70();
- sub_80B32A4();
+ Shop_MoveItemListDown();
+ Shop_DisplayPriceInList(7, 7, 0);
+ Shop_PrintItemDescText();
+ Shop_TryDrawVerticalScrollIndicators();
}
else if (gMartInfo.cursor != gMartInfo.itemCount)
{
PlaySE(SE_SELECT);
gMartInfo.cursor = Menu_MoveCursor(1);
- sub_80B3A70();
+ Shop_PrintItemDescText();
}
}
else if (gMain.newKeys & A_BUTTON)
@@ -1080,10 +1094,10 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL?
{
- PauseVerticalScrollIndicator(0);
- PauseVerticalScrollIndicator(1);
- sub_80F979C(1, 1);
- sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 1);
+ PauseVerticalScrollIndicator(TOP_ARROW);
+ PauseVerticalScrollIndicator(BOTTOM_ARROW);
+ SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 1);
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0xC, 0xD, 0x13);
@@ -1092,13 +1106,13 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else // _080B42BA
{
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_HowManyYouWant);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3EFC, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_UpdateCurItemCountToMax, 0xC3E1);
}
}
else // _080B428C
@@ -1107,7 +1121,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else
{
@@ -1122,43 +1136,43 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
{
StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe3);
}
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoYesNoPurchase, 0xC3E1);
}
}
}
else
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu
{
PlaySE(SE_SELECT);
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
}
}
-void sub_80B4378(u8 taskId)
+static void Task_ReturnToBuyMenu(u8 taskId)
{
Menu_EraseWindowRect(0, 0xE, 0x1D, 0x13);
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
- sub_80B3420();
- sub_80B3764(6, 7);
- sub_80B37EC();
- StartVerticalScrollIndicators(0);
- StartVerticalScrollIndicators(1);
- sub_80B32A4();
- gTasks[taskId].func = sub_80B40E8;
+ Shop_DrawViewportTiles();
+ Shop_InitMenus(6, 7);
+ Shop_PrintItemDesc();
+ StartVerticalScrollIndicators(TOP_ARROW);
+ StartVerticalScrollIndicators(BOTTOM_ARROW);
+ Shop_TryDrawVerticalScrollIndicators();
+ gTasks[taskId].func = Shop_DoCursorAction;
}
-void sub_80B43F0(u8 taskId)
+static void Task_ExitBuyMenu(u8 taskId)
{
- gFieldCallback = sub_80B3050;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ExitBuyMenu;
+ gTasks[taskId].func = Task_ExitBuyMenuDoFade;
}
-void Task_ExitBuyMenu(u8 taskId)
+static void Task_ExitBuyMenuDoFade(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1169,38 +1183,41 @@ void Task_ExitBuyMenu(u8 taskId)
}
}
-void sub_80B4470(u8 taskId)
+// Task_UpdatePurchaseHistory
+static void Task_UpdatePurchaseHistory(u8 taskId)
{
u16 i;
for (i = 0; i < 3; i++)
{
- if (gUnknown_02038724[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]
- && gUnknown_02038724[i].quantity != 0)
+ if (gMartPurchaseHistory[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]
+ && gMartPurchaseHistory[i].quantity != 0)
{
- if (gUnknown_02038724[i].quantity + gTasks[taskId].data[1] > 255)
- gUnknown_02038724[i].quantity = 255;
+ if (gMartPurchaseHistory[i].quantity + gTasks[taskId].tItemCount > 255)
+ gMartPurchaseHistory[i].quantity = 255;
else
- gUnknown_02038724[i].quantity += gTasks[taskId].data[1];
+ gMartPurchaseHistory[i].quantity += gTasks[taskId].tItemCount;
return;
}
}
- if (gUnknown_02038730 < 3)
+ if (gMartPurchaseHistoryId < 3)
{
- gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
- gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1];
- gUnknown_02038730++;
+ gMartPurchaseHistory[gMartPurchaseHistoryId].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
+ gMartPurchaseHistory[gMartPurchaseHistoryId].quantity = gTasks[taskId].tItemCount;
+ gMartPurchaseHistoryId++;
}
}
-void ClearItemPurchases(void)
+#undef tItemCount
+
+static void ClearItemPurchases(void)
{
- gUnknown_02038730 = 0;
- ClearItemSlots(gUnknown_02038724, 3);
+ gMartPurchaseHistoryId = 0;
+ ClearItemSlots(gMartPurchaseHistory, 3);
}
-void CreatePokemartMenu(u16 *itemList)
+void Shop_CreatePokemartMenu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_0);
SetShopItemsForSale(itemList);
@@ -1208,14 +1225,14 @@ void CreatePokemartMenu(u16 *itemList)
SetShopMenuCallback(EnableBothScriptContexts);
}
-void CreateDecorationShop1Menu(u16 *itemList)
+void Shop_CreateDecorationShop1Menu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_1);
SetShopItemsForSale(itemList);
SetShopMenuCallback(EnableBothScriptContexts);
}
-void CreateDecorationShop2Menu(u16 *itemList)
+void Shop_CreateDecorationShop2Menu(u16 *itemList)
{
CreateShopMenu(MART_TYPE_2);
SetShopItemsForSale(itemList);
@@ -1239,131 +1256,6 @@ void debug_sub_80C2818(void)
._291:\n\
.align 2, 0\n\
._290:\n\
- .word gUnknown_083CC6EB+0x3");
+ .word gMartBuyNoSellOptionList+0x3");
}
#endif
-
-void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
-{
- s16 r5 = gTasks[taskId].data[4] - 1;
- s16 r3 = gTasks[taskId].data[5] - 1;
- s16 r4 = gTasks[taskId].data[1];
- s16 y;
- s16 x;
-
- if (gTasks[taskId].data[2] == 0)
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
- }
- }
- }
- }
- else
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[2 - r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
- }
- }
- }
- }
-}
-
-static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
-static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
-static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
-static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
-static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
-static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
-static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
-
-void sub_80B4710(u8 taskId)
-{
- s16 *data = gTasks[taskId].data;
-
- data[3] = 1;
-
- switch (data[0])
- {
- case 0:
- sub_80B45B4(taskId, gUnknown_083CC714, 0);
- break;
- case 1:
- sub_80B45B4(taskId, gUnknown_083CC71A, 0);
- break;
- case 2:
- sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
- break;
- case 3:
- sub_80B45B4(taskId, gUnknown_083CC726, 0);
- break;
- case 4:
- sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
- break;
- case 5:
- sub_80B45B4(taskId, gUnknown_083CC732, 0);
- break;
- case 6:
- sub_80B45B4(taskId, gUnknown_083CC738, 0);
- break;
- }
-
- data[0] = (data[0] + 1) & 7;
- if (!data[0])
- {
- DrawWholeMapView();
- data[1] = (data[1] + 1) % 3;
- data[3] = 0;
- }
-}
-
-u8 sub_80B47D8(u16 var)
-{
- u8 taskId = CreateTask(sub_80B4710, 0);
- s16 *data = gTasks[taskId].data;
-
- PlayerGetDestCoords(&data[4], &data[5]);
- data[0] = 0;
- data[1] = 0;
- data[2] = var;
- sub_80B4710(taskId);
- return taskId;
-}
-
-void sub_80B4824(u8 var)
-{
- gUnknown_02038731 = sub_80B47D8(var);
-}
-
-void sub_80B483C(void)
-{
- DestroyTask(gUnknown_02038731);
-}
-
-bool8 sub_80B4850(void)
-{
- if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
- return FALSE;
- else
- return TRUE;
-}
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index c4a4128b3..b5b13c533 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -5098,26 +5098,9 @@ static void sub_8106404(void)
}
static void sub_8106448(void) {
- u32 offsetRead, offsetWrite;
- u32 size;
-
LZDecompressWram(gSlotMachine_Gfx, eSlotMachineGfxBuffer);
- offsetRead = (u32)eSlotMachineGfxBuffer;
- offsetWrite = BG_VRAM;
- size = SLOTMACHINE_GFX_TILES * 32;
- while (TRUE)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000);
- offsetRead += 0x1000;
- offsetWrite += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaCopy16(3, offsetRead, (void *) (offsetWrite), size);
- break;
- }
- }
+ DmaCopyLarge16(3, eSlotMachineGfxBuffer, BG_VRAM, SLOTMACHINE_GFX_TILES * 32, 0x1000);
LoadPalette(gUnknown_08E95A18, 0, 160);
LoadPalette(gPalette_83EDE24, 208, 32);
diff --git a/src/field/start_menu.c b/src/field/start_menu.c
index 47c7fca05..1b01bf7a8 100644
--- a/src/field/start_menu.c
+++ b/src/field/start_menu.c
@@ -59,7 +59,7 @@ extern u16 gSpecialVar_Result;
extern u8 gUnknown_03004860;
-u8 (*gCallback_03004AE8)(void);
+u8 (*gMenuCallback)(void);
EWRAM_DATA static u8 sStartMenuCursorPos = 0;
EWRAM_DATA static u8 sNumStartMenuActions = 0;
@@ -586,11 +586,11 @@ void sub_80712B4(u8 taskId)
switch (task->data[0])
{
case 0:
- gCallback_03004AE8 = StartMenu_InputProcessCallback;
+ gMenuCallback = StartMenu_InputProcessCallback;
task->data[0]++;
break;
case 1:
- if (gCallback_03004AE8() == 1)
+ if (gMenuCallback() == 1)
DestroyTask(taskId);
break;
}
@@ -628,11 +628,11 @@ static u8 StartMenu_InputProcessCallback(void)
if (GetNationalPokedexCount(0) == 0)
return 0;
}
- gCallback_03004AE8 = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func;
- if (gCallback_03004AE8 != StartMenu_SaveCallback &&
- gCallback_03004AE8 != StartMenu_ExitCallback &&
- gCallback_03004AE8 != StartMenu_RetireCallback)
- fade_screen(1, 0);
+ gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func;
+ if (gMenuCallback != StartMenu_SaveCallback &&
+ gMenuCallback != StartMenu_ExitCallback &&
+ gMenuCallback != StartMenu_RetireCallback)
+ FadeScreen(1, 0);
return 0;
}
if (gMain.newKeys & (START_BUTTON | B_BUTTON))
@@ -648,7 +648,7 @@ static u8 StartMenu_PokedexCallback(void)
{
if (!gPaletteFade.active)
{
- IncrementGameStat(0x29);
+ IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
PlayRainSoundEffect();
SetMainCallback2(CB2_InitPokedex);
return 1;
@@ -708,7 +708,7 @@ static u8 StartMenu_PlayerCallback(void)
static u8 StartMenu_SaveCallback(void)
{
Menu_DestroyCursor();
- gCallback_03004AE8 = SaveCallback1;
+ gMenuCallback = SaveCallback1;
return 0;
}
@@ -764,7 +764,7 @@ enum
static u8 SaveCallback1(void)
{
sub_807160C();
- gCallback_03004AE8 = SaveCallback2;
+ gMenuCallback = SaveCallback2;
return FALSE;
}
@@ -778,7 +778,7 @@ static u8 SaveCallback2(void)
//Go back to start menu
Menu_EraseScreen();
InitStartMenu();
- gCallback_03004AE8 = StartMenu_InputProcessCallback;
+ gMenuCallback = StartMenu_InputProcessCallback;
return FALSE;
case SAVE_SUCCESS:
case SAVE_ERROR:
@@ -969,7 +969,7 @@ static u8 SaveDialogCB_DoSave(void)
{
u8 saveStatus;
- IncrementGameStat(0);
+ IncrementGameStat(GAME_STAT_SAVED_GAME);
if (gDifferentSaveFile == TRUE)
{
saveStatus = Save_WriteData(SAVE_OVERWRITE_DIFFERENT_FILE);
@@ -1047,29 +1047,12 @@ static bool32 sub_80719FC(u8 *step)
switch (*step)
{
case 0:
- {
- u8 *addr;
- u32 size;
-
REG_DISPCNT = 0;
SetVBlankCallback(NULL);
ScanlineEffect_Stop();
DmaClear16(3, PLTT, PLTT_SIZE);
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
break;
- }
case 1:
ResetSpriteData();
ResetTasks();
diff --git a/src/field/trader.c b/src/field/trader.c
index 2801df322..885557d5a 100644
--- a/src/field/trader.c
+++ b/src/field/trader.c
@@ -217,8 +217,8 @@ void sub_8109D04(u8 taskId)
{
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 29, 19);
- DestroyVerticalScrollIndicator(0);
- DestroyVerticalScrollIndicator(1);
+ DestroyVerticalScrollIndicator(TOP_ARROW);
+ DestroyVerticalScrollIndicator(BOTTOM_ARROW);
sub_80F9520(gUnknown_020388F7, 8);
BuyMenuFreeMemory();
if (sub_80FEFA4() == TRUE)
diff --git a/src/field/tv.c b/src/field/tv.c
index e1eade130..8bd36bb9c 100644
--- a/src/field/tv.c
+++ b/src/field/tv.c
@@ -47,8 +47,6 @@ struct UnkTvStruct
s8 var0;
};
-extern u8 gUnknown_0300430A[11];
-
struct OutbreakPokemon
{
/*0x00*/ u16 species;
@@ -64,7 +62,7 @@ struct TVSaleItem {
extern u8 gUnknown_02038694;
-extern struct TVSaleItem gUnknown_02038724[3];
+extern struct TVSaleItem gMartPurchaseHistory[3];
struct UnkTvStruct gUnknown_03005D38;
@@ -1032,7 +1030,7 @@ void sub_80BE3BC(void)
if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_SMART_SHOPPER) != 1)
{
sub_80BF20C();
- if (gUnknown_02038724[0].item_amount >= 20)
+ if (gMartPurchaseHistory[0].item_amount >= 20)
{
struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].smartshopperShow;
@@ -1041,8 +1039,8 @@ void sub_80BE3BC(void)
smartShopper->shopLocation = gMapHeader.regionMapSectionId;
for (i=0; i<3; i++)
{
- smartShopper->itemIds[i] = gUnknown_02038724[i].item_id;
- smartShopper->itemAmounts[i] = gUnknown_02038724[i].item_amount;
+ smartShopper->itemIds[i] = gMartPurchaseHistory[i].item_id;
+ smartShopper->itemAmounts[i] = gMartPurchaseHistory[i].item_amount;
}
smartShopper->priceReduced = GetPriceReduction(1);
StringCopy(smartShopper->playerName, gSaveBlock2.playerName);
@@ -1646,14 +1644,14 @@ void sub_80BF20C(void)
{
for (j = i + 1; j < 3; j++)
{
- if (gUnknown_02038724[i].item_amount < gUnknown_02038724[j].item_amount)
+ if (gMartPurchaseHistory[i].item_amount < gMartPurchaseHistory[j].item_amount)
{
- tmpId = gUnknown_02038724[i].item_id;
- tmpAmount = gUnknown_02038724[i].item_amount;
- gUnknown_02038724[i].item_id = gUnknown_02038724[j].item_id;
- gUnknown_02038724[i].item_amount = gUnknown_02038724[j].item_amount;
- gUnknown_02038724[j].item_id = tmpId;
- gUnknown_02038724[j].item_amount = tmpAmount;
+ tmpId = gMartPurchaseHistory[i].item_id;
+ tmpAmount = gMartPurchaseHistory[i].item_amount;
+ gMartPurchaseHistory[i].item_id = gMartPurchaseHistory[j].item_id;
+ gMartPurchaseHistory[i].item_amount = gMartPurchaseHistory[j].item_amount;
+ gMartPurchaseHistory[j].item_id = tmpId;
+ gMartPurchaseHistory[j].item_amount = tmpAmount;
}
}
}
diff --git a/src/field/wallclock.c b/src/field/wallclock.c
index aaa7f9ae8..1f743a61a 100644
--- a/src/field/wallclock.c
+++ b/src/field/wallclock.c
@@ -190,10 +190,7 @@ static void WallClockVblankCallback(void)
static void LoadWallClockGraphics(void)
{
- u8 *addr;
- u32 size;
-
- SetVBlankCallback(0);
+ SetVBlankCallback(NULL);
REG_DISPCNT = 0;
REG_BG3CNT = 0;
REG_BG2CNT = 0;
@@ -208,19 +205,7 @@ static void LoadWallClockGraphics(void)
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
- addr = (void *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaFill16Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c
index 10391348d..19778e29b 100644
--- a/src/field/wild_encounter.c
+++ b/src/field/wild_encounter.c
@@ -4285,7 +4285,7 @@ void FishingWildEncounter(u8 rod)
gWildMonHeaders[GetCurrentMapWildMonHeader()].fishingMonsInfo,
rod);
}
- IncrementGameStat(12);
+ IncrementGameStat(GAME_STAT_FISHING_CAPTURES);
sub_80BEA50(species);
BattleSetup_StartWildBattle();
}