diff options
Diffstat (limited to 'src/field')
35 files changed, 6620 insertions, 1143 deletions
diff --git a/src/field/bard_music.c b/src/field/bard_music.c index daf003233..5c48749cf 100644 --- a/src/field/bard_music.c +++ b/src/field/bard_music.c @@ -11,29 +11,185 @@ struct BardSound /*0x06*/ u16 var06; }; -extern const struct BardSound (*const gBardMusicTable[])[][6]; -extern s16 *gUnknown_08417068[]; -extern u32 gUnknown_084170F4[]; +static const s16 Unknown_8416F08[] = {-768, 6144}; +static const s16 Unknown_8416F0C[] = {2304, 6144}; +static const s16 Unknown_8416F10[] = {256, 6144}; +static const s16 Unknown_8416F14[] = {1024, 6144}; +static const s16 Unknown_8416F18[] = {2816, 6144}; +static const s16 Unknown_8416F1C[] = {-768, -256, 6144}; +static const s16 Unknown_8416F22[] = {-768, 512, 6144}; +static const s16 Unknown_8416F28[] = {512, 1024, 6144}; +static const s16 Unknown_8416F2E[] = {1536, 2048, 6144}; +static const s16 Unknown_8416F34[] = {2304, 2048, 6144}; +static const s16 Unknown_8416F3A[] = {-768, -256, -768, 6144}; +static const s16 Unknown_8416F42[] = {1024, -768, 1024, 6144}; +static const s16 Unknown_8416F4A[] = {2304, 2048, 1536, 6144}; +static const s16 Unknown_8416F52[] = {256, 512, 1024, 6144}; +static const s16 Unknown_8416F5A[] = {1536, 4096, 3328, 6144}; +static const s16 Unknown_8416F62[] = {1024, 2304, 1024, 2304, 6144}; +static const s16 Unknown_8416F6C[] = {2304, 1024, 3328, 1024, 6144}; +static const s16 Unknown_8416F76[] = {256, 512, 1024, 1536, 6144}; +static const s16 Unknown_8416F80[] = {2048, 1536, 1024, 512, 6144}; +static const s16 Unknown_8416F8A[] = {3840, 3328, 2816, 2560, 6144}; +static const s16 Unknown_8416F94[] = {-768, -256, 256, 512, 1024, 6144}; +static const s16 Unknown_8416FA0[] = {2304, 2048, 1536, 1024, 512, 6144}; +static const s16 Unknown_8416FAC[] = {256, 1024, 2304, 1024, 256, 6144}; +static const s16 Unknown_8416FB8[] = {2304, 1024, 2304, 1024, -768, 6144}; +static const s16 Unknown_8416FC4[] = {2816, 2048, 1024, 1024, 1536, 6144}; +static const s16 Unknown_8416FD0[] = {-768, -256, 256, 512, 1024, 1536, 6144}; +static const s16 Unknown_8416FDE[] = {2048, 1536, 1024, 512, 256, -256, 6144}; +static const s16 Unknown_8416FEC[] = {256, 512, 1024, 256, 512, 4096, 6144}; +static const s16 Unknown_8416FFA[] = {1024, -768, 2304, 1024, 2304, 1024, 6144}; +static const s16 Unknown_8417008[] = {2048, 2304, 2048, 2304, 2048, 2304, 6144}; +static const s16 Unknown_8417016[] = {512, 256, 512, 256, 512, 1024, 512, 6144}; +static const s16 Unknown_8417026[] = {256, 256, -256, -256, -768, 1024, -768, 6144}; +static const s16 Unknown_8417036[] = {2048, 2304, 2816, 3328, 3584, 3328, 2816, 6144}; +static const s16 Unknown_8417046[] = {2048, 1536, 1024, 512, 3328, 2816, 2304, 6144}; +static const s16 Unknown_8417056[] = {768, 1024, 1536, 2048, 1792, 2048, 1024, 6144}; + +static const s16 *const sWordPitches[] = { + Unknown_8416F08, + Unknown_8416F0C, + Unknown_8416F10, + Unknown_8416F14, + Unknown_8416F18, + Unknown_8416F1C, + Unknown_8416F22, + Unknown_8416F28, + Unknown_8416F2E, + Unknown_8416F34, + Unknown_8416F3A, + Unknown_8416F42, + Unknown_8416F4A, + Unknown_8416F52, + Unknown_8416F5A, + Unknown_8416F62, + Unknown_8416F6C, + Unknown_8416F76, + Unknown_8416F80, + Unknown_8416F8A, + Unknown_8416F94, + Unknown_8416FA0, + Unknown_8416FAC, + Unknown_8416FB8, + Unknown_8416FC4, + Unknown_8416FD0, + Unknown_8416FDE, + Unknown_8416FEC, + Unknown_8416FFA, + Unknown_8417008, + Unknown_8417016, + Unknown_8417026, + Unknown_8417036, + Unknown_8417046, + Unknown_8417056 +}; + +static const u32 sBardSoundLengthDeltas[] = { + 9, + 22, + 15, + 16, + 39, + 21, + 9, + 30, + 24, + 15, + 25, + 12, + 22, + 45, + 24, + 15, + 40, + 9, + 21, + 42, + 18, + 9, + 22, + 15, + 27, + 48, + 18, + 27, + 33, + 24, + 25, + 39, + 19, + 16, + 54, + 18, + 9, + 45, + 15, + 12, + 39, + 23, + 5, + 45, + 12, + 21, + 48, + 12, + 21, + 69, + 18, + 15 +}; + +#if ENGLISH +#include "../src/data/bard_music_en.h" +#elif GERMAN +#include "../src/data/bard_music_de.h" +#endif // ENGLISH/GERMAN + +static const struct BardSound (*const gBardMusicTable[])[6] = { + BardMusic_POKEMON, + BardMusic_TRAINER, + BardMusic_STATUS, + BardMusic_BATTLE, + BardMusic_GREETINGS, + BardMusic_PEOPLE, + BardMusic_VOICES, + BardMusic_SPEECH, + BardMusic_ENDINGS, + BardMusic_FEELINGS, + BardMusic_CONDITIONS, + BardMusic_ACTIONS, + BardMusic_LIFESTYLE, + BardMusic_HOBBIES, + BardMusic_TIME, + BardMusic_MISC, + BardMusic_ADJECTIVES, + BardMusic_EVENTS, + BardMusic_MOVE_1, + BardMusic_MOVE_2, + BardMusic_TRENDY_SAYING, + BardMusic_POKEMON_2 +}; static s16 CalcWordPitch(u32 arg0, u32 songPos) { - return gUnknown_08417068[arg0][songPos]; + return sWordPitches[arg0][songPos]; } #if ENGLISH const struct BardSound *GetWordSounds(u16 group, u16 word) { - const struct BardSound (*sounds)[][6] = gBardMusicTable[group]; + const struct BardSound (*sounds)[6] = gBardMusicTable[group]; - return (*sounds)[word]; + return sounds[word]; } #elif GERMAN const struct BardSound *GetWordSounds(u16 group, u16 word) { - const struct BardSound (*sounds)[][6] = gBardMusicTable[group]; + const struct BardSound (*sounds)[6] = gBardMusicTable[group]; u32 index = de_sub_80EB748(group, word); - return (*sounds)[index]; + return sounds[index]; } #endif @@ -48,7 +204,7 @@ s32 GetWordPhonemes(struct BardSong *song, const struct BardSound *src, u16 arg2 song->phonemes[i].sound = src[i].var00; if (src[i].var00 != 0xFF) { - s32 length = src[i].var01 + gUnknown_084170F4[src[i].var00]; + s32 length = src[i].var01 + sBardSoundLengthDeltas[src[i].var00]; song->phonemes[i].length = length; song->phonemes[i].volume = src[i].volume; diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 6b6064c16..caebc6a7b 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -294,24 +294,24 @@ void sub_8134548(void) ResetBattleTowerStreak(levelType); if (!var1) { - VarSet(VAR_0x4000, 5); + VarSet(VAR_TEMP_0, 5); } break; case 1: ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); + VarSet(VAR_TEMP_0, 1); var1++; break; case 4: - VarSet(VAR_0x4000, 2); + VarSet(VAR_TEMP_0, 2); var1++; break; case 5: - VarSet(VAR_0x4000, 3); + VarSet(VAR_TEMP_0, 3); var1++; break; case 2: - VarSet(VAR_0x4000, 4); + VarSet(VAR_TEMP_0, 4); var1++; break; case 3: @@ -323,7 +323,7 @@ void sub_8134548(void) if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) { - VarSet(VAR_0x4000, 5); + VarSet(VAR_TEMP_0, 5); } ValidateBattleTowerRecordChecksums(); @@ -801,7 +801,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) if (i != 30) { u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); + VarSet(VAR_OBJ_GFX_ID_0, trainerObjectGfxId); return; } @@ -809,11 +809,11 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) if (i != 20) { u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); + VarSet(VAR_OBJ_GFX_ID_0, trainerObjectGfxId); return; } - VarSet(0x4010, MAP_OBJ_GFX_BOY_1); + VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_BOY_1); } void SetEReaderTrainerGfxId(void) @@ -1608,7 +1608,7 @@ void sub_8135534(u8 taskId) } } -void sub_813556C(void) +void StartSpecialBattle(void) { s32 i; u16 heldItem; @@ -1616,7 +1616,7 @@ void sub_813556C(void) switch (gSpecialVar_0x8004) { - case 0: + case 0: // battle tower battle gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); gTrainerBattleOpponent = 0; @@ -1627,7 +1627,7 @@ void sub_813556C(void) transition = BattleSetup_GetBattleTowerBattleTransition(); BattleTransition_StartOnField(transition); break; - case 1: + case 1: // secret base battle for (i = 0; i < PARTY_SIZE; i++) { heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); @@ -1639,7 +1639,7 @@ void sub_813556C(void) transition = BattleSetup_GetBattleTowerBattleTransition(); BattleTransition_StartOnField(transition); break; - case 2: + case 2: // e-reader trainer battle ZeroEnemyPartyMons(); for (i = 0; i < 3; i++) @@ -1658,7 +1658,7 @@ void sub_813556C(void) } } -void sub_8135668(void) +void SetBattleTowerProperty(void) { s32 i; u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1740,7 +1740,7 @@ void sub_8135668(void) } } -void sub_81358A4(void) +void BattleTowerUtil(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1789,7 +1789,7 @@ void sub_81358A4(void) } } -void sub_8135A14(void) +void SetBattleTowerParty(void) { s32 i; @@ -1954,7 +1954,7 @@ void sub_8135AC4(void) sub_8135A3C(); } -void sub_8135BA0(void) +void SaveBattleTowerProgress(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1976,7 +1976,7 @@ void sub_8135BA0(void) gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; } - VarSet(VAR_0x4000, 0); + VarSet(VAR_TEMP_0, 0); gSaveBlock2.battleTower.unk_554 = 1; TrySavingData(EREADER_SAVE); } @@ -2336,7 +2336,7 @@ void PrintEReaderTrainerFarewellMessage(void) } } -void sub_813610C(void) +void TryEnableBravoTrainerBattleTower(void) { s32 i; diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 2abbac287..960a163c1 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -29,7 +29,7 @@ struct Struct2000000 }; extern struct Struct2000000 gSharedMem; -extern u16 gUnknown_030041B4; +extern u16 gBattle_BG1_Y; static EWRAM_DATA u8 gUnknown_0203932C = 0; static EWRAM_DATA s16 gUnknown_0203932E[5] = {0}; @@ -77,8 +77,8 @@ static void sub_8146014(void) static void sub_814602C(void) { - REG_BG0VOFS = gUnknown_030041B4; - REG_BG1VOFS = gUnknown_030041B4; + REG_BG0VOFS = gBattle_BG1_Y; + REG_BG1VOFS = gBattle_BG1_Y; LoadOam(); ProcessSpriteCopyRequests(); @@ -183,7 +183,7 @@ static void sub_8146288(void) REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_BG2CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - gUnknown_030041B4 = 0; + gBattle_BG1_Y = 0; } bool8 sub_81462B8(void) @@ -394,17 +394,17 @@ static void sub_8146798(u8 taskId) { s16 *taskData = gTasks[taskId].data; - gUnknown_030041B4 = (gUnknown_030041B4 + taskData[0]) & 0xFF; - if ((taskData[0] > 0 && gUnknown_030041B4 == 144) - || (taskData[0] < 0 && gUnknown_030041B4 == 112)) + gBattle_BG1_Y = (gBattle_BG1_Y + taskData[0]) & 0xFF; + if ((taskData[0] > 0 && gBattle_BG1_Y == 144) + || (taskData[0] < 0 && gBattle_BG1_Y == 112)) { sub_8146810(gTasks[taskId].data[1]); sub_81468BC(); } - if (gUnknown_030041B4 == 0) + if (gBattle_BG1_Y == 0) { - gTasks[taskId].data[0] = gUnknown_030041B4; - gTasks[taskId].data[1] = gUnknown_030041B4; + gTasks[taskId].data[0] = gBattle_BG1_Y; + gTasks[taskId].data[1] = gBattle_BG1_Y; gTasks[taskId].func = sub_8146480; } } diff --git a/src/field/coord_event_weather.c b/src/field/coord_event_weather.c index 9c5a1ca4d..db4e9c161 100644 --- a/src/field/coord_event_weather.c +++ b/src/field/coord_event_weather.c @@ -1,115 +1,116 @@ #include "global.h" +#include "constants/weather.h" #include "coord_event_weather.h" #include "field_weather.h" struct CoordEventWeather { - u8 weather; + u8 coordEventWeather; void (*func)(void); }; -static void CoordEventWeather_Indoor(void); +static void CoordEventWeather_Clouds(void); static void CoordEventWeather_Sunny(void); -static void CoordEventWeather_Rain(void); -static void CoordEventWeather_Snowflakes(void); +static void CoordEventWeather_LightRain(void); +static void CoordEventWeather_Snow(void); static void CoordEventWeather_Thunderstorm(void); static void CoordEventWeather_Fog(void); static void CoordEventWeather_DiagonalFog(void); -static void CoordEventWeather_Snow(void); +static void CoordEventWeather_Ash(void); static void CoordEventWeather_Sandstorm(void); -static void CoordEventWeather_Cloudy(void); +static void CoordEventWeather_Dark(void); static void CoordEventWeather_Drought(void); -static void CoordEventWeather_UnderwaterFog(void); -static void CoordEventWeather_UnderwaterBubbles(void); +static void CoordEventWeather_Route119Cycle(void); +static void CoordEventWeather_Route123Cycle(void); static const struct CoordEventWeather sCoordEventWeatherFuncs[] = { - { 0x1, CoordEventWeather_Indoor }, - { 0x2, CoordEventWeather_Sunny }, - { 0x3, CoordEventWeather_Rain }, - { 0x4, CoordEventWeather_Snowflakes }, - { 0x5, CoordEventWeather_Thunderstorm }, - { 0x6, CoordEventWeather_Fog }, - { 0x7, CoordEventWeather_DiagonalFog }, - { 0x8, CoordEventWeather_Snow }, - { 0x9, CoordEventWeather_Sandstorm }, - { 0xa, CoordEventWeather_Cloudy }, - { 0xb, CoordEventWeather_Drought }, - { 0x14, CoordEventWeather_UnderwaterFog }, - { 0x15, CoordEventWeather_UnderwaterBubbles }, + { COORD_EVENT_WEATHER_CLOUDS, CoordEventWeather_Clouds }, + { COORD_EVENT_WEATHER_SUNNY, CoordEventWeather_Sunny }, + { COORD_EVENT_WEATHER_RAIN_LIGHT, CoordEventWeather_LightRain }, + { COORD_EVENT_WEATHER_SNOW, CoordEventWeather_Snow }, + { COORD_EVENT_WEATHER_RAIN_MED, CoordEventWeather_Thunderstorm }, + { COORD_EVENT_WEATHER_FOG_1, CoordEventWeather_Fog }, + { 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_DROUGHT, CoordEventWeather_Drought }, + { COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle }, + { COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle }, }; -static void CoordEventWeather_Indoor(void) +static void CoordEventWeather_Clouds(void) { - SetWeather(1); + SetWeather(WEATHER_CLOUDS); } static void CoordEventWeather_Sunny(void) { - SetWeather(2); + SetWeather(WEATHER_SUNNY); } -static void CoordEventWeather_Rain(void) +static void CoordEventWeather_LightRain(void) { - SetWeather(3); + SetWeather(WEATHER_RAIN_LIGHT); } -static void CoordEventWeather_Snowflakes(void) +static void CoordEventWeather_Snow(void) { - SetWeather(4); + SetWeather(WEATHER_SNOW); } static void CoordEventWeather_Thunderstorm(void) { - SetWeather(5); + SetWeather(WEATHER_RAIN_MED); } static void CoordEventWeather_Fog(void) { - SetWeather(6); + SetWeather(WEATHER_FOG_1); } static void CoordEventWeather_DiagonalFog(void) { - SetWeather(9); + SetWeather(WEATHER_FOG_2); } -static void CoordEventWeather_Snow(void) +static void CoordEventWeather_Ash(void) { - SetWeather(7); + SetWeather(WEATHER_ASH); } static void CoordEventWeather_Sandstorm(void) { - SetWeather(8); + SetWeather(WEATHER_SANDSTORM); } -static void CoordEventWeather_Cloudy(void) +static void CoordEventWeather_Dark(void) { - SetWeather(11); + SetWeather(WEATHER_DARK); } static void CoordEventWeather_Drought(void) { - SetWeather(12); + SetWeather(WEATHER_DROUGHT); } -static void CoordEventWeather_UnderwaterFog(void) +static void CoordEventWeather_Route119Cycle(void) { - SetWeather(20); + SetWeather(WEATHER_ROUTE119_CYCLE); } -static void CoordEventWeather_UnderwaterBubbles(void) +static void CoordEventWeather_Route123Cycle(void) { - SetWeather(21); + SetWeather(WEATHER_ROUTE123_CYCLE); } -void DoCoordEventWeather(u8 n) +void DoCoordEventWeather(u8 coordEventWeather) { u8 i; for (i = 0; i < ARRAY_COUNT(sCoordEventWeatherFuncs); i++) { - if (sCoordEventWeatherFuncs[i].weather == n) + if (sCoordEventWeatherFuncs[i].coordEventWeather == coordEventWeather) { sCoordEventWeatherFuncs[i].func(); return; diff --git a/src/field/decoration.c b/src/field/decoration.c index 8b774afc3..87a9d8028 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -1426,139 +1426,6 @@ const struct YesNoFuncTable gUnknown_083EC634[] = { {sub_8109D04, sub_80FF058} }; -const u16 gUnknown_083EC654[] = {0x6318, 0x739C, 0x7FFF}; -const u8 gUnknown_083EC65A[] = _("{PALETTE 13}{STR_VAR_1}"); - -const u8 Unknown_3EC660[] = {0, 1, 2, 3}; -const u8 Unknown_3EC664[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13}; -const u8 Unknown_3EC670[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; -const u8 Unknown_3EC680[] = {0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21}; -const u8 Unknown_3EC68C[] = {0, 1, 2, 3, 4, 5, 6, 7}; -const u8 Unknown_3EC694[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; -const u8 Unknown_3EC6B4[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45}; -const u8 Unknown_3EC6D8[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29}; - -const u8 Unknown_3EC6F0[] = {0, 0, 0, 0}; -const u8 Unknown_3EC6F4[] = {0, 0, 1, 1, 0, 0, 1, 1}; -const u8 Unknown_3EC6FC[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2}; -const u8 Unknown_3EC708[] = {0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 4, 4, 5, 5, 6, 6, 7, 7}; -const u8 Unknown_3EC728[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; -const u8 Unknown_3EC738[] = {0, 0, 0, 0, 1, 1, 1, 1}; -const u8 Unknown_3EC740[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2}; -const u8 Unknown_3EC74C[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3, 4, 4, 5, 5, 4, 4, 5, 5, 6, 6, 7, 7, 6, 6, 7, 7}; -const u8 Unknown_3EC76C[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 6, 6, 7, 7, 8, 8}; -const u8 Unknown_3EC790[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5}; - -const u8 Unknown_3EC7A8[] = {4, 5, 6, 7}; -const u8 Unknown_3EC7AC[] = {4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC7B4[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC7C0[] = {4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC7E0[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC7F0[] = {4, 5, 6, 7, 4, 5, 6, 7}; -const u8 Unknown_3EC7F8[] = {4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7}; -const u8 Unknown_3EC804[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC824[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC848[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; - -const struct UnkStruct_803EC860 gUnknown_083EC860[] = { - {Unknown_3EC660, Unknown_3EC6F0, Unknown_3EC7A8, 0x4}, - {Unknown_3EC68C, Unknown_3EC6F4, Unknown_3EC7AC, 0x8}, - {Unknown_3EC664, Unknown_3EC6FC, Unknown_3EC7B4, 0xc}, - {Unknown_3EC694, Unknown_3EC708, Unknown_3EC7C0, 0x20}, - {Unknown_3EC670, Unknown_3EC728, Unknown_3EC7E0, 0x10}, - {Unknown_3EC68C, Unknown_3EC738, Unknown_3EC7F0, 0x8}, - {Unknown_3EC680, Unknown_3EC740, Unknown_3EC7F8, 0xc}, - {Unknown_3EC694, Unknown_3EC74C, Unknown_3EC804, 0x20}, - {Unknown_3EC6B4, Unknown_3EC76C, Unknown_3EC824, 0x24}, - {Unknown_3EC6D8, Unknown_3EC790, Unknown_3EC848, 0x18} -}; - -const struct UnkStruct_083EC900 gUnknown_083EC900[] = { - {0, 1, 0x78, 0x4e}, - {1, 2, 0x80, 0x4e}, - {1, 3, 0x90, 0x56}, - {1, 3, 0x90, 0x46}, - {0, 2, 0x80, 0x46}, - {2, 2, 0x78, 0x46}, - {2, 3, 0x80, 0x56}, - {2, 3, 0x80, 0x36}, - {0, 3, 0x90, 0x46}, - {1, 3, 0x90, 0x46} -}; - -const union AnimCmd gSpriteAnim_83EC928[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83EC930[] = { - gSpriteAnim_83EC928 -}; - -const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { - {.data = gUnknown_02038900.image, .size = sizeof(gUnknown_02038900.image)} -}; - -const struct SpriteTemplate gSpriteTemplate_83EC93C = { - .tileTag = 0xffff, - .paletteTag = 3000, - .oam = &gUnknown_020391AC, - .anims = gSpriteAnimTable_83EC930, - .images = gSpriteImageTable_83EC934, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81009A8 -}; - -const struct SpritePalette gUnknown_083EC954 = {.data = (u16 *)&gUnknown_02038900.palette, .tag = 3000}; - -const struct YesNoFuncTable gUnknown_083EC95C = {.yesFunc = sub_81000C4, .noFunc = sub_810065C}; -const struct YesNoFuncTable gUnknown_083EC964 = {.yesFunc = sub_810026C, .noFunc = sub_810065C}; -const struct YesNoFuncTable gUnknown_083EC96C[] = { - {.yesFunc = sub_80FFAB0, .noFunc = sub_80FFB08}, - {.yesFunc = sub_8100F88, .noFunc = sub_8100FB4} -}; - -const u8 gUnknown_083EC97C[] = {4, 4, 4, 4, 0, 3, 3, 0}; -const u8 gUnknown_083EC984[] = {4, 4, 4, 4, 0, 4, 3, 0}; - -const u16 gUnknown_083EC98C[] = INCBIN_U16("graphics/unknown/83EC98C.gbapal"); -const u16 Unknown_3EC9AC[] = INCBIN_U16("graphics/unknown/83EC9AC.gbapal"); -const struct YesNoFuncTable gUnknown_083EC9CC = {.yesFunc = sub_810153C, .noFunc = sub_8100EEC}; -const struct YesNoFuncTable gUnknown_083EC9D4 = {.yesFunc = sub_8101590, .noFunc = sub_8100EEC}; -const u32 gSpriteImage_83EC9DC[] = INCBIN_U32("graphics/unknown_sprites/83EC9DC.4bpp"); -const struct SpritePalette gUnknown_083ECA5C = {.data = gUnknown_083EC98C, .tag = 8}; -const struct SpritePalette gUnknown_083ECA64 = {.data = Unknown_3EC9AC, .tag = 8}; -const struct OamData gOamData_83ECA6C = { - .size = 1, .priority = 1 -}; - -const union AnimCmd gSpriteAnim_83ECA74[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83ECA7C[] = { - gSpriteAnim_83ECA74 -}; - -const struct SpriteFrameImage gSpriteImageTable_83ECA80[] = { - obj_frame_tiles(gSpriteImage_83EC9DC) -}; - -const struct SpriteTemplate gSpriteTemplate_83ECA88 = { - .tileTag = 0xffff, - .paletteTag = 8, - .oam = &gOamData_83ECA6C, - .anims = gSpriteAnimTable_83ECA7C, - .images = gSpriteImageTable_83ECA80, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101698 -}; - -const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; - -u8 *const unref_label_083ECAA8[] = {gSharedMem}; - // text extern u8 gUnknown_0815F399[]; @@ -1605,8 +1472,9 @@ void DoPlayerPCDecoration(u8 taskId) void sub_80FE2B4(void) { - u16 palettes[3]; - memcpy(palettes, gUnknown_083EC654, sizeof gUnknown_083EC654); + u16 palettes[3] = {RGB(24, 24, 24), + RGB(28, 28, 28), + RGB(31, 31, 31)}; LoadPalette(&palettes[2], 0xdf, 2); LoadPalette(&palettes[1], 0xd1, 2); LoadPalette(&palettes[0], 0xd8, 2); @@ -1908,6 +1776,8 @@ void sub_80FE948(u8 taskId) } } +const u8 gUnknown_083EC65A[] = _("{PALETTE 13}{STR_VAR_1}"); + void sub_80FEABC(u8 taskId, u8 dummy1) { u16 i; @@ -3568,6 +3438,136 @@ u16 sub_810089C(u16 a0) return ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles)[a0] & 0xfff; } +const u8 Unknown_3EC660[] = {0, 1, 2, 3}; +const u8 Unknown_3EC664[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13}; +const u8 Unknown_3EC670[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; +const u8 Unknown_3EC680[] = {0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21}; +const u8 Unknown_3EC68C[] = {0, 1, 2, 3, 4, 5, 6, 7}; +const u8 Unknown_3EC694[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; +const u8 Unknown_3EC6B4[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45}; +const u8 Unknown_3EC6D8[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29}; + +const u8 Unknown_3EC6F0[] = {0, 0, 0, 0}; +const u8 Unknown_3EC6F4[] = {0, 0, 1, 1, 0, 0, 1, 1}; +const u8 Unknown_3EC6FC[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2}; +const u8 Unknown_3EC708[] = {0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 4, 4, 5, 5, 6, 6, 7, 7}; +const u8 Unknown_3EC728[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; +const u8 Unknown_3EC738[] = {0, 0, 0, 0, 1, 1, 1, 1}; +const u8 Unknown_3EC740[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2}; +const u8 Unknown_3EC74C[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3, 4, 4, 5, 5, 4, 4, 5, 5, 6, 6, 7, 7, 6, 6, 7, 7}; +const u8 Unknown_3EC76C[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 6, 6, 7, 7, 8, 8}; +const u8 Unknown_3EC790[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5}; + +const u8 Unknown_3EC7A8[] = {4, 5, 6, 7}; +const u8 Unknown_3EC7AC[] = {4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC7B4[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC7C0[] = {4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC7E0[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC7F0[] = {4, 5, 6, 7, 4, 5, 6, 7}; +const u8 Unknown_3EC7F8[] = {4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7}; +const u8 Unknown_3EC804[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC824[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC848[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; + +const struct UnkStruct_803EC860 gUnknown_083EC860[] = { + {Unknown_3EC660, Unknown_3EC6F0, Unknown_3EC7A8, 0x4}, + {Unknown_3EC68C, Unknown_3EC6F4, Unknown_3EC7AC, 0x8}, + {Unknown_3EC664, Unknown_3EC6FC, Unknown_3EC7B4, 0xc}, + {Unknown_3EC694, Unknown_3EC708, Unknown_3EC7C0, 0x20}, + {Unknown_3EC670, Unknown_3EC728, Unknown_3EC7E0, 0x10}, + {Unknown_3EC68C, Unknown_3EC738, Unknown_3EC7F0, 0x8}, + {Unknown_3EC680, Unknown_3EC740, Unknown_3EC7F8, 0xc}, + {Unknown_3EC694, Unknown_3EC74C, Unknown_3EC804, 0x20}, + {Unknown_3EC6B4, Unknown_3EC76C, Unknown_3EC824, 0x24}, + {Unknown_3EC6D8, Unknown_3EC790, Unknown_3EC848, 0x18} +}; + +const struct UnkStruct_083EC900 gUnknown_083EC900[] = { + {0, 1, 0x78, 0x4e}, + {1, 2, 0x80, 0x4e}, + {1, 3, 0x90, 0x56}, + {1, 3, 0x90, 0x46}, + {0, 2, 0x80, 0x46}, + {2, 2, 0x78, 0x46}, + {2, 3, 0x80, 0x56}, + {2, 3, 0x80, 0x36}, + {0, 3, 0x90, 0x46}, + {1, 3, 0x90, 0x46} +}; + +const union AnimCmd gSpriteAnim_83EC928[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83EC930[] = { + gSpriteAnim_83EC928 +}; + +const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { + {.data = gUnknown_02038900.image, .size = sizeof(gUnknown_02038900.image)} +}; + +const struct SpriteTemplate gSpriteTemplate_83EC93C = { + .tileTag = 0xffff, + .paletteTag = 3000, + .oam = &gUnknown_020391AC, + .anims = gSpriteAnimTable_83EC930, + .images = gSpriteImageTable_83EC934, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81009A8 +}; + +const struct SpritePalette gUnknown_083EC954 = {.data = (u16 *)&gUnknown_02038900.palette, .tag = 3000}; + +const struct YesNoFuncTable gUnknown_083EC95C = {.yesFunc = sub_81000C4, .noFunc = sub_810065C}; +const struct YesNoFuncTable gUnknown_083EC964 = {.yesFunc = sub_810026C, .noFunc = sub_810065C}; +const struct YesNoFuncTable gUnknown_083EC96C[] = { + {.yesFunc = sub_80FFAB0, .noFunc = sub_80FFB08}, + {.yesFunc = sub_8100F88, .noFunc = sub_8100FB4} +}; + +const u8 gUnknown_083EC97C[] = {4, 4, 4, 4, 0, 3, 3, 0}; +const u8 gUnknown_083EC984[] = {4, 4, 4, 4, 0, 4, 3, 0}; + +const u16 gUnknown_083EC98C[] = INCBIN_U16("graphics/unknown/83EC98C.gbapal"); +const u16 Unknown_3EC9AC[] = INCBIN_U16("graphics/unknown/83EC9AC.gbapal"); +const struct YesNoFuncTable gUnknown_083EC9CC = {.yesFunc = sub_810153C, .noFunc = sub_8100EEC}; +const struct YesNoFuncTable gUnknown_083EC9D4 = {.yesFunc = sub_8101590, .noFunc = sub_8100EEC}; +const u32 gSpriteImage_83EC9DC[] = INCBIN_U32("graphics/unknown_sprites/83EC9DC.4bpp"); +const struct SpritePalette gUnknown_083ECA5C = {.data = gUnknown_083EC98C, .tag = 8}; +const struct SpritePalette gUnknown_083ECA64 = {.data = Unknown_3EC9AC, .tag = 8}; +const struct OamData gOamData_83ECA6C = { + .size = 1, .priority = 1 +}; + +const union AnimCmd gSpriteAnim_83ECA74[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83ECA7C[] = { + gSpriteAnim_83ECA74 +}; + +const struct SpriteFrameImage gSpriteImageTable_83ECA80[] = { + obj_frame_tiles(gSpriteImage_83EC9DC) +}; + +const struct SpriteTemplate gSpriteTemplate_83ECA88 = { + .tileTag = 0xffff, + .paletteTag = 8, + .oam = &gOamData_83ECA6C, + .anims = gSpriteAnimTable_83ECA7C, + .images = gSpriteImageTable_83ECA80, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8101698 +}; + +const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; + +u8 *const unref_label_083ECAA8[] = {gSharedMem}; + void sub_81008BC(struct UnkStruct_02038900 *unk_02038900) { u8 i; diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index b67f3a2bd..9afb7a16d 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -202,14 +202,14 @@ void sub_80FA4E4(void *a, u32 b, u8 unused) *(dst++) = *(src++); } -void sub_80FA5BC(void) +void BufferTrendyPhraseString(void) { struct EasyChatPair *s = &gSaveBlock1.easyChatPairs[gSpecialVar_0x8004]; ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); } -void sub_80FA5E4(void) +void TrendyPhraseIsOld(void) { u16 result = 0; @@ -222,7 +222,7 @@ void sub_80FA5E4(void) gSpecialVar_Result = result; } -void sub_80FA648(void) +void GetDewfordHallPaintingNameIndex(void) { gSpecialVar_Result = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7; } diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 1dce5863e..94532506f 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -314,7 +314,7 @@ void sub_80EB7C4(void) ShowFieldAutoScrollMessage(gStringVar4); } -void sub_80EB83C(void) +void BufferRandomHobbyOrLifestyleString(void) { u16 group, local2; diff --git a/src/field/event_data.c b/src/field/event_data.c index 587da8138..9d6d2372b 100644 --- a/src/field/event_data.c +++ b/src/field/event_data.c @@ -112,10 +112,10 @@ bool32 CanResetRTC(void) u16 *GetVarPointer(u16 id) { - if (id < 0x4000) + if (id < VARS_START) return NULL; if (id < 0x8000) - return &gSaveBlock1.vars[id - 0x4000]; + return &gSaveBlock1.vars[id - VARS_START]; return gSpecialVars[id - 0x8000]; } @@ -138,7 +138,7 @@ bool8 VarSet(u16 id, u16 value) u8 VarGetFieldObjectGraphicsId(u8 id) { - return VarGet(0x4010 + id); + return VarGet(VAR_OBJ_GFX_ID_0 + id); } u8 *GetFlagPointer(u16 id) diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index cd7d3a2e2..52e66f16e 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -355,7 +355,7 @@ static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *position, u8 unuse case 5: case 6: case 7: - gSpecialVar_0x8004 = ((u32)bgEvent->bgUnion.script >> 16) + 0x258; + gSpecialVar_0x8004 = ((u32)bgEvent->bgUnion.script >> 16) + FLAG_HIDDEN_ITEMS_START; gSpecialVar_0x8005 = (u32)bgEvent->bgUnion.script; if (FlagGet(gSpecialVar_0x8004) == TRUE) return NULL; @@ -363,7 +363,7 @@ static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *position, u8 unuse case 8: if (c == 2) { - gSpecialVar_0x8004 = (u32)bgEvent->bgUnion.script; + gSpecialVar_0x8004 = bgEvent->bgUnion.secretBaseId; if (sub_80BC050()) return gUnknown_081A2C51; } @@ -493,7 +493,7 @@ bool8 sub_8068870(u16 a) bool8 sub_8068894(void) { - sub_8082B78(); + IncrementRematchStepCounter(); happiness_algorithm_step(); if (overworld_poison_step() == TRUE) { diff --git a/src/field/field_effect.c b/src/field/field_effect.c index 4337300da..1e2aaa4ed 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -310,114 +310,6 @@ void (*const gUnknown_0839F378[])(struct Task *) = { sub_8087914 }; -const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1}; - -void (*const gUnknown_0839F388[])(struct Task *) = { - sub_8087AA4, - sub_8087AC8 -}; - -void (*const gUnknown_0839F390[])(struct Task *) = { - sub_8087BEC, - sub_8087C14, - sub_8087CA4, - sub_8087D78 -}; - -void (*const gUnknown_0839F3A0[])(struct Task *) = { - sub_8087E4C, - sub_8087ED8, - sub_8087FDC -}; - -void (*const gUnknown_0839F3AC[])(struct Task *) = { - sub_8088150, - sub_80881C0, - sub_8088228, - sub_80882B4, - sub_80882E4, - sub_8088338, - sub_8088380 -}; - -void (*const gUnknown_0839F3C8[])(struct Task *) = { - sub_80884AC, - sub_80884E8, - sub_8088554, - sub_80885A8, - sub_80885D8, - sub_808860C, - sub_808862C -}; - -void (*const gUnknown_0839F3E4[])(struct Task *) = { - sub_8088984, - sub_80889E4, - sub_8088A30, - sub_8088A78, - sub_8088AF4 -}; - -void (*const gUnknown_0839F3F8[])(struct Task *) = { - sub_8088CA0, - sub_8088CF8, - sub_8088D3C, - sub_8088D94, - sub_8088DD8, - sub_8088E2C, - sub_8088EB4, - sub_8088F10, - sub_8088F30 -}; - -const union AffineAnimCmd SpriteAffineAnim_839F41C[] = { - AFFINEANIMCMD_FRAME(8, 8, -30, 0), - AFFINEANIMCMD_FRAME(28, 28, 0, 30), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd SpriteAffineAnim_839F434[] = { - AFFINEANIMCMD_FRAME(256, 256, 64, 0), - AFFINEANIMCMD_FRAME(-10, -10, 0, 22), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = { - SpriteAffineAnim_839F41C, - SpriteAffineAnim_839F434 -}; - -void (*const gUnknown_0839F454[])(struct Task *) = { - sub_80892A0, - sub_8089354, - sub_80893C0, - sub_8089414, - sub_808948C, - sub_80894C4, - fishE -}; - -const s16 gUnknown_0839F470[] = { - -2, - -4, - -5, - -6, - -7, - -8, - -8, - -8, - -7, - -7, - -6, - -5, - -3, - -2, - 0, - 2, - 4, - 8 -}; - static u8 sActiveList[32]; extern u8 *gFieldEffectScriptPointers[]; @@ -2100,8 +1992,7 @@ void sub_80878F4(struct Task *task) void sub_8087914(struct Task *task) { struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; if (task->data[14] != 0 && (--task->data[14]) == 0) { sub_8053FF8(); @@ -2130,6 +2021,11 @@ void sub_8087914(struct Task *task) } } +void (*const gUnknown_0839F388[])(struct Task *) = { + sub_8087AA4, + sub_8087AC8 +}; + void sub_8087A74(u8); void mapldr_080859D4(void) @@ -2159,10 +2055,8 @@ void sub_8087AA4(struct Task *task) void sub_8087AC8(struct Task *task) { - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (task->data[1] == 0 || (--task->data[1]) == 0) { if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) @@ -2195,6 +2089,13 @@ void sub_8087BA8(void) CreateTask(sub_8087BBC, 0); } +void (*const gUnknown_0839F390[])(struct Task *) = { + sub_8087BEC, + sub_8087C14, + sub_8087CA4, + sub_8087D78 +}; + void sub_8087BBC(u8 taskId) { gUnknown_0839F390[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -2211,10 +2112,8 @@ void sub_8087BEC(struct Task *task) void sub_8087C14(struct Task *task) { - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (task->data[1] == 0 || (--task->data[1]) == 0) { FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); @@ -2233,12 +2132,9 @@ void sub_8087C14(struct Task *task) void sub_8087CA4(struct Task *task) { - struct MapObject *mapObject; - struct Sprite *sprite; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; if ((--task->data[1]) <= 0) { task->data[1] = 4; @@ -2288,6 +2184,12 @@ void mapldr_08085D88(void) CreateTask(sub_8087E1C, 0); } +void (*const gUnknown_0839F3A0[])(struct Task *) = { + sub_8087E4C, + sub_8087ED8, + sub_8087FDC +}; + void sub_8087E1C(u8 taskId) { gUnknown_0839F3A0[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -2314,12 +2216,9 @@ void sub_8087E4C(struct Task *task) void sub_8087ED8(struct Task *task) { - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - struct Sprite *sprite; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; if ((sprite->pos2.y += task->data[1]) >= -8) { if (task->data[13] == 0) @@ -2356,10 +2255,8 @@ void sub_8087ED8(struct Task *task) void sub_8087FDC(struct Task *task) { - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if ((--task->data[1]) == 0) { FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); @@ -2409,6 +2306,16 @@ bool8 FldEff_FieldMoveShowMonInit(void) return FALSE; } +void (*const gUnknown_0839F3AC[])(struct Task *) = { + sub_8088150, + sub_80881C0, + sub_8088228, + sub_80882B4, + sub_80882E4, + sub_8088338, + sub_8088380 +}; + void sub_8088120(u8 taskId) { gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -2565,6 +2472,16 @@ bool8 sub_8088708(struct Task *); void sub_80886F8(struct Task *); bool8 sub_80887C0(struct Task *); +void (*const gUnknown_0839F3C8[])(struct Task *) = { + sub_80884AC, + sub_80884E8, + sub_8088554, + sub_80885A8, + sub_80885D8, + sub_808860C, + sub_808862C +}; + void sub_808847C(u8 taskId) { gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -2884,6 +2801,14 @@ u8 FldEff_UseSurf(void) return FALSE; } +void (*const gUnknown_0839F3E4[])(struct Task *) = { + sub_8088984, + sub_80889E4, + sub_8088A30, + sub_8088A78, + sub_8088AF4 +}; + void sub_8088954(u8 taskId) { gUnknown_0839F3E4[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -3012,6 +2937,18 @@ u8 FldEff_UseFly(void) return 0; } +void (*const gUnknown_0839F3F8[])(struct Task *) = { + sub_8088CA0, + sub_8088CF8, + sub_8088D3C, + sub_8088D94, + sub_8088DD8, + sub_8088E2C, + sub_8088EB4, + sub_8088F10, + sub_8088F30 +}; + void sub_8088C70(u8 taskId) { gUnknown_0839F3F8[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -3170,6 +3107,23 @@ void sub_8088FFC(u8 a0, u8 a1) gSprites[a0].data[6] = a1; } +const union AffineAnimCmd SpriteAffineAnim_839F41C[] = { + AFFINEANIMCMD_FRAME(8, 8, -30, 0), + AFFINEANIMCMD_FRAME(28, 28, 0, 30), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd SpriteAffineAnim_839F434[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_FRAME(-10, -10, 0, 22), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = { + SpriteAffineAnim_839F41C, + SpriteAffineAnim_839F434 +}; + void sub_8089018(struct Sprite *sprite) { if (sprite->data[7] == 0) @@ -3282,6 +3236,16 @@ u8 FldEff_FlyIn(void) return 0; } +void (*const gUnknown_0839F454[])(struct Task *) = { + sub_80892A0, + sub_8089354, + sub_80893C0, + sub_8089414, + sub_808948C, + sub_80894C4, + fishE +}; + void sub_8089270(u8 taskId) { gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]); @@ -3333,10 +3297,27 @@ void sub_8089354(struct Task *task) void sub_80893C0(struct Task *task) { - s16 unknown_0839F470[18]; - struct Sprite *sprite; - memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470); - sprite = &gSprites[gPlayerAvatar.spriteId]; + s16 unknown_0839F470[18] = { + -2, + -4, + -5, + -6, + -7, + -8, + -8, + -8, + -7, + -7, + -6, + -5, + -3, + -2, + 0, + 2, + 4, + 8 + }; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.y = unknown_0839F470[task->data[2]]; if ((++task->data[2]) >= 18) { diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c index 1d831d2e9..165829a55 100644 --- a/src/field/field_effect_helpers.c +++ b/src/field/field_effect_helpers.c @@ -31,50 +31,6 @@ static u32 ShowDisguiseFieldEffect(u8, u8, u8); const u8 UnusedEggString_8401E28[] = _("タマゴ"); -const u16 gUnknown_08401E2C[] = { - 0x0c, - 0x1c, - 0x2c -}; - -const u8 gUnknown_08401E32[] = { - 0, - 1, - 2, - 3 -}; - -const u16 gUnknown_08401E36[] = { - 4, - 4, - 4, - 16 -}; - -void (*const gUnknown_08401E40[])(struct Sprite *) = { - sub_81275A0, - sub_81275C4 -}; - -void (*const gUnknown_08401E48[])(struct Sprite *) = { - sub_8127DA0, - sub_8127DD0, - sub_8127E30 -}; - -const u8 gUnknown_08401E54[] = { - 0, - 0, - 1, - 2, - 3 -}; - -const u16 gUnknown_08401E5A[] = { - 3, - 7 -}; - void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) { struct Sprite *newSprite; @@ -107,9 +63,7 @@ static s16 sub_81268D0(struct MapObject *mapObject) static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) { u8 whichElement; - u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)]; - - memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C); + u16 unk_8041e2c[] = {0x0c, 0x1c, 0x2c}; sprite->data[2] = 0; if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E)))) { @@ -237,6 +191,20 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) } } +const u8 gUnknown_08401E32[] = { + 0, + 1, + 2, + 3 +}; + +const u16 gUnknown_08401E36[] = { + 4, + 4, + 4, + 16 +}; + u32 FldEff_Shadow(void) { u8 mapObjectId; @@ -589,6 +557,11 @@ u32 FldEff_BikeTireTracks(void) return spriteId; } +void (*const gUnknown_08401E40[])(struct Sprite *) = { + sub_81275A0, + sub_81275C4 +}; + void sub_8127584(struct Sprite *sprite) { gUnknown_08401E40[sprite->data[0]](sprite); @@ -917,6 +890,12 @@ u32 FldEff_Ash(void) return 0; } +void (*const gUnknown_08401E48[])(struct Sprite *) = { + sub_8127DA0, + sub_8127DD0, + sub_8127E30 +}; + void sub_8127D84(struct Sprite *sprite) { gUnknown_08401E48[sprite->data[0]](sprite); @@ -1018,9 +997,7 @@ void sub_8127F7C(struct Sprite *sprite) static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite) { - u8 unk_8041E54[ARRAY_COUNT(gUnknown_08401E54)]; - - memcpy(unk_8041E54, gUnknown_08401E54, sizeof gUnknown_08401E54); + u8 unk_8041E54[] = {0, 0, 1, 2, 3}; if (sub_8127F64(sprite) == 0) { StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]); @@ -1134,11 +1111,8 @@ __attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, stru static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite) { - u16 unk_8401E5A[ARRAY_COUNT(gUnknown_08401E5A)]; - u8 v0; - - memcpy(unk_8401E5A, gUnknown_08401E5A, sizeof gUnknown_08401E5A); - v0 = sub_8127F5C(sprite); + u16 unk_8401E5A[] = {3, 7}; + u8 v0 = sub_8127F5C(sprite); if (v0 != 0) { if (((u16)(++ sprite->data[4]) & unk_8401E5A[sprite->data[5]]) == 0) diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c index 829ce2dfa..5014e97e3 100644 --- a/src/field/field_fadetransition.c +++ b/src/field/field_fadetransition.c @@ -327,7 +327,7 @@ void sub_8080DC4(u8 taskId) } } -void atk17_seteffectuser(void) +void atk17_seteffectsecondary(void) { pal_fill_black(); CreateStartMenuTask(sub_8080DC4); diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 81c0c5854..ba7c3d68e 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -2020,7 +2020,7 @@ u8 GetFieldObjectIdByLocalId(u8 localId) #ifdef NONMATCHING u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) { - struct MapObject2 *mapObj; //TODO: resolve the mapobj_unk_19b weirdness + struct MapObject *mapObj; //TODO: resolve the mapobj_unk_19b weirdness u8 var; u16 r3; u16 r2; @@ -2029,8 +2029,8 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0) return 16; //_0805ACCE - mapObj = (struct MapObject2 *)&gMapObjects[var]; - npc_clear_ids_and_state((struct MapObject *)mapObj); + mapObj = &gMapObjects[var]; + npc_clear_ids_and_state(mapObj); r3 = template->x + 7; r2 = template->y + 7; mapObj->active = TRUE; @@ -2048,8 +2048,8 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 mapObj->coords3.y = r2; mapObj->mapobj_unk_0B_0 = template->elevation; mapObj->elevation = template->elevation; - mapObj->mapobj_unk_19 = template->unkA_0; - mapObj->mapobj_unk_19b = template->unkA_4; + mapObj->range.as_nybbles.x = template->unkA_0; + mapObj->range.as_nybbles.y = template->unkA_4; mapObj->trainerType = template->unkC; mapObj->trainerRange_berryTreeId = template->unkE; mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType]; @@ -2058,10 +2058,10 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 //asm("":::"r5","r6"); if (gUnknown_0836DBBC[mapObj->animPattern] != 0) { - if (mapObj->mapobj_unk_19 == 0) - mapObj->mapobj_unk_19++; - if (mapObj->mapobj_unk_19b == 0) - mapObj->mapobj_unk_19b++; + if (mapObj->range.as_nybbles.x == 0) + mapObj->range.as_nybbles.x++; + if (mapObj->range.as_nybbles.y == 0) + mapObj->range.as_nybbles.y++; } return var; } @@ -5464,7 +5464,7 @@ u8 sub_805FF20(struct MapObject *mapObject, u8 direction) return npc_block_way(mapObject, x, y, direction); } -bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y); +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject *mapObject, s16 x, s16 y); static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y); bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction); @@ -5472,7 +5472,7 @@ u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u32 dirn) { u8 direction; direction = dirn; - if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) + if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y)) return 1; else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction)) return 2; @@ -5489,7 +5489,7 @@ u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) { u8 flags = 0; - if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) + if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y)) flags |= 1; if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))) flags |= 2; @@ -5500,22 +5500,22 @@ u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) return flags; } -bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y) +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject *mapObject, s16 x, s16 y) { s16 minv; s16 maxv; - if (mapObject->mapobj_unk_19 != 0) + if (mapObject->range.as_nybbles.x != 0) { - minv = mapObject->coords1.x - (mapObject->mapobj_unk_19); - maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19); + minv = mapObject->coords1.x - (mapObject->range.as_nybbles.x); + maxv = mapObject->coords1.x + (mapObject->range.as_nybbles.x); if (minv > x || maxv < x) return TRUE; } - if (mapObject->mapobj_unk_19b != 0) + if (mapObject->range.as_nybbles.y != 0) { - minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b); - maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b); + minv = mapObject->coords1.y - (mapObject->range.as_nybbles.y); + maxv = mapObject->coords1.y + (mapObject->range.as_nybbles.y); if (minv > y || maxv < y) return TRUE; } diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c index f1a113d44..328b66ed2 100644 --- a/src/field/field_map_obj_helpers.c +++ b/src/field/field_map_obj_helpers.c @@ -7,13 +7,92 @@ typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); -extern s16 gUnknown_08376194[]; -extern SpriteStepFunc *gUnknown_08376180[]; -extern s8 *gUnknown_083761D0[]; -extern s16 gUnknown_083761DC[]; -extern u8 gUnknown_083761E2[]; -extern s16 gUnknown_083761E6[]; -extern u8 gUnknown_083761EC[]; +void Step1(struct Sprite *sprite, u8 dir); +void Step2(struct Sprite *sprite, u8 dir); +void Step3(struct Sprite *sprite, u8 dir); +void Step4(struct Sprite *sprite, u8 dir); +void Step8(struct Sprite *sprite, u8 dir); + +const SpriteStepFunc Unknown_83760F0[] = { + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1, + Step1 +}; + +const SpriteStepFunc Unknown_8376130[] = { + Step2, + Step2, + Step2, + Step2, + Step2, + Step2, + Step2, + Step2 +}; + +const SpriteStepFunc Unknown_8376150[] = { + Step2, + Step3, + Step3, + Step2, + Step3, + Step3 +}; + +const SpriteStepFunc Unknown_8376168[] = { + Step4, + Step4, + Step4, + Step4 +}; + +const SpriteStepFunc Unknown_8376178[] = { + Step8, + Step8 +}; + +const SpriteStepFunc *const gUnknown_08376180[] = { + Unknown_83760F0, + Unknown_8376130, + Unknown_8376150, + Unknown_8376168, + Unknown_8376178 +}; + +const s16 gUnknown_08376194[] = { + 16, 8, 6, 4, 2 +}; + +const s8 Unknown_837619E[] = { + -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 +}; + +const s8 Unknown_83761AE[] = { + 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 +}; + +const s8 Unknown_83761BE[] = { + -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 +}; + +const s8 *const gUnknown_083761D0[] = { + Unknown_837619E, + Unknown_83761AE, + Unknown_83761BE +}; bool8 FreezeMapObject(struct MapObject *mapObject) { @@ -156,14 +235,9 @@ void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) u8 sub_8064704(struct Sprite *sprite) { - u8 v2; - s16 v5[3]; - u8 v6[3]; - - memcpy(v5, gUnknown_083761DC, 6); - memcpy(v6, gUnknown_083761E2, 3); - - v2 = 0; + s16 v5[3] = {0x10, 0x10, 0x20}; + u8 v6[3] = {0, 0, 1}; + u8 v2 = 0; if (sprite->data[4]) Step1(sprite, sprite->data[3]); @@ -186,14 +260,9 @@ u8 sub_8064704(struct Sprite *sprite) u8 sub_806478C(struct Sprite *sprite) { - u8 v2; - s16 v5[3]; - u8 v6[3]; - - memcpy(v5, gUnknown_083761E6, 6); - memcpy(v6, gUnknown_083761EC, 3); - - v2 = 0; + s16 v5[3] = {0x20, 0x20, 0x40}; + u8 v6[3] = {1, 1, 2}; + u8 v2 = 0; if (sprite->data[4] && !(sprite->data[6] & 1)) Step1(sprite, sprite->data[3]); diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 0b7fe336e..67b652a57 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -291,7 +291,7 @@ bool8 sub_80C7754(void) void Task_HandlePorthole(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *var = GetVarPointer(VAR_PORTHOLE); + u16 *var = GetVarPointer(VAR_PORTHOLE_STATE); struct WarpData *location = &gSaveBlock1.location; switch (data[0]) @@ -337,8 +337,8 @@ void Task_HandlePorthole(u8 taskId) } break; case EXIT_PORTHOLE: // exit porthole. - FlagClear(0x4001); - FlagClear(0x4000); + FlagClear(FLAG_SPECIAL_FLAG_1); + FlagClear(FLAG_SPECIAL_FLAG_0); copy_saved_warp2_bank_and_enter_x_to_warp1(0); sp13E_warp_to_last_warp(); DestroyTask(taskId); @@ -352,7 +352,7 @@ void sub_80C78A0(void) gSprites[spriteId].coordOffsetEnabled = FALSE; - if (VarGet(0x40B4) == 2) + if (VarGet(VAR_PORTHOLE_STATE) == 2) { StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(4)); } @@ -374,8 +374,8 @@ void sub_80C791C(void) void sub_80C7958(void) { FlagSet(FLAG_SYS_CRUISE_MODE); - FlagSet(0x4001); - FlagSet(0x4000); + FlagSet(FLAG_SPECIAL_FLAG_1); + FlagSet(FLAG_SPECIAL_FLAG_0); saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); sub_80C7754(); sub_8080F9C(); diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 87a9e2d5d..fc6f690a3 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -99,13 +99,13 @@ u16 GetPlayerAvatarBike(void) return 0; } -static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) +static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { u8 result; - if (arg1 <= 99) + if (numBikeCollisions <= 99) { - ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, numBikeCollisions, STR_CONV_MODE_LEFT_ALIGN, 2); StringAppend(gStringVar1, gOtherText_Times); } else @@ -113,11 +113,11 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) StringCopy(gStringVar1, gOtherText_99Times); } - if (arg0 < 3600) + if (numFrames < 3600) { - ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, numFrames / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); gStringVar2[2] = CHAR_DECIMAL_SEPARATOR; - ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(&gStringVar2[3], ((numFrames % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar2, gOtherText_Seconds); } else @@ -126,44 +126,44 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } result = 0; - if (arg1 == 0) + if (numBikeCollisions == 0) { result = 5; } - else if (arg1 < 4) + else if (numBikeCollisions < 4) { result = 4; } - else if (arg1 < 10) + else if (numBikeCollisions < 10) { result = 3; } - else if (arg1 < 20) + else if (numBikeCollisions < 20) { result = 2; } - else if (arg1 < 100) + else if (numBikeCollisions < 100) { result = 1; } - if (arg0 / 60 <= 10) + if (numFrames / 60 <= 10) { result += 5; } - else if (arg0 / 60 <= 15) + else if (numFrames / 60 <= 15) { result += 4; } - else if (arg0 / 60 <= 20) + else if (numFrames / 60 <= 20) { result += 3; } - else if (arg0 / 60 <= 40) + else if (numFrames / 60 <= 40) { result += 2; } - else if (arg0 / 60 < 60) + else if (numFrames / 60 < 60) { result += 1; } @@ -173,36 +173,36 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } void FinishCyclingRoadChallenge(void) { - const u32 time = gMain.vblankCounter1 - gBikeCyclingTimer; + const u32 numFrames = gMain.vblankCounter1 - gBikeCyclingTimer; - DetermineCyclingRoadResults(time, gBikeCollisions); - RecordCyclingRoadResults(time, gBikeCollisions); + DetermineCyclingRoadResults(numFrames, gBikeCollisions); + RecordCyclingRoadResults(numFrames, gBikeCollisions); } -static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); +static void RecordCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) { + u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); + u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); + u32 framesRecord = low + (high << 16); - if (record > arg0 || record == 0) + if (framesRecord > numFrames || framesRecord == 0) { - VarSet(0x4028, arg0); - VarSet(0x4029, arg0 >> 16); - VarSet(0x4027, arg1); + VarSet(VAR_CYCLING_ROAD_RECORD_TIME_L, numFrames); + VarSet(VAR_CYCLING_ROAD_RECORD_TIME_H, numFrames >> 16); + VarSet(VAR_CYCLING_ROAD_RECORD_COLLISIONS, numBikeCollisions); } } u16 GetRecordedCyclingRoadResults(void) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); + u16 low = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_L); + u16 high = VarGet(VAR_CYCLING_ROAD_RECORD_TIME_H); + u32 framesRecord = low + (high << 16); - if (record == 0) + if (framesRecord == 0) { return FALSE; } - DetermineCyclingRoadResults(record, VarGet(0x4027)); + DetermineCyclingRoadResults(framesRecord, VarGet(VAR_CYCLING_ROAD_RECORD_COLLISIONS)); return TRUE; } @@ -212,9 +212,9 @@ void UpdateCyclingRoadState(void) { return; } - if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) + if (VarGet(VAR_CYCLING_CHALLENGE_STATE) == 2 || VarGet(VAR_CYCLING_CHALLENGE_STATE) == 3) { - VarSet(0x40a9, 0); + VarSet(VAR_CYCLING_CHALLENGE_STATE, 0); Overworld_SetSavedMusic(SE_STOP); } } @@ -242,7 +242,7 @@ bool32 CountSSTidalStep(u16 delta) u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) { u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); - switch (*GetVarPointer(VAR_PORTHOLE)) + switch (*GetVarPointer(VAR_PORTHOLE_STATE)) { case 1: case 8: @@ -312,28 +312,23 @@ u8 GetLinkPartnerNames(void) return nLinkPlayers; } -const u8 gUnknown_083F8358[4] = {7, 9, 8, 10}; -const s8 gUnknown_083F835C[4][2] = { - { 0, 1}, - { 1, 0}, - { 0, -1}, - {-1, 0} -}; - void SpawnBerryBlenderLinkPlayerSprites(void) { - u8 unknown_083F8358[4]; - u8 unknown_083F835C[4][2]; + u8 j = 0; + s16 x = 0; + s16 y = 0; + u8 unknown_083F8358[] = {7, 9, 8, 10}; + s8 unknown_083F835C[][2] = { + { 0, 1}, + { 1, 0}, + { 0, -1}, + {-1, 0} + }; u8 myLinkPlayerNumber; u8 playerDirectionLowerNybble; u8 rivalAvatarGraphicsId; u8 i; - u8 j = 0; - s16 x = 0; - s16 y = 0; - memcpy(unknown_083F8358, gUnknown_083F8358, sizeof gUnknown_083F8358); - memcpy(unknown_083F835C, gUnknown_083F835C, sizeof gUnknown_083F835C); myLinkPlayerNumber = sub_8008218(); playerDirectionLowerNybble = player_get_direction_lower_nybble(); switch (playerDirectionLowerNybble) @@ -362,7 +357,7 @@ void SpawnBerryBlenderLinkPlayerSprites(void) if (myLinkPlayerNumber != i) { rivalAvatarGraphicsId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gLinkPlayers[i].gender); - SpawnSpecialFieldObjectParametrized(rivalAvatarGraphicsId, unknown_083F8358[j], 0xf0 - i, (s8)unknown_083F835C[j][0] + x + 7, (s8)unknown_083F835C[j][1] + y + 7, 0); + SpawnSpecialFieldObjectParametrized(rivalAvatarGraphicsId, unknown_083F8358[j], 0xf0 - i, unknown_083F835C[j][0] + x + 7, unknown_083F835C[j][1] + y + 7, 0); j++; if (j == 4) { @@ -693,7 +688,7 @@ void GetRivalSonDaughterString(void) } } -u8 sub_810E300(void) +u8 GetBattleOutcome(void) { return gBattleOutcome; } @@ -963,11 +958,11 @@ void EndLotteryCornerComputerEffect(void) } static void sub_810E874(void); -void sub_810E944(void); +void DisplayCurrentElevatorFloor(void); void sub_810E984(u8); bool8 sub_810EAC8(u8, u8); void sub_810EB90(u8, u8); -void sub_810EBEC(void); +void ShakeScreenInElevator(void); void sub_810EC34(u8); void sub_810EC9C(u8); void sub_810ECB0(void); @@ -1079,11 +1074,11 @@ static void sub_810E874(void) { MenuPrint(gUnknown_083F8380[gUnknown_03000760[i].var0], 1, 2 * i + 1); } - sub_810E944(); + DisplayCurrentElevatorFloor(); CreateTask(sub_810E984, 8); } -void sub_810E944(void) +void DisplayCurrentElevatorFloor(void) { MenuDrawTextWindow(20, 0, 29, 5); sub_8072BD8(gOtherText_NowOn, 21, 1, 64); @@ -1121,7 +1116,7 @@ void sub_810E984(u8 taskId) { gSpecialVar_Result = 1; gSpecialVar_0x8005 = gUnknown_0203925B; - sub_810EBEC(); + ShakeScreenInElevator(); FieldObjectTurnByLocalIdAndMap(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH); sub_810EEDC(); MenuZeroFillScreen(); @@ -1305,7 +1300,7 @@ void sub_810EB90(u8 newPos, u8 maxItems) } } -void sub_810EBEC(void) +void ShakeScreenInElevator(void) { u8 taskId = CreateTask(sub_810EC34, 9); gTasks[taskId].data[0] = 1; @@ -1784,12 +1779,12 @@ void GetSecretBaseNearbyMapName(void) GetMapSectionName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); } -u16 sub_810F404(void) +u16 GetBestBattleTowerStreak(void) { return GetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK); } -void sub_810F414(void) +void BufferEReaderTrainerName(void) { SetEReaderTrainerName(gStringVar1); } @@ -1798,7 +1793,7 @@ const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; const u8 gUnknown_083F83EC[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; const u8 gUnknown_083F83F8[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; -u8 sub_810F424(void) +u8 GetSlotMachineId(void) { u32 v0 = gSaveBlock1.easyChatPairs[0].unk0_0 + gSaveBlock1.easyChatPairs[0].unk2 + gUnknown_083F83E0[gSpecialVar_0x8004]; if (GetPriceReduction(2)) @@ -1808,10 +1803,10 @@ u8 sub_810F424(void) return gUnknown_083F83EC[v0 % 12]; } -bool8 sub_810F488(void) +bool8 FoundAbandonedShipRoom1Key(void) { u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x277; + u16 flag = FLAG_HIDDEN_ITEM_1F; *specVar = flag; if (!FlagGet(flag)) { @@ -1820,10 +1815,10 @@ bool8 sub_810F488(void) return TRUE; } -bool8 sub_810F4B0(void) +bool8 FoundAbandonedShipRoom2Key(void) { u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x278; + u16 flag = FLAG_HIDDEN_ITEM_20; *specVar = flag; if (!FlagGet(flag)) { @@ -1832,10 +1827,10 @@ bool8 sub_810F4B0(void) return TRUE; } -bool8 sub_810F4D4(void) +bool8 FoundAbandonedShipRoom4Key(void) { u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x279; + u16 flag = FLAG_HIDDEN_ITEM_21; *specVar = flag; if (!FlagGet(flag)) { @@ -1844,10 +1839,10 @@ bool8 sub_810F4D4(void) return TRUE; } -bool8 sub_810F4FC(void) +bool8 FoundAbandonedShipRoom6Key(void) { u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x27a; + u16 flag = FLAG_HIDDEN_ITEM_22; *specVar = flag; if (!FlagGet(flag)) { @@ -1879,18 +1874,18 @@ bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void) return FALSE; } -u8 sub_810F5BC(void) +u8 TryUpdateRusturfTunnelState(void) { if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) && gSaveBlock1.location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(RUSTURF_TUNNEL)) { if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1)) { - VarSet(VAR_0x409a, 4); + VarSet(VAR_RUSTURF_TUNNEL_STATE, 4); return TRUE; } else if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2)) { - VarSet(VAR_0x409a, 5); + VarSet(VAR_RUSTURF_TUNNEL_STATE, 5); return TRUE; } } @@ -1919,7 +1914,7 @@ void PutZigzagoonInPlayerParty(void) bool8 IsStarterInParty(void) { u8 i; - u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE)); + u16 starter = GetStarterPokemon(VarGet(VAR_STARTER_MON)); u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { @@ -2000,9 +1995,9 @@ static void sub_810F814(u8 taskId) EnableBothScriptContexts(); } -bool8 sub_810F828(void) +bool8 FoundBlackGlasses(void) { - return FlagGet(FLAG_UNKNOWN_2B8); + return FlagGet(FLAG_HIDDEN_ITEM_BLACK_GLASSES); } void SetRoute119Weather(void) @@ -2045,10 +2040,10 @@ void sub_810F8FC(void) sub_805ADDC(6); } -u16 sub_810F908(void) +u16 GetDaysUntilPacifidlogTMAvailable(void) { - u16 var40c2 = VarGet(VAR_0x40C2); - if (gLocalTime.days - var40c2 >= 7) + u16 tmReceivedDay = VarGet(VAR_PACIFIDLOG_TM_RECEIVED_DAY); + if (gLocalTime.days - tmReceivedDay >= 7) { return 0; } @@ -2056,16 +2051,16 @@ u16 sub_810F908(void) { return 8; } - return 7 - (gLocalTime.days - var40c2); + return 7 - (gLocalTime.days - tmReceivedDay); } -u16 sub_810F950(void) +u16 SetPacifidlogTMReceivedDay(void) { - VarSet(VAR_0x40C2, gLocalTime.days); + VarSet(VAR_PACIFIDLOG_TM_RECEIVED_DAY, gLocalTime.days); return gLocalTime.days; } -bool8 sub_810F96C(void) +bool8 MonOTNameMatchesPlayer(void) { GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_OT_NAME, gStringVar1); if (!StringCompareWithoutExtCtrlCodes(gSaveBlock2.playerName, gStringVar1)) @@ -2075,7 +2070,7 @@ bool8 sub_810F96C(void) return TRUE; } -void sub_810F9AC(void) +void BufferLottoTicketNumber(void) { if (gSpecialVar_Result >= 10000) { @@ -2114,64 +2109,64 @@ const u8 gUnknown_083F8408[] = {8, 9, 10, 11, 12, 13, 14, 15}; const u8 gUnknown_083F8410[] = {8, 13, 14, 11, 10, 12, 15, 9}; bool8 sub_810FF30(void); -void sub_810FCE8(void); +void UpdateMovedLilycoveFanClubMembers(void); void sub_810FF48(void); void sub_810FD80(void); -u16 sub_810FCB0(void); +u16 GetNumMovedLilycoveFanClubMembers(void); int sub_810FB9C(void); void ResetFanClub(void) { - gSaveBlock1.vars[0x41] = 0; - gSaveBlock1.vars[0x42] = 0; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] = 0; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = 0; } void sub_810FA74(void) { if (sub_810FF30()) { - sub_810FCE8(); - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; + UpdateMovedLilycoveFanClubMembers(); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2.playTimeHours; } } void sub_810FAA0(void) { - if (!((gSaveBlock1.vars[0x41] >> 7) & 1)) + if (!((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> 7) & 1)) { sub_810FF48(); sub_810FD80(); - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; - FlagClear(0x315); - FlagClear(0x316); - FlagClear(0x317); - FlagClear(0x318); - VarSet(VAR_0x4095, 1); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2.playTimeHours; + FlagClear(FLAG_HIDE_FANCLUB_OLD_LADY); + FlagClear(FLAG_HIDE_FANCLUB_BOY); + FlagClear(FLAG_HIDE_FANCLUB_LITTLE_BOY); + FlagClear(FLAG_HIDE_FANCLUB_LADY); + VarSet(VAR_LILYCOVE_FAN_CLUB_STATE, 1); } } u8 sub_810FB10(u8 a0) { - if (VarGet(VAR_0x4095) == 2) + if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2) { - if ((gSaveBlock1.vars[0x41] & 0x7f) + gUnknown_083F8404[a0] >= 20) + if ((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0x7f) + gUnknown_083F8404[a0] >= 20) { - if (sub_810FCB0() < 3) + if (GetNumMovedLilycoveFanClubMembers() < 3) { sub_810FB9C(); - gSaveBlock1.vars[0x41] &= 0xff80; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] &= 0xff80; } else { - gSaveBlock1.vars[0x41] = (gSaveBlock1.vars[0x41] & 0xff80) | 20; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] = (gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0xff80) | 20; } } else { - gSaveBlock1.vars[0x41] += gUnknown_083F8404[a0]; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] += gUnknown_083F8404[a0]; } } - return gSaveBlock1.vars[0x41] & 0x7f; + return gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0x7f; } int sub_810FB9C(void) @@ -2180,17 +2175,17 @@ int sub_810FB9C(void) int retval = 0; for (i=0; i<8; i++) { - if (!((gSaveBlock1.vars[0x41] >> gUnknown_083F8408[i]) & 0x01)) + if (!((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_083F8408[i]) & 0x01)) { retval = i; if (Random() & 1) { - gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[i]); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= (1 << gUnknown_083F8408[i]); return retval; } } } - gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[retval]); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= (1 << gUnknown_083F8408[retval]); return retval; } @@ -2198,85 +2193,86 @@ int sub_810FC18(void) { u8 i; int retval = 0; - if (sub_810FCB0() == TRUE) + if (GetNumMovedLilycoveFanClubMembers() == 1) { return 0; } for (i=0; i<8; i++) { - if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[i]) & 1) + if ((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_083F8410[i]) & 1) { retval = i; if (Random() & 1) { - gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[i]); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= (1 << gUnknown_083F8410[i]); return retval; } } } - if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[retval]) & 1) + if ((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_083F8410[retval]) & 1) { - gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[retval]); + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= (1 << gUnknown_083F8410[retval]); } return retval; } -u16 sub_810FCB0(void) +u16 GetNumMovedLilycoveFanClubMembers(void) { u8 i; u8 retval = 0; - for (i=0; i<8; i++) + for (i = 0; i < 8; i++) { - if ((gSaveBlock1.vars[0x41] >> (i + 8)) & 1) + if ((gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> (i + 8)) & 1) { - retval ++; + retval++; } } + return retval; } -void sub_810FCE8(void) +void UpdateMovedLilycoveFanClubMembers(void) { u8 i = 0; if (gSaveBlock2.playTimeHours < 999) { while (1) { - if (sub_810FCB0() < 5) + if (GetNumMovedLilycoveFanClubMembers() < 5) { - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2.playTimeHours; break; } else if (i == 8) { break; } - else if (gSaveBlock2.playTimeHours - gSaveBlock1.vars[0x42] < 12) + else if (gSaveBlock2.playTimeHours - gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] < 12) { return; } sub_810FC18(); - gSaveBlock1.vars[0x42] += 12; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] += 12; i++; } } } -bool8 sub_810FD60(void) +bool8 ShouldMoveLilycoveFanClubMember(void) { - return (gSaveBlock1.vars[0x41] >> gSpecialVar_0x8004) & 0x01; + return (gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gSpecialVar_0x8004) & 0x01; } void sub_810FD80(void) { - gSaveBlock1.vars[0x41] |= 0x2000; - gSaveBlock1.vars[0x41] |= 0x100; - gSaveBlock1.vars[0x41] |= 0x400; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x2000; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x100; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x400; } void sub_810FE1C(void *, u8, u8); -void sub_810FDAC(void) +void BufferStreakTrainerText(void) { u8 a = 0; u8 b = 0; @@ -2355,7 +2351,7 @@ void sub_810FE1C(void *linkRecords, u8 a, u8 b) void sub_810FEFC(void) { - if (VarGet(VAR_0x4095) == 2) + if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2) { sub_810FA74(); if (gBattleOutcome == 1) @@ -2371,12 +2367,12 @@ void sub_810FEFC(void) bool8 sub_810FF30(void) { - return (gSaveBlock1.vars[0x41] >> 7) & 0x01; + return (gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> 7) & 0x01; } void sub_810FF48(void) { - gSaveBlock1.vars[0x41] |= 0x80; + gSaveBlock1.vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x80; } u8 sub_810FF60(void) diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index 108ba64ba..ce5fc6c0e 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -554,20 +554,20 @@ const u16 gUnknown_083763E4[] = { 0, 0, 0, - VAR_0x4001, - VAR_0x4002, - VAR_0x4003, - VAR_0x4004, + VAR_TEMP_1, + VAR_TEMP_2, + VAR_TEMP_3, + VAR_TEMP_4, 0, 0, - VAR_0x4005, - VAR_0x4006, - VAR_0x4007, + VAR_TEMP_5, + VAR_TEMP_6, + VAR_TEMP_7, 0, 0, - VAR_0x4008, - VAR_0x4009, - VAR_0x400A, + VAR_TEMP_8, + VAR_TEMP_9, + VAR_TEMP_A, 0, 0, 0, @@ -608,14 +608,14 @@ bool32 sub_8069D34(s16 x, s16 y) return FALSE; } -void sub_8069D78(void) +void SetSootopolisGymCrackedIceMetatiles(void) { s32 x, y; s32 width = gMapHeader.mapData->width; s32 height = gMapHeader.mapData->height; - for (x=0; x<width; x++) + for (x = 0; x < width; x++) { - for (y=0; y<height; y++) + for (y = 0; y < height; y++) { if (sub_8069D34(x, y) == TRUE) { diff --git a/src/field/field_weather.c b/src/field/field_weather.c index ff26b45bf..c954242a1 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -5,6 +5,7 @@ #include "palette.h" #include "random.h" #include "script.h" +#include "constants/weather.h" #include "constants/songs.h" #include "sound.h" #include "sprite.h" @@ -398,31 +399,31 @@ void sub_807CCAC(void) case WEATHER_RAIN_MED: case WEATHER_RAIN_HEAVY: case WEATHER_SNOW: - case 11: + case WEATHER_DARK: if (sub_807CDC4() == 0) { gWeatherPtr->unknown_6C0 = 3; gWeatherPtr->unknown_6C6 = 3; } break; - case 12: + case WEATHER_DROUGHT: if (sub_807CE24() == 0) { gWeatherPtr->unknown_6C0 = -6; gWeatherPtr->unknown_6C6 = 3; } break; - case 6: + case WEATHER_FOG_1: if (sub_807CE7C() == 0) { gWeatherPtr->unknown_6C0 = 0; gWeatherPtr->unknown_6C6 = 3; } break; - case 7: - case 8: - case 9: - case 10: + case WEATHER_ASH: + case WEATHER_SANDSTORM: + case WEATHER_FOG_2: + case WEATHER_FOG_3: default: if (!gPaletteFade.active) { @@ -808,9 +809,9 @@ void fade_screen(u8 a, u8 delay) case WEATHER_RAIN_MED: case WEATHER_RAIN_HEAVY: case WEATHER_SNOW: - case 6: - case 11: - case 12: + case WEATHER_FOG_1: + case WEATHER_DARK: + case WEATHER_DROUGHT: r2 = 1; break; default: @@ -855,7 +856,7 @@ void sub_807D78C(u8 a) case 1: if (gWeatherPtr->unknown_6CA != 0) { - if (gWeatherPtr->currWeather == 6) + if (gWeatherPtr->currWeather == WEATHER_FOG_1) sub_807D540(r4); r4 *= 16; for (i = 0; i < 16; i++) @@ -868,7 +869,7 @@ void sub_807D78C(u8 a) BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor); break; default: - if (gWeatherPtr->currWeather != 6) + if (gWeatherPtr->currWeather != WEATHER_FOG_1) { sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0); } diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c index 31eda4393..5a59d6c2a 100644 --- a/src/field/field_weather_effects.c +++ b/src/field/field_weather_effects.c @@ -4,6 +4,7 @@ #include "overworld.h" #include "random.h" #include "script.h" +#include "constants/weather.h" #include "constants/songs.h" #include "sound.h" #include "sprite.h" diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c index 8d71a4fb9..394c4bc56 100644 --- a/src/field/fldeff_secret_base_pc.c +++ b/src/field/fldeff_secret_base_pc.c @@ -60,7 +60,7 @@ void DoSecretBasePCTurnOffEffect(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); PlaySE(SE_PC_OFF); - if (!VarGet(VAR_0x4054)) + if (!VarGet(VAR_CURRENT_SECRET_BASE)) MapGridSetMetatileIdAt(x, y, 3616); else MapGridSetMetatileIdAt(x, y, 3617); diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 4e283ffe9..e9b8b24d3 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -153,7 +153,7 @@ static const u8 *sPopupMenuActionList; // common void (*gFieldItemUseCallback)(u8) = NULL; -extern u16 gUnknown_030041B4; +extern u16 gBattle_BG1_Y; extern struct PocketScrollState gBagPocketScrollStates[]; extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; @@ -4499,7 +4499,7 @@ u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) static void SpriteCB_BerrySprite(struct Sprite *sprite) { - sprite->pos2.y = -gUnknown_030041B4; + sprite->pos2.y = -gBattle_BG1_Y; } void sub_80A7DD4(void) diff --git a/src/field/item_use.c b/src/field/item_use.c index 37cd8ba78..e1fdddce0 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -14,6 +14,7 @@ #include "fieldmap.h" #include "item.h" #include "item_menu.h" +#include "constants/flags.h" #include "constants/items.h" #include "mail.h" #include "main.h" @@ -328,7 +329,7 @@ bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId) for (i = 0; i < events->bgEventCount; i++) { - if ((events -> bgEvents[i].kind == 7) && !FlagGet(events -> bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 600)) + if ((events -> bgEvents[i].kind == 7) && !FlagGet(events -> bgEvents[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) { // do a distance lookup of each item so long as the index remains less than the objects on the current map. distanceX = (u16)events -> bgEvents[i].x + 7; @@ -360,7 +361,7 @@ bool8 HiddenItemAtPos(struct MapEvents *events, s16 x, s16 y) { if (bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed? { - if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 600)) + if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) return TRUE; else return FALSE; @@ -921,7 +922,7 @@ static void PrepareItemUseMessage(void) void ItemUseOutOfBattle_Repel(u8 var) { - if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE) + if (VarGet(VAR_REPEL_STEP_COUNT) == 0) { VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); PrepareItemUseMessage(); diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index 83febc56e..03de26054 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -30,7 +30,7 @@ void ResetLotteryCorner(void) u16 rand = Random(); SetLotteryNumber((Random() << 16) | rand); - VarSet(VAR_POKELOT_PRIZE, 0); + VarSet(VAR_LOTTERY_PRIZE, 0); } void SetRandomLotteryNumber(u16 i) @@ -152,19 +152,19 @@ static u8 GetMatchingDigits(u16 winNumber, u16 otId) // lottery numbers go from 0 to 99999, not 65535 (0xFFFF). interestingly enough, the function that calls GetLotteryNumber shifts to u16, so it cant be anything above 65535 anyway. void SetLotteryNumber(u32 lotteryNum) { - u16 lowNum = lotteryNum >> 16; - u16 highNum = lotteryNum; + u16 high = lotteryNum >> 16; + u16 low = lotteryNum; - VarSet(VAR_POKELOT_RND1, highNum); - VarSet(VAR_POKELOT_RND2, lowNum); + VarSet(VAR_LOTTERY_RND_L, low); + VarSet(VAR_LOTTERY_RND_H, high); } u32 GetLotteryNumber(void) { - u16 highNum = VarGet(VAR_POKELOT_RND1); - u16 lowNum = VarGet(VAR_POKELOT_RND2); + u16 low = VarGet(VAR_LOTTERY_RND_L); + u16 high = VarGet(VAR_LOTTERY_RND_H); - return (lowNum << 16) | highNum; + return (high << 16) | low; } // interestingly, this may have been the original lottery number set function, but GF tried to change it to 32-bit later but didnt finish changing all calls as one GetLotteryNumber still shifts to u16. diff --git a/src/field/map_name_popup.c b/src/field/map_name_popup.c index 01105d0db..2e2dfc72e 100644 --- a/src/field/map_name_popup.c +++ b/src/field/map_name_popup.c @@ -19,7 +19,7 @@ bool8 unref_sub_80A2F44(void) void ShowMapNamePopup(void) { - if (FlagGet(0x4000) != TRUE) + if (FlagGet(FLAG_SPECIAL_FLAG_0) != TRUE) { if (!FuncIsActiveTask(Task_MapNamePopup)) { diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index 30f6f5233..4db513f65 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -10,6 +10,7 @@ #include "overworld.h" #include "random.h" #include "script.h" +#include "constants/map_objects.h" #include "constants/songs.h" #include "sound.h" #include "string_util.h" @@ -974,7 +975,7 @@ static void Task_BardSong(u8 taskId) void sub_80F83D0(void) { - VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); + VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_BARD + GetCurrentMauvilleOldMan()); } struct Story diff --git a/src/field/money.c b/src/field/money.c index f277ac905..d0f0ab1f6 100644 --- a/src/field/money.c +++ b/src/field/money.c @@ -291,12 +291,12 @@ void CloseMoneyWindow(u8 x, u8 y) MenuZeroFillWindowRect(x, y, x + 13, y + 3); } -bool8 sub_80B7CE8(void) +bool8 HasEnoughMoneyFor(void) { return IsEnoughMoney(gSaveBlock1.money, gSpecialVar_0x8005); } -void sub_80B7D0C(void) +void PayMoneyFor(void) { RemoveMoney(&gSaveBlock1.money, gSpecialVar_0x8005); } diff --git a/src/field/overworld.c b/src/field/overworld.c index 834a2afa4..e239daec7 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -287,7 +287,7 @@ void LoadMapObjTemplatesFromHeader(void) { // Clear map object templates CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates)); - + // Copy map header events to save block CpuCopy32(gMapHeader.events->mapObjects, gSaveBlock1.mapObjectTemplates, @@ -600,7 +600,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); prev_quest_postbuffer_cursor_backup_reset(); - sub_8082BD0(mapGroup, mapNum); + TryUpdateRandomTrainerRematches(mapGroup, mapNum); DoTimeBasedEvents(); SetSav1WeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); @@ -635,7 +635,7 @@ void sub_8053994(u32 a1) ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); prev_quest_postbuffer_cursor_backup_reset(); - sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + TryUpdateRandomTrainerRematches(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); if (a1 != 1) DoTimeBasedEvents(); SetSav1WeatherFromCurrMapHeader(); @@ -816,7 +816,7 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) { - if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) + if (VarGet(VAR_WEATHER_INSTITUTE_STATE)) return FALSE; if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F)) return FALSE; @@ -981,7 +981,7 @@ static void PlayAmbientCry(void) s16 x, y; s8 pan; s8 volume; - + PlayerGetDestCoords(&x, &y); if (sIsAmbientCryWaterMon == TRUE && !MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) @@ -1158,7 +1158,7 @@ void OverworldBasic(void) sub_8072EDC(); } -// This CB2 is used when starting +// This CB2 is used when starting void CB2_OverworldBasic(void) { OverworldBasic(); @@ -1329,7 +1329,7 @@ void sub_805465C(void) void sub_805469C(void) { FieldClearVBlankHBlankCallbacks(); - gFieldCallback = atk17_seteffectuser; + gFieldCallback = atk17_seteffectsecondary; c2_exit_to_overworld_2_switch(); } @@ -2430,7 +2430,7 @@ void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) mapObj->active = 1; mapObj->mapobj_bit_1 = a4; - mapObj->mapobj_unk_19 = 2; + mapObj->range.as_byte = 2; mapObj->spriteId = 64; InitLinkPlayerMapObjectPos(mapObj, x, y); @@ -2453,7 +2453,7 @@ void unref_sub_8055A6C(u8 linkPlayerId, u8 a2) { u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; - mapObj->mapobj_unk_19 = a2; + mapObj->range.as_byte = a2; } } @@ -2487,7 +2487,7 @@ u8 sub_8055B30(u8 linkPlayerId) { u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->mapobj_unk_19; + return mapObj->range.as_byte; } u8 sub_8055B50(u8 linkPlayerId) @@ -2559,10 +2559,10 @@ static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapOb { s16 x, y; - mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); - FieldObjectMoveDestCoords(mapObj, mapObj->mapobj_unk_19, &x, &y); + mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte); + FieldObjectMoveDestCoords(mapObj, mapObj->range.as_byte, &x, &y); - if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->mapobj_unk_19, x, y)) + if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->range.as_byte, x, y)) { return 0; } @@ -2577,7 +2577,7 @@ static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapOb static u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { - mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); + mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte); return 0; } @@ -2590,7 +2590,7 @@ static void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct Map { mapObj->mapobj_unk_21--; linkPlayerMapObj->mode = 1; - MoveCoords(mapObj->mapobj_unk_19, &mapObj->coords1.x, &mapObj->coords1.y); + MoveCoords(mapObj->range.as_byte, &mapObj->coords1.x, &mapObj->coords1.y); if (!mapObj->mapobj_unk_21) { npc_coords_shift_still(mapObj); @@ -2662,9 +2662,9 @@ void SpriteCB_LinkPlayer(struct Sprite *sprite) SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(mapObj->elevation); if (!linkPlayerMapObj->mode) - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->mapobj_unk_19)); + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->range.as_byte)); else - StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->mapobj_unk_19)); + StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->range.as_byte)); sub_806487C(sprite, 0); if (mapObj->mapobj_bit_2) { diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 089f93f9e..9c1150515 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -436,34 +436,6 @@ static const struct PartyMenuHandlersStruct PartyMenuHandlers[] = { {HandleMoveTutorPartyMenu, SetupMoveTutorPartyMenu, 0}, // PARTY_MENU_TYPE_MOVE_TUTOR }; -static const u16 gUnknown_08376CD4[] = { - 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, -}; - -static const u16 gUnknown_08376CEC[] = { - 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x2F, - 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, -}; - -static const u8 *const StatNames[] = { - gOtherText_HP, - gOtherText_Attack, - gOtherText_Defense, - gOtherText_SpAtk, - gOtherText_SpDef, - gOtherText_Speed, -}; - -static const u8 StatDataTypes[] = { - MON_DATA_MAX_HP, - MON_DATA_ATK, - MON_DATA_DEF, - MON_DATA_SPATK, - MON_DATA_SPDEF, - MON_DATA_SPEED, -}; - struct Unk201C000 { /*0x00*/ struct Pokemon *pokemon; @@ -1227,12 +1199,11 @@ void sub_806BB3C(s16 a, u16 b) void sub_806BB9C(u8 a) { u8 i; - u16 *vramPtr; - const u16 arr[12]; - - memcpy(&arr, gUnknown_08376CD4, sizeof gUnknown_08376CD4); - - vramPtr = (u16 *)(BG_VRAM + 0x3C30); + u16 arr[12] = { + 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + }; + u16 *vramPtr = (u16 *)(BG_VRAM + 0x3C30); for (i = 0; i < PARTY_SIZE; i++) { vramPtr[i] = arr[i] + (a << 12); @@ -1243,12 +1214,11 @@ void sub_806BB9C(u8 a) void sub_806BBEC(u8 a) { u8 i; - u16 *vramPtr; - const u16 arr[12]; - - memcpy(&arr, gUnknown_08376CEC, sizeof gUnknown_08376CEC); - - vramPtr = (u16 *)(BG_VRAM + 0x3CB0); + u16 arr[12] = { + 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x2F, + 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + }; + u16 *vramPtr = (u16 *)(BG_VRAM + 0x3CB0); for (i = 0; i < PARTY_SIZE; i++) { vramPtr[i] = arr[i] + (a << 12); @@ -4910,6 +4880,23 @@ void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) gMain.newKeys = 0; } +static const u8 *const StatNames[] = { + gOtherText_HP, + gOtherText_Attack, + gOtherText_Defense, + gOtherText_SpAtk, + gOtherText_SpDef, + gOtherText_Speed, +}; + +static const u8 StatDataTypes[] = { + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SPATK, + MON_DATA_SPDEF, + MON_DATA_SPEED, +}; void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) { u8 i; diff --git a/src/field/player_pc.c b/src/field/player_pc.c index d92d13ce4..4fef09386 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -171,15 +171,6 @@ static const u8 gNonSelectedItemQuantityFormatText[] = _("{STR_VAR_1}"); static const u8 gSelectedItemQuantityFormatText[] = _("{COLOR RED}{STR_VAR_1}"); static const u8 gUnknown_08406330[] = _("{CLEAR_TO 32}"); -static const u16 gUnknown_08406334[3] = -{ - 0x5294, - 0x6B5A, - 0x7FFF -}; - -static const u8 gHighlightedMoveToBagFormatText[] = _("{COLOR RED}{STR_VAR_1}"); - extern u8 *gUnknown_02039314; extern struct MenuAction gUnknown_08406298[]; @@ -205,8 +196,8 @@ void NewGameInitPCItems(void) u8 i; // because Game Freak don't know how to use a struct or a 2d array - for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, ITEM_ID) && NEW_GAME_PC_ITEMS(i, QUANTITY) && - AddPCItem(NEW_GAME_PC_ITEMS(i, ITEM_ID), NEW_GAME_PC_ITEMS(i, QUANTITY)) == TRUE; i++) + for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) && + AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++) ; } @@ -1007,9 +998,12 @@ static void ItemStorage_GoBackToItemPCMenu(u8 taskId, u8 var) static void ItemStorage_LoadPalette(void) { - u16 arr[3]; + u16 arr[] = { + 0x5294, + 0x6B5A, + 0x7FFF + }; - memcpy(arr, gUnknown_08406334, sizeof(arr)); LoadPalette(&arr[2], 0xDF, 2); LoadPalette(&arr[1], 0xD1, 2); LoadPalette(&arr[0], 0xD8, 2); @@ -1261,6 +1255,8 @@ static void Mailbox_ReturnToFieldFromReadMail(void) SetMainCallback2(c2_exit_to_overworld_2_switch); } +static const u8 gHighlightedMoveToBagFormatText[] = _("{COLOR RED}{STR_VAR_1}"); + static void Mailbox_MoveToBag(u8 taskId) { HandleDestroyMenuCursors(); diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 4a904fbb1..640d4731f 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -426,7 +426,7 @@ void sub_810BADC(void) SetMainCallback2(sub_810B96C); } -void sub_810BAF4(void) +void OpenPokeblockCaseOnFeeder(void) { sub_810BA7C(3); SetMainCallback2(sub_810B96C); @@ -1041,7 +1041,7 @@ u8 sub_810C9E8(struct Pokeblock *pokeblock) return feel; } -s8 sub_810CA00(void) +s8 GetFirstFreePokeblockSlot(void) { u8 i; for (i=0; i<ARRAY_COUNT(gSaveBlock1.pokeblocks); i++) @@ -1056,7 +1056,7 @@ s8 sub_810CA00(void) bool8 sub_810CA34(struct Pokeblock *pokeblock) { - s8 idx = sub_810CA00(); + s8 idx = GetFirstFreePokeblockSlot(); if (idx == -1) { return FALSE; diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index d5fc56e8d..05a909e81 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -1722,7 +1722,7 @@ bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); - trainer_flag_set(index); + SetTrainerFlag(index); return FALSE; } @@ -1730,7 +1730,7 @@ bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); - trainer_flag_clear(index); + ClearTrainerFlag(index); return FALSE; } diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 7589ab1e3..2e4138a3b 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -180,7 +180,7 @@ void sub_80BB5E4(void) if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) continue; gSpecialVar_Result = 1; - VarSet(VAR_0x4054, i); + VarSet(VAR_CURRENT_SECRET_BASE, i); break; } } @@ -284,7 +284,7 @@ void sub_80BB8CC(void) for (idx=0; idx<4; idx++) { gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; } - VarSet(VAR_0x4054, 0); + VarSet(VAR_CURRENT_SECRET_BASE, 0); nameLength = sub_80BB8A8(gSaveBlock2.playerName); memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH); StringCopyN(gSaveBlock1.secretBases[0].playerName, gSaveBlock2.playerName, nameLength); @@ -333,7 +333,7 @@ void sub_80BBA48(u8 taskid) } break; case 2: - curbaseid = VarGet(VAR_0x4054); + curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) gSaveBlock1.secretBases[curbaseid].sbr_field_10++; sub_80BBA14(); @@ -412,7 +412,7 @@ void sub_80BBCCC(u8 flagIn) u16 curBaseId; u16 x, y; if (CurrentMapIsSecretBase()) { - curBaseId = VarGet(VAR_0x4054); + curBaseId = VarGet(VAR_CURRENT_SECRET_BASE); for (x=0; x<16; x++) { if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); @@ -437,7 +437,7 @@ void sub_80BBDD0(void) u8 metatile; u8 permission; u8 ndecor; - u16 curBase = VarGet(VAR_0x4054); + u16 curBase = VarGet(VAR_CURRENT_SECRET_BASE); if (!CurrentMapIsSecretBase()) { roomdecor = gSaveBlock1.playerRoomDecor; roomdecorpos = gSaveBlock1.playerRoomDecorPos; @@ -478,8 +478,8 @@ void sub_80BBDD0(void) void sub_80BBFA4(void) { - int curBase = VarGet(VAR_0x4054); - VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); + int curBase = VarGet(VAR_CURRENT_SECRET_BASE); + VarSet(VAR_OBJ_GFX_ID_F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); } void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events) @@ -571,12 +571,12 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 } u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId; - return sub_80BC190(dest, VarGet(VAR_0x4054)); + gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].secretBaseId; + return sub_80BC190(dest, VarGet(VAR_CURRENT_SECRET_BASE)); } -void sub_80BC224(void) { - u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].playerName; +void BufferSecretBaseOwnerName(void) { + u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_CURRENT_SECRET_BASE)].playerName; u8 *var1 = gStringVar1; u8 var2 = sub_80BB8A8(var0); u8 *var3 = StringCopyN(var1, var0, var2); @@ -830,7 +830,7 @@ void sub_80BC474(void) } } -void sub_80BC50C(void) +void MoveSecretBase(void) { u16 backupValue; sub_80BC474(); @@ -1173,7 +1173,7 @@ void sub_80BCBF8(u8 taskId) void sub_80BCC54(u8 taskId) { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); BuyMenuFreeMemory(); DestroyVerticalScrollIndicator(0); @@ -1197,9 +1197,9 @@ u8 sub_80BCCA4(u8 secretBaseIndex) + gSaveBlock1.secretBases[secretBaseIndex].gender * 5; } -const u8 *sub_80BCCE8(void) +const u8 *GetSecretBaseTrainerLoseText(void) { - u8 param = sub_80BCCA4(VarGet(VAR_0x4054)); + u8 param = sub_80BCCA4(VarGet(VAR_CURRENT_SECRET_BASE)); if (param == 0) return UnknownString_81A1BB2; if (param == 1) return UnknownString_81A1F67; if (param == 2) return UnknownString_81A2254; @@ -1229,7 +1229,7 @@ void unref_sub_80BCD7C(u8 secretBaseIndex) void sub_80BCE1C(void) { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); sub_810FB10(1); CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]); @@ -1237,12 +1237,12 @@ void sub_80BCE1C(void) void sub_80BCE4C() { - gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result; + gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result; } void sub_80BCE90() { - u16 curBaseIndex = VarGet(VAR_0x4054); + u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); if (!FlagGet(FLAG_DAILY_UNKNOWN_8C2)) { diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 89ec68b0a..a524790b4 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -1,49 +1,2869 @@ #include "global.h" +#include "constants/songs.h" +#include "strings2.h" +#include "overworld.h" +#include "menu_cursor.h" +#include "field_effect.h" +#include "random.h" +#include "sound.h" +#include "main.h" #include "slot_machine.h" #include "decompress.h" +#include "trig.h" +#include "graphics.h" #include "palette.h" -#include "task.h" +#include "util.h" +#include "text.h" +#include "menu.h" #include "ewram.h" -struct UnkStruct2000000 { - /*0x00*/ u8 filler00[61]; - /*0x3D*/ u8 unk3D; -}; - struct UnkStruct1 { /*0x00*/ u8 unk00; /*0x01*/ u8 unk01; /*0x02*/ s16 unk02; }; -extern struct UnkStruct1 *gUnknown_083ED048[]; -extern const u16 gPalette_83EDE24[]; - -extern const u8 gSlotMachine_Gfx[]; #if ENGLISH #define SLOTMACHINE_GFX_TILES 233 #elif GERMAN #define SLOTMACHINE_GFX_TILES 236 #endif -extern const u16 gUnknown_08E95A18[]; -extern u16 gUnknown_08E95AB8[]; -extern u16 gUnknown_08E95FB8[]; +static void CB2_SlotMachineSetup(void); +static void CB2_SlotMachineLoop(void); +static void PlaySlotMachine_Internal(u8 arg0, MainCallback cb); +static void SlotMachineDummyTask(u8 taskId); +static void SlotMachineSetup_0_0(void); +static void SlotMachineSetup_6_2(void); +static void SlotMachineSetup_1_0(void); +static void SlotMachineSetup_2_0(void); +static void SlotMachineSetup_2_1(void); +static void SlotMachineSetup_0_1(void); +static void SlotMachineSetup_3_0(void); +static void SlotMachineSetup_4_0(void); +static void SlotMachineSetup_5_0(void); +static void SlotMachineSetup_6_0(void); +static void SlotMachineSetup_6_1(void); +static void sub_8101D04(void); +static void sub_8101D24(u8 taskId); +static bool8 sub_8101D5C(struct Task *task); +static bool8 sub_8101D8C(struct Task *task); +static bool8 sub_8101DB0(struct Task *task); +static bool8 sub_8101DF4(struct Task *task); +static bool8 sub_8101E10(struct Task *task); +static bool8 sub_8101E3C(struct Task *task); +static bool8 sub_8101F44(struct Task *task); +static bool8 sub_8101F60(struct Task *task); +static bool8 sub_8101F88(struct Task *task); +static bool8 sub_8101FA4(struct Task *task); +static bool8 sub_8102008(struct Task *task); +static bool8 sub_8102034(struct Task *task); +static bool8 sub_8102058(struct Task *task); +static bool8 sub_8102090(struct Task *task); +static bool8 sub_81020C8(struct Task *task); +static bool8 sub_81021E0(struct Task *task); +static bool8 sub_81021FC(struct Task *task); +static bool8 sub_8102264(struct Task *task); +static bool8 sub_81022A0(struct Task *task); +static bool8 sub_81022CC(struct Task *task); +static bool8 sub_81022F0(struct Task *task); +static bool8 sub_8102318(struct Task *task); +static bool8 sub_8102344(struct Task *task); +static bool8 sub_810239C(struct Task *task); +static bool8 sub_81023B8(struct Task *task); +static bool8 sub_81023E0(struct Task *task); +static bool8 sub_81023FC(struct Task *task); +static bool8 sub_8102424(struct Task *task); +static bool8 sub_8102460(struct Task *task); +static void sub_8102484(void); +static void sub_81024F0(void); +static bool8 sub_8102540(void); +static u8 sub_8102578(void); +static u16 dp15_jump_random_unknown(void); +static u8 sub_81025BC(void); +static void CheckMatch(void); +static void CheckMatch_CenterRow(void); +static void CheckMatch_TopAndBottom(void); +static void CheckMatch_Diagonals(void); +static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3); +static void sub_8102A24(void); +static void sub_8102A64(u8 taskId); +static bool8 sub_8102A44(void); +static bool8 sub_8102A9C(struct Task *task); +static bool8 sub_8102AD0(struct Task *task); +static bool8 sub_8102B80(struct Task *task); +static u8 GetTagOfReelSymbolOnScreenAtPos(u8 x, s16 y); +static void sub_8102DA8(void); +static void sub_8102DEC(u8 a0); +static void sub_8102E1C(u8 a0); +static bool8 sub_8102E40(u8 a0); +static void sub_8102E68(u8 taskId); +static bool8 sub_8102EA0(struct Task *task); +static bool8 sub_8102EA4(struct Task *task); +static bool8 sub_8102EC0(struct Task *task); +static bool8 sub_8102F4C(struct Task *task); +static bool8 sub_8103008(struct Task *task); +static bool8 sub_810305C(void); +static bool8 sub_8103154(u8 a0, u8 a1); +static bool8 sub_81031B4(u8 a0, u8 a1); +static bool8 sub_81032C0(void); +static bool8 sub_81032E8(void); +static bool8 sub_810333C(void); +static bool8 sub_81033DC(void); +static bool8 sub_810341C(u8 a0); +static bool8 sub_810347C(u8 a0); +static void sub_81034F4(void); +static void sub_8103540(void); +static void sub_8103564(void); +static void j5_08111E84(void); +static void sub_8103668(void); +static void sub_810380C(void); +static void sub_8103830(void); +static void sub_8103910(void); +static void sub_8103A78(void); +static void sub_8103C14(u8 a0); +static void sub_8103C48(u8 taskId); +static void sub_8103D50(u8 a0); +static void sub_8103C78(struct Task *task, u8 taskId); +static void sub_8103CAC(struct Task *task, u8 taskId); +static void sub_8103CC8(struct Task *task, u8 taskId); +static void sub_8103D8C(u8 a0); +static void sub_8103DC8(void); +static void sub_8103E04(u8 a0); +static bool8 sub_8103E38(void); +static bool8 sub_8103E7C(void); +static bool8 sub_8103EAC(u8 spriteId); +static void sub_8103EE4(struct Sprite *sprite); +static void sub_8103F70(void); +static bool8 sub_8103FA0(void); +static void sub_8103FE8(u8 taskId); +static void sub_8104048(void); +static void sub_8104064(u8 pikaPower); +static bool8 sub_81040C8(void); +static void sub_81040E8(u8 taskId); +static void nullsub_68(struct Task *task); +static void sub_810411C(struct Task *task); +static void sub_8104144(struct Task *task); +static void sub_81041AC(struct Task *task); +static void sub_810421C(struct Task *task); +static void sub_810423C(u8 pikaPower); +static void sub_810430C(void); +static bool8 sub_810432C(void); +static void sub_810434C(u8 taskId); +static void sub_810437C(struct Task *task); +static void sub_81043EC(struct Task *task); +static void sub_8104468(struct Task *task); +static void sub_8104498(struct Task *task); +static void sub_8104548(struct Task *task); +static void sub_8104598(struct Task *task); +static void sub_81045CC(struct Task *task); +static void sub_810463C(struct Task *task); +static void sub_81046C0(struct Task *task); +static void sub_8104764(struct Task *task); +static void sub_8104794(struct Task *task); +static void sub_81047EC(struct Task *task); +static void sub_8104860(struct Task *task); +static void sub_81048A8(struct Task *task); +static void sub_81048CC(struct Task *task); +static void sub_8104940(struct Task *task); +static void sub_81049C8(struct Task *task); +static void sub_81049F8(struct Task *task); +static void sub_8104A40(s16 a0, s16 a1); +static void sub_8104A88(s16 a0); +static void sub_8104AB8(u8 a0); +static bool8 sub_8104AEC(void); +static void sub_8104B0C(u8 taskId); +static void sub_8104B3C(struct Task *task); +static void sub_8104B60(struct Task *task); +static void sub_8104B80(struct Task *task); +static void sub_8104BC8(struct Task *task); +static void sub_8104BFC(struct Task *task); +static void sub_8104C44(struct Task *task); +static void sub_8104C5C(void); +static void sub_8104CAC(u8 arg0); +static bool8 sub_8104E18(void); +static void nullsub_69(struct Task *task); +static void sub_8104E74(u8 taskId); +static void sub_8104EA8(void); +static void sub_8104F8C(void); +static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3); +static void sub_81050C4(void); +static void sub_8105100(void); +static void sub_810514C(void); +static void sub_81051C0(void); +static void sub_8105284(void); +static void sub_81052EC(void); +static void sub_81053A0(void); +static void sub_810545C(void); +static void sub_81054B8(void); +static void sub_8105524(void); +static void sub_8105554(void); +static void sub_8105578(void); +static void sub_8105688(s16 a0); +static void sub_81056C0(void); +static void sub_81056F0(void); +static void sub_81057E8(s16 a0); +static void sub_8105804(void); +static void sub_8105854(void); +static void sub_81058A0(void); +static void sub_81058C4(void); +static void sub_81059B8(void); +static void sub_81059E8(void); +static bool8 sub_8105ACC(void); +static void sub_8105AEC(void); +static u8 sub_8105B1C(s16 x, s16 y); +static void sub_8105B88(u8 spriteId); +static u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4); +static void sub_81063C0(void); +static void sub_8106404(void); +static void sub_8106448(void); +static void sub_81064B8(void); +static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); +static void sub_81065DC(void); + +static const struct UnkStruct1 *const gUnknown_083ED048[]; +static const u16 gPalette_83EDE24[]; +static const u8 gUnknown_083ECD04[][3]; +static const u8 gUnknown_083ECE3A[]; +static const u16 gUnknown_083ECE42[]; +static const u16 gUnknown_083ECE48[]; + +void PlaySlotMachine(u8 arg0, MainCallback cb) +{ + PlaySlotMachine_Internal(arg0, cb); + SetMainCallback2(CB2_SlotMachineSetup); +} + +static void CB2_SlotMachineSetup(void) +{ + switch (gMain.state) + { + case 0: + SlotMachineSetup_0_0(); + SlotMachineSetup_0_1(); + gMain.state++; + break; + case 1: + SlotMachineSetup_1_0(); + gMain.state++; + break; + case 2: + SlotMachineSetup_2_0(); + SlotMachineSetup_2_1(); + gMain.state++; + break; + case 3: + SlotMachineSetup_3_0(); + gMain.state++; + break; + case 4: + SlotMachineSetup_4_0(); + gMain.state++; + break; + case 5: + SlotMachineSetup_5_0(); + gMain.state++; + break; + case 6: + SlotMachineSetup_6_0(); + SlotMachineSetup_6_1(); + SlotMachineSetup_6_2(); + SetMainCallback2(CB2_SlotMachineLoop); + break; + } +} + +static void CB2_SlotMachineLoop(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void SlotMachine_VBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + REG_WIN0H = eSlotMachine->win0h; + REG_WIN0V = eSlotMachine->win0v; + REG_WININ = eSlotMachine->winIn; + REG_WINOUT = eSlotMachine->winOut; +} + +static void PlaySlotMachine_Internal(u8 arg0, MainCallback cb) +{ + struct Task *task = gTasks + CreateTask(SlotMachineDummyTask, 0xFF); + task->data[0] = arg0; + StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb); +} + +static void sub_81019EC(void) +{ + struct Task *task = gTasks + FindTaskIdByFunc(SlotMachineDummyTask); + eSlotMachine->unk01 = task->data[0]; + LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&eSlotMachine->prevMainCb); +} + +static void SlotMachineDummyTask(u8 taskId) +{ +} + +static void SlotMachineSetup_0_0(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + REG_DISPCNT = 0; +} + +static void SlotMachineSetup_6_2(void) +{ + u16 imeBak; + SetVBlankCallback(SlotMachine_VBlankCallback); + imeBak = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = imeBak; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; +} + +static void SlotMachineSetup_1_0(void) +{ + DmaClearLarge16(3, (u16 *)(BG_VRAM), BG_VRAM_SIZE, 0x1000); +} + +static void SlotMachineSetup_2_0(void) +{ + DmaClear16(3, (u16 *)OAM, OAM_SIZE); +} + +static void SlotMachineSetup_2_1(void) +{ + REG_BG0CNT = 0; + REG_BG1CNT = 0; + REG_BG2CNT = 0; + REG_BG3CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_SCREENBASE(31) | BGCNT_CHARBASE(2); + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(28); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(29); + REG_BG3CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(30); + REG_WININ = 0x3f; + REG_WINOUT = 0x3f; + REG_BLDCNT = BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_OBJ; + REG_BLDALPHA = 0x809; +} + +static const s16 gUnknown_083ECCF8[][2]; + +static void SlotMachineSetup_0_1(void) +{ + u8 i; + + sub_81019EC(); + eSlotMachine->state = 0; + eSlotMachine->pikaPower = 0; + eSlotMachine->unk03 = Random() & 1; + eSlotMachine->unk04 = 0; + eSlotMachine->matchedSymbols = 0; + eSlotMachine->unk0A = 0; + eSlotMachine->unk0B = 0; + eSlotMachine->coins = gSaveBlock1.coins; + eSlotMachine->payout = 0; + eSlotMachine->unk10 = 0; + eSlotMachine->bet = 0; + eSlotMachine->unk18 = 0; + eSlotMachine->unk1A = 8; + eSlotMachine->win0h = 0xf0; + eSlotMachine->win0v = 0xa0; + eSlotMachine->winIn = 0x3f; + eSlotMachine->winOut = 0x3f; + eSlotMachine->backupMapMusic = GetCurrentMapMusic(); + for (i = 0; i < 3; i++) + { + eSlotMachine->unk22[i] = 0; + eSlotMachine->reelPositions[i] = gUnknown_083ECCF8[i][eSlotMachine->unk03] % 21; + eSlotMachine->unk1C[i] = 0x1f8 - eSlotMachine->reelPositions[i] * 24; + eSlotMachine->unk1C[i] %= 0x1f8; + } +} + +static void SlotMachineSetup_3_0(void) +{ + SetUpWindowConfig(&gWindowConfig_81E7128); + InitMenuWindow(&gWindowConfig_81E7128); +} + +static void SlotMachineSetup_4_0(void) +{ + ResetPaletteFade(); + ResetSpriteData(); + gOamLimit = 128; + FreeAllSpritePalettes(); + ResetTasks(); +} + +static void SlotMachineSetup_5_0(void) +{ + sub_8106448(); + sub_81064B8(); + sub_81063C0(); +} + +static void SlotMachineSetup_6_0(void) +{ + sub_8104EA8(); + sub_8104F8C(); + sub_8103DC8(); + sub_81050C4(); +} + +static void SlotMachineSetup_6_1(void) +{ + sub_8104048(); + sub_8102DA8(); + sub_8104C5C(); + sub_8101D04(); +} + +static void sub_8101D04(void) +{ + sub_8101D24(CreateTask(sub_8101D24, 0)); +} + +static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = { + sub_8101D5C, + sub_8101D8C, + sub_8101DB0, + sub_8101DF4, + sub_8101E10, + sub_8101E3C, + sub_8101F44, + sub_8101F60, + sub_8101F88, + sub_8101FA4, + sub_8102008, + sub_8102034, + sub_8102058, + sub_8102090, + sub_81020C8, + sub_81021E0, + sub_81021FC, + sub_8102264, + sub_81022A0, + sub_81022CC, + sub_81022F0, + sub_8102318, + sub_8102344, + sub_810239C, + sub_81023B8, + sub_81023E0, + sub_81023FC, + sub_8102424, + sub_8102460 +}; + +static void sub_8101D24(u8 taskId) +{ + while (gUnknown_083ECAAC[eSlotMachine->state](gTasks + taskId)); +} + +static bool8 sub_8101D5C(struct Task *task) +{ + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + sub_810423C(eSlotMachine->pikaPower); + eSlotMachine->state++; + return FALSE; +} + +static bool8 sub_8101D8C(struct Task *task) +{ + if (!gPaletteFade.active) + { + eSlotMachine->state++; + } + return FALSE; +} + +static bool8 sub_8101DB0(struct Task *task) +{ + eSlotMachine->payout = 0; + eSlotMachine->bet = 0; + eSlotMachine->unk18 = 0; + eSlotMachine->unk04 &= 0xc0; + eSlotMachine->state = 4; + if (eSlotMachine->coins <= 0) + { + eSlotMachine->state = 25; + } + else if (eSlotMachine->unk0A) + { + eSlotMachine->state = 3; + sub_8104CAC(4); + } + return TRUE; +} + +static bool8 sub_8101DF4(struct Task *task) +{ + if (sub_8104E18()) + { + eSlotMachine->state = 4; + } + return FALSE; +} + +static bool8 sub_8101E10(struct Task *task) +{ + sub_8104CAC(0); + eSlotMachine->state = 5; + if (eSlotMachine->coins >= 9999) + { + eSlotMachine->state = 23; + } + return TRUE; +} + +static bool8 sub_8101E3C(struct Task *task) +{ + s16 i; + + if (gMain.newKeys & SELECT_BUTTON) + { + sub_8104AB8(0); + eSlotMachine->state = 8; + } + else if (gMain.newKeys & R_BUTTON) + { + if (eSlotMachine->coins - (3 - eSlotMachine->bet) >= 0) + { + for (i = eSlotMachine->bet; i < 3; i++) + { + sub_8103D50(i); + } + eSlotMachine->coins -= (3 - eSlotMachine->bet); + eSlotMachine->bet = 3; + eSlotMachine->state = 9; + PlaySE(SE_REGI); + } + else + { + eSlotMachine->state = 6; + } + } + else + { + if (gMain.newKeys & DPAD_DOWN && eSlotMachine->coins != 0) + { + PlaySE(SE_REGI); + sub_8103D50(eSlotMachine->bet); + eSlotMachine->coins--; + eSlotMachine->bet++; + } + if (eSlotMachine->bet >= 3 || (eSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON)) + { + eSlotMachine->state = 9; + } + if (gMain.newKeys & B_BUTTON) + { + eSlotMachine->state = 21; + } + } + return FALSE; +} + +static void sub_8101F2C(const u8 *str) +{ + MenuDisplayMessageBox(); + MenuPrint(str, 2, 15); +} + +static bool8 sub_8101F44(struct Task *task) +{ + sub_8101F2C(gOtherText_DontHaveThreeCoins); + eSlotMachine->state = 7; + return FALSE; +} + +static bool8 sub_8101F60(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_8101F88(struct Task *task) +{ + if (sub_8104AEC()) + { + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_8101FA4(struct Task *task) +{ + sub_8102484(); + sub_8104DA4(); + sub_8102DEC(0); + sub_8102DEC(1); + sub_8102DEC(2); + task->data[0] = 0; + if (eSlotMachine->unk04 & 0x20) + { + sub_810430C(); + eSlotMachine->state = 10; + } + else + { + sub_8104CAC(1); + eSlotMachine->state = 11; + } + eSlotMachine->unk1A = 8; + if (eSlotMachine->unk0A) + { + eSlotMachine->unk1A = dp15_jump_random_unknown(); + } + return FALSE; +} + +static bool8 sub_8102008(struct Task *task) +{ + if (sub_810432C()) + { + sub_8104CAC(1); + eSlotMachine->unk04 &= 0xDF; + eSlotMachine->state = 11; + } + return FALSE; +} + +static bool8 sub_8102034(struct Task *task) +{ + if (++task->data[0] >= 30) + { + sub_81024F0(); + eSlotMachine->state = 12; + } + return FALSE; +} + +static bool8 sub_8102058(struct Task *task) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_JYUNI); + sub_8102E1C(eSlotMachine->unk18); + sub_8103C14(eSlotMachine->unk18); + eSlotMachine->state = 13; + } + return FALSE; +} + +static bool8 sub_8102090(struct Task *task) +{ + if (!sub_8102E40(eSlotMachine->unk18)) + { + eSlotMachine->unk18++; + eSlotMachine->state = 12; + if (eSlotMachine->unk18 > 2) + { + eSlotMachine->state = 14; + } + return TRUE; + } + return FALSE; +} + +static bool8 sub_81020C8(struct Task *task) +{ + eSlotMachine->unk04 &= 0xc0; + CheckMatch(); + if (eSlotMachine->unk0A) + { + eSlotMachine->unk0A--; + eSlotMachine->unk0B++; + } + if (eSlotMachine->matchedSymbols) + { + eSlotMachine->state = 15; + sub_8102A24(); + sub_8103F70(); + if ((eSlotMachine->unk10 -= eSlotMachine->payout) < 0) + { + eSlotMachine->unk10 = 0; + } + if (eSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(6); + } + else if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_MIXED)) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(5); + } + else + { + PlayFanfare(BGM_ME_B_SMALL); + sub_8104CAC(2); + } + if (eSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_MIXED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + { + eSlotMachine->unk04 &= 0x3f; + if (eSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED))) + { + eSlotMachine->unk0A = 0; + eSlotMachine->unk0B = 0; + eSlotMachine->unk03 = 0; + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE)) + { + eSlotMachine->unk03 = 1; + } + } + } + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER) && eSlotMachine->pikaPower < 16) + { + eSlotMachine->pikaPower++; + sub_8104064(eSlotMachine->pikaPower); + } + } + else + { + sub_8104CAC(3); + eSlotMachine->state = 20; + if ((eSlotMachine->unk10 += eSlotMachine->bet) > 9999) + { + eSlotMachine->unk10 = 9999; + } + } + return FALSE; +} + +static bool8 sub_81021E0(struct Task *task) +{ + if (sub_8102A44()) + { + eSlotMachine->state = 16; + } + return FALSE; +} + +static bool8 sub_81021FC(struct Task *task) +{ + if (sub_8103FA0()) + { + eSlotMachine->state = 19; + if (eSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) + { + IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); + } + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + { + eSlotMachine->unk18 = 0; + eSlotMachine->state = 9; + } + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER)) + { + eSlotMachine->state = 17; + } + if (eSlotMachine->unk0A && eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + { + sub_8104CAC(4); + eSlotMachine->state = 18; + } + } + return FALSE; +} + +static bool8 sub_8102264(struct Task *task) +{ + if (!sub_81040C8()) + { + eSlotMachine->state = 19; + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + { + eSlotMachine->state = 9; + if (eSlotMachine->unk0A) + { + sub_8104CAC(4); + eSlotMachine->state = 18; + } + } + } + return FALSE; +} + +static bool8 sub_81022A0(struct Task *task) +{ + if (sub_8104E18()) + { + eSlotMachine->state = 19; + if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) + { + eSlotMachine->state = 9; + } + } + return FALSE; +} + +static bool8 sub_81022CC(struct Task *task) +{ + sub_8103D8C(0); + sub_8103D8C(1); + sub_8103D8C(2); + eSlotMachine->state = 2; + return FALSE; +} + +static bool8 sub_81022F0(struct Task *task) +{ + if (++task->data[1] > 64) + { + task->data[1] = 0; + eSlotMachine->state = 19; + } + return FALSE; +} + +static bool8 sub_8102318(struct Task *task) +{ + sub_8101F2C(gOtherText_QuitGamePrompt); + DisplayYesNoMenu(21, 7, 1); + sub_814AB84(); + eSlotMachine->state = 22; + return FALSE; +} + +static bool8 sub_8102344(struct Task *task) +{ + s8 input = ProcessMenuInputNoWrap_(); + if (input == 0) + { + MenuZeroFillScreen(); + sub_8103D8C(0); + sub_8103D8C(1); + sub_8103D8C(2); + eSlotMachine->coins += eSlotMachine->bet; + eSlotMachine->state = 27; + } + else if (input == 1 || input == -1) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_810239C(struct Task *task) +{ + sub_8101F2C(gOtherText_MaxCoins); + eSlotMachine->state = 24; + return FALSE; +} + +static bool8 sub_81023B8(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_81023E0(struct Task *task) +{ + sub_8101F2C(gOtherText_OutOfCoins); + eSlotMachine->state = 26; + return FALSE; +} + +static bool8 sub_81023FC(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 27; + } + return FALSE; +} + +static bool8 sub_8102424(struct Task *task) +{ + gSaveBlock1.coins = eSlotMachine->coins; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + eSlotMachine->state++; + return FALSE; +} + +static bool8 sub_8102460(struct Task *task) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(eSlotMachine->prevMainCb); + } + return FALSE; +} + +static void sub_8102484(void) +{ + u8 r3; + + if (eSlotMachine->unk0A == 0 && !(eSlotMachine->unk04 & 0xc0)) + { + if (sub_8102540()) + { + r3 = sub_8102578(); + if (r3 != 3) + { + eSlotMachine->unk04 |= gUnknown_083ECE42[r3]; + if (r3 != 1) + { + return; + } + } + } + r3 = sub_81025BC(); + if (r3 != 5) + { + eSlotMachine->unk04 |= gUnknown_083ECE48[r3]; + } + } +} + +static void sub_81024F0(void) +{ + eSlotMachine->unk06 = 0; + if (eSlotMachine->unk04) + { + eSlotMachine->unk06 = 1; + } +} + +static u8 sub_810250C(u8 a0) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (a0 & 1) + { + return gUnknown_083ECE3A[i]; + } + a0 >>= 1; + } + return 0; +} + +static bool8 sub_8102540(void) +{ + u8 rval = Random(); + if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval) + { + return TRUE; + } + return FALSE; +} + +static const u8 gUnknown_083ECD16[][6]; + +static u8 sub_8102578(void) +{ + s16 i; + + for (i = 0; i < 3; i++) + { + s16 rval = Random() & 0xff; + s16 value = gUnknown_083ECD16[i][eSlotMachine->unk01]; + if (value > rval) + { + break; + } + } + return i; +} + +static const u8 gUnknown_083ECD28[][6]; + +static u8 sub_81025BC(void) +{ + s16 i; + + for (i = 0; i < 5; i++) + { + s16 rval = Random() & 0xff; + s16 r3 = gUnknown_083ECD28[i][eSlotMachine->unk01]; + if (i == 0 && eSlotMachine->unk03 == 1) + { + r3 += 10; + if (r3 > 0x100) + { + r3 = 0x100; + } + } + else if (i == 4 && eSlotMachine->unk03 == 1) + { + r3 -= 10; + if (r3 < 0) + { + r3 = 0; + } + } + if (r3 > rval) + { + break; + } + } + return i; +} + +static const u8 gUnknown_083ECD46[][17]; +static const u8 gUnknown_083ECDAC[][17]; + +static u8 sub_810264C(u8 a0) +{ + if (eSlotMachine->unk03 == 0) + { + return gUnknown_083ECD46[a0][eSlotMachine->pikaPower]; + } + return gUnknown_083ECDAC[a0][eSlotMachine->pikaPower]; +} + +static void sub_8102680(void) +{ + u8 rval; + s16 i; + + eSlotMachine->unk05 = 0; + rval = Random(); + if (rval < sub_810264C(0)) + { + return; + } + for (i = 5; i > 0; i--) + { + rval = Random(); + if (rval < sub_810264C(i)) + { + break; + } + } + eSlotMachine->unk05 = i; +} + +static const u16 gUnknown_083ECE12[]; + +static bool8 sub_81026DC(u16 a0) +{ + u16 rval = Random() & 0xff; + if (rval < gUnknown_083ECE12[a0]) + { + return TRUE; + } + return FALSE; +} + +static const u16 gUnknown_083ECE1C[][2]; +static const u16 gUnknown_083ECE30[]; + +static u16 dp15_jump_random_unknown(void) +{ + u8 r4 = 0; + u8 rval; + u8 value; + if (eSlotMachine->unk10 >= 300) + { + r4 = 4; + } + else if (eSlotMachine->unk10 >= 250) + { + r4 = 3; + } + else if (eSlotMachine->unk10 >= 200) + { + r4 = 2; + } + else if (eSlotMachine->unk10 >= 150) + { + r4 = 1; + } + rval = Random() % 100; + value = gUnknown_083ECE1C[r4][0]; + if (rval < value) + { + return 4; + } + rval = Random() % 100; + value = gUnknown_083ECE1C[r4][1] + gUnknown_083ECE30[eSlotMachine->unk0B]; + if (rval < value) + { + return 2; + } + return 8; +} + +static void CheckMatch(void) +{ + eSlotMachine->matchedSymbols = 0; + CheckMatch_CenterRow(); + if (eSlotMachine->bet > 1) + { + CheckMatch_TopAndBottom(); + } + if (eSlotMachine->bet > 2) + { + CheckMatch_Diagonals(); + } +} + +static const u16 sSlotMatchFlags[]; +static const u16 sSlotPayouts[]; + +static void CheckMatch_CenterRow(void) +{ + u8 c1, c2, c3, match; + + c1 = GetTagOfReelSymbolOnScreenAtPos(0, 2); + c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2); + c3 = GetTagOfReelSymbolOnScreenAtPos(2, 2); + match = GetMatchFromSymbolsInRow(c1, c2, c3); + if (match != SLOT_MACHINE_MATCHED_NONE) + { + eSlotMachine->payout += sSlotPayouts[match]; + eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sub_8103E04(0); + } +} + +static void CheckMatch_TopAndBottom(void) +{ + u8 c1, c2, c3, match; + + c1 = GetTagOfReelSymbolOnScreenAtPos(0, 1); + c2 = GetTagOfReelSymbolOnScreenAtPos(1, 1); + c3 = GetTagOfReelSymbolOnScreenAtPos(2, 1); + match = GetMatchFromSymbolsInRow(c1, c2, c3); + if (match != SLOT_MACHINE_MATCHED_NONE) + { + if (match == SLOT_MACHINE_MATCHED_1CHERRY) + { + match = SLOT_MACHINE_MATCHED_2CHERRY; + } + eSlotMachine->payout += sSlotPayouts[match]; + eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sub_8103E04(1); + } + c1 = GetTagOfReelSymbolOnScreenAtPos(0, 3); + c2 = GetTagOfReelSymbolOnScreenAtPos(1, 3); + c3 = GetTagOfReelSymbolOnScreenAtPos(2, 3); + match = GetMatchFromSymbolsInRow(c1, c2, c3); + if (match != SLOT_MACHINE_MATCHED_NONE) + { + if (match == SLOT_MACHINE_MATCHED_1CHERRY) + { + match = SLOT_MACHINE_MATCHED_2CHERRY; + } + eSlotMachine->payout += sSlotPayouts[match]; + eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + sub_8103E04(2); + } +} + +static void CheckMatch_Diagonals(void) +{ + u8 c1, c2, c3, match; + + c1 = GetTagOfReelSymbolOnScreenAtPos(0, 1); + c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2); + c3 = GetTagOfReelSymbolOnScreenAtPos(2, 3); + match = GetMatchFromSymbolsInRow(c1, c2, c3); + if (match != SLOT_MACHINE_MATCHED_NONE) + { + if (match != SLOT_MACHINE_MATCHED_1CHERRY) + { + eSlotMachine->payout += sSlotPayouts[match]; + eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + } + sub_8103E04(3); + } + c1 = GetTagOfReelSymbolOnScreenAtPos(0, 3); + c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2); + c3 = GetTagOfReelSymbolOnScreenAtPos(2, 1); + match = GetMatchFromSymbolsInRow(c1, c2, c3); + if (match != SLOT_MACHINE_MATCHED_NONE) + { + if (match != SLOT_MACHINE_MATCHED_1CHERRY) + { + eSlotMachine->payout += sSlotPayouts[match]; + eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; + } + sub_8103E04(4); + } +} + +static const u8 sSym2Match[]; + +static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) +{ + if (c1 == c2 && c1 == c3) + { + return sSym2Match[c1]; + } + if (c1 == SLOT_MACHINE_TAG_7_RED && c2 == SLOT_MACHINE_TAG_7_RED && c3 == SLOT_MACHINE_TAG_7_BLUE) + { + return SLOT_MACHINE_MATCHED_777_MIXED; + } + if (c1 == SLOT_MACHINE_TAG_7_BLUE && c2 == SLOT_MACHINE_TAG_7_BLUE && c3 == SLOT_MACHINE_TAG_7_RED) + { + return SLOT_MACHINE_MATCHED_777_MIXED; + } + if (c1 == SLOT_MACHINE_TAG_CHERRY) + { + return SLOT_MACHINE_MATCHED_1CHERRY; + } + return SLOT_MACHINE_MATCHED_NONE; +} + +static void sub_8102A24(void) +{ + sub_8102A64(CreateTask(sub_8102A64, 4)); +} + +static bool8 sub_8102A44(void) +{ + if (FindTaskIdByFunc(sub_8102A64) == 0xff) + { + return TRUE; + } + return FALSE; +} + +static bool8 (*const gUnknown_083ECB20[])(struct Task *task) = { + sub_8102A9C, + sub_8102AD0, + sub_8102B80 +}; + +static void sub_8102A64(u8 taskId) +{ + while (gUnknown_083ECB20[gTasks[taskId].data[0]](gTasks + taskId)); +} + +static bool8 sub_8102A9C(struct Task *task) +{ + if (sub_8103E38()) + { + task->data[0]++; + if (eSlotMachine->payout == 0) + { + task->data[0] = 2; + return TRUE; + } + } + return FALSE; +} + +static bool8 sub_8102AD0(struct Task *task) +{ + if (!task->data[1]--) + { + if (IsFanfareTaskInactive()) + { + PlaySE(SE_PIN); + } + eSlotMachine->payout--; + if (eSlotMachine->coins < 9999) + { + eSlotMachine->coins++; + } + task->data[1] = 8; + if (gMain.heldKeys & A_BUTTON) + { + task->data[1] = 4; + } + } + if (IsFanfareTaskInactive() && gMain.newKeys & START_BUTTON) + { + PlaySE(SE_PIN); + eSlotMachine->coins += eSlotMachine->payout; + if (eSlotMachine->coins > 9999) + { + eSlotMachine->coins = 9999; + } + eSlotMachine->payout = 0; + } + if (eSlotMachine->payout == 0) + { + task->data[0]++; + } + return FALSE; +} + +static bool8 sub_8102B80(struct Task *task) +{ + if (sub_8103E7C()) + { + DestroyTask(FindTaskIdByFunc(sub_8102A64)); + } + return FALSE; +} + +static const u8 sReelSymbols[][21]; + +static u8 GetTagOfReelSymbolOnScreenAtPos(u8 x, s16 y) +{ + s16 offset = (eSlotMachine->reelPositions[x] + y) % 21; + if (offset < 0) + { + offset += 21; + } + return sReelSymbols[x][offset]; +} + +static u8 GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(u8 x, s16 y) +{ + s16 r6 = 0; + if ((eSlotMachine->unk1C[x]) % 24) + r6 = -1; + return GetTagOfReelSymbolOnScreenAtPos(x, y + r6); +} + +static const u8 gUnknown_083ECCF1[]; + +static u8 sub_8102C48(s16 a0) +{ + s16 r1 = (eSlotMachine->unk16 + a0) % 6; + if (r1 < 0) + r1 += 6; + return gUnknown_083ECCF1[r1]; +} + +static void sub_8102C84(u8 a0, s16 a1) +{ + eSlotMachine->unk1C[a0] += a1; + eSlotMachine->unk1C[a0] %= 504; + eSlotMachine->reelPositions[a0] = 21 - eSlotMachine->unk1C[a0] / 24; +} + +static s16 sub_8102CCC(u8 a0, s16 a1) +{ + s16 r1 = eSlotMachine->unk1C[a0] % 24; + if (r1 != 0) + { + if (r1 < a1) + a1 = r1; + sub_8102C84(a0, a1); + r1 = eSlotMachine->unk1C[a0] % 24; + } + return r1; +} + +static void sub_8102D28(s16 a0) +{ + eSlotMachine->unk14 += a0; + eSlotMachine->unk14 %= 120; + eSlotMachine->unk16 = 6 - eSlotMachine->unk14 / 20; +} + +static s16 sub_8102D5C(s16 a0) +{ + s16 r1 = eSlotMachine->unk14 % 20; + if (r1 != 0) + { + if (r1 < a0) + a0 = r1; + sub_8102D28(a0); + r1 = eSlotMachine->unk14 % 20; + } + return r1; +} + +static void sub_8102DA8(void) +{ + u8 i; + for (i = 0; i < 3; i++) + { + u8 taskId = CreateTask(sub_8102E68, 2); + gTasks[taskId].data[15] = i; + eSlotMachine->reelTasks[i] = taskId; + sub_8102E68(taskId); + } +} + +static void sub_8102DEC(u8 a0) +{ + gTasks[eSlotMachine->reelTasks[a0]].data[0] = 1; + gTasks[eSlotMachine->reelTasks[a0]].data[14] = 1; +} + +static void sub_8102E1C(u8 a0) +{ + gTasks[eSlotMachine->reelTasks[a0]].data[0] = 2; +} + +static bool8 sub_8102E40(u8 a0) +{ + return gTasks[eSlotMachine->reelTasks[a0]].data[14]; +} + +static bool8 (*const gUnknown_083ECB2C[])(struct Task *task) = { + sub_8102EA0, + sub_8102EA4, + sub_8102EC0, + sub_8102F4C, + sub_8103008 +}; + +static void sub_8102E68(u8 taskId) +{ + while (gUnknown_083ECB2C[gTasks[taskId].data[0]](gTasks + taskId)); +} + +static bool8 sub_8102EA0(struct Task *task) +{ + return FALSE; +} + +static bool8 sub_8102EA4(struct Task *task) +{ + sub_8102C84(task->data[15], eSlotMachine->unk1A); + return FALSE; +} + +static bool8 (*const gUnknown_083ECB40[])(void) = { + sub_810305C, + sub_81032C0, + sub_81033DC +}; +static void (*const gUnknown_083ECB4C[])(void) = { + sub_81034F4, + sub_8103540, + sub_810380C +}; + +static bool8 sub_8102EC0(struct Task *task) +{ + task->data[0]++; + eSlotMachine->unk34[task->data[15]] = 0; + eSlotMachine->unk2E[task->data[15]] = 0; + if (eSlotMachine->unk0A == 0 && (eSlotMachine->unk04 == 0 || eSlotMachine->unk06 == 0 || !gUnknown_083ECB40[task->data[15]]())) + { + eSlotMachine->unk06 = 0; + gUnknown_083ECB4C[task->data[15]](); + } + task->data[1] = eSlotMachine->unk2E[task->data[15]]; + return TRUE; +} + +static bool8 sub_8102F4C(struct Task *task) +{ + u16 sp[] = {2, 4, 4, 4, 8}; + s16 r2 = eSlotMachine->unk1C[task->data[15]] % 24; + if (r2 != 0) + { + r2 = sub_8102CCC(task->data[15], eSlotMachine->unk1A); + } + else if (eSlotMachine->unk2E[task->data[15]]) + { + eSlotMachine->unk2E[task->data[15]]--; + sub_8102C84(task->data[15], eSlotMachine->unk1A); + r2 = eSlotMachine->unk1C[task->data[15]] % 24; + } + if (r2 == 0 && eSlotMachine->unk2E[task->data[15]] == 0) + { + task->data[0]++; + task->data[1] = sp[task->data[1]]; + task->data[2] = 0; + } + return FALSE; +} + +static bool8 sub_8103008(struct Task *task) +{ + eSlotMachine->unk22[task->data[15]] = task->data[1]; + task->data[1] = -task->data[1]; + task->data[2]++; + if ((task->data[2] & 0x3) == 0) + { + task->data[1] >>= 1; + } + if (task->data[1] == 0) + { + task->data[0] = 0; + task->data[14] = 0; + eSlotMachine->unk22[task->data[15]] = 0; + } + return FALSE; +} + +static bool8 (*const gUnknown_083ECB64[])(u8 a0, u8 a1) = { + sub_8103154, + sub_81031B4, + sub_81031B4 +}; + +static bool8 sub_810305C(void) +{ + u8 r3 = sub_810250C(eSlotMachine->unk04); + u8 r5 = r3; + if (eSlotMachine->unk04 & 0xc0) + { + r5 = 0; + r3 = 1; + } + return gUnknown_083ECB64[eSlotMachine->bet - 1](r5, r3); +} + +static bool8 sub_81030A4(s16 y, u8 tag1, u8 tag2) +{ + u8 tag = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, y); + if (tag == tag1 || tag == tag2) + { + eSlotMachine->unk07 = tag; + return TRUE; + } + return FALSE; +} + +static bool8 sub_81030E0(s16 y) +{ + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 1 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 3 - y) == 4) + { + return TRUE; + } + return FALSE; +} + +static bool8 sub_8103134(void) +{ + if (eSlotMachine->unk04 & 0xc2) + { + return TRUE; + } + return FALSE; +} + +static bool8 sub_8103154(u8 a0, u8 a1) +{ + s16 i; + + for (i = 0; i < 5; i++) + { + if (sub_81030A4(2 - i, a0, a1)) + { + eSlotMachine->unk34[0] = 2; + eSlotMachine->unk2E[0] = i; + return TRUE; + } + } + return FALSE; +} + +static bool8 sub_81031B4(u8 tag1, u8 tag2) +{ + s16 i; + bool8 r6 = sub_8103134(); + if (r6 || !sub_81030E0(0)) + { + for (i = 1; i < 4; i++) + { + if (sub_81030A4(i, tag1, tag2)) + { + eSlotMachine->unk34[0] = i; + eSlotMachine->unk2E[0] = 0; + return TRUE; + } + } + } + for (i = 1; i < 5; i++) + { + bool8 r7 = r6; + if (r7 || !sub_81030E0(i)) + { + if (sub_81030A4(1 - i, tag1, tag2)) + { + if (i == 1 && (r7 || !sub_81030E0(3))) + { + eSlotMachine->unk34[0] = 3; + eSlotMachine->unk2E[0] = 3; + return TRUE; + } + if (i < 4 && (r7 || !sub_81030E0(i + 1))) + { + eSlotMachine->unk34[0] = 2; + eSlotMachine->unk2E[0] = i + 1; + return TRUE; + } + eSlotMachine->unk34[0] = 1; + eSlotMachine->unk2E[0] = i; + return TRUE; + } + } + } + return FALSE; +} + +static bool8 (*const gUnknown_083ECB70[])(void) = { + sub_81032E8, + sub_81032E8, + sub_810333C +}; + +static bool8 sub_81032C0(void) +{ + return gUnknown_083ECB70[eSlotMachine->bet - 1](); +} + +static bool8 sub_81032E8(void) +{ + s16 i; + s16 unk34_0 = eSlotMachine->unk34[0]; + + for (i = 0; i < 5; i++) + { + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, unk34_0 - i) == eSlotMachine->unk07) + { + eSlotMachine->unk34[1] = unk34_0; + eSlotMachine->unk2E[1] = i; + return TRUE; + } + } + return FALSE; +} + +static bool8 sub_810333C(void) +{ + s16 i; + if (sub_81032E8()) + { + if (eSlotMachine->unk34[0] != 2 && eSlotMachine->unk2E[1] > 1 && eSlotMachine->unk2E[1] != 4) + { + for (i = 0; i < 5; i++) + { + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i) == eSlotMachine->unk07) + { + eSlotMachine->unk34[1] = 2; + eSlotMachine->unk2E[1] = i; + break; + } + } + } + return TRUE; + } + if (eSlotMachine->unk34[0] != 2) + { + for (i = 0; i < 5; i++) + { + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i) == eSlotMachine->unk07) + { + eSlotMachine->unk34[1] = 2; + eSlotMachine->unk2E[1] = i; + return TRUE; + } + } + } + return FALSE; +} + +static bool8 (*const gUnknown_083ECB7C[])(u8 a0) = { + sub_810341C, + sub_810341C, + sub_810347C +}; + +static bool8 sub_81033DC(void) +{ + u8 r3 = eSlotMachine->unk07; + if (eSlotMachine->unk04 & 0x40) + { + r3 = 0; + if (eSlotMachine->unk07 == 0) + { + r3 = 1; + } + } + return gUnknown_083ECB7C[eSlotMachine->bet - 1](r3); +} + +static bool8 sub_810341C(u8 a0) +{ + s16 i; + s16 unk34_1 = eSlotMachine->unk34[1]; + + for (i = 0; i < 5; i++) + { + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, unk34_1 - i) == a0) + { + eSlotMachine->unk34[2] = unk34_1; + eSlotMachine->unk2E[2] = i; + return TRUE; + } + } + return FALSE; +} + +static bool8 sub_810347C(u8 a0) +{ + s16 i; + s16 r8; + if (eSlotMachine->unk34[0] == eSlotMachine->unk34[1]) + { + return sub_810341C(a0); + } + r8 = 1; + if (eSlotMachine->unk34[0] == 1) + { + r8 = 3; + } + for (i = 0; i < 5; i++) + { + if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, r8 - i) == a0) + { + eSlotMachine->unk2E[2] = i; + eSlotMachine->unk34[2] = r8; + return TRUE; + } + } + return FALSE; +} + +static void sub_81034F4(void) +{ + s16 i; + for (i = 0; sub_81030E0(i); i++); + eSlotMachine->unk2E[0] = i; +} + +static bool8 sub_8103520(u8 *a0) +{ + if (*a0 == 0) + { + *a0 = 1; + return TRUE; + } + if (*a0 == 1) + { + *a0 = 0; + return TRUE; + } + return FALSE; +} + +static void (*const gUnknown_083ECB88[])(void) = { + sub_8103564, + j5_08111E84, + sub_8103668 +}; + +static void sub_8103540(void) +{ + gUnknown_083ECB88[eSlotMachine->bet - 1](); +} + +static void sub_8103564(void) +{ + if (eSlotMachine->unk34[0] != 0 && eSlotMachine->unk04 & 0x80) + { + u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - eSlotMachine->unk2E[0]); + if (sub_8103520(&sp0)) + { + s16 i; + for (i = 0; i < 5; i++) + { + if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i)) + { + eSlotMachine->unk34[1] = 2; + eSlotMachine->unk2E[1] = i; + break; + } + } + } + } +} + +static void j5_08111E84(void) +{ + if (eSlotMachine->unk34[0] != 0 && eSlotMachine->unk04 & 0x80) + { + u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, eSlotMachine->unk34[0] - eSlotMachine->unk2E[0]); + if (sub_8103520(&sp0)) + { + s16 i; + for (i = 0; i < 5; i++) + { + if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, eSlotMachine->unk34[0] - i)) + { + eSlotMachine->unk34[1] = eSlotMachine->unk34[0]; + eSlotMachine->unk2E[1] = i; + break; + } + } + } + } +} + +static void sub_8103668(void) +{ + s16 i; + s16 j; + if (eSlotMachine->unk34[0] != 0 && eSlotMachine->unk04 & 0x80) + { + if (eSlotMachine->unk34[0] == 2) + { + j5_08111E84(); + } + else + { + u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, eSlotMachine->unk34[0] - eSlotMachine->unk2E[0]); + if (sub_8103520(&sp0)) + { + j = 2; + if (eSlotMachine->unk34[0] == 3) + j = 3; + for (i = 0; i < 2; i++, j--) + { + if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, j)) + { + eSlotMachine->unk34[1] = j; + eSlotMachine->unk2E[1] = 0; + return; + } + } + for (j = 1; j < 5; j++) + { + if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, eSlotMachine->unk34[0] - j)) + { + if (eSlotMachine->unk34[0] == 1) + { + if (j < 3) + { + eSlotMachine->unk34[1] = 2; + eSlotMachine->unk2E[1] = j + 1; + } + else + { + eSlotMachine->unk34[1] = 1; + eSlotMachine->unk2E[1] = j; + } + } + else + { + if (j < 3) + { + eSlotMachine->unk34[1] = 3; + eSlotMachine->unk2E[1] = j; + } + else + { + eSlotMachine->unk34[1] = 2; + eSlotMachine->unk2E[1] = j - 1; + } + } + return; + } + } + } + } + } +} + +static bool8 sub_8103764(u8 a0, u8 a1) +{ + if ((a0 == 0 && a1 == 1) || (a0 == 1 && a1 == 0)) + { + return TRUE; + } + return FALSE; +} + +static bool8 sub_810378C(u8 a0, u8 a1, u8 a2) +{ + if ((a0 == 0 && a1 == 1 && a2 == 0) || (a0 == 1 && a1 == 0 && a2 == 1)) + { + return TRUE; + } + return FALSE; +} + +static bool8 sub_81037BC(u8 a0, u8 a1, u8 a2) +{ + if ((a0 == 0 && a1 == 1 && a2 == 0) || + (a0 == 1 && a1 == 0 && a2 == 1) || + (a0 == 0 && a1 == 0 && a2 == 1) || + (a0 == 1 && a1 == 1 && a2 == 0) || + (a0 == a1 && a0 == a2)) + { + return FALSE; + } + return TRUE; +} + +static void (*const gUnknown_083ECB94[])(void) = { + sub_8103830, + sub_8103910, + sub_8103A78 +}; + +static void sub_810380C(void) +{ + gUnknown_083ECB94[eSlotMachine->bet - 1](); +} + +static void sub_8103830(void) +{ + s16 i = 0; + u8 r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - eSlotMachine->unk2E[0]); + u8 r1 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - eSlotMachine->unk2E[1]); + if (r5 == r1) + { + while (1) + { + u8 r0; + if (!(r5 == (r0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) || (r5 == 0 && r0 == 1) || (r5 == 1 && r0 == 0))) + { + break; + } + i++; + } + } + else if (sub_8103764(r5, r1)) + { + if (eSlotMachine->unk04 & 0x80) + { + for (i = 0; i < 5; i++) + { + if (r5 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) + { + eSlotMachine->unk2E[2] = i; + return; + } + } + } + i = 0; + while (1) + { + if (r5 != GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) + { + break; + } + i++; + } + } + eSlotMachine->unk2E[2] = i; +} + +static void sub_8103910(void) +{ + s16 sp0 = 0; + s16 i; + u8 r7; + u8 r6; + u8 r4; + + if (eSlotMachine->unk34[1] != 0 && eSlotMachine->unk34[0] == eSlotMachine->unk34[1] && eSlotMachine->unk04 & 0x80) + { + r7 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, eSlotMachine->unk34[0] - eSlotMachine->unk2E[0]); + r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, eSlotMachine->unk34[1] - eSlotMachine->unk2E[1]); + if (sub_8103764(r7, r6)) + { + for (i = 0; i < 5; i++) + { + r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, eSlotMachine->unk34[1] - i); + if (r7 == r4) + { + sp0 = i; + break; + } + } + } + } + while (1) + { + s16 r8; + for (i = 1, r8 = 0; i < 4; i++) + { + r7 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, i - eSlotMachine->unk2E[0]); + r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, i - eSlotMachine->unk2E[1]); + r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, i - sp0); + if (!sub_81037BC(r7, r6, r4) && (!sub_810378C(r7, r6, r4) || !(eSlotMachine->unk04 & 0x80))) + { + r8++; + break; + } + } + if (r8 == 0) + { + break; + } + sp0++; + } + eSlotMachine->unk2E[2] = sp0; +} + +static void sub_8103A78(void) +{ + u8 r6; + u8 r5; + u8 r4; + s16 r8; + s16 i; + + sub_8103910(); + if (eSlotMachine->unk34[1] != 0 && eSlotMachine->unk34[0] != eSlotMachine->unk34[1] && eSlotMachine->unk04 & 0x80) + { + r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, eSlotMachine->unk34[0] - eSlotMachine->unk2E[0]); + r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, eSlotMachine->unk34[1] - eSlotMachine->unk2E[1]); + if (sub_8103764(r6, r5)) + { + r8 = 1; + if (eSlotMachine->unk34[0] == 1) + r8 = 3; + for (i = 0; i < 5; i++) + { + r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, r8 - (eSlotMachine->unk2E[2] + i)); + if (r6 == r4) + { + eSlotMachine->unk2E[2] += i; + break; + } + } + } + } + while (1) + { + r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 1 - eSlotMachine->unk2E[0]); + r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - eSlotMachine->unk2E[1]); + r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 3 - eSlotMachine->unk2E[2]); + if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && eSlotMachine->unk04 & 0x80)) + break; + eSlotMachine->unk2E[2]++; + } + while (1) + { + r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 3 - eSlotMachine->unk2E[0]); + r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - eSlotMachine->unk2E[1]); + r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 1 - eSlotMachine->unk2E[2]); + if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && eSlotMachine->unk04 & 0x80)) + break; + eSlotMachine->unk2E[2]++; + } +} + +static void sub_8103C14(u8 a0) +{ + u8 taskId = CreateTask(sub_8103C48, 5); + gTasks[taskId].data[15] = a0; + sub_8103C48(taskId); +} + +static void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = { + sub_8103C78, + sub_8103CAC, + sub_8103CC8 +}; + +static void sub_8103C48(u8 taskId) +{ + gUnknown_083ECBA0[gTasks[taskId].data[0]](gTasks + taskId, taskId); +} + +static const s16 gUnknown_083ECBAC[] = {5, 10, 15}; + +static void sub_8103C78(struct Task *task, u8 taskId) +{ + sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x62, 0x63, 0x72, 0x73); + task->data[0]++; +} + +static void sub_8103CAC(struct Task *task, u8 taskId) +{ + if (++task->data[1] > 11) + task->data[0]++; +} + +static void sub_8103CC8(struct Task *task, u8 taskId) +{ + sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x42, 0x43, 0x52, 0x53); + DestroyTask(taskId); +} + +static const u16 *const gUnknown_083EDD08[]; +static const u16 *const gUnknown_083EDD1C[]; +static const u8 gUnknown_083EDD30[]; + +static void sub_8103D00(u8 a0) +{ + LoadPalette(gUnknown_083EDD08[a0], gUnknown_083EDD30[a0], 2); +} + +static void sub_8103D28(u8 a0) +{ + LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2); +} + +static const u8 gUnknown_083EDD35[][2]; +static const u8 gUnknown_083EDD3B[]; + +static void sub_8103D50(u8 a0) +{ + u8 i; + for (i = 0; i < gUnknown_083EDD3B[a0]; i++) + { + sub_8103D00(gUnknown_083EDD35[a0][i]); + } +} + +static void sub_8103D8C(u8 a0) +{ + u8 i; + for (i = 0; i < gUnknown_083EDD3B[a0]; i++) + { + sub_8103D28(gUnknown_083EDD35[a0][i]); + } +} + +static void sub_8103DC8(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + u8 spriteId = CreateInvisibleSprite(sub_8103EE4); + gSprites[spriteId].data[0] = i; + eSlotMachine->unk44[i] = spriteId; + } +} + +static void sub_8103E04(u8 a0) +{ + struct Sprite *sprite = gSprites + eSlotMachine->unk44[a0]; + sprite->data[1] = 1; + sprite->data[2] = 4; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 2; + sprite->data[7] = 0; +} + +static bool8 sub_8103E38(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + struct Sprite *sprite = gSprites + eSlotMachine->unk44[i]; + if (sprite->data[1] && sprite->data[2]) + return FALSE; + } + return TRUE; +} + +static bool8 sub_8103E7C(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + if (!sub_8103EAC(eSlotMachine->unk44[i])) + return FALSE; + } + return TRUE; +} + +static bool8 sub_8103EAC(u8 spriteId) +{ + struct Sprite *sprite = gSprites + spriteId; + if (!sprite->data[1]) + return TRUE; + if (sprite->data[7]) + sprite->data[1] = 0; + return sprite->data[7]; +} + +static void sub_8103EE4(struct Sprite *sprite) +{ + s16 r4; + if (sprite->data[1]) + { + if (!sprite->data[3]--) + { + sprite->data[7] = 0; + sprite->data[3] = 1; + sprite->data[4] += sprite->data[5]; + r4 = 4; + if (sprite->data[2]) + r4 = 8; + if (sprite->data[4] <= 0) + { + sprite->data[7] = 1; + sprite->data[5] = -sprite->data[5]; + if (sprite->data[2]) + sprite->data[2]--; + } + else if (sprite->data[4] >= r4) + sprite->data[5] = -sprite->data[5]; + if (sprite->data[2]) + sprite->data[3] <<= 1; + } + MultiplyPaletteRGBComponents(gUnknown_083EDD30[sprite->data[0]], sprite->data[4], sprite->data[4], sprite->data[4]); + } +} + +static void sub_8103F70(void) +{ + u8 taskId = CreateTask(sub_8103FE8, 6); + gTasks[taskId].data[3] = 1; + sub_8103FE8(taskId); +} + +static const u16 *const gUnknown_083EDDA0[]; +static const u16 *const gUnknown_083EDDAC; + +static bool8 sub_8103FA0(void) +{ + u8 taskId = FindTaskIdByFunc(sub_8103FE8); + if (!gTasks[taskId].data[2]) + { + DestroyTask(taskId); + LoadPalette(gUnknown_083EDDAC, 0x10, 0x20); + return TRUE; + } + return FALSE; +} + +static void sub_8103FE8(u8 taskId) +{ + struct Task *task = gTasks + taskId; + if (!task->data[1]--) + { + task->data[1] = 4; + task->data[2] += task->data[3]; + if (task->data[2] == 0 || task->data[2] == 2) + { + task->data[3] = -task->data[3]; + } + } + LoadPalette(gUnknown_083EDDA0[task->data[2]], 0x10, 0x20); +} + +static void sub_8104048(void) +{ + eSlotMachine->unk3E = CreateTask(sub_81040E8, 8); +} + +static void sub_8104064(u8 pikaPower) +{ + struct Task *task = gTasks + eSlotMachine->unk3E; + sub_810421C(task); + task->data[0] = 1; + task->data[1]++; + task->data[15] = 1; +} + +static void sub_8104098(void) +{ + struct Task *task = gTasks + eSlotMachine->unk3E; + sub_810421C(task); + task->data[0] = 3; + task->data[15] = 1; +} + +static bool8 sub_81040C8(void) +{ + return gTasks[eSlotMachine->unk3E].data[15]; +} + +static void (*const gUnknown_083ECBB4[])(struct Task *task) = { + nullsub_68, + sub_810411C, + sub_8104144, + sub_81041AC +}; + +static void sub_81040E8(u8 taskId) +{ + gUnknown_083ECBB4[gTasks[taskId].data[0]](gTasks + taskId); +} + +static void nullsub_68(struct Task *task) +{ + +} + +static void sub_810411C(struct Task *task) +{ + task->data[2] = sub_8105B1C((task->data[1] << 3) + 20, 20); + task->data[0]++; +} + +static const u16 gUnknown_083ECBC4[][2] = { + {0x9e, 0x6e}, + {0x9f, 0x6f}, + {0xaf, 0x7f} +}; + +static void sub_8104144(struct Task *task) +{ + u16 *vaddr = (u16 *)BG_SCREEN_ADDR(29); + if (gSprites[task->data[2]].data[7]) + { + s16 r2 = task->data[1] + 2; + u8 r0 = 0; + if (task->data[1] == 1) + r0 = 1; + else if (task->data[1] == 16) + r0 = 2; + vaddr[r2 + 0x40] = gUnknown_083ECBC4[r0][0]; + sub_8105B88(task->data[2]); + task->data[0] = 0; + task->data[15] = 0; + } +} + +static void sub_81041AC(struct Task *task) +{ + u16 *vaddr = (u16 *)BG_SCREEN_ADDR(29); + s16 r4 = task->data[1] + 2; + u8 r2 = 0; + if (task->data[1] == 1) + r2 = 1; + else if (task->data[1] == 16) + r2 = 2; + if (task->data[2] == 0) + { + vaddr[r4 + 0x40] = gUnknown_083ECBC4[r2][1]; + task->data[1]--; + } + if (++task->data[2] >= 20) + task->data[2] = 0; + if (task->data[1] == 0) + { + task->data[0] = 0; + task->data[15] = 0; + } +} + +static void sub_810421C(struct Task *task) +{ + u8 i; + + for (i = 2; i < 16; i++) + task->data[i] = 0; +} + +static void sub_810423C(u8 pikaPower) +{ + s16 i; + u8 r3; + s16 r2 = 3; + u16 *vaddr = (u16 *)BG_SCREEN_ADDR(29); + for (i = 0; i < pikaPower; i++, r2++) + { + r3 = 0; + if (i == 0) + r3 = 1; + else if (i == 15) + r3 = 2; + vaddr[r2 + 0x40] = gUnknown_083ECBC4[r3][0]; + } + for (; i < 16; i++, r2++) + { + r3 = 0; + if (i == 0) + r3 = 1; + else if (i == 15) + r3 = 2; + vaddr[r2 + 0x40] = gUnknown_083ECBC4[r3][1]; + } + gTasks[eSlotMachine->unk3E].data[1] = pikaPower; +} + +static void sub_810430C(void) +{ + u8 taskId = CreateTask(sub_810434C, 7); + sub_810434C(taskId); +} + +static bool8 sub_810432C(void) +{ + if (FindTaskIdByFunc(sub_810434C) == 0xFF) + return TRUE; + return FALSE; +} + +static void (*const gUnknown_083ECBD0[])(struct Task *task) = { + sub_810437C, + sub_81043EC, + sub_8104468, + sub_8104498, + sub_8104548, + sub_8104598, + sub_81045CC, + sub_810463C, + sub_81046C0, + sub_8104764, + sub_8104794, + sub_81047EC, + sub_8104860, + sub_81048A8, + sub_81048CC, + sub_8104940, + sub_81049C8, + sub_8104794, + sub_81049F8 +}; + +static void sub_810434C(u8 taskId) +{ + gUnknown_083ECBD0[gTasks[taskId].data[0]](gTasks + taskId); +} + +static void sub_810437C(struct Task *task) +{ + eSlotMachine->unk0A = 0; + eSlotMachine->unk14 = 0; + eSlotMachine->unk16 = 0; + task->data[0]++; + task->data[1] = 0; + task->data[2] = 30; + task->data[4] = 1280; + gSpriteCoordOffsetX = 0; + gSpriteCoordOffsetY = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8104A40(30, 0); + sub_81051C0(); + sub_8105100(); + sub_81052EC(); + sub_81053A0(); + sub_810545C(); + sub_8102680(); + StopMapMusic(); + PlayNewMapMusic(BGM_BD_TIME); +} + +static void sub_81043EC(struct Task *task) +{ + s16 r3; + gSpriteCoordOffsetX -= 8; + task->data[1] += 8; + r3 = ((task->data[1] + 240) & 0xff) >> 3; + REG_BG1HOFS = task->data[1] & 0x1ff; + if (r3 != task->data[2] && task->data[3] <= 18) + { + task->data[2] = r3; + task->data[3] = task->data[1] >> 3; + sub_8104A40(r3, task->data[3]); + } + if (task->data[1] >= 200) + { + task->data[0]++; + task->data[3] = 0; + } + sub_8102D28(task->data[4] >> 8); +} + +static void sub_8104468(struct Task *task) +{ + sub_8102D28(task->data[4] >> 8); + if (++task->data[5] >= 60) + { + task->data[0]++; + sub_8105578(); + sub_81056F0(); + } +} + +static void sub_8104498(struct Task *task) +{ + int r5; + u8 sp0[] = {1, 1, 2, 2}; + s16 sp4[] = {0x40, 0x30, 0x18, 0x08}; + s16 spC[] = {10, 8, 6, 4}; + + sub_8102D28(task->data[4] >> 8); + task->data[4] -= 4; + r5 = 4 - (task->data[4] >> 8); + sub_8105688(sp4[r5]); + sub_81057E8(spC[r5]); + StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, sp0[r5]); + if (task->data[4] <= 0x100) + { + task->data[0]++; + task->data[4] = 0x100; + task->data[5] = 0; + } +} + +static void sub_8104548(struct Task *task) +{ + sub_8102D28(task->data[4] >> 8); + if (++task->data[5] >= 80) + { + task->data[0]++; + task->data[5] = 0; + sub_81057E8(2); + StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, 3); + } +} + +static void sub_8104598(struct Task *task) +{ + sub_8102D28(task->data[4] >> 8); + task->data[4] = (u8)task->data[4] + 0x80; + if (++task->data[5] >= 80) + { + task->data[0]++; + task->data[5] = 0; + } +} + +static void sub_81045CC(struct Task *task) +{ + sub_8102D28(task->data[4] >> 8); + task->data[4] = (u8)task->data[4] + 0x40; + if (++task->data[5] >= 40) + { + task->data[5] = 0; + if (eSlotMachine->unk05) + { + if (eSlotMachine->unk0A <= task->data[6]) + { + task->data[0]++; + } + } + else if (task->data[6] > 3) + { + task->data[0]++; + } + else if (sub_81026DC(task->data[6])) + { + task->data[0] = 14; + } + task->data[6]++; + } +} + +static void sub_810463C(struct Task *task) +{ + s16 r5 = eSlotMachine->unk14 % 20; + if (r5) + { + r5 = sub_8102D5C(task->data[4] >> 8); + task->data[4] = (u8)task->data[4] + 0x40; + } + else if (sub_8102C48(1) != eSlotMachine->unk05) + { + sub_8102D28(task->data[4] >> 8); + r5 = eSlotMachine->unk14 % 20; + task->data[4] = (u8)task->data[4] + 0x40; + } + if (r5 == 0 && sub_8102C48(1) == eSlotMachine->unk05) + { + task->data[4] = 0; + task->data[0]++; + } +} + +static void sub_81046C0(struct Task *task) +{ + if (++task->data[4] >= 60) + { + StopMapMusic(); + sub_81056C0(); + sub_8105804(); + task->data[0]++; + if(eSlotMachine->unk05 == 0) + { + task->data[4] = 0xa0; + StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, 5); + PlayFanfare(BGM_ME_ZANNEN); + } + else + { + task->data[4] = 0xc0; + StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, 4); + gSprites[eSlotMachine->unk3F].animCmdIndex = 0; + if (eSlotMachine->pikaPower) + { + sub_8104098(); + eSlotMachine->pikaPower = 0; + } + PlayFanfare(BGM_ME_B_SMALL); + } + } +} + +static void sub_8104764(struct Task *task) +{ + if ((task->data[4] == 0 || --task->data[4] == 0) && !sub_81040C8()) + { + task->data[0]++; + } +} + +static void sub_8104794(struct Task *task) +{ + s16 r4; + gSpriteCoordOffsetX -= 8; + task->data[1] += 8; + task->data[3] += 8; + r4 = ((task->data[1] - 8) & 0xff) >> 3; + REG_BG1HOFS = task->data[1] & 0x1ff; + if (task->data[3] >> 3 <= 25) + { + sub_8104A88(r4); + } + else + { + task->data[0]++; + } +} + +static void sub_81047EC(struct Task *task) +{ + eSlotMachine->unk0B = 0; + eSlotMachine->unk0A = eSlotMachine->unk05; + gSpriteCoordOffsetX = 0; + REG_BG1HOFS = 0; + eSlotMachine->unk1A = 8; + sub_810514C(); + sub_81054B8(); + sub_8105524(); + PlayNewMapMusic(eSlotMachine->backupMapMusic); + if (eSlotMachine->unk0A == 0) + { + DestroyTask(FindTaskIdByFunc(sub_810434C)); + } + else + { + sub_8104CAC(4); + task->data[1] = dp15_jump_random_unknown(); + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } +} + +static void sub_8104860(struct Task *task) +{ + if (eSlotMachine->unk1A == task->data[1]) + { + task->data[0]++; + } + else if (eSlotMachine->unk1C[0] % 24 == 0 && (++task->data[2]& 0x07) == 0) + { + eSlotMachine->unk1A >>= 1; + } +} + +static void sub_81048A8(struct Task *task) +{ + if (sub_8104E18()) + { + DestroyTask(FindTaskIdByFunc(sub_810434C)); + } +} + +static void sub_81048CC(struct Task *task) +{ + sub_81054B8(); + sub_81056C0(); + sub_8105804(); + sub_8105854(); + gSprites[eSlotMachine->unk4E[0]].invisible = TRUE; + StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, 5); + task->data[0]++; + task->data[4] = 4; + task->data[5] = 0; + StopMapMusic(); + PlayFanfare(BGM_ME_ZANNEN); + PlaySE(SE_W153); +} + +static void sub_8104940(struct Task *task) +{ + gSpriteCoordOffsetY = task->data[4]; + REG_BG1VOFS = task->data[4]; + if (task->data[5] & 0x01) + task->data[4] = -task->data[4]; + if ((++task->data[5] & 0x1f) == 0) + task->data[4] >>= 1; + if (task->data[4] == 0) + { + sub_81058A0(); + sub_81058C4(); + sub_8105284(); + sub_81059E8(); + gSprites[eSlotMachine->unk4E[0]].invisible = FALSE; + task->data[0]++; + task->data[5] = 0; + } +} + +static void sub_81049C8(struct Task *task) +{ + gSpriteCoordOffsetY = 0; + REG_BG1VOFS = 0; + if (sub_8105ACC()) + { + task->data[0]++; + sub_8105AEC(); + } +} + +static void sub_81049F8(struct Task *task) +{ + gSpriteCoordOffsetX = 0; + REG_BG1HOFS = 0; + PlayNewMapMusic(eSlotMachine->backupMapMusic); + sub_810514C(); + sub_8105554(); + sub_8105524(); + sub_81059B8(); + DestroyTask(FindTaskIdByFunc(sub_810434C)); +} + +static const u16 sReelTimeWindowTilemap[]; + +static void sub_8104A40(s16 a0, s16 a1) +{ + s16 i; + + for (i = 4; i < 15; i++) + { + u16 tile = sReelTimeWindowTilemap[a1 + (i - 4) * 20]; + ((u16 *)BG_SCREEN_ADDR(28))[32 * i + a0] = tile; + } +} + +static void sub_8104A88(s16 a0) +{ + s16 i; + + for (i = 4; i < 15; i++) + { + ((u16 *)BG_SCREEN_ADDR(28))[32 * i + a0] = 0; + } +} + +static void sub_8104AB8(u8 a0) +{ + u8 taskId = CreateTask(sub_8104B0C, 1); + gTasks[taskId].data[1] = a0; + sub_8104B0C(taskId); +} + +static bool8 sub_8104AEC(void) +{ + if (FindTaskIdByFunc(sub_8104B0C) == 0xFF) + return TRUE; + return FALSE; +} + +static void (*const gUnknown_083ECC30[])(struct Task *task) = { + sub_8104B3C, + sub_8104B60, + sub_8104B80, + sub_8104B60, + sub_8104BC8, + sub_8104B60, + sub_8104BFC, + sub_8104B60, + sub_8104C44 +}; + +static void sub_8104B0C(u8 taskId) +{ + gUnknown_083ECC30[gTasks[taskId].data[0]](gTasks + taskId); +} + +static void sub_8104B3C(struct Task *task) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + task->data[0]++; +} + +static void sub_8104B60(struct Task *task) +{ + if (!gPaletteFade.active) + { + task->data[0]++; + } +} + +static void sub_8104B80(struct Task *task) +{ + sub_8104DA4(); + sub_81065DC(); + BasicInitMenuWindow(&gWindowConfig_81E7144); + MenuPrint_PixelCoords(gOtherText_ReelTime, 10, 32, 1); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + task->data[0]++; +} + +static void sub_8104BC8(struct Task *task) +{ + if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + task->data[0]++; + } +} + +static void sub_8104BFC(struct Task *task) +{ + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7128); + sub_81064B8(); + sub_8104CAC(task->data[1]); + sub_810423C(eSlotMachine->pikaPower); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + task->data[0]++; +} + +static void sub_8104C44(struct Task *task) +{ + DestroyTask(FindTaskIdByFunc(sub_8104B0C)); +} + +static void sub_8104C5C(void) +{ + u8 i; + struct Task *task; + i = CreateTask(sub_8104E74, 3); + eSlotMachine->unk3D = i; + task = gTasks + i; + task->data[1] = -1; + for (i = 4; i < 16; i++) + { + task->data[i] = MAX_SPRITES; + } +} static void LoadSlotMachineWheelOverlay(void); -void sub_8104CAC(u8 arg0) { +static void sub_8104CAC(u8 arg0) { u8 i; struct Task *task; sub_8104DA4(); - task = &gTasks[ewram0_8->unk3D]; + task = gTasks + eSlotMachine->unk3D; task->data[1] = arg0; - i = 0; - while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++) { u8 spriteId; spriteId = sub_8105BB4( @@ -59,20 +2879,1034 @@ void sub_8104CAC(u8 arg0) { gSprites[spriteId].invisible = TRUE; } #endif + } +} + +static void sub_8104D30(u8 a0, SpriteCallback a1, s16 a2, s16 a3, s16 a4) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + for (i = 4; i < 16; i++) + { + if (task->data[i] == MAX_SPRITES) + { + task->data[i] = sub_8105BF8(a0, a1, a2, a3, a4); + break; + } + } +} + +static void (*const gUnknown_083ED064[])(void); + +void sub_8104DA4(void) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + if ((u16)task->data[1] != 0xFFFF) + gUnknown_083ED064[task->data[1]](); + for (i = 4; i < 16; i++) + { + if (task->data[i] != MAX_SPRITES) + { + DestroySprite(gSprites + task->data[i]); + task->data[i] = MAX_SPRITES; + } + } +} + +static bool8 sub_8104E18(void) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + for (i = 4; i < 16; i++) + { + if (task->data[i] != MAX_SPRITES) + { + if (gSprites[task->data[i]].data[7]) + return FALSE; + } + } + return TRUE; +} + +static void (*const gUnknown_083ECC54[])(struct Task *task) = { + nullsub_69 +}; + +static void sub_8104E74(u8 taskId) +{ + gUnknown_083ECC54[gTasks[taskId].data[0]](gTasks + taskId); +} + +static void nullsub_69(struct Task *task) +{ + +} + +static const struct SpriteTemplate gSpriteTemplate_83ED414; + +static void sub_8104EA8(void) +{ + s16 i; + s16 j; + s16 x; + for (i = 0, x = 0x30; i < 3; i++, x += 0x28) + { + for (j = 0; j < 120; j += 24) + { + struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED414, x, 0, 14); + sprite->oam.priority = 3; + sprite->data[0] = i; + sprite->data[1] = j; + sprite->data[3] = -1; + } + } +} + +static void sub_8104F18(struct Sprite *sprite) +{ + sprite->data[2] = eSlotMachine->unk1C[sprite->data[0]] + sprite->data[1]; + sprite->data[2] %= 120; + sprite->pos1.y = eSlotMachine->unk22[sprite->data[0]] + 28 + sprite->data[2]; + sprite->sheetTileStart = GetSpriteTileStartByTag(GetTagOfReelSymbolOnScreenAtPos(sprite->data[0], sprite->data[2] / 24)); + SetSpriteSheetFrameTileNum(sprite); +} + +static void sub_8104F8C(void) +{ + s16 i; + s16 x; + for (x = 203, i = 1; i < 10000; i *= 10, x -= 7) + { + sub_8104FF4(x, 23, 0, i); + } + for (x = 235, i = 1; i < 10000; i *= 10, x -= 7) + { + sub_8104FF4(x, 23, 1, i); + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED42C; + +static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3) +{ + struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED42C, x, y, 13); + sprite->oam.priority = 2; + sprite->data[0] = a2; + sprite->data[1] = a3; + sprite->data[2] = a3 * 10; + sprite->data[3] = -1; +} + +static void sub_810506C(struct Sprite *sprite) +{ + u16 tag = eSlotMachine->coins; + if (sprite->data[0]) + tag = eSlotMachine->payout; + if (sprite->data[3] != tag) + { + sprite->data[3] = tag; + tag %= (u16)sprite->data[2]; + tag /= (u16)sprite->data[1]; + tag += 7; + sprite->sheetTileStart = GetSpriteTileStartByTag(tag); + SetSpriteSheetFrameTileNum(sprite); + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED444; +static const struct SubspriteTable gSubspriteTables_83ED704[]; + +static void sub_81050C4(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED444, 0x58, 0x48, 15); + gSprites[spriteId].oam.priority = 3; + SetSubspriteTables(gSprites + spriteId, gSubspriteTables_83ED704); +} + +static const struct SpriteTemplate gSpriteTemplate_83ED45C; + +static void sub_8105100(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED45C, 0x118, 0x50, 1); + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; + eSlotMachine->unk3F = spriteId; +} + +static void sub_810514C(void) +{ + DestroySprite(gSprites + eSlotMachine->unk3F); +} + +static void sub_8105170(struct Sprite *sprite) +{ + sprite->pos2.y = sprite->pos2.x = 0; + if (sprite->animNum == 4) + { + sprite->pos2.y = sprite->pos2.x = 8; + if ((sprite->animCmdIndex != 0 && sprite->animDelayCounter != 0) || (sprite->animCmdIndex == 0 && sprite->animDelayCounter == 0)) + { + sprite->pos2.y = -8; + } + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED474; +static const struct SpriteTemplate gSpriteTemplate_83ED48C; +static const struct SubspriteTable gSubspriteTables_83ED73C[]; +static const struct SubspriteTable gSubspriteTables_83ED75C[]; + +static void sub_81051C0(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED474, 0x170, 0x34, 7); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + SetSubspriteTables(sprite, gSubspriteTables_83ED73C); + eSlotMachine->unk49[0] = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83ED48C, 0x170, 0x54, 7); + sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + SetSubspriteTables(sprite, gSubspriteTables_83ED75C); + eSlotMachine->unk49[1] = spriteId; +} + +static const struct SpriteTemplate gSpriteTemplate_83ED4A4; +static const struct SubspriteTable gSubspriteTables_83ED78C[]; + +static void sub_8105284(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4A4, 0xa8 - gSpriteCoordOffsetX, 0x50, 7); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + SetSubspriteTables(sprite, gSubspriteTables_83ED78C); + eSlotMachine->unk42 = spriteId; +} + +static const struct SpriteTemplate gSpriteTemplate_83ED4BC; + +static void sub_81052EC(void) +{ + u8 i; + s16 r5; + for (i = 0, r5 = 0; i < 3; i++, r5 += 20) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4BC, 0x170, 0x00, 10); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + sprite->data[7] = r5; + eSlotMachine->unk4B[i] = spriteId; + } +} + +static void sub_810535C(struct Sprite *sprite) +{ + s16 r0 = (u16)(eSlotMachine->unk14 + sprite->data[7]); + r0 %= 40; + sprite->pos1.y = r0 + 59; + StartSpriteAnimIfDifferent(sprite, sub_8102C48(r0 / 20)); +} + +static const struct SpriteTemplate gSpriteTemplate_83ED4D4; +static const struct SubspriteTable gSubspriteTables_83ED7B4[]; + +static void sub_81053A0(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x170, 0x64, 9); + struct Sprite *sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); + eSlotMachine->unk4E[0] = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x120, 0x68, 4); + sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); + eSlotMachine->unk4E[1] = spriteId; +} + +static const struct SpriteTemplate gSpriteTemplate_83ED4EC; +static const struct SubspriteTable gSubspriteTables_83ED7D4[]; + +static void sub_810545C(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4EC, 0x170, 0x4c, 11); + struct Sprite *sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7D4); + eSlotMachine->unk40 = spriteId; +} + +static void sub_81054B8(void) +{ + u8 i; + + DestroySprite(gSprites + eSlotMachine->unk40); + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk49[i]); + } + for (i = 0; i < 3; i++) + { + DestroySprite(gSprites + eSlotMachine->unk4B[i]); + } +} + +static void sub_8105524(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk4E[i]); + } +} + +static void sub_8105554(void) +{ + DestroySprite(gSprites + eSlotMachine->unk42); +} + +static const struct SpriteTemplate gSpriteTemplate_83ED504; + +static void sub_8105578(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0x98, 0x20, 5); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->hFlip = TRUE; + eSlotMachine->unk50[0] = spriteId; + sprite->data[0] = 8; + sprite->data[1] = -1; + sprite->data[2] = -1; + sprite->data[7] = 0x20; + + spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5); + sprite = gSprites + spriteId; + sprite->oam.priority = 1; + eSlotMachine->unk50[1] = spriteId; + sprite->data[1] = 1; + sprite->data[2] = -1; + sprite->data[7] = 0x20; +} + +static void sub_810562C(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[0]--; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->invisible = TRUE; + } + else + { + sprite->invisible = FALSE; + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; + if (++sprite->data[3] >= 8) + { + sprite->data[0] = sprite->data[7]; + sprite->data[3] = 0; + } + } +} + +static void sub_8105688(s16 a0) +{ + gSprites[eSlotMachine->unk50[0]].data[7] = a0; + gSprites[eSlotMachine->unk50[1]].data[7] = a0; +} + +static void sub_81056C0(void) +{ + u8 i; + + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk50[i]); + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED51C; + +static void sub_81056F0(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3); + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[6] = 16; + gSprites[spriteId].data[7] = 8; + eSlotMachine->unk52[0] = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3); + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].hFlip = TRUE; + eSlotMachine->unk52[1] = spriteId; +} + +static const u8 gUnknown_083ECC58[2]; // don't remove this until decompiled through gUnknown_083ECCF8 + +static void sub_8105784(struct Sprite *sprite) +{ + u8 sp[] = {16, 0}; + if (sprite->data[0] && --sprite->data[6] <= 0) + { + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, sp[sprite->data[5]], sp[sprite->data[5]], sp[sprite->data[5]]); + ++sprite->data[5]; + sprite->data[5] &= 1; + sprite->data[6] = sprite->data[7]; + } +} + +static void sub_81057E8(s16 a0) +{ + gSprites[eSlotMachine->unk52[0]].data[7] = a0; +} + +static void sub_8105804(void) +{ + u8 i; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0); + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk52[i]); + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED534; + +static void sub_8105854(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED534, 0xa8, 0x50, 6); + gSprites[spriteId].oam.priority = 1; + eSlotMachine->unk41 = spriteId; +} + +static void sub_8105894(struct Sprite *sprite) +{ + sprite->pos2.y = gSpriteCoordOffsetY; +} + +static void sub_81058A0(void) +{ + DestroySprite(gSprites + eSlotMachine->unk41); +} + +static const struct SpriteTemplate gSpriteTemplate_83ED54C; + +static void sub_81058C4(void) +{ + u8 i; + u16 sp[] = {0x0, 0x40, 0x80, 0xC0}; + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED54C, 0x50 - gSpriteCoordOffsetX, 0x44, 0); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + sprite->data[0] = sp[i]; + eSlotMachine->unk54[i] = spriteId; + } +} - i += 1; +static void sub_810594C(struct Sprite *sprite) +{ + sprite->data[0] -= 2; + sprite->data[0] &= 0xff; + sprite->pos2.x = Cos(sprite->data[0], 20); + sprite->pos2.y = Sin(sprite->data[0], 6); + sprite->subpriority = 0; + if (sprite->data[0] >= 0x80) + { + sprite->subpriority = 2; + } + if (++sprite->data[1] >= 16) + { + sprite->hFlip ^= 1; + sprite->data[1] = 0; } } -asm(".section .text_b"); +static void sub_81059B8(void) +{ + u8 i; + for (i = 0; i < 4; i++) + { + DestroySprite(gSprites + eSlotMachine->unk54[i]); + } +} + +static const struct SpriteTemplate gSpriteTemplate_83ED564; + +static void sub_81059E8(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 0xa8, 0x3c, 8); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + InitSpriteAffineAnim(sprite); + eSlotMachine->unk43 = spriteId; +} + +static void sub_8105A38(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (sprite->affineAnimEnded) + sprite->data[0]++; + } + else if (sprite->data[0] == 1) + { + sprite->invisible ^= 1; + if (++sprite->data[2] >= 24) + { + sprite->data[0]++; + sprite->data[2] = 0; + } + } + else + { + sprite->invisible = TRUE; + if (++sprite->data[2] >= 16) + sprite->data[7] = 1; + } + sprite->data[1] &= 0xff; + sprite->data[1] += 16; + sprite->pos2.y -= (sprite->data[1] >> 8); +} + +u8 sub_8105ACC(void) +{ + return gSprites[eSlotMachine->unk43].data[7]; +} + +static void sub_8105AEC(void) +{ + struct Sprite *sprite = gSprites + eSlotMachine->unk43; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); +} -void sub_8106448(void) { +static const struct SpriteTemplate gSpriteTemplate_83ED6CC; + +static u8 sub_8105B1C(s16 x, s16 y) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED6CC, x, y, 12); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 2; + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + InitSpriteAffineAnim(sprite); + return spriteId; +} + +static void sub_8105B70(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + sprite->data[7] = 1; +} + +static void sub_8105B88(u8 spriteId) +{ + struct Sprite *sprite = gSprites + spriteId; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); +} + +static const s16 gUnknown_083ECE7E[][2]; +static const SpriteCallback gUnknown_083ECF0C[]; + +u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2) +{ + return sub_8105BF8(templateIdx, gUnknown_083ECF0C[cbAndCoordsIdx], gUnknown_083ECE7E[cbAndCoordsIdx][0], gUnknown_083ECE7E[cbAndCoordsIdx][1], a2); +} + +static const struct SpriteTemplate *const gUnknown_083EDB5C[]; +static const struct SubspriteTable *const gUnknown_083EDBC4[]; + +static u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4) +{ + u8 spriteId = CreateSprite(gUnknown_083EDB5C[templateIdx], x, y, 16); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 3; + sprite->callback = callback; + sprite->data[6] = a4; + sprite->data[7] = 1; + if (gUnknown_083EDBC4[templateIdx]) + SetSubspriteTables(sprite, gUnknown_083EDBC4[templateIdx]); + return spriteId; +} + +static void sub_8105C64(struct Sprite *sprite) +{ + sprite->data[7] = 0; +} + +static void sub_8105C6C(struct Sprite *sprite) +{ + s16 sp0[] = {4, -4, 4, -4}; + s16 sp8[] = {4, 4, -4, -4}; + + if (sprite->data[1]++ >= 16) + { + sprite->subspriteTableNum ^= 1; + sprite->data[1] = 0; + } + sprite->pos2.x = 0; + sprite->pos2.y = 0; + if (sprite->subspriteTableNum != 0) + { + sprite->pos2.x = sp0[sprite->data[6]]; + sprite->pos2.y = sp8[sprite->data[6]]; + } +} + +static void sub_8105CF0(struct Sprite *sprite) +{ + sprite->hFlip = TRUE; + sub_8105C6C(sprite); +} + +static void sub_8105D08(struct Sprite *sprite) +{ + sprite->vFlip = TRUE; + sub_8105C6C(sprite); +} + +static void sub_8105D20(struct Sprite *sprite) +{ + sprite->hFlip = TRUE; + sprite->vFlip = TRUE; + sub_8105C6C(sprite); +} + +static void sub_8105D3C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 90) + { + sprite->data[0]++; + } + break; + case 2: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0x110) + { + sprite->data[0]++; + } + break; + case 3: + sprite->data[7] = 0; + break; + } +} + +static void sub_8105DA4(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x -= 4; + if (sprite->pos1.x <= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 90) + { + sprite->data[0]++; + } + break; + case 2: + sprite->pos1.x -= 4; + if (sprite->pos1.x <= 0x90) + { + sprite->data[0]++; + } + break; + case 3: + sprite->data[7] = 0; + break; + } +} + +static void sub_8105E08(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + StartSpriteAnim(sprite, eSlotMachine->unk0A - 1); + sprite->data[0]++; + // fallthrough + case 1: + if (++sprite->data[1] >= 4) + { + sprite->data[0]++; + sprite->data[1] = 0; + } + break; + case 2: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] > 90) + { + sprite->data[0]++; + } + break; + case 4: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xf8) + { + sprite->data[0]++; + } + break; + case 5: + sprite->data[7] = 0; + break; + } +} + +static void sub_8105EB4(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->animPaused = TRUE; + sprite->data[0]++; + // fallthrough + case 1: + sprite->pos1.y += 8; + if (sprite->pos1.y >= 0x70) + { + sprite->pos1.y = 0x70; + sprite->data[1] = 16; + sprite->data[0]++; + } + break; + case 2: + if (sprite->data[2] == 0) + { + sprite->pos1.y -= sprite->data[1]; + sprite->data[1] = -sprite->data[1]; + if (++sprite->data[3] >= 2) + { + sprite->data[1] >>= 2; + sprite->data[3] = 0; + if (sprite->data[1] == 0) + { + sprite->data[0]++; + sprite->data[7] = 0; + sprite->animPaused = FALSE; + } + } + } + sprite->data[2]++; + sprite->data[2] &= 0x07; + break; + } +} + +static void sub_8105F54(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 8) + { + sprite->data[0]++; + } + break; + case 1: + sprite->pos1.y += 2; + if (sprite->pos1.y >= 0x30) + { + sprite->pos1.y = 0x30; + sprite->data[0]++; + sprite->data[7] = 0; + } + break; + } +} + +static void sub_8105F9C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->invisible = TRUE; + if (++sprite->data[1] > 0x20) + { + sprite->data[0]++; + sprite->data[1] = 5; + sprite->oam.mosaic = TRUE; + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); + REG_MOSAIC = ((sprite->data[1] << 4) | sprite->data[1]) << 8; + } + break; + case 1: + sprite->data[1] -= (sprite->data[2] >> 8); + if (sprite->data[1] < 0) + { + sprite->data[1] = 0; + } + REG_MOSAIC = ((sprite->data[1] << 4) | sprite->data[1]) << 8; + sprite->data[2] &= 0xff; + sprite->data[2] += 0x80; + if (sprite->data[1] == 0) + { + sprite->data[0]++; + sprite->data[7] = 0; + sprite->oam.mosaic = FALSE; + StartSpriteAnim(sprite, 0); + } + break; + } +} + +static const u16 *const gUnknown_083EDE10[]; + +static void sub_8106058(struct Sprite *sprite) +{ + if (sprite->data[1] < 3) + { + LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); + if (++sprite->data[2] >= 4) + { + sprite->data[1]++; + sprite->data[2] = 0; + } + } + else + { + LoadPalette(gUnknown_083EDE10[sprite->data[1]], (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); + if (++sprite->data[2] >= 25) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + } + } + StartSpriteAnimIfDifferent(sprite, 1); + sprite->data[7] = 0; +} + +static void sub_81060FC(struct Sprite *sprite) +{ + s16 sp00[] = {0, -40, 0, 0, 48, 0, 24, 0}; + s16 sp10[] = {-32, 0, -32, -48, 0, -48, 0, -48}; + s16 sp20[] = {16, 12, 16, 0, 0, 4, 8, 8}; + + switch (sprite->data[0]) + { + case 0: + sprite->pos2.x = sp00[sprite->data[6]]; + sprite->pos2.y = sp10[sprite->data[6]]; + sprite->data[1] = sp20[sprite->data[6]]; + sprite->data[0]++; + // fallthrough + case 1: + if (sprite->data[1]-- == 0) + { + sprite->data[0]++; + } + break; + case 2: + if (sprite->pos2.x > 0) + { + sprite->pos2.x -= 4; + } + else if (sprite->pos2.x < 0) + { + sprite->pos2.x += 4; + } + if (sprite->pos2.y > 0) + { + sprite->pos2.y -= 4; + } + else if (sprite->pos2.y < 0) + { + sprite->pos2.y += 4; + } + if (sprite->pos2.x == 0 && sprite->pos2.y == 0) + { + sprite->data[0]++; + } + break; + } +} + +static void sub_81061C8(struct Sprite *sprite) +{ + s16 sp0[] = {160, 192, 224, 104, 80, 64, 48, 24}; + + if (sprite->data[0] == 0) + { + sprite->data[0]++; + sprite->data[1] = 12; + } + sprite->pos2.x = Cos(sp0[sprite->data[6]], sprite->data[1]); + sprite->pos2.y = Sin(sp0[sprite->data[6]], sprite->data[1]); + if (sprite->data[1]) + { + sprite->data[1]--; + } +} + +static void sub_8106230(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + eSlotMachine->winIn = 0x2f; + eSlotMachine->winOut = 0x3f; + eSlotMachine->win0v = 0x2088; + sprite->invisible = TRUE; + sprite->data[0]++; + // fallthrough + case 1: + sprite->data[1] += 2; + sprite->data[2] = sprite->data[1] + 0xb0; + sprite->data[3] = 0xf0 - sprite->data[1]; + if (sprite->data[2] > 0xd0) + { + sprite->data[2] = 0xd0; + } + if (sprite->data[3] < 0xd0) + { + sprite->data[3] = 0xd0; + } + eSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; + if (sprite->data[1] > 0x33) + { + sprite->data[0]++; + eSlotMachine->winIn = 0x3f; + } + break; + case 2: + if (eSlotMachine->bet == 0) + { + break; + } + sub_8104D30(5, SpriteCallbackDummy, 0xd0, 0x74, 0); + eSlotMachine->win0h = 0xc0e0; + eSlotMachine->win0v = 0x6880; + eSlotMachine->winIn = 0x2f; + sprite->data[0]++; + sprite->data[1] = 0; + // fallthrough + case 3: + sprite->data[1] += 2; + sprite->data[2] = sprite->data[1] + 0xc0; + sprite->data[3] = 0xe0 - sprite->data[1]; + if (sprite->data[2] > 0xd0) + { + sprite->data[2] = 0xd0; + } + if (sprite->data[3] < 0xd0) + { + sprite->data[3] = 0xd0; + } + eSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; + if (sprite->data[1] > 0x0f) + { + sprite->data[0]++; + eSlotMachine->winIn = 0x3f; + } + break; + } +} + +static void nullsub_70(void) +{ + +} + +static void sub_8106364(void) +{ + REG_MOSAIC = 0; +} + +static const u16 *const gUnknown_083EDE20; + +static void sub_8106370(void) +{ + LoadPalette(gUnknown_083EDE20, (IndexOfSpritePaletteTag(6) << 4) + 0x100, 0x20); +} + +static void sub_810639C(void) +{ + eSlotMachine->win0h = 0xf0; + eSlotMachine->win0v = 0xa0; + eSlotMachine->winIn = 0x3f; + eSlotMachine->winOut = 0x3f; +} + +static const u8 sReelTimeGfx[]; +static const struct SpriteSheet sSlotMachineSpriteSheets[]; +static const struct SpritePalette gSlotMachineSpritePalettes[]; + +static void sub_81063C0(void) +{ + sub_8106404(); + LZDecompressWram(gSlotMachineReelTimeLights_Gfx, eSlotMachineGfxBuffer); + LZDecompressWram(sReelTimeGfx, eSlotMachineReelTimeGfxBuffer); + LoadSpriteSheets(sSlotMachineSpriteSheets); + LoadSpritePalettes(gSlotMachineSpritePalettes); +} + +static const u8 *const gUnknown_083EDCE4; +static const struct SpriteSheet gUnknown_083EDCDC; + +static void sub_8106404(void) +{ + u8 *dest = eSlotMachineGfxBuffer; + u8 i = 0; + const struct SpriteSheet *sheet = &gUnknown_083EDCDC; + const u8 *src = gUnknown_083EDCE4; + for (i = 0; i < 0x40; i++) + { + u8 j; + for (j = 0; j < 0x20; j++, dest++) + { + *dest = src[j]; + } + } + LoadSpriteSheet(sheet); +} + +static void sub_8106448(void) { u32 offsetRead, offsetWrite; u32 size; - LZDecompressWram(gSlotMachine_Gfx, ewram10000_2); + LZDecompressWram(gSlotMachine_Gfx, eSlotMachineGfxBuffer); - offsetRead = (u32)ewram10000_2; + offsetRead = (u32)eSlotMachineGfxBuffer; offsetWrite = BG_VRAM; size = SLOTMACHINE_GFX_TILES * 32; while (TRUE) @@ -92,7 +3926,7 @@ void sub_8106448(void) { LoadPalette(gPalette_83EDE24, 208, 32); } -void sub_81064B8(void) { +static void sub_81064B8(void) { CpuCopy16(gUnknown_08E95AB8, BG_SCREEN_ADDR(29), 20 * 32 * 2); LoadSlotMachineWheelOverlay(); } @@ -123,7 +3957,7 @@ static void LoadSlotMachineWheelOverlay(void) { } } -void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { +static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { u16 *vram = BG_SCREEN_ADDR(29); vram[15 * 32 + arg0] = arg1; @@ -132,7 +3966,7 @@ void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { vram[16 * 32 + 1 + arg0] = arg4; } -void sub_81065DC(void) { +static void sub_81065DC(void) { s16 y, x; u16 *screen; @@ -147,3 +3981,1433 @@ void sub_81065DC(void) { } } } + +static const u8 sReelSymbols[][21] = { + { + SLOT_MACHINE_TAG_7_RED, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_7_BLUE, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_7_RED, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_7_BLUE, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_REPLAY + }, { + SLOT_MACHINE_TAG_7_RED, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_7_BLUE, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_CHERRY + }, { + SLOT_MACHINE_TAG_7_RED, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_7_BLUE, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_REPLAY, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_CHERRY + } +}; + +static const u8 gUnknown_083ECCF1[] = { + 1, 0, 5, 4, 3, 2 +}; + +static const s16 gUnknown_083ECCF8[][2] = { + {0, 6}, + {0, 10}, + {0, 2} +}; + +static const u8 gUnknown_083ECD04[][3] = { + {1, 1, 12}, + {1, 1, 14}, + {2, 2, 14}, + {2, 2, 14}, + {2, 3, 16}, + {3, 3, 16} +}; + +static const u8 gUnknown_083ECD16[][6] = { + {25, 25, 30, 40, 40, 50}, + {25, 25, 30, 30, 35, 35}, + {25, 25, 30, 25, 25, 30} +}; + +static const u8 gUnknown_083ECD28[][6] = { + {20, 25, 25, 20, 25, 25}, + {12, 15, 15, 18, 19, 22}, + {25, 25, 25, 30, 30, 40}, + {25, 25, 20, 20, 15, 15}, + {40, 40, 35, 35, 40, 40} +}; + +static const u8 gUnknown_083ECD46[][17] = { + {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, + { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, + { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, + { 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 45, 45, 45, 100}, + { 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 100}, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6} +}; + +static const u8 gUnknown_083ECDAC[][17] = { + { 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5}, + { 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6}, + { 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35}, + { 2, 2, 2, 3, 3, 3, 3, 30, 30, 30, 30, 30, 30, 100, 100, 100, 50}, + { 1, 1, 1, 2, 2, 2, 2, 30, 30, 30, 30, 30, 30, 40, 40, 40, 100}, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60} +}; + +static const u16 gUnknown_083ECE12[] = { + 0x80, 0xaf, 0xc8, 0xe1, 0x100 +}; + +static const u16 gUnknown_083ECE1C[][2] = { + {10, 5}, + {10, 10}, + {10, 15}, + {10, 25}, + {10, 35} +}; + +static const u16 gUnknown_083ECE30[] = { + 0, 5, 10, 15, 20 +}; + + +static const u8 gUnknown_083ECE3A[] = { + 6, 4, 3, 2, 5, 0, 0, 0 +}; + +static const u16 gUnknown_083ECE42[] = { + 0x80, 0x20, 0x40 +}; + +static const u16 gUnknown_083ECE48[] = { + 0x10, 0x08, 0x04, 0x02, 0x01 +}; + +static const u8 sSym2Match[] = { + SLOT_MACHINE_MATCHED_777_RED, + SLOT_MACHINE_MATCHED_777_BLUE, + SLOT_MACHINE_MATCHED_AZURILL, + SLOT_MACHINE_MATCHED_LOTAD, + SLOT_MACHINE_MATCHED_1CHERRY, + SLOT_MACHINE_MATCHED_POWER, + SLOT_MACHINE_MATCHED_REPLAY +}; + +static const u16 sSlotMatchFlags[] = { + 1 << SLOT_MACHINE_MATCHED_1CHERRY, + 1 << SLOT_MACHINE_MATCHED_2CHERRY, + 1 << SLOT_MACHINE_MATCHED_REPLAY, + 1 << SLOT_MACHINE_MATCHED_LOTAD, + 1 << SLOT_MACHINE_MATCHED_AZURILL, + 1 << SLOT_MACHINE_MATCHED_POWER, + 1 << SLOT_MACHINE_MATCHED_777_MIXED, + 1 << SLOT_MACHINE_MATCHED_777_RED, + 1 << SLOT_MACHINE_MATCHED_777_BLUE +}; + +static const u16 sSlotPayouts[] = { + 2, 4, 0, 6, 12, 3, 90, 300, 300 +}; + +static const s16 gUnknown_083ECE7E[][2] = { + { 0xd0, 0x38}, + { 0xb8, 0x00}, + { 0xc8, 0x08}, + { 0xd8, 0x10}, + { 0xe8, 0x18}, + { 0xd0, 0x48}, + { 0xd0, 0x08}, + { 0xd0, 0x40}, + { 0xd0, 0x38}, + { 0xc0, 0x58}, + { 0xe0, 0x58}, + { 0xc0, 0x78}, + { 0xe0, 0x78}, + { 0x90, 0x38}, + {0x110, 0x58}, + { 0xa8, 0x70}, + { 0xd0, 0x54}, + { 0xd0, 0x70}, + { 0xbc, 0x34}, + { 0xd0, 0x34}, + { 0xe4, 0x34}, + { 0xb8, 0x48}, + { 0xc4, 0x48}, + { 0xd0, 0x48}, + { 0xdc, 0x48}, + { 0xe8, 0x48}, + { 0xbc, 0x34}, + { 0xd0, 0x34}, + { 0xe4, 0x34}, + { 0xb8, 0x48}, + { 0xc4, 0x48}, + { 0xd0, 0x48}, + { 0xdc, 0x48}, + { 0xe8, 0x48}, + { 0x00, 0x00} +}; + +static const SpriteCallback gUnknown_083ECF0C[] = { + sub_8105C64, + sub_8105F54, + sub_8105F54, + sub_8105F54, + sub_8105F54, + sub_8105F9C, + sub_8105EB4, + sub_8105C64, + sub_8105C64, + sub_8105C6C, + sub_8105CF0, + sub_8105D08, + sub_8105D20, + sub_8105D3C, + sub_8105DA4, + sub_8105E08, + sub_8105C64, + sub_8106058, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81060FC, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_81061C8, + sub_8106230 +}; + +static const struct UnkStruct1 Unknown_83ECF98[] = { + {25, 34, 0}, + {2, 0, 0}, + {9, 16, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ECFA8[] = { + {10, 1, 0}, + {11, 2, 0}, + {12, 3, 0}, + {13, 4, 0}, + {5, 5, 0}, + {8, 6, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ECFC4[] = { + {3, 7, 0}, + {8, 17, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ECFD0[] = { + {4, 8, 0}, + {6, 9, 0}, + {6, 10, 1}, + {6, 11, 2}, + {6, 12, 3}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ECFE8[] = { + {0, 13, 0}, + {1, 14, 0}, + {7, 15, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ECFF8[] = { + {19, 26, 0}, + {20, 27, 1}, + {21, 28, 2}, + {14, 29, 3}, + {15, 30, 4}, + {16, 31, 5}, + {17, 32, 6}, + {18, 33, 7}, + {8, 17, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 Unknown_83ED020[] = { + {22, 18, 0}, + {23, 19, 1}, + {24, 20, 2}, + {14, 21, 3}, + {15, 22, 4}, + {16, 23, 5}, + {17, 24, 6}, + {18, 25, 7}, + {8, 17, 0}, + {255, 0, 0} +}; + +static const struct UnkStruct1 *const gUnknown_083ED048[] = { + Unknown_83ECF98, + Unknown_83ECFA8, + Unknown_83ECFC4, + Unknown_83ECFD0, + Unknown_83ECFE8, + Unknown_83ED020, + Unknown_83ECFF8 +}; + +static void (*const gUnknown_083ED064[])(void) = { + sub_810639C, + sub_8106364, + sub_8106370, + nullsub_70, + nullsub_70, + sub_8106370, + sub_8106370 +}; + + +static const struct OamData gOamData_83ED080 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0x0, + .matrixNum = 0, + .size = 0, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED088 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_V_RECTANGLE, + .x = 0x0, + .matrixNum = 0, + .size = 0, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED090 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0x0, + .matrixNum = 0, + .size = 1, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED098 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_V_RECTANGLE, + .x = 0x0, + .matrixNum = 0, + .size = 2, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED0A0 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0x0, + .matrixNum = 0, + .size = 2, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED0A8 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_V_RECTANGLE, + .x = 0x0, + .matrixNum = 0, + .size = 3, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED0B0 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_H_RECTANGLE, + .x = 0x0, + .matrixNum = 0, + .size = 3, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData gOamData_83ED0B8 = { + .y = 0x0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0x0, + .matrixNum = 0, + .size = 3, + .tileNum = 0x0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED0C0[] = { + {eSlotMachineReelTimeGfxBuffer + 0x0000, 0x800}, + {eSlotMachineReelTimeGfxBuffer + 0x0800, 0x800}, + {eSlotMachineReelTimeGfxBuffer + 0x1000, 0x800}, + {eSlotMachineReelTimeGfxBuffer + 0x1800, 0x800}, + {eSlotMachineReelTimeGfxBuffer + 0x2000, 0x800} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED0E8[] = { + {eSlotMachineReelTimeGfxBuffer + 0x2800, 0x300} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED0F0[] = { + {eSlotMachineReelTimeGfxBuffer + 0x2B00, 0x500} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED0F8[] = { + {eSlotMachineReelTimeGfxBuffer + 0x3000, 0x600} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED100[] = { + {gSpriteImage_8E988E8, 0x80}, + {gSpriteImage_8E98968, 0x80}, + {gSpriteImage_8E989E8, 0x80}, + {gSpriteImage_8E98A68, 0x80}, + {gSpriteImage_8E98AE8, 0x80}, + {gSpriteImage_8E98B68, 0x80} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED130[] = { + {gSpriteImage_8E991E8, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED138[] = { + {gSpriteImage_8E99808, 0x40} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED140[] = { + {gSpriteImage_8E98BE8, 0x100}, + {gSpriteImage_8E98CE8, 0x100} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED150[] = { + {gSpriteImage_8E993E8, 0x400} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED158[] = { + {gSpriteImage_8E98DE8, 0x200}, + {gSpriteImage_8E98FE8, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED168[] = { + {gSpriteImage_8E98848, 0x20} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED170[] = { + {gSpriteImage_8E98868, 0x80} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED178[] = { + {eSlotMachineGfxBuffer + 0x0000, 0x600} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED180[] = { + {eSlotMachineGfxBuffer + 0x0600, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED188[] = { + {eSlotMachineGfxBuffer + 0x0800, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED190[] = { + {eSlotMachineGfxBuffer + 0x0A00, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED198[] = { + {eSlotMachineGfxBuffer + 0x0C00, 0x300} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1A0[] = { + {eSlotMachineGfxBuffer + 0x1000, 0x400} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1A8[] = { + {eSlotMachineGfxBuffer + 0x1400, 0x200} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1B0[] = { + {eSlotMachineGfxBuffer + 0x1600, 0x300} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1B8[] = { + {eSlotMachineGfxBuffer + 0x1900, 0x300} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1C0[] = { + {eSlotMachineGfxBuffer + 0x1C00, 0x200}, + {eSlotMachineGfxBuffer + 0x1E00, 0x200}, + {eSlotMachineGfxBuffer + 0x1E00, 0x200} // is this a typo? +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1D8[] = { + {eSlotMachineGfxBuffer + 0x2000, 0x280} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED1E0[] = { + {eSlotMachineGfxBuffer + 0x2280, 0x80}, + {eSlotMachineGfxBuffer + 0x2300, 0x80}, + {eSlotMachineGfxBuffer + 0x2380, 0x80}, + {eSlotMachineGfxBuffer + 0x2400, 0x80}, + {eSlotMachineGfxBuffer + 0x2480, 0x80} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED208[] = { + {eSlotMachineGfxBuffer + 0x2600, 0x480}, + {eSlotMachineGfxBuffer + 0x2A80, 0x480} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED218[] = { + {eSlotMachineGfxBuffer + 0x2F00, 0x180}, + {eSlotMachineGfxBuffer + 0x3080, 0x180} +}; + +static const struct SpriteFrameImage gSpriteImageTable_83ED228[] = { + {gSpriteImage_8E98828, 0x20} +}; + +static const union AnimCmd gSpriteAnim_83ED230[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED238[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED240[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED248[] = { + ANIMCMD_FRAME(1, 16), + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED254[] = { + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED260[] = { + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED26C[] = { + ANIMCMD_FRAME(2, 32), + ANIMCMD_FRAME(3, 32), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED278[] = { + ANIMCMD_FRAME(4, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED280[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED288[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED290[] = { + ANIMCMD_FRAME(2, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED298[] = { + ANIMCMD_FRAME(3, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED2A0[] = { + ANIMCMD_FRAME(4, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED2A8[] = { + ANIMCMD_FRAME(5, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED2B0[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED2BC[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 16), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED2C8[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED2D4[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED2DC[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED2E8[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 16), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 16, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gSpriteAnim_83ED2FC[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED304[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED30C[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED314[] = { + ANIMCMD_FRAME(2, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED31C[] = { + ANIMCMD_FRAME(3, 1), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_83ED324[] = { + ANIMCMD_FRAME(4, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED32C[] = { + gSpriteAnim_83ED230 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED330[] = { + gSpriteAnim_83ED238 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED334[] = { + gSpriteAnim_83ED240, + gSpriteAnim_83ED248, + gSpriteAnim_83ED254, + gSpriteAnim_83ED260, + gSpriteAnim_83ED26C, + gSpriteAnim_83ED278 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED34C[] = { + gSpriteAnim_83ED280, + gSpriteAnim_83ED288, + gSpriteAnim_83ED290, + gSpriteAnim_83ED298, + gSpriteAnim_83ED2A0, + gSpriteAnim_83ED2A8 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED364[] = { + gSpriteAnim_83ED2B0 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED368[] = { + gSpriteAnim_83ED2BC +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED36C[] = { + gSpriteAnim_83ED2C8, + gSpriteAnim_83ED2D4 +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED374[] = { + gSpriteAnim_83ED2DC +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED378[] = { + gSpriteAnim_83ED2E8, + gSpriteAnim_83ED2FC +}; + +static const union AnimCmd *const gSpriteAnimTable_83ED380[] = { + gSpriteAnim_83ED304, + gSpriteAnim_83ED30C, + gSpriteAnim_83ED314, + gSpriteAnim_83ED31C, + gSpriteAnim_83ED324 +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83ED394[] = { + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x1, 0x1, 0, 1), + AFFINEANIMCMD_LOOP(255), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83ED3BC[] = { + gSpriteAffineAnim_83ED394 +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83ED3C0[] = { + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 6, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, 12, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 12, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, 12, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 12, 2), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83ED410[] = { + gSpriteAffineAnim_83ED3C0 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED414 = { + 0, 0, &gOamData_83ED0A0, gSpriteAnimTable_83ED32C, NULL, gDummySpriteAffineAnimTable, sub_8104F18 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED42C = { + 7, 4, &gOamData_83ED088, gSpriteAnimTable_83ED32C, NULL, gDummySpriteAffineAnimTable, sub_810506C +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED444 = { + 17, 0, &gOamData_83ED0B8, gSpriteAnimTable_83ED32C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED45C = { + 0xFFFF, 1, &gOamData_83ED0B8, gSpriteAnimTable_83ED334, gSpriteImageTable_83ED0C0, gDummySpriteAffineAnimTable, sub_8105170 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED474 = { + 0xFFFF, 2, &gOamData_83ED088, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED0E8, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED48C = { + 0xFFFF, 3, &gOamData_83ED088, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED0F0, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED4A4 = { + 0xFFFF, 3, &gOamData_83ED088, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED0F8, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED4BC = { + 0xFFFF, 4, &gOamData_83ED090, gSpriteAnimTable_83ED34C, gSpriteImageTable_83ED100, gDummySpriteAffineAnimTable, sub_810535C +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED4D4 = { + 0xFFFF, 4, &gOamData_83ED090, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED130, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED4EC = { + 0xFFFF, 4, &gOamData_83ED090, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED138, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED504 = { + 0xFFFF, 4, &gOamData_83ED098, gSpriteAnimTable_83ED364, gSpriteImageTable_83ED140, gDummySpriteAffineAnimTable, sub_810562C +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED51C = { + 0xFFFF, 7, &gOamData_83ED0A8, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED150, gDummySpriteAffineAnimTable, sub_8105784 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED534 = { + 0xFFFF, 5, &gOamData_83ED0A0, gSpriteAnimTable_83ED368, gSpriteImageTable_83ED158, gDummySpriteAffineAnimTable, sub_8105894 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED54C = { + 0xFFFF, 4, &gOamData_83ED080, gSpriteAnimTable_83ED330, gSpriteImageTable_83ED168, gDummySpriteAffineAnimTable, sub_810594C +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED564 = { + 0xFFFF, 4, &gOamData_83ED090, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED170, gSpriteAffineAnimTable_83ED3BC, sub_8105A38 +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED57C = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED178, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED594 = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED180, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED5AC = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED188, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED5C4 = { + 18, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED190, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED5DC = { + 0xFFFF, 6, &gOamData_83ED0B0, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED198, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED5F4 = { + 0xFFFF, 6, &gOamData_83ED0B0, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED1A0, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED60C = { + 19, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED1A8, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED624 = { + 20, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED1B0, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED63C = { + 21, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED1B8, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED654 = { + 0xFFFF, 6, &gOamData_83ED0A0, gSpriteAnimTable_83ED36C, gSpriteImageTable_83ED1C0, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED66C = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED1D8, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED684 = { + 0xFFFF, 6, &gOamData_83ED090, gSpriteAnimTable_83ED380, gSpriteImageTable_83ED1E0, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED69C = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED378, gSpriteImageTable_83ED208, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED6B4 = { + 0xFFFF, 6, &gOamData_83ED080, gSpriteAnimTable_83ED374, gSpriteImageTable_83ED218, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct SpriteTemplate gSpriteTemplate_83ED6CC = { + 0xFFFF, 4, &gOamData_83ED080, gSpriteAnimTable_83ED32C, gSpriteImageTable_83ED228, gSpriteAffineAnimTable_83ED410, sub_8105B70 +}; + +static const struct Subsprite gSubspriteTable_83ED6E4[] = { + {-64, -64, ST_OAM_SQUARE, 3, 0x0, 3}, + {0, -64, ST_OAM_SQUARE, 3, 0x0, 3}, + {-64, 0, ST_OAM_SQUARE, 3, 0x0, 3}, + {0, 0, ST_OAM_SQUARE, 3, 0x0, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED704[] = { + {4, gSubspriteTable_83ED6E4} +}; + +static const struct Subsprite gSubspriteTable_83ED70C[] = { + {-32, -12, ST_OAM_H_RECTANGLE, 1, 0x0, 1}, + {0, -12, ST_OAM_H_RECTANGLE, 1, 0x4, 1}, + {-32, -4, ST_OAM_H_RECTANGLE, 1, 0x8, 1}, + {0, -4, ST_OAM_H_RECTANGLE, 1, 0xc, 1}, + {-32, 4, ST_OAM_H_RECTANGLE, 1, 0x10, 1}, + {0, 4, ST_OAM_H_RECTANGLE, 1, 0x14, 1} +}; + +static const struct SubspriteTable gSubspriteTables_83ED73C[] = { + {6, gSubspriteTable_83ED70C} +}; + +static const struct Subsprite gSubspriteTable_83ED744[] = { + {-32, -20, ST_OAM_H_RECTANGLE, 3, 0x0, 1}, + {-32, 12, ST_OAM_H_RECTANGLE, 1, 0x20, 1}, + {0, 12, ST_OAM_H_RECTANGLE, 1, 0x24, 1} +}; + +static const struct SubspriteTable gSubspriteTables_83ED75C[] = { + {3, gSubspriteTable_83ED744} +}; + +static const struct Subsprite gSubspriteTable_83ED764[] = { + {-32, -24, ST_OAM_H_RECTANGLE, 3, 0x0, 1}, + {-32, 8, ST_OAM_H_RECTANGLE, 1, 0x20, 1}, + {0, 8, ST_OAM_H_RECTANGLE, 1, 0x24, 1}, + {-32, 16, ST_OAM_H_RECTANGLE, 1, 0x28, 1}, + {0, 16, ST_OAM_H_RECTANGLE, 1, 0x2c, 1} +}; + +static const struct SubspriteTable gSubspriteTables_83ED78C[] = { + {5, gSubspriteTable_83ED764} +}; + +static const struct Subsprite gSubspriteTable_83ED794[] = { + {-32, -8, ST_OAM_H_RECTANGLE, 1, 0x0, 1}, + {0, -8, ST_OAM_H_RECTANGLE, 1, 0x4, 1}, + {-32, 0, ST_OAM_H_RECTANGLE, 1, 0x8, 1}, + {0, 0, ST_OAM_H_RECTANGLE, 1, 0xc, 1} +}; + +static const struct SubspriteTable gSubspriteTables_83ED7B4[] = { + {4, gSubspriteTable_83ED794} +}; + +static const struct Subsprite gSubspriteTable_83ED7BC[] = { + {-8, -12, ST_OAM_H_RECTANGLE, 0, 0x0, 1}, + {-8, -4, ST_OAM_H_RECTANGLE, 0, 0x0, 1}, + {-8, 4, ST_OAM_H_RECTANGLE, 0, 0x0, 1} +}; + +static const struct SubspriteTable gSubspriteTables_83ED7D4[] = { + {3, gSubspriteTable_83ED7BC} +}; + +static const struct Subsprite gSubspriteTable_83ED7DC[] = { + {-32, -24, ST_OAM_H_RECTANGLE, 3, 0x0, 3}, + {-32, 8, ST_OAM_H_RECTANGLE, 1, 0x20, 3}, + {0, 8, ST_OAM_H_RECTANGLE, 1, 0x24, 3}, + {-32, 16, ST_OAM_H_RECTANGLE, 1, 0x28, 3}, + {0, 16, ST_OAM_H_RECTANGLE, 1, 0x2c, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED804[] = { + {5, gSubspriteTable_83ED7DC} +}; + +static const struct Subsprite gSubspriteTable_83ED80C[] = { + {-32, -8, ST_OAM_H_RECTANGLE, 1, 0x0, 3}, + {0, -8, ST_OAM_H_RECTANGLE, 1, 0x4, 3}, + {-32, 0, ST_OAM_H_RECTANGLE, 1, 0x8, 3}, + {0, 0, ST_OAM_H_RECTANGLE, 1, 0xc, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED82C[] = { + {4, gSubspriteTable_83ED80C} +}; + +static const struct Subsprite gSubspriteTable_83ED834[] = { + {-32, -8, ST_OAM_H_RECTANGLE, 1, 0x0, 3}, + {0, -8, ST_OAM_H_RECTANGLE, 1, 0x4, 3}, + {-32, 0, ST_OAM_H_RECTANGLE, 1, 0x8, 3}, + {0, 0, ST_OAM_H_RECTANGLE, 1, 0xc, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED854[] = { + {4, gSubspriteTable_83ED834} +}; + +static const struct Subsprite gSubspriteTable_83ED85C[] = { + {-32, -8, ST_OAM_H_RECTANGLE, 1, 0x0, 3}, + {0, -8, ST_OAM_H_RECTANGLE, 1, 0x4, 3}, + {-32, 0, ST_OAM_H_RECTANGLE, 1, 0x8, 3}, + {0, 0, ST_OAM_H_RECTANGLE, 1, 0xc, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED87C[] = { + {4, gSubspriteTable_83ED85C} +}; + +static const struct Subsprite gSubspriteTable_83ED884[] = { + {-32, -12, ST_OAM_H_RECTANGLE, 1, 0x0, 3}, + {0, -12, ST_OAM_H_RECTANGLE, 1, 0x4, 3}, + {-32, -4, ST_OAM_H_RECTANGLE, 1, 0x8, 3}, + {0, -4, ST_OAM_H_RECTANGLE, 1, 0xc, 3}, + {-32, 4, ST_OAM_H_RECTANGLE, 1, 0x10, 3}, + {0, 4, ST_OAM_H_RECTANGLE, 1, 0x14, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED8B4[] = { + {6, gSubspriteTable_83ED884} +}; + +static const struct Subsprite gSubspriteTable_83ED8BC[] = { + {-16, -16, ST_OAM_SQUARE, 2, 0x0, 3} +}; + +static const struct Subsprite gSubspriteTable_83ED8C4[] = { + {-8, -8, ST_OAM_SQUARE, 1, 0x10, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED8CC[] = { + {1, gSubspriteTable_83ED8BC}, + {1, gSubspriteTable_83ED8C4} +}; + +static const struct Subsprite gSubspriteTable_83ED8DC[] = { + {-24, -24, ST_OAM_H_RECTANGLE, 1, 0x0, 3}, + {8, -24, ST_OAM_H_RECTANGLE, 0, 0x4, 3}, + {-24, -16, ST_OAM_H_RECTANGLE, 1, 0x6, 3}, + {8, -16, ST_OAM_H_RECTANGLE, 0, 0xa, 3}, + {-24, -8, ST_OAM_H_RECTANGLE, 1, 0xc, 3}, + {8, -8, ST_OAM_H_RECTANGLE, 0, 0x10, 3}, + {-24, 0, ST_OAM_H_RECTANGLE, 1, 0x12, 3}, + {8, 0, ST_OAM_H_RECTANGLE, 0, 0x16, 3}, + {-24, 8, ST_OAM_H_RECTANGLE, 1, 0x18, 3}, + {8, 8, ST_OAM_H_RECTANGLE, 0, 0x1c, 3}, + {-24, 16, ST_OAM_H_RECTANGLE, 1, 0x1e, 3}, + {8, 16, ST_OAM_H_RECTANGLE, 0, 0x22, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED93C[] = { + 12, gSubspriteTable_83ED8DC +}; + +static const struct Subsprite gSubspriteTable_83ED944[] = { + {-16, -12, ST_OAM_H_RECTANGLE, 2, 0x0, 3}, + {-16, 4, ST_OAM_H_RECTANGLE, 0, 0x8, 3}, + {0, 4, ST_OAM_H_RECTANGLE, 0, 0xa, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED95C[] = { + {3, gSubspriteTable_83ED944} +}; + +static const struct Subsprite gSubspriteTable_83ED964[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x0, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0x8, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED974[] = { + {2, gSubspriteTable_83ED964} +}; + +static const struct Subsprite gSubspriteTable_83ED97C[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x2, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0xa, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED98C[] = { + {2, gSubspriteTable_83ED97C} +}; + +static const struct Subsprite gSubspriteTable_83ED994[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x4, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0xc, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED9A4[] = { + {2, gSubspriteTable_83ED994} +}; + +static const struct Subsprite gSubspriteTable_83ED9AC[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x6, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0xe, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED9BC[] = { + {2, gSubspriteTable_83ED9AC} +}; + +static const struct Subsprite gSubspriteTable_83ED9C4[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x0, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0x8, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED9D4[] = { + {2, gSubspriteTable_83ED9C4} +}; + +static const struct Subsprite gSubspriteTable_83ED9DC[] = { + {-4, -8, ST_OAM_SQUARE, 0, 0x2, 3}, + {-4, 0, ST_OAM_SQUARE, 0, 0xa, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83ED9EC[] = { + {2, gSubspriteTable_83ED9DC} +}; + +static const struct Subsprite gSubspriteTable_83ED9F4[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x3, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0xb, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDA04[] = { + {2, gSubspriteTable_83ED9F4} +}; + +static const struct Subsprite gSubspriteTable_83EDA0C[] = { + {-4, -8, ST_OAM_SQUARE, 0, 0x5, 3}, + {-4, 0, ST_OAM_SQUARE, 0, 0xd, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDA1C[] = { + {2, gSubspriteTable_83EDA0C} +}; + +static const struct Subsprite gSubspriteTable_83EDA24[] = { + {-8, -8, ST_OAM_H_RECTANGLE, 0, 0x6, 3}, + {-8, 0, ST_OAM_H_RECTANGLE, 0, 0xe, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDA34[] = { + {2, gSubspriteTable_83EDA24} +}; + +static const struct Subsprite gSubspriteTable_83EDA3C[] = { + {-12, -12, ST_OAM_H_RECTANGLE, 0, 0x0, 3}, + {4, -12, ST_OAM_SQUARE, 0, 0x2, 3}, + {-12, -4, ST_OAM_H_RECTANGLE, 0, 0x8, 3}, + {4, -4, ST_OAM_SQUARE, 0, 0xa, 3}, + {-12, 4, ST_OAM_H_RECTANGLE, 0, 0x10, 3}, + {4, 4, ST_OAM_SQUARE, 0, 0x12, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDA6C[] = { + {6, gSubspriteTable_83EDA3C} +}; + +static const struct Subsprite gSubspriteTable_83EDA74[] = { + {-8, -12, ST_OAM_H_RECTANGLE, 0, 0x3, 3}, + {-8, -4, ST_OAM_H_RECTANGLE, 0, 0xb, 3}, + {-8, 4, ST_OAM_H_RECTANGLE, 0, 0x13, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDA8C[] = { + {3, gSubspriteTable_83EDA74} +}; + +static const struct Subsprite gSubspriteTable_83EDA94[] = { + {-12, -12, ST_OAM_H_RECTANGLE, 0, 0x5, 3}, + {4, -12, ST_OAM_SQUARE, 0, 0x7, 3}, + {-12, -4, ST_OAM_H_RECTANGLE, 0, 0xd, 3}, + {4, -4, ST_OAM_SQUARE, 0, 0xf, 3}, + {-12, 4, ST_OAM_H_RECTANGLE, 0, 0x15, 3}, + {4, 4, ST_OAM_SQUARE, 0, 0x17, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDAC4[] = { + {6, gSubspriteTable_83EDA94} +}; + +static const struct Subsprite gSubspriteTable_83EDACC[] = { + {-12, -12, ST_OAM_H_RECTANGLE, 0, 0x0, 3}, + {4, -12, ST_OAM_SQUARE, 0, 0x2, 3}, + {-12, -4, ST_OAM_H_RECTANGLE, 0, 0x8, 3}, + {4, -4, ST_OAM_SQUARE, 0, 0xa, 3}, + {-12, 4, ST_OAM_H_RECTANGLE, 0, 0x10, 3}, + {4, 4, ST_OAM_SQUARE, 0, 0x12, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDAFC[] = { + {6, gSubspriteTable_83EDACC} +}; + +static const struct Subsprite gSubspriteTable_83EDB04[] = { + {-8, -12, ST_OAM_H_RECTANGLE, 0, 0x3, 3}, + {-8, -4, ST_OAM_H_RECTANGLE, 0, 0xb, 3}, + {-8, 4, ST_OAM_H_RECTANGLE, 0, 0x13, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDB1C[] = { + {3, gSubspriteTable_83EDB04} +}; + +static const struct Subsprite gSubspriteTable_83EDB24[] = { + {-12, -12, ST_OAM_H_RECTANGLE, 0, 0x5, 3}, + {4, -12, ST_OAM_SQUARE, 0, 0x7, 3}, + {-12, -4, ST_OAM_H_RECTANGLE, 0, 0xd, 3}, + {4, -4, ST_OAM_SQUARE, 0, 0xf, 3}, + {-12, 4, ST_OAM_H_RECTANGLE, 0, 0x15, 3}, + {4, 4, ST_OAM_SQUARE, 0, 0x17, 3} +}; + +static const struct SubspriteTable gSubspriteTables_83EDB54[] = { + {6, gSubspriteTable_83EDB24} +}; + +static const struct SpriteTemplate *const gUnknown_083EDB5C[] = { + &gSpriteTemplate_83ED57C, + &gSpriteTemplate_83ED594, + &gSpriteTemplate_83ED5AC, + &gSpriteTemplate_83ED5DC, + &gSpriteTemplate_83ED5F4, + &gSpriteTemplate_83ED654, + &gSpriteTemplate_83ED66C, + &gSpriteTemplate_83ED684, + &gSpriteTemplate_83ED69C, + &gSpriteTemplate_83ED6B4, + &gSpriteTemplate_83ED5C4, + &gSpriteTemplate_83ED5C4, + &gSpriteTemplate_83ED5C4, + &gSpriteTemplate_83ED5C4, + &gSpriteTemplate_83ED60C, + &gSpriteTemplate_83ED60C, + &gSpriteTemplate_83ED60C, + &gSpriteTemplate_83ED60C, + &gSpriteTemplate_83ED60C, + &gSpriteTemplate_83ED624, + &gSpriteTemplate_83ED624, + &gSpriteTemplate_83ED624, + &gSpriteTemplate_83ED63C, + &gSpriteTemplate_83ED63C, + &gSpriteTemplate_83ED63C, + &gDummySpriteTemplate +}; + +static const struct SubspriteTable *const gUnknown_083EDBC4[] = { + gSubspriteTables_83ED804, + gSubspriteTables_83ED82C, + gSubspriteTables_83ED854, + gSubspriteTables_83ED8B4, + NULL, + NULL, + gSubspriteTables_83ED8CC, + NULL, + gSubspriteTables_83ED93C, + gSubspriteTables_83ED95C, + gSubspriteTables_83ED974, + gSubspriteTables_83ED98C, + gSubspriteTables_83ED9A4, + gSubspriteTables_83ED9BC, + gSubspriteTables_83ED9D4, + gSubspriteTables_83ED9EC, + gSubspriteTables_83EDA04, + gSubspriteTables_83EDA1C, + gSubspriteTables_83EDA34, + gSubspriteTables_83EDA6C, + gSubspriteTables_83EDA8C, + gSubspriteTables_83EDAC4, + gSubspriteTables_83EDAFC, + gSubspriteTables_83EDB1C, + gSubspriteTables_83EDB54, + NULL +}; + +static const struct SpriteSheet sSlotMachineSpriteSheets[] = { + {gSlotMachineReelSymbol1Tiles, 0x200, 0}, + {gSlotMachineReelSymbol2Tiles, 0x200, 1}, + {gSlotMachineReelSymbol3Tiles, 0x200, 2}, + {gSlotMachineReelSymbol4Tiles, 0x200, 3}, + {gSlotMachineReelSymbol5Tiles, 0x200, 4}, + {gSlotMachineReelSymbol6Tiles, 0x200, 5}, + {gSlotMachineReelSymbol7Tiles, 0x200, 6}, + {gSlotMachineNumber0Tiles, 0x40, 7}, + {gSlotMachineNumber1Tiles, 0x40, 8}, + {gSlotMachineNumber2Tiles, 0x40, 9}, + {gSlotMachineNumber3Tiles, 0x40, 10}, + {gSlotMachineNumber4Tiles, 0x40, 11}, + {gSlotMachineNumber5Tiles, 0x40, 12}, + {gSlotMachineNumber6Tiles, 0x40, 13}, + {gSlotMachineNumber7Tiles, 0x40, 14}, + {gSlotMachineNumber8Tiles, 0x40, 15}, + {gSlotMachineNumber9Tiles, 0x40, 16}, + {eSlotMachineGfxBuffer + 0x0A00, 0x200, 18}, + {eSlotMachineGfxBuffer + 0x1400, 0x200, 19}, + {eSlotMachineGfxBuffer + 0x1600, 0x300, 20}, + {eSlotMachineGfxBuffer + 0x1900, 0x300, 21}, + {} +}; + +static const struct SpriteSheet gUnknown_083EDCDC = { + eSlotMachineGfxBuffer + 0x0000, 0x800, 17 +}; + +static const u8 *const gUnknown_083EDCE4 = gUnknownPalette_08E997E8; + +#ifdef SAPPHIRE +static const u16 UnknownPalette_83EDCE8[] = INCBIN_U16("graphics/unknown/sapphire_83EDD40.gbapal"); +#elif defined(RUBY) +static const u16 UnknownPalette_83EDCE8[] = INCBIN_U16("graphics/unknown/ruby_83EDCE8.gbapal"); +#endif // RS + +static const u16 *const gUnknown_083EDD08[] = { + UnknownPalette_83EDCE8 + 10, + UnknownPalette_83EDCE8 + 11, + UnknownPalette_83EDCE8 + 12, + UnknownPalette_83EDCE8 + 13, + UnknownPalette_83EDCE8 + 14 +}; + +static const u16 *const gUnknown_083EDD1C[] = { + gUnknown_08E95A18 + 74, + gUnknown_08E95A18 + 75, + gUnknown_08E95A18 + 76, + gUnknown_08E95A18 + 77, + gUnknown_08E95A18 + 78 +}; + +static const u8 gUnknown_083EDD30[] = { + 0x4a, 0x4b, 0x4c, 0x4e, 0x4d +}; + +static const u8 gUnknown_083EDD35[][2] = { + {0, 0}, + {1, 2}, + {3, 4} +}; +static const u8 gUnknown_083EDD3B[] = {1, 2, 2}; + +#ifdef SAPPHIRE +static const u16 Unknown_83EDD3E[] = INCBIN_U16("graphics/unknown/sapphire_83EDD96.gbapal"); +static const u16 Unknown_83EDD5E[] = INCBIN_U16("graphics/unknown/sapphire_83EDDB6.gbapal"); +static const u16 Unknown_83EDD7E[] = INCBIN_U16("graphics/unknown/sapphire_83EDDD6.gbapal"); +#elif defined (RUBY) +static const u16 Unknown_83EDD3E[] = INCBIN_U16("graphics/unknown/ruby_83EDD3E.gbapal"); +static const u16 Unknown_83EDD5E[] = INCBIN_U16("graphics/unknown/ruby_83EDD5E.gbapal"); +static const u16 Unknown_83EDD7E[] = INCBIN_U16("graphics/unknown/ruby_83EDD7E.gbapal"); +#endif // RS + +static const u16 *const gUnknown_083EDDA0[] = { + Unknown_83EDD3E, + Unknown_83EDD5E, + Unknown_83EDD7E +}; + +static const u16 *const gUnknown_083EDDAC = gUnknown_08E95A18 + 16; + +static const u16 Palette_83EDDB0[] = INCBIN_U16("graphics/slot_machine/83EDDB0.gbapal"); +static const u16 Palette_83EDDD0[] = INCBIN_U16("graphics/slot_machine/83EDDD0.gbapal"); +static const u16 Palette_83EDDF0[] = INCBIN_U16("graphics/slot_machine/83EDDF0.gbapal"); + +static const u16 *const gUnknown_083EDE10[] = { + Palette_83EDDB0, + Palette_83EDDD0, + Palette_83EDDF0, + gSlotMachineSpritePalette6 +}; + +static const u16 *const gUnknown_083EDE20 = gSlotMachineSpritePalette6; + +static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/83EDE24_pal.bin"); + +static const struct SpritePalette gSlotMachineSpritePalettes[] = { + {gSlotMachineSpritePalette0, 0}, + {gSlotMachineSpritePalette1, 1}, + {gSlotMachineSpritePalette2, 2}, + {gSlotMachineSpritePalette3, 3}, + {gSlotMachineSpritePalette4, 4}, + {gSlotMachineSpritePalette5, 5}, + {gSlotMachineSpritePalette6, 6}, + {gSlotMachineSpritePalette4, 7}, + {} +}; + +static const u8 sReelTimeGfx[] = INCBIN_U8("graphics/slot_machine/reel_time.4bpp.lz"); + +static const u16 sReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/reel_time_window_map.bin"); diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c index 38bc6971c..3034b2b65 100644 --- a/src/field/trainer_see.c +++ b/src/field/trainer_see.c @@ -9,14 +9,22 @@ #include "task.h" #include "util.h" +static bool8 CheckTrainer(u8); +static void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); +static void objc_exclamation_mark_probably(struct Sprite *sprite); +static bool8 TrainerCanApproachPlayer(struct MapObject *); +static void sub_80842C8(struct MapObject *, u8); +static bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject *trainerObj, u8 approachDistance, u8 direction); +static void RunTrainerSeeFuncList(u8 taskId); + const u8 gSpriteImage_839B308[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/0.4bpp"); const u8 gSpriteImage_839B388[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/1.4bpp"); const u8 gSpriteImage_839B408[] = INCBIN_U8("graphics/unknown_sprites/839B408.4bpp"); -u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); -u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); -u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y); -u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +static u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +static u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +static u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +static u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y); static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *, s16, s16, s16) = { @@ -26,9 +34,6 @@ static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *, s16, GetTrainerApproachDistanceEast, }; -extern struct SpriteTemplate gSpriteTemplate_839B510; -extern struct SpriteTemplate gSpriteTemplate_839B528; - bool8 CheckTrainers(void) { u8 mapObjId; @@ -43,7 +48,7 @@ bool8 CheckTrainers(void) return FALSE; } -bool8 CheckTrainer(u8 mapObjId) +static bool8 CheckTrainer(u8 mapObjId) { u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(mapObjId); @@ -69,7 +74,7 @@ bool8 CheckTrainer(u8 mapObjId) } } -bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) +static bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) { s16 x, y; u8 i; @@ -79,14 +84,14 @@ bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) if (trainerObj->trainerType == 1) // can only see in one direction { approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); - return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, trainerObj->mapobj_unk_18); + return CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, trainerObj->mapobj_unk_18); } else // can see in all directions { for (i = 0; i < 4; i++) { approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); - if (CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east + if (CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east return approachDistance; } } @@ -94,7 +99,7 @@ bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) } // Returns how far south the player is from trainer. 0 if out of trainer's sight. -u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) +static u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { if (trainerObj->coords2.x == x && y > trainerObj->coords2.y @@ -105,7 +110,7 @@ u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 } // Returns how far north the player is from trainer. 0 if out of trainer's sight. -u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) +static u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { if (trainerObj->coords2.x == x && y < trainerObj->coords2.y @@ -116,7 +121,7 @@ u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 } // Returns how far west the player is from trainer. 0 if out of trainer's sight. -u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y) +static u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { if (trainerObj->coords2.y == y && x < trainerObj->coords2.x @@ -127,7 +132,7 @@ u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x } // Returns how far east the player is from trainer. 0 if out of trainer's sight. -u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y) +static u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { if (trainerObj->coords2.y == y && x > trainerObj->coords2.x @@ -143,7 +148,7 @@ u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x #define COLLISION_MASK 1 #endif -bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approachDistance, u8 direction) +static bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject *trainerObj, u8 approachDistance, u8 direction) { s16 x, y; u8 unk19_temp; @@ -159,21 +164,21 @@ bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approac for (i = 0; i <= approachDistance - 1; i++, MoveCoords(direction, &x, &y)) { - collision = sub_8060024((struct MapObject *)trainerObj, x, y, direction); + collision = sub_8060024(trainerObj, x, y, direction); if (collision != 0 && (collision & COLLISION_MASK)) return FALSE; } // preserve mapobj_unk_19 before clearing. - unk19_temp = trainerObj->mapobj_unk_19; - unk19b_temp = trainerObj->mapobj_unk_19b; - trainerObj->mapobj_unk_19 = 0; - trainerObj->mapobj_unk_19b = 0; + unk19_temp = trainerObj->range.as_nybbles.x; + unk19b_temp = trainerObj->range.as_nybbles.y; + trainerObj->range.as_nybbles.x = 0; + trainerObj->range.as_nybbles.y = 0; collision = npc_block_way((struct MapObject *)trainerObj, x, y, direction); - trainerObj->mapobj_unk_19 = unk19_temp; - trainerObj->mapobj_unk_19b = unk19b_temp; + trainerObj->range.as_nybbles.x = unk19_temp; + trainerObj->range.as_nybbles.y = unk19b_temp; if (collision == 4) return approachDistance; @@ -183,7 +188,7 @@ bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approac #define tTrainerObjHi data[1] #define tTrainerObjLo data[2] -void sub_80842C8(struct MapObject *trainerObj, u8 b) +static void sub_80842C8(struct MapObject *trainerObj, u8 b) { u8 taskId = CreateTask(RunTrainerSeeFuncList, 0x50); struct Task *task = &gTasks[taskId]; @@ -193,7 +198,7 @@ void sub_80842C8(struct MapObject *trainerObj, u8 b) task->data[3] = b; } -void sub_80842FC(TaskFunc followupFunc) +static void sub_80842FC(TaskFunc followupFunc) { TaskFunc taskFunc = RunTrainerSeeFuncList; u8 taskId = FindTaskIdByFunc(taskFunc); @@ -232,7 +237,7 @@ static bool8 (*const gTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct sub_80846C8, }; -void RunTrainerSeeFuncList(u8 taskId) +static void RunTrainerSeeFuncList(u8 taskId) { struct Task *task = &gTasks[taskId]; struct MapObject *trainerObj = (struct MapObject *)((task->tTrainerObjHi << 16) | (task->tTrainerObjLo)); @@ -450,6 +455,41 @@ static void Task_DestroyTrainerApproachTask(u8 taskId) EnableBothScriptContexts(); } +static const struct OamData gOamData_839B4D8 = { + .size = 1, .priority = 1 +}; + +static const struct SpriteFrameImage gSpriteImageTable_839B4E0[] = { + { gSpriteImage_839B308, sizeof gSpriteImage_839B308 }, + { gSpriteImage_839B388, sizeof gSpriteImage_839B388 } +}; + +static const struct SpriteFrameImage gSpriteImageTable_839B4F0[] = { + { gSpriteImage_839B408, sizeof gSpriteImage_839B408 } +}; + +static const union AnimCmd gSpriteAnim_839B4F8[] = { + ANIMCMD_FRAME(0, 60), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_839B500[] = { + ANIMCMD_FRAME(1, 60), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_839B508[] = { + gSpriteAnim_839B4F8, + gSpriteAnim_839B500 +}; + +static const struct SpriteTemplate gSpriteTemplate_839B510 = { + 0xffff, 0xffff, &gOamData_839B4D8, gSpriteAnimTable_839B508, gSpriteImageTable_839B4E0, gDummySpriteAffineAnimTable, objc_exclamation_mark_probably +}; +static const struct SpriteTemplate gSpriteTemplate_839B528 = { + 0xffff, 4100, &gOamData_839B4D8, gSpriteAnimTable_839B508, gSpriteImageTable_839B4F0, gDummySpriteAffineAnimTable, objc_exclamation_mark_probably +}; + u8 FldEff_ExclamationMarkIcon1(void) { u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53); @@ -480,7 +520,7 @@ u8 FldEff_HeartIcon(void) return 0; } -void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) +static void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) { sprite->oam.priority = 1; sprite->coordOffsetEnabled = 1; @@ -494,7 +534,7 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) StartSpriteAnim(sprite, a3); } -void objc_exclamation_mark_probably(struct Sprite *sprite) +static void objc_exclamation_mark_probably(struct Sprite *sprite) { u8 mapObjId; diff --git a/src/field/tv.c b/src/field/tv.c index 1d5bf929c..d7a75a709 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -80,7 +80,7 @@ extern u16 gLastUsedItem; static EWRAM_DATA u16 gUnknown_020387E0 = 0; static EWRAM_DATA u16 gUnknown_020387E2 = 0; static EWRAM_DATA u8 gUnknown_020387E4 = 0; -static EWRAM_DATA ALIGNED(4) u8 gUnknown_020387E8 = 0; // why is this aligned to a 4-byte boundary? +static EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0; // why is this aligned to a 4-byte boundary? static u8 gUnknown_03000720; static u8 gUnknown_03000721; @@ -436,8 +436,8 @@ void ClearTVShowData(void) u8 showidx; u8 extradataidx; for (showidx=0; showidx<25; showidx++) { - gSaveBlock1.tvShows[showidx].common.var00 = 0; - gSaveBlock1.tvShows[showidx].common.var01 = 0; + gSaveBlock1.tvShows[showidx].common.kind = 0; + gSaveBlock1.tvShows[showidx].common.active = 0; for (extradataidx=0; extradataidx<34; extradataidx++) { gSaveBlock1.tvShows[showidx].common.pad02[extradataidx] = 0; } @@ -452,20 +452,20 @@ extern u8 gSpecialVar_ContestRank; extern u8 gUnknown_03004316[11]; extern u8 gBattleOutcome; -void sub_80BF334(void); -void sub_80BF3A4(void); -void sub_80BF3DC(void); -void sub_80BF46C(void); -void sub_80BF478(void); -void sub_80BF484(void); -void sub_80BF4BC(void); +void InterviewBefore_FanClubLetter(void); +void InterviewBefore_RecentHappenings(void); +void InterviewBefore_PkmnFanClubOpinions(void); +void InterviewBefore_Dummy(void); +void InterviewBefore_NameRater(void); +void InterviewBefore_BravoTrainerPkmnProfile(void); +void InterviewBefore_BravoTrainerBTProfile(void); void sub_80BE028(void); void sub_80BE074(void); void sub_80BE778(void); void sub_80BEB20(void); -u8 sub_80BFB54(u8); +u8 GetTVChannelByShowType(u8); s8 sub_80BF74C(TVShow tvShow[]); @@ -476,53 +476,62 @@ void sub_80BE138(TVShow *show); void sub_80BE160(TVShow *show); extern u16 gLastUsedItem; -void sub_80BE5FC(void); -void sub_80BE65C(void); -void sub_80BE6A0(void); -void nullsub_21(void); -void sub_80BE188(void); -void sub_80BE320(void); +void InterviewAfter_FanClubLetter(void); +void InterviewAfter_RecentHappenings(void); +void InterviewAfter_PkmnFanClubOpinions(void); +void InterviewAfter_DummyShow4(void); +void InterviewAfter_BravoTrainerPokemonProfile(void); +void InterviewAfter_BravoTrainerBattleTowerProfile(void); u8 special_0x44(void) { u8 i; u8 j; + u8 selIdx; + TVShow *show; -#ifndef NONMATCHING - asm("":::"r5"); -#endif - - for (i = 5; i < 24; i++) + for (i = 5; i < ARRAY_COUNT(gSaveBlock1.tvShows) - 1; i++) { - if (gSaveBlock1.tvShows[i].common.var00 == 0) + if (gSaveBlock1.tvShows[i].common.kind == 0) + { break; + } } - i = Random() % i; - j = i; + + j = Random() % i; + selIdx = j; + do { - if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) != 4) + if (GetTVChannelByShowType(gSaveBlock1.tvShows[j].common.kind) != 4) { - if (gSaveBlock1.tvShows[i].common.var01 == 1) - return i; + if (gSaveBlock1.tvShows[j].common.active == TRUE) + { + return j; + } } else { - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[i].massOutbreak; - - if (massOutbreak->var16 == 0 && massOutbreak->var01 == 1) - return i; + show = &gSaveBlock1.tvShows[j]; + if (show->massOutbreak.daysLeft == 0 && show->massOutbreak.active == TRUE) + { + return j; + } + } + if (j == 0) + { + j = ARRAY_COUNT(gSaveBlock1.tvShows) - 2; } - - if (i == 0) - i = 23; else - i--; - } while (i != j); + { + j--; + } + } while (j != selIdx); + return 0xFF; } -u8 sub_80BDA30(void); +u8 FindNonMassOutbreakActiveTVShow(void); u8 sub_80BD8B8(void) { @@ -530,14 +539,14 @@ u8 sub_80BD8B8(void) if (retval == 0xff) return 0xff; - if (gSaveBlock1.outbreakPokemonSpecies != 0 && gSaveBlock1.tvShows[retval].common.var00 == TVSHOW_MASS_OUTBREAK) - return sub_80BDA30(); + if (gSaveBlock1.outbreakPokemonSpecies != 0 && gSaveBlock1.tvShows[retval].common.kind == TVSHOW_MASS_OUTBREAK) + return FindNonMassOutbreakActiveTVShow(); return retval; } u8 CheckForBigMovieOrEmergencyNewsOnTV(void); void SetTVMetatilesOnMap(int, int, u16); -bool8 sub_80BECA0(void); +bool8 FindAnyTVNewsOnTheAir(void); bool8 IsTVShowInSearchOfTrainersAiring(void); void UpdateTVScreensOnMap(int width, int height) @@ -556,7 +565,7 @@ void UpdateTVScreensOnMap(int width, int height) { SetTVMetatilesOnMap(width, height, 0x3); } - else if (FlagGet(FLAG_SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring())) + else if (FlagGet(FLAG_SYS_TV_START) && (sub_80BD8B8() != 0xff || FindAnyTVNewsOnTheAir() != 0xff || IsTVShowInSearchOfTrainersAiring())) { FlagClear(FLAG_SYS_TV_WATCH); SetTVMetatilesOnMap(width, height, 0x3); @@ -586,28 +595,28 @@ void TurnOffTVScreen(void) DrawWholeMapView(); } -u8 sub_80BDA0C(void) +u8 GetTVShowType(void) { - return gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var00; + return gSaveBlock1.tvShows[gSpecialVar_0x8004].common.kind; } -u8 sub_80BDA30(void) +u8 FindNonMassOutbreakActiveTVShow(void) { u8 showIdx; for (showIdx=0; showIdx<24; showIdx++) { - if (gSaveBlock1.tvShows[showIdx].common.var00 != 0 && gSaveBlock1.tvShows[showIdx].common.var00 != TVSHOW_MASS_OUTBREAK && gSaveBlock1.tvShows[showIdx].common.var01 == 1) + if (gSaveBlock1.tvShows[showIdx].common.kind != 0 && gSaveBlock1.tvShows[showIdx].common.kind != TVSHOW_MASS_OUTBREAK && gSaveBlock1.tvShows[showIdx].common.active == 1) return showIdx; } return 0xff; } -u8 special_0x4a(void) +u8 GetNonMassOutbreakActiveTVShow(void) { TVShow *tvShow; tvShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004]; - if (tvShow->common.var00 == TVSHOW_MASS_OUTBREAK && gSaveBlock1.outbreakPokemonSpecies) - return sub_80BDA30(); + if (tvShow->common.kind == TVSHOW_MASS_OUTBREAK && gSaveBlock1.outbreakPokemonSpecies) + return FindNonMassOutbreakActiveTVShow(); return gSpecialVar_0x8004; } @@ -677,7 +686,7 @@ void GabbyAndTyBeforeInterview(void) FlagSet(FLAG_TEMP_1); } -void sub_80BDC14(void) +void GabbyAndTyAfterInterview(void) { gSaveBlock1.gabbyAndTyData.valB_0 = gSaveBlock1.gabbyAndTyData.valA_0; gSaveBlock1.gabbyAndTyData.valB_1 = gSaveBlock1.gabbyAndTyData.valA_1; @@ -716,7 +725,7 @@ bool8 GabbyAndTyGetLastQuote(void) return TRUE; } -u8 sub_80BDD18(void) +u8 GabbyAndTyGetLastBattleTrivia(void) { if (!gSaveBlock1.gabbyAndTyData.valB_0) return 1; @@ -768,27 +777,27 @@ void GabbyAndTySetScriptVarsToFieldObjectLocalIds(void) } } -void sub_80BDE48(void) +void InterviewAfter(void) { switch (gSpecialVar_0x8005) { case TVSHOW_FAN_CLUB_LETTER: - sub_80BE5FC(); + InterviewAfter_FanClubLetter(); break; case TVSHOW_RECENT_HAPPENINGS: - sub_80BE65C(); + InterviewAfter_RecentHappenings(); break; case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80BE6A0(); + InterviewAfter_PkmnFanClubOpinions(); break; case TVSHOW_UNKN_SHOWTYPE_04: - nullsub_21(); + InterviewAfter_DummyShow4(); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80BE188(); + InterviewAfter_BravoTrainerPokemonProfile(); break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80BE320(); + InterviewAfter_BravoTrainerBattleTowerProfile(); break; } } @@ -832,8 +841,8 @@ void sub_80BDEC8(void) total = 0; pokemonToday = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonToday; - pokemonToday->var00 = TVSHOW_POKEMON_TODAY_CAUGHT; - pokemonToday->var01 = total; + pokemonToday->kind = TVSHOW_POKEMON_TODAY_CAUGHT; + pokemonToday->active = total; if (gBattleResults.unk5_1 != 0) { total = 1; @@ -866,11 +875,11 @@ void sub_80BE028(void) { struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; - if (worldOfMasters->var00 != TVSHOW_WORLD_OF_MASTERS) + if (worldOfMasters->kind != TVSHOW_WORLD_OF_MASTERS) { sub_80BF55C(gSaveBlock1.tvShows, 24); worldOfMasters->var06 = GetGameStat(GAME_STAT_STEPS); - worldOfMasters->var00 = TVSHOW_WORLD_OF_MASTERS; + worldOfMasters->kind = TVSHOW_WORLD_OF_MASTERS; } worldOfMasters->var02++; worldOfMasters->var04 = gBattleResults.caughtPoke; @@ -898,8 +907,8 @@ void sub_80BE074(void) struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonTodayFailed; zero = 0; - pokemonTodayFailed->var00 = TVSHOW_POKEMON_TODAY_FAILED; - pokemonTodayFailed->var01 = zero; + pokemonTodayFailed->kind = TVSHOW_POKEMON_TODAY_FAILED; + pokemonTodayFailed->active = zero; pokemonTodayFailed->species = gBattleResults.poke1Species; pokemonTodayFailed->species2 = gBattleResults.lastOpponentSpecies; pokemonTodayFailed->var10 = total; @@ -936,16 +945,16 @@ void sub_80BE160(TVShow *show) show->common.trainerIdHi = playerId >> 8; } -void sub_80BE188(void) +void InterviewAfter_BravoTrainerPokemonProfile(void) { struct TVShowBravoTrainerPokemonProfiles *bravoTrainerSrc = &gSaveBlock1.tvShows[24].bravoTrainer; - if (bravoTrainerSrc->var00 == TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE) + if (bravoTrainerSrc->kind == TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE) { struct TVShowBravoTrainerPokemonProfiles *bravoTrainerNew = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; - bravoTrainerNew->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; - bravoTrainerNew->var01 = 1; + bravoTrainerNew->kind = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; + bravoTrainerNew->active = 1; bravoTrainerNew->species = bravoTrainerSrc->species; StringCopy(bravoTrainerNew->playerName, gSaveBlock2.playerName); StringCopy(bravoTrainerNew->pokemonNickname, bravoTrainerSrc->pokemonNickname); @@ -965,13 +974,13 @@ void sub_80BE23C(u16 a0) { struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; - sub_80BF484(); + InterviewBefore_BravoTrainerPkmnProfile(); gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); if (gUnknown_03005D38.var0 != -1) { sub_80BF55C(gSaveBlock1.tvShows, 24); bravoTrainer->var14 = a0; - bravoTrainer->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; + bravoTrainer->kind = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; } } @@ -990,12 +999,12 @@ void sub_80BE284(u8 a0) } } -void sub_80BE320(void) +void InterviewAfter_BravoTrainerBattleTowerProfile(void) { struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; - bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; - bravoTrainerTower->var01 = 1; + bravoTrainerTower->kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; + bravoTrainerTower->active = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName); bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies; @@ -1027,8 +1036,8 @@ void sub_80BE3BC(void) { struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].smartshopperShow; - smartShopper->var00 = TVSHOW_SMART_SHOPPER; - smartShopper->var01 = rval; + smartShopper->kind = TVSHOW_SMART_SHOPPER; + smartShopper->active = rval; smartShopper->shopLocation = gMapHeader.regionMapSectionId; for (i=0; i<3; i++) { @@ -1046,7 +1055,7 @@ void sub_80BE3BC(void) void sub_80BE478(void) { - sub_80BF478(); + InterviewBefore_NameRater(); if (gSpecialVar_Result == 1) return; @@ -1055,8 +1064,8 @@ void sub_80BE478(void) { struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].nameRaterShow; - nameRaterShow->var00 = TVSHOW_NAME_RATER_SHOW; - nameRaterShow->var01 = 1; + nameRaterShow->kind = TVSHOW_NAME_RATER_SHOW; + nameRaterShow->active = 1; nameRaterShow->species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL); nameRaterShow->random = Random() % 3; nameRaterShow->random2 = Random() % 2; @@ -1089,37 +1098,37 @@ void StartMassOutbreak(void) gSaveBlock1.outbreakUnk5 = 2; } -void sub_80BE5FC(void) +void InterviewAfter_FanClubLetter(void) { struct TVShowFanClubLetter *fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; - fanclubLetter->var00 = TVSHOW_FAN_CLUB_LETTER; - fanclubLetter->var01 = 1; + fanclubLetter->kind = TVSHOW_FAN_CLUB_LETTER; + fanclubLetter->active = 1; StringCopy(fanclubLetter->playerName, gSaveBlock2.playerName); fanclubLetter->species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL); sub_80BE160((TVShow *)fanclubLetter); fanclubLetter->language = GAME_LANGUAGE; } -void sub_80BE65C(void) +void InterviewAfter_RecentHappenings(void) { struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; - recentHappenings->var00 = TVSHOW_RECENT_HAPPENINGS; - recentHappenings->var01 = 1; + recentHappenings->kind = TVSHOW_RECENT_HAPPENINGS; + recentHappenings->active = 1; StringCopy(recentHappenings->playerName, gSaveBlock2.playerName); recentHappenings->var02 = 0; sub_80BE160((TVShow *)recentHappenings); recentHappenings->language = GAME_LANGUAGE; } -void sub_80BE6A0(void) +void InterviewAfter_PkmnFanClubOpinions(void) { u8 monIndex; struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubOpinions; - fanclubOpinions->var00 = TVSHOW_PKMN_FAN_CLUB_OPINIONS; - fanclubOpinions->var01 = 1; + fanclubOpinions->kind = TVSHOW_PKMN_FAN_CLUB_OPINIONS; + fanclubOpinions->active = 1; monIndex = GetLeadMonIndex(); fanclubOpinions->var04A = GetMonData(&gPlayerParty[monIndex], MON_DATA_FRIENDSHIP, NULL) / 16; fanclubOpinions->var04B = gSpecialVar_0x8007; @@ -1132,7 +1141,7 @@ void sub_80BE6A0(void) StripExtCtrlCodes(fanclubOpinions->var10); } -void nullsub_21(void) +void InterviewAfter_DummyShow4(void) { } @@ -1144,7 +1153,7 @@ void sub_80BE778(void) for (i = 0; i < 24; i++) { - if (gSaveBlock1.tvShows[i].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK) + if (gSaveBlock1.tvShows[i].massOutbreak.kind == TVSHOW_MASS_OUTBREAK) return; } if (sub_80BF77C(0x147)) @@ -1158,8 +1167,8 @@ void sub_80BE778(void) s32 val2 = gUnknown_03005D38.var0; struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[val2].massOutbreak; - massOutbreak->var00 = TVSHOW_MASS_OUTBREAK; - massOutbreak->var01 = 1; + massOutbreak->kind = TVSHOW_MASS_OUTBREAK; + massOutbreak->active = 1; massOutbreak->level = gPokeOutbreakSpeciesList[val].level; massOutbreak->var02 = 0; massOutbreak->var03 = 0; @@ -1174,7 +1183,7 @@ void sub_80BE778(void) massOutbreak->var12 = 0; massOutbreak->probability = 0x32; massOutbreak->var15 = 0; - massOutbreak->var16 = 0x01; + massOutbreak->daysLeft = 0x01; sub_80BE160((TVShow *)massOutbreak); massOutbreak->language = GAME_LANGUAGE; } @@ -1214,15 +1223,15 @@ void sub_80BE8EC(u16 arg0) { for (showidx=0; showidx<24; showidx++) { - if (gSaveBlock1.tvShows[showidx].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK - && gSaveBlock1.tvShows[showidx].massOutbreak.var01 == 0x01) + if (gSaveBlock1.tvShows[showidx].massOutbreak.kind == TVSHOW_MASS_OUTBREAK + && gSaveBlock1.tvShows[showidx].massOutbreak.active == 0x01) { struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[showidx].massOutbreak; - if (massOutbreak->var16 < arg0) - massOutbreak->var16 = 0; + if (massOutbreak->daysLeft < arg0) + massOutbreak->daysLeft = 0; else - massOutbreak->var16 -= arg0; + massOutbreak->daysLeft -= arg0; break; } } @@ -1272,8 +1281,8 @@ void sub_80BE9D4(void) register u8 zero asm("r1") = 0; asm(""::"r"(zero)); - pokemonAngler->var00 = TVSHOW_FISHING_ADVICE; - pokemonAngler->var01 = zero; + pokemonAngler->kind = TVSHOW_FISHING_ADVICE; + pokemonAngler->active = zero; pokemonAngler->var02 = gUnknown_020387E2 & 0xFF; pokemonAngler->var03 = gUnknown_020387E2 >> 8; pokemonAngler->var04 = gUnknown_020387E0; @@ -1294,7 +1303,7 @@ void sub_80BEA5C(u16 arg0) { struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; - if (worldOfMasters->var00 == TVSHOW_WORLD_OF_MASTERS) + if (worldOfMasters->kind == TVSHOW_WORLD_OF_MASTERS) { if (worldOfMasters->var02 < 20) sub_80BF55C(gSaveBlock1.tvShows, 0x18); @@ -1313,8 +1322,8 @@ void sub_80BEA88(void) { struct TVShowWorldOfMasters *worldOfMastersDst = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].worldOfMasters; - worldOfMastersDst->var00 = TVSHOW_WORLD_OF_MASTERS; - worldOfMastersDst->var01 = 0; + worldOfMastersDst->kind = TVSHOW_WORLD_OF_MASTERS; + worldOfMastersDst->active = 0; worldOfMastersDst->var02 = worldOfMastersSrc->var02; worldOfMastersDst->var06 = GetGameStat(GAME_STAT_STEPS) - worldOfMastersSrc->var06; worldOfMastersDst->var04 = worldOfMastersSrc->var04; @@ -1333,27 +1342,27 @@ void sub_80BEB20(void) if (FlagGet(FLAG_SYS_GAME_CLEAR) != 0) { - gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.unknown_2ABC); + gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.pokeNews); if (gUnknown_03005D38.var0 != -1 && sub_80BF77C(0x28f) != 1) { rval = (Random() % 3) + 1; if (sub_80BEE48(rval) != 1) { - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val0 = rval; - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val2 = 4; - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val1 = 1; + gSaveBlock1.pokeNews[gUnknown_03005D38.var0].kind = rval; + gSaveBlock1.pokeNews[gUnknown_03005D38.var0].days = 4; + gSaveBlock1.pokeNews[gUnknown_03005D38.var0].state = 1; } } } } -int sub_80BEBC8(struct UnknownSaveStruct2ABC *arg0) +int sub_80BEBC8(struct PokeNews *pokeNews) { s8 i; for (i = 0; i < 16; i++) { - if (arg0[i].val0 == 0) + if (pokeNews[i].kind == 0) return i; } return -1; @@ -1369,9 +1378,9 @@ void sub_80BEBF4(void) void sub_80BEC10(u8 arg0) { - gSaveBlock1.unknown_2ABC[arg0].val0 = 0; - gSaveBlock1.unknown_2ABC[arg0].val1 = 0; - gSaveBlock1.unknown_2ABC[arg0].val2 = 0; + gSaveBlock1.pokeNews[arg0].kind = 0; + gSaveBlock1.pokeNews[arg0].state = 0; + gSaveBlock1.pokeNews[arg0].days = 0; } void sub_80BEC40(void) @@ -1380,13 +1389,13 @@ void sub_80BEC40(void) for (i = 0; i < 15; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0 == 0) + if (gSaveBlock1.pokeNews[i].kind == 0) { for (j = i + 1; j < 16; j++) { - if (gSaveBlock1.unknown_2ABC[j].val0 != 0) + if (gSaveBlock1.pokeNews[j].kind != 0) { - gSaveBlock1.unknown_2ABC[i] = gSaveBlock1.unknown_2ABC[j]; + gSaveBlock1.pokeNews[i] = gSaveBlock1.pokeNews[j]; sub_80BEC10(j); break; } @@ -1395,43 +1404,43 @@ void sub_80BEC40(void) } } -u8 sub_80BECA0(void) +u8 FindAnyTVNewsOnTheAir(void) { u8 i; for (i = 0; i < 16; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0 != 0 - && gSaveBlock1.unknown_2ABC[i].val1 == 1 - && gSaveBlock1.unknown_2ABC[i].val2 < 3) + if (gSaveBlock1.pokeNews[i].kind != 0 + && gSaveBlock1.pokeNews[i].state == 1 + && gSaveBlock1.pokeNews[i].days < 3) return i; } return 0xFF; } -void sub_80BECE8(void) +void DoPokeNews(void) { - u8 arg0; - arg0 = sub_80BECA0(); - if (arg0 == 0xff) + u8 i; + i = FindAnyTVNewsOnTheAir(); + if (i == 0xff) { gSpecialVar_Result = 0; return; } - if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0) + if (gSaveBlock1.pokeNews[i].days == 0) { - gSaveBlock1.unknown_2ABC[arg0].val1 = 2; + gSaveBlock1.pokeNews[i].state = 2; if (gLocalTime.hours < 20) - ShowFieldMessage(gTVNewsTextGroup2[gSaveBlock1.unknown_2ABC[arg0].val0]); + ShowFieldMessage(gTVNewsTextGroup2[gSaveBlock1.pokeNews[i].kind]); else - ShowFieldMessage(gTVNewsTextGroup3[gSaveBlock1.unknown_2ABC[arg0].val0]); + ShowFieldMessage(gTVNewsTextGroup3[gSaveBlock1.pokeNews[i].kind]); } else { - u16 value = gSaveBlock1.unknown_2ABC[arg0].val2; + u16 value = gSaveBlock1.pokeNews[i].days; ConvertIntToDecimalStringN(gStringVar1, value, 0, 1); - gSaveBlock1.unknown_2ABC[arg0].val1 = 0; - ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]); + gSaveBlock1.pokeNews[i].state = 0; + ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.pokeNews[i].kind]); } gSpecialVar_Result = 1; } @@ -1444,9 +1453,9 @@ bool8 GetPriceReduction(u8 arg0) return FALSE; for (i=0; i<16; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) + if (gSaveBlock1.pokeNews[i].kind == arg0) { - if (gSaveBlock1.unknown_2ABC[i].val1 == 2 && IsPriceDiscounted(arg0) != 0) + if (gSaveBlock1.pokeNews[i].state == 2 && IsPriceDiscounted(arg0) != 0) return TRUE; else return FALSE; @@ -1487,7 +1496,7 @@ bool8 sub_80BEE48(u8 arg0) return TRUE; for (i=0; i<16; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) + if (gSaveBlock1.pokeNews[i].kind == arg0) return TRUE; } return FALSE; @@ -1499,17 +1508,17 @@ void sub_80BEE84(u16 var0) for (i=0; i<16; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0) + if (gSaveBlock1.pokeNews[i].kind) { - if (gSaveBlock1.unknown_2ABC[i].val2 < var0) + if (gSaveBlock1.pokeNews[i].days < var0) { sub_80BEC10(i); } else { - if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(FLAG_SYS_GAME_CLEAR) == 1) - gSaveBlock1.unknown_2ABC[i].val1 = 1; - gSaveBlock1.unknown_2ABC[i].val2 -= var0; + if (!gSaveBlock1.pokeNews[i].state && FlagGet(FLAG_SYS_GAME_CLEAR) == 1) + gSaveBlock1.pokeNews[i].state = 1; + gSaveBlock1.pokeNews[i].days -= var0; } } } @@ -1619,7 +1628,7 @@ bool8 sub_80BF1B4(u8 showIdx) for (i = 5; i < 24; i++) { - if (tvShows[i].common.var00 == showIdx) + if (tvShows[i].common.kind == showIdx) { if ((trainerId & 0xFF) == tvShows[i].common.trainerIdLo && ((trainerId >> 8) & 0xFF) == tvShows[i].common.trainerIdHi) return TRUE; @@ -1656,9 +1665,9 @@ void sub_80BF25C(u8 showType) for (i = 0; i < 5; i++) { - if (gSaveBlock1.tvShows[i].common.var00 == showType) + if (gSaveBlock1.tvShows[i].common.kind == showType) { - if(gSaveBlock1.tvShows[i].common.var01 == 1) + if(gSaveBlock1.tvShows[i].common.active == 1) { gSpecialVar_Result = 1; } @@ -1674,36 +1683,36 @@ void sub_80BF25C(u8 showType) sub_80BF6D8(); } -void sub_80BF2C4(void) +void InterviewBefore(void) { - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; switch (gSpecialVar_0x8005) { case TVSHOW_FAN_CLUB_LETTER: - sub_80BF334(); + InterviewBefore_FanClubLetter(); break; case TVSHOW_RECENT_HAPPENINGS: - sub_80BF3A4(); + InterviewBefore_RecentHappenings(); break; case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80BF3DC(); + InterviewBefore_PkmnFanClubOpinions(); break; case TVSHOW_UNKN_SHOWTYPE_04: - sub_80BF46C(); + InterviewBefore_Dummy(); break; case TVSHOW_NAME_RATER_SHOW: - sub_80BF478(); + InterviewBefore_NameRater(); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80BF484(); + InterviewBefore_BravoTrainerPkmnProfile(); break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80BF4BC(); + InterviewBefore_BravoTrainerBTProfile(); break; } } -void sub_80BF334(void) +void InterviewBefore_FanClubLetter(void) { struct TVShowFanClubLetter *fanclubLetter; @@ -1716,7 +1725,7 @@ void sub_80BF334(void) } } -void sub_80BF3A4(void) +void InterviewBefore_RecentHappenings(void) { struct TVShowRecentHappenings *recentHappenings; @@ -1728,7 +1737,7 @@ void sub_80BF3A4(void) } } -void sub_80BF3DC(void) +void InterviewBefore_PkmnFanClubOpinions(void) { struct TVShowFanclubOpinions *fanclubOpinions; @@ -1743,17 +1752,17 @@ void sub_80BF3DC(void) } } -void sub_80BF46C(void) +void InterviewBefore_Dummy(void) { gSpecialVar_Result = 1; } -void sub_80BF478(void) +void InterviewBefore_NameRater(void) { sub_80BF25C(TVSHOW_NAME_RATER_SHOW); } -void sub_80BF484(void) +void InterviewBefore_BravoTrainerPkmnProfile(void) { struct TVShowBravoTrainerPokemonProfiles *bravoTrainer; @@ -1765,7 +1774,7 @@ void sub_80BF484(void) } } -void sub_80BF4BC(void) +void InterviewBefore_BravoTrainerBTProfile(void) { struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower; @@ -1778,32 +1787,32 @@ void sub_80BF4BC(void) } #if ENGLISH -u8 sub_80BF4F4(u8 arg0) +u8 NicknameDiffersFromSpeciesName(u8 monIndex) { u32 species; - GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); - species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); - if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1) == FALSE) + GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, &gStringVar1); + species = GetMonData(&gPlayerParty[monIndex], MON_DATA_SPECIES, NULL); + if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1) == 0) return FALSE; return TRUE; } #elif GERMAN -u8 sub_80BF4F4(u8 arg0) +u8 NicknameDiffersFromSpeciesName(u8 monIndex) { u8 langData[4]; u32 species; u8 *tmp; - GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); + GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, &gStringVar1); tmp = langData; - tmp[0] = GetMonData(&gPlayerParty[arg0], MON_DATA_LANGUAGE, &langData); + tmp[0] = GetMonData(&gPlayerParty[monIndex], MON_DATA_LANGUAGE, &langData); if (tmp[0] != GAME_LANGUAGE) return TRUE; - species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); + species = GetMonData(&gPlayerParty[monIndex], MON_DATA_SPECIES, NULL); if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1)) return TRUE; @@ -1811,17 +1820,17 @@ u8 sub_80BF4F4(u8 arg0) } #endif -u8 sub_80BF544(void) +u8 LeadMonNicknamed(void) { - return sub_80BF4F4(GetLeadMonIndex()); + return NicknameDiffersFromSpeciesName(GetLeadMonIndex()); } void sub_80BF55C(TVShow tvShow[], u8 showidx) { u8 idx; - tvShow[showidx].common.var00 = 0; - tvShow[showidx].common.var01 = 0; + tvShow[showidx].common.kind = 0; + tvShow[showidx].common.active = 0; for (idx = 0; idx < 34; idx++) tvShow[showidx].common.pad02[idx] = 0; } @@ -1833,11 +1842,11 @@ void sub_80BF588(TVShow tvShow[]) for (showidx = 0; showidx < 4; showidx++) { - if (tvShow[showidx].common.var00 == 0) + if (tvShow[showidx].common.kind == 0) { for (showidx2 = showidx + 1; showidx2 < 5; showidx2++) { - if (tvShow[showidx2].common.var00 != 0) + if (tvShow[showidx2].common.kind != 0) { tvShow[showidx] = tvShow[showidx2]; sub_80BF55C(tvShow, showidx2); @@ -1848,11 +1857,11 @@ void sub_80BF588(TVShow tvShow[]) } for (showidx = 5; showidx < 24; showidx++) { - if (tvShow[showidx].common.var00 == 0) + if (tvShow[showidx].common.kind == 0) { for (showidx2 = showidx + 1; showidx2 < 24; showidx2++) { - if (tvShow[showidx2].common.var00 != 0) + if (tvShow[showidx2].common.kind != 0) { tvShow[showidx] = tvShow[showidx2]; sub_80BF55C(gSaveBlock1.tvShows, showidx2); @@ -1909,7 +1918,7 @@ s8 sub_80BF720(TVShow tvShow[]) for (idx = 0; idx < 5; idx++) { - if (tvShow[idx].common.var00 == 0) + if (tvShow[idx].common.kind == 0) return idx; } return -1; @@ -1921,7 +1930,7 @@ s8 sub_80BF74C(TVShow tvShow[]) for (idx = 5; idx < 24; idx++) { - if (tvShow[idx].common.var00 == 0) + if (tvShow[idx].common.kind == 0) return idx; } return -1; @@ -2043,19 +2052,19 @@ void sub_80BF820(u8 arg0, u8 arg1, u8 arg2, u16 arg3, u16 arg4, struct TVShowNam StringCopy(gUnknown_083D1464[arg0], flags); } -bool8 sub_80BF974(void) +bool8 TV_IsScriptShowKindAlreadyInQueue(void) { u8 i; for (i = 0; i < 5; i++) { - if (gSaveBlock1.tvShows[i].common.var00 == gSpecialVar_0x8004) + if (gSaveBlock1.tvShows[i].common.kind == gSpecialVar_0x8004) return TRUE; } return FALSE; } -bool8 sub_80BF9B4(void) +bool8 TV_PutNameRaterShowOnTheAirIfNicnkameChanged(void) { GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); if (!StringCompareWithoutExtCtrlCodes(gStringVar3, gStringVar1)) @@ -2064,9 +2073,9 @@ bool8 sub_80BF9B4(void) return TRUE; } -void c2_080CC144(void); +void ChangePokemonNickname_CB(void); -void sub_80BF9F8(void) +void ChangePokemonNickname(void) { u16 spec; u16 gender; @@ -2077,22 +2086,22 @@ void sub_80BF9F8(void) spec = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_SPECIES, 0); gender = GetMonGender(&(gPlayerParty[gSpecialVar_0x8004])); pval = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar2, spec, gender, pval, c2_080CC144); + DoNamingScreen(3, gStringVar2, spec, gender, pval, ChangePokemonNickname_CB); } -void c2_080CC144(void) +void ChangePokemonNickname_CB(void) { SetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, gStringVar2); c2_exit_to_overworld_1_continue_scripts_restart_music(); } -void sub_80BFAE0(void) +void TV_CopyNicknameToStringVar1AndEnsureTerminated(void) { GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); StringGetEnd10(gStringVar1); } -void sub_80BFB10(void) +void TV_CheckMonOTIDEqualsPlayerID(void) { if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0)) gSpecialVar_Result = 0; @@ -2100,7 +2109,7 @@ void sub_80BFB10(void) gSpecialVar_Result = 1; } -u8 sub_80BFB54(u8 arg0) +u8 GetTVChannelByShowType(u8 arg0) { if (arg0 == 0) return 0; @@ -2149,7 +2158,7 @@ void GetMomOrDadStringForTVMessage(void) if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } } else @@ -2157,21 +2166,21 @@ void GetMomOrDadStringForTVMessage(void) if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } } } - if (VarGet(VAR_0x4003) == 1) + if (VarGet(VAR_TEMP_3) == 1) { StringCopy(gStringVar1, gOtherText_Mom); } - else if (VarGet(VAR_0x4003) == 2) + else if (VarGet(VAR_TEMP_3) == 2) { StringCopy(gStringVar1, gOtherText_Dad); } - else if (VarGet(VAR_0x4003) > 2) + else if (VarGet(VAR_TEMP_3) > 2) { - if (VarGet(VAR_0x4003) % 2 == 0) + if (VarGet(VAR_TEMP_3) % 2 == 0) StringCopy(gStringVar1, gOtherText_Mom); else StringCopy(gStringVar1, gOtherText_Dad); @@ -2181,26 +2190,26 @@ void GetMomOrDadStringForTVMessage(void) if (Random() % 2 != 0) { StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); + VarSet(VAR_TEMP_3, 1); } else { StringCopy(gStringVar1, gOtherText_Dad); - VarSet(VAR_0x4003, 2); + VarSet(VAR_TEMP_3, 2); } } } void sub_80BFD20(void) { - VarSet(VAR_0x40BC, 0); + VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0); RemoveFieldObjectByLocalIdAndMap(5, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } typedef union ewramStruct_02007000 { TVShow tvshows[4][25]; - struct UnknownSaveStruct2ABC unknown_2abc[4][16]; + struct PokeNews pokeNews[4][16]; } ewramStruct_02007000; void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]); @@ -2294,7 +2303,7 @@ bool8 sub_80BFF68(TVShow * arg1[25], TVShow * arg2[25], u8 idx) tv1 = *arg1; tv2 = *arg2; value = FALSE; - switchval = sub_80BFB54(tv2[gUnknown_03000722].common.var00); + switchval = GetTVChannelByShowType(tv2[gUnknown_03000722].common.kind); switch (switchval) { case 2: @@ -2329,7 +2338,7 @@ u8 sub_80C004C(TVShow *tv1, TVShow *tv2, u8 idx) tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; tv2->common.srcTrainerIdHi = linkTrainerId >> 8; *tv1 = *tv2; - tv1->common.var01 = 1; + tv1->common.active = 1; return TRUE; } @@ -2345,7 +2354,7 @@ u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx) tv2->common.srcTrainerId2Lo = linkTrainerId & 0xFF; tv2->common.srcTrainerId2Hi = linkTrainerId >> 8; *tv1 = *tv2; - tv1->common.var01 = 1; + tv1->common.active = 1; return TRUE; } @@ -2359,7 +2368,7 @@ u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx) tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; tv2->common.srcTrainerIdHi = linkTrainerId >> 8; *tv1 = *tv2; - tv1->common.var01 = 1; + tv1->common.active = 1; tv1->common.var16[0] = 1; return TRUE; } @@ -2369,7 +2378,7 @@ s8 sub_80C019C(TVShow tvShows[]) u8 i; for (i = 0; i < 24; i++) { - if (tvShows[i].common.var01 == 0 && (u8)(tvShows[i].common.var00 - 1) < 60) + if (tvShows[i].common.active == 0 && (u8)(tvShows[i].common.kind - 1) < 60) return i; } return -1; @@ -2381,7 +2390,7 @@ void sub_80C01D4(void) u16 i; for (i=0; i<24; i++) { - switch (gSaveBlock1.tvShows[i].common.var00) + switch (gSaveBlock1.tvShows[i].common.kind) { case 0: case TVSHOW_RECENT_HAPPENINGS: @@ -2637,13 +2646,13 @@ _080C03A0:\n\ void sub_80C03A8(u8 showidx) { - gSaveBlock1.tvShows[showidx].common.var01 = 0; + gSaveBlock1.tvShows[showidx].common.active = 0; } void sub_80C03C8(u16 species, u8 showidx) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0) - gSaveBlock1.tvShows[showidx].common.var01 = 0; + gSaveBlock1.tvShows[showidx].common.active = 0; } void sub_80C0408(void) @@ -2654,10 +2663,10 @@ void sub_80C0408(void) return; for (i = 0; i < 24; i++) { - if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) - gSaveBlock1.tvShows[i].common.var01 = 0; - else if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_MASS_OUTBREAK) - gSaveBlock1.tvShows[i].common.var01 = 0; + if (gSaveBlock1.tvShows[i].common.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) + gSaveBlock1.tvShows[i].common.active = 0; + else if (gSaveBlock1.tvShows[i].common.kind == TVSHOW_MASS_OUTBREAK) + gSaveBlock1.tvShows[i].common.active = 0; } } @@ -2667,8 +2676,8 @@ void sub_80C045C(void) for (i = 0; i < 5; i++) { - if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) == 2) - gSaveBlock1.tvShows[i].common.var01 = 0; + if (GetTVChannelByShowType(gSaveBlock1.tvShows[i].common.kind) == 2) + gSaveBlock1.tvShows[i].common.active = 0; } } @@ -2680,18 +2689,18 @@ void sub_80C04A0(void) for (showIdx = 5; showIdx < 24; showIdx++) { - if (gSaveBlock1.tvShows[showIdx].common.var00 == 0) + if (gSaveBlock1.tvShows[showIdx].common.kind == 0) count++; } for (showIdx = 0; showIdx < 5 - count; showIdx++) sub_80BF55C(gSaveBlock1.tvShows, showIdx+5); } -void sub_80C05C4(struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16]); +void sub_80C05C4(struct PokeNews[16], struct PokeNews[16], struct PokeNews[16], struct PokeNews[16]); void sub_80C0750(void); void sub_80C0788(void); -s8 sub_80C0730(struct UnknownSaveStruct2ABC[16], u8); -void sub_80C06BC(struct UnknownSaveStruct2ABC *[16], struct UnknownSaveStruct2ABC *[16]); +s8 sub_80C0730(struct PokeNews[16], u8); +void sub_80C06BC(struct PokeNews *[16], struct PokeNews *[16]); void sub_80C0514(void *a0, u32 a1, u8 a2) { @@ -2699,33 +2708,33 @@ void sub_80C0514(void *a0, u32 a1, u8 a2) u8 i; for (i = 0; i < 4; i++) - memcpy(gUnknown_02007000.unknown_2abc[i], a0 + i * a1, 64); + memcpy(gUnknown_02007000.pokeNews[i], a0 + i * a1, 64); struct02007000 = &gUnknown_02007000; switch (a2) { case 0: - sub_80C05C4(gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); + sub_80C05C4(gSaveBlock1.pokeNews, struct02007000->pokeNews[1], struct02007000->pokeNews[2], struct02007000->pokeNews[3]); break; case 1: - sub_80C05C4(struct02007000->unknown_2abc[0], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); + sub_80C05C4(struct02007000->pokeNews[0], gSaveBlock1.pokeNews, struct02007000->pokeNews[2], struct02007000->pokeNews[3]); break; case 2: - sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[3]); + sub_80C05C4(struct02007000->pokeNews[0], struct02007000->pokeNews[1], gSaveBlock1.pokeNews, struct02007000->pokeNews[3]); break; case 3: - sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], gSaveBlock1.unknown_2ABC); + sub_80C05C4(struct02007000->pokeNews[0], struct02007000->pokeNews[1], struct02007000->pokeNews[2], gSaveBlock1.pokeNews); break; } sub_80C0750(); sub_80C0788(); } -void sub_80C05C4(struct UnknownSaveStruct2ABC a0[16], struct UnknownSaveStruct2ABC a1[16], struct UnknownSaveStruct2ABC a2[16], struct UnknownSaveStruct2ABC a3[16]) +void sub_80C05C4(struct PokeNews a0[16], struct PokeNews a1[16], struct PokeNews a2[16], struct PokeNews a3[16]) { u8 i; u8 j; u8 k; - struct UnknownSaveStruct2ABC ** arglist[4]; + struct PokeNews ** arglist[4]; arglist[0] = &a0; arglist[1] = &a1; @@ -2750,10 +2759,10 @@ void sub_80C05C4(struct UnknownSaveStruct2ABC a0[16], struct UnknownSaveStruct2A } } -void sub_80C06BC(struct UnknownSaveStruct2ABC *arg0[16], struct UnknownSaveStruct2ABC *arg1[16]) +void sub_80C06BC(struct PokeNews *arg0[16], struct PokeNews *arg1[16]) { - struct UnknownSaveStruct2ABC *str0; - struct UnknownSaveStruct2ABC *str1; + struct PokeNews *str0; + struct PokeNews *str1; str0 = arg0[0]; str1 = arg1[0]; @@ -2761,26 +2770,26 @@ void sub_80C06BC(struct UnknownSaveStruct2ABC *arg0[16], struct UnknownSaveStruc sub_80C06E8(str0, str1, gUnknown_03005D38.var0); } -bool8 sub_80C06E8(struct UnknownSaveStruct2ABC *arg0, struct UnknownSaveStruct2ABC *arg1, s8 arg2) +bool8 sub_80C06E8(struct PokeNews *arg0, struct PokeNews *arg1, s8 arg2) { u8 i; - if (arg1->val0 == 0) + if (arg1->kind == 0) return FALSE; for (i = 0; i < 16; i++) { - if (arg0[i].val0 == arg1->val0) + if (arg0[i].kind == arg1->kind) return FALSE; } - arg0[arg2].val0 = arg1->val0; - arg0[arg2].val1 = 1; - arg0[arg2].val2 = arg1->val2; + arg0[arg2].kind = arg1->kind; + arg0[arg2].state = 1; + arg0[arg2].days = arg1->days; return TRUE; } -s8 sub_80C0730(struct UnknownSaveStruct2ABC *arg0, u8 arg1) +s8 sub_80C0730(struct PokeNews *arg0, u8 arg1) { - if (arg0[arg1].val0 == 0) + if (arg0[arg1].kind == 0) return -1; return arg1; } @@ -2791,7 +2800,7 @@ void sub_80C0750(void) for (i = 0; i < 16; i++) { - if (gSaveBlock1.unknown_2ABC[i].val0 > 3) + if (gSaveBlock1.pokeNews[i].kind > 3) sub_80BEC10(i); } sub_80BEC40(); @@ -2804,15 +2813,15 @@ void sub_80C0788(void) if (FlagGet(FLAG_SYS_GAME_CLEAR) != 1) { for (i = 0; i < 16; i++) - gSaveBlock1.unknown_2ABC[i].val1 = 0; + gSaveBlock1.pokeNews[i].state = 0; } } void DoTVShow(void) { - if (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 != 0) + if (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.active != 0) { - switch (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var00) + switch (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.kind) { case TVSHOW_FAN_CLUB_LETTER: DoTVShowPokemonFanClubLetter(); @@ -2870,7 +2879,7 @@ void DoTVShowBravoTrainerPokemonProfile(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch(state) { case 0: @@ -2878,49 +2887,49 @@ void DoTVShowBravoTrainerPokemonProfile(void) CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); sub_80BEF10(2, bravoTrainer->contestRank); if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[bravoTrainer->species], bravoTrainer->pokemonNickname)) - gUnknown_020387E8 = 8; + sTVShowState = 8; else - gUnknown_020387E8 = 1; + sTVShowState = 1; break; case 1: StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); TVShowConvertInternationalString(gStringVar2, bravoTrainer->pokemonNickname, bravoTrainer->var1f); CopyContestCategoryToStringVar(2, bravoTrainer->contestCategory); - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 2: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); if (bravoTrainer->contestResult == 0) // placed first - gUnknown_020387E8 = 3; + sTVShowState = 3; else - gUnknown_020387E8 = 4; + sTVShowState = 4; break; case 3: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]); sub_80BF088(2, bravoTrainer->contestResult + 1); - gUnknown_020387E8 = 5; + sTVShowState = 5; break; case 4: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]); sub_80BF088(2, bravoTrainer->contestResult + 1); - gUnknown_020387E8 = 5; + sTVShowState = 5; break; case 5: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]); if (bravoTrainer->var14) - gUnknown_020387E8 = 6; + sTVShowState = 6; else - gUnknown_020387E8 = 7; + sTVShowState = 7; break; case 6: StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); StringCopy(gStringVar2, gMoveNames[bravoTrainer->var14]); EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]); - gUnknown_020387E8 = 7; + sTVShowState = 7; break; case 7: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); @@ -2929,7 +2938,7 @@ void DoTVShowBravoTrainerPokemonProfile(void) break; case 8: StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); - gUnknown_020387E8 = 2; + sTVShowState = 2; break; } ShowFieldMessage(gTVBravoTrainerTextGroup[state]); @@ -2941,79 +2950,79 @@ void DoTVShowBravoTrainerBattleTowerProfile(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch(state) { case 0: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->species]); if (bravoTrainerTower->var16 >= 7) - gUnknown_020387E8 = 1; + sTVShowState = 1; else - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 1: sub_80BF088(0, bravoTrainerTower->btLevel); sub_80BF088(1, bravoTrainerTower->var16); if (bravoTrainerTower->var1c == 1) - gUnknown_020387E8 = 3; + sTVShowState = 3; else - gUnknown_020387E8 = 4; + sTVShowState = 4; break; case 2: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); sub_80BF088(1, bravoTrainerTower->var16 + 1); if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; + sTVShowState = 5; else - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 3: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; + sTVShowState = 5; else - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 4: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; + sTVShowState = 5; else - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 5: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 6: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 7: - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 8: case 9: case 10: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 11: EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]); if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 12; + sTVShowState = 12; else - gUnknown_020387E8 = 13; + sTVShowState = 13; break; case 12: case 13: EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]); TVShowConvertInternationalString(gStringVar2, bravoTrainerTower->trainerName, bravoTrainerTower->language); TVShowConvertInternationalString(gStringVar3, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 14; + sTVShowState = 14; break; case 14: TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); @@ -3030,61 +3039,61 @@ void DoTVShowTodaysSmartShopper(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch(state) { case 0: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); GetMapSectionName(gStringVar2, smartShopper->shopLocation, 0); if (smartShopper->itemAmounts[0] >= 0xff) - gUnknown_020387E8 = 11; + sTVShowState = 11; else - gUnknown_020387E8 = 1; + sTVShowState = 1; break; case 1: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); sub_80BF088(2, smartShopper->itemAmounts[0]); - gUnknown_020387E8 += (Random() % 4) + 1; + sTVShowState += (Random() % 4) + 1; break; case 2: case 4: case 5: if (smartShopper->itemIds[1] != 0) - gUnknown_020387E8 = 6; + sTVShowState = 6; else - gUnknown_020387E8 = 10; + sTVShowState = 10; break; case 3: sub_80BF088(2, smartShopper->itemAmounts[0] + 1); if (smartShopper->itemIds[1] != 0) - gUnknown_020387E8 = 6; + sTVShowState = 6; else - gUnknown_020387E8 = 10; + sTVShowState = 10; break; case 6: StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[1])->name); sub_80BF088(2, smartShopper->itemAmounts[1]); if (smartShopper->itemIds[2] != 0) - gUnknown_020387E8 = 7; + sTVShowState = 7; else if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; + sTVShowState = 8; else - gUnknown_020387E8 = 9; + sTVShowState = 9; break; case 7: StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[2])->name); sub_80BF088(2, smartShopper->itemAmounts[2]); if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; + sTVShowState = 8; else - gUnknown_020387E8 = 9; + sTVShowState = 9; break; case 8: if (smartShopper->itemAmounts[0] < 0xff) - gUnknown_020387E8 = 9; + sTVShowState = 9; else - gUnknown_020387E8 = 12; + sTVShowState = 12; break; case 9: sub_80BF154(1, smartShopper); @@ -3092,17 +3101,17 @@ void DoTVShowTodaysSmartShopper(void) break; case 10: if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; + sTVShowState = 8; else - gUnknown_020387E8 = 9; + sTVShowState = 9; break; case 11: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; + sTVShowState = 8; else - gUnknown_020387E8 = 12; + sTVShowState = 12; break; case 12: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); @@ -3118,14 +3127,14 @@ void DoTVShowTheNameRaterShow(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); TVShowConvertInternationalString(gStringVar3, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); - gUnknown_020387E8 = sub_80BF7E8(nameRaterShow) + 1; + sTVShowState = sub_80BF7E8(nameRaterShow) + 1; break; case 1: case 3: @@ -3135,20 +3144,20 @@ void DoTVShowTheNameRaterShow(void) case 7: case 8: if (nameRaterShow->random == 0) - gUnknown_020387E8 = 9; + sTVShowState = 9; else if (nameRaterShow->random == 1) - gUnknown_020387E8 = 10; + sTVShowState = 10; else if (nameRaterShow->random == 2) - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 2: TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); if (nameRaterShow->random == 0) - gUnknown_020387E8 = 9; + sTVShowState = 9; else if (nameRaterShow->random == 1) - gUnknown_020387E8 = 10; + sTVShowState = 10; else if (nameRaterShow->random == 2) - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 9: case 10: @@ -3158,7 +3167,7 @@ void DoTVShowTheNameRaterShow(void) sub_80BF820(0, 0, 0, 1, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); - gUnknown_020387E8 = 12; + sTVShowState = 12; break; case 13: sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); @@ -3166,7 +3175,7 @@ void DoTVShowTheNameRaterShow(void) sub_80BF820(0, 0, 2, 0, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->language); TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - gUnknown_020387E8 = 14; + sTVShowState = 14; break; case 14: sub_80BF820(0, 0, 3, 0, 0, nameRaterShow); @@ -3174,31 +3183,31 @@ void DoTVShowTheNameRaterShow(void) sub_80BF820(0, 0, 2, 1, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - gUnknown_020387E8 = 18; + sTVShowState = 18; break; case 15: sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); sub_80BF820(2, 0, 3, 2, nameRaterShow->species, nameRaterShow); - gUnknown_020387E8 = 16; + sTVShowState = 16; break; case 16: sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); sub_80BF820(0, 0, 2, 2, nameRaterShow->species, nameRaterShow); - gUnknown_020387E8 = 17; + sTVShowState = 17; break; case 17: sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); sub_80BF820(2, 0, 3, 2, nameRaterShow->var1C, nameRaterShow); StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->var1C]); - gUnknown_020387E8 = 18; + sTVShowState = 18; break; case 12: state = 18; - gUnknown_020387E8 = 18; + sTVShowState = 18; case 18: TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); TVShowConvertInternationalString(gStringVar2, nameRaterShow->trainerName, nameRaterShow->language); @@ -3214,7 +3223,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: @@ -3222,53 +3231,53 @@ void DoTVShowPokemonTodaySuccessfulCapture(void) StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); if (pokemonToday->ball == ITEM_MASTER_BALL) - gUnknown_020387E8 = 5; + sTVShowState = 5; else - gUnknown_020387E8 = 1; + sTVShowState = 1; break; case 1: - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 2: StringCopy(gStringVar2, ItemId_GetItem(pokemonToday->ball)->name); sub_80BF088(2, pokemonToday->var12); if (pokemonToday->var12 < 4) - gUnknown_020387E8 = 3; + sTVShowState = 3; else - gUnknown_020387E8 = 4; + sTVShowState = 4; break; case 3: TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 4: - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 5: TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 6: TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 += (Random() % 4) + 1; + sTVShowState += (Random() % 4) + 1; break; case 7: case 8: StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); sub_80BF638(2, pokemonToday->species); - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 9: case 10: StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 = 11; + sTVShowState = 11; break; case 11: TVShowDone(); @@ -3283,36 +3292,36 @@ void DoTVShowPokemonTodayFailedCapture(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); StringCopy(gStringVar2, gSpeciesNames[pokemonTodayFailed->species]); - gUnknown_020387E8 = 1; + sTVShowState = 1; break; case 1: TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); GetMapSectionName(gStringVar2, pokemonTodayFailed->var12, 0); StringCopy(gStringVar3, gSpeciesNames[pokemonTodayFailed->species2]); if (pokemonTodayFailed->var11 == 1) - gUnknown_020387E8 = 3; + sTVShowState = 3; else - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 2: case 3: TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); sub_80BF088(1, pokemonTodayFailed->var10); if ((Random() % 3) == 0) - gUnknown_020387E8 = 5; + sTVShowState = 5; else - gUnknown_020387E8 = 4; + sTVShowState = 4; break; case 4: case 5: TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); - gUnknown_020387E8 = 6; + sTVShowState = 6; break; case 6: TVShowDone(); @@ -3328,32 +3337,32 @@ void DoTVShowPokemonFanClubLetter(void) u16 rval; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: TVShowConvertInternationalString(gStringVar1, fanclubLetter->playerName, fanclubLetter->language); StringCopy(gStringVar2, gSpeciesNames[fanclubLetter->species]); - gUnknown_020387E8 = 50; + sTVShowState = 50; break; case 1: rval = (Random() % 4) + 1; if (rval == 1) - gUnknown_020387E8 = 2; + sTVShowState = 2; else - gUnknown_020387E8 = rval + 2; + sTVShowState = rval + 2; break; case 2: - gUnknown_020387E8 = 51; + sTVShowState = 51; break; case 3: - gUnknown_020387E8 += (Random() % 3) + 1; + sTVShowState += (Random() % 3) + 1; break; case 4: case 5: case 6: sub_80BF79C((TVShow *)fanclubLetter); - gUnknown_020387E8 = 7; + sTVShowState = 7; break; case 7: rval = (Random() % 0x1f) + 0x46; @@ -3363,12 +3372,12 @@ void DoTVShowPokemonFanClubLetter(void) case 50: ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 1; + sTVShowState = 1; return; case 51: ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 3; + sTVShowState = 3; return; } ShowFieldMessage(gTVFanClubTextGroup[state]); @@ -3380,21 +3389,21 @@ void DoTVShowRecentHappenings(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: TVShowConvertInternationalString(gStringVar1, recentHappenings->playerName, recentHappenings->language); sub_80BF79C((TVShow *)recentHappenings); - gUnknown_020387E8 = 50; + sTVShowState = 50; break; case 1: - gUnknown_020387E8 += 1 + (Random() % 3); + sTVShowState += 1 + (Random() % 3); break; case 2: case 3: case 4: - gUnknown_020387E8 = 5; + sTVShowState = 5; break; case 5: TVShowDone(); @@ -3402,7 +3411,7 @@ void DoTVShowRecentHappenings(void) case 50: ConvertEasyChatWordsToString(gStringVar4, recentHappenings->var04, 2, 2); ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 1; + sTVShowState = 1; return; } ShowFieldMessage(gTVRecentHappeningsTextGroup[state]); @@ -3414,14 +3423,14 @@ void DoTVShowPokemonFanClubOpinions(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); TVShowConvertInternationalString(gStringVar3, fanclubOpinions->var10, fanclubOpinions->var0E); - gUnknown_020387E8 = fanclubOpinions->var04B + 1; + sTVShowState = fanclubOpinions->var04B + 1; break; case 1: case 2: @@ -3429,7 +3438,7 @@ void DoTVShowPokemonFanClubOpinions(void) TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); EasyChat_GetWordText(gStringVar3, fanclubOpinions->var1C[0]); - gUnknown_020387E8 = 4; + sTVShowState = 4; break; case 4: TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); @@ -3452,7 +3461,7 @@ void DoTVShowPokemonNewsMassOutbreak(void) StringCopy(gStringVar2, gSpeciesNames[massOutbreak->species]); TVShowDone(); StartMassOutbreak(); - ShowFieldMessage(gTVPokemonOutbreakTextGroup[gUnknown_020387E8]); + ShowFieldMessage(gTVPokemonOutbreakTextGroup[sTVShowState]); } void DoTVShowInSearchOfTrainers(void) @@ -3460,49 +3469,49 @@ void DoTVShowInSearchOfTrainers(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: GetMapSectionName(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0); if (gSaveBlock1.gabbyAndTyData.battleNum > 1) - gUnknown_020387E8 = 1; + sTVShowState = 1; else - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 1: - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 2: if (gSaveBlock1.gabbyAndTyData.valA_0 == 0) - gUnknown_020387E8 = 4; + sTVShowState = 4; else if (gSaveBlock1.gabbyAndTyData.valA_3 != 0) - gUnknown_020387E8 = 5; + sTVShowState = 5; else if (gSaveBlock1.gabbyAndTyData.valA_2 != 0) - gUnknown_020387E8 = 6; + sTVShowState = 6; else if (gSaveBlock1.gabbyAndTyData.valA_1 != 0) - gUnknown_020387E8 = 7; + sTVShowState = 7; else - gUnknown_020387E8 = 3; + sTVShowState = 3; break; case 3: StringCopy(gStringVar1, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); StringCopy(gStringVar2, gMoveNames[gSaveBlock1.gabbyAndTyData.lastMove]); StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); - gUnknown_020387E8 = 8; + sTVShowState = 8; break; case 4: case 5: case 6: case 7: - gUnknown_020387E8 = 8; + sTVShowState = 8; break; case 8: EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); gSpecialVar_Result = 1; - gUnknown_020387E8 = 0;; + sTVShowState = 0;; TakeTVShowInSearchOfTrainersOffTheAir(); break; } @@ -3516,10 +3525,10 @@ void DoTVShowPokemonAngler(void) gSpecialVar_Result = 0; if (pokemonAngler->var02 < pokemonAngler->var03) - gUnknown_020387E8 = 0; + sTVShowState = 0; else - gUnknown_020387E8 = 1; - state = gUnknown_020387E8; + sTVShowState = 1; + state = sTVShowState; switch (state) { case 0: @@ -3544,7 +3553,7 @@ void DoTVShowTheWorldOfMasters(void) u8 state; gSpecialVar_Result = 0; - state = gUnknown_020387E8; + state = sTVShowState; switch (state) { case 0: @@ -3552,11 +3561,11 @@ void DoTVShowTheWorldOfMasters(void) worldOfMasters->language); sub_80BF088(1, worldOfMasters->var06); sub_80BF088(2, worldOfMasters->var02); - gUnknown_020387E8 = 1; + sTVShowState = 1; break; case 1: StringCopy(gStringVar1, gSpeciesNames[worldOfMasters->var08]); - gUnknown_020387E8 = 2; + sTVShowState = 2; break; case 2: TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName, @@ -3572,11 +3581,11 @@ void DoTVShowTheWorldOfMasters(void) void TVShowDone(void) { gSpecialVar_Result = 1; - gUnknown_020387E8 = 0; - gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0; + sTVShowState = 0; + gSaveBlock1.tvShows[gSpecialVar_0x8004].common.active = 0; } -void sub_80C2014(void) +void ResetTVShowState(void) { - gUnknown_020387E8 = 0; + sTVShowState = 0; } |