summaryrefslogtreecommitdiff
path: root/src/field
diff options
context:
space:
mode:
Diffstat (limited to 'src/field')
-rw-r--r--src/field/battle_tower.c2373
-rw-r--r--src/field/berry.c539
-rw-r--r--src/field/berry_tag_screen.c40
-rw-r--r--src/field/bike.c602
-rw-r--r--src/field/birch_pc.c2
-rw-r--r--src/field/braille_puzzles.c26
-rw-r--r--src/field/choose_party.c22
-rw-r--r--src/field/daycare.c816
-rw-r--r--src/field/decoration.c86
-rw-r--r--src/field/decoration_inventory.c7
-rw-r--r--src/field/dewford_trend.c18
-rw-r--r--src/field/easy_chat.c15
-rw-r--r--src/field/event_data.c38
-rw-r--r--src/field/field_camera.c11
-rw-r--r--src/field/field_control_avatar.c38
-rw-r--r--src/field/field_door.c413
-rw-r--r--src/field/field_effect.c278
-rw-r--r--src/field/field_effect_helpers.c366
-rw-r--r--src/field/field_fadetransition.c2
-rw-r--r--src/field/field_ground_effect.c38
-rw-r--r--src/field/field_map_obj.c661
-rw-r--r--src/field/field_map_obj_helpers.c74
-rw-r--r--src/field/field_player_avatar.c212
-rw-r--r--src/field/field_poison.c10
-rw-r--r--src/field/field_region_map.c26
-rw-r--r--src/field/field_screen_effect.c20
-rw-r--r--src/field/field_special_scene.c87
-rw-r--r--src/field/field_specials.c138
-rw-r--r--src/field/field_tasks.c16
-rw-r--r--src/field/field_weather.c1081
-rw-r--r--src/field/field_weather_effects.c2383
-rw-r--r--src/field/fldeff_berrytree.c56
-rw-r--r--src/field/fldeff_cut.c86
-rw-r--r--src/field/fldeff_decoration.c364
-rw-r--r--src/field/fldeff_flash.c46
-rw-r--r--src/field/fldeff_poison.c44
-rw-r--r--src/field/fldeff_recordmixing.c83
-rw-r--r--src/field/fldeff_secret_base_pc.c69
-rw-r--r--src/field/fldeff_secretpower.c484
-rw-r--r--src/field/fldeff_softboiled.c17
-rw-r--r--src/field/fldeff_strength.c6
-rw-r--r--src/field/heal_location.c46
-rw-r--r--src/field/item.c4
-rw-r--r--src/field/item_menu.c156
-rw-r--r--src/field/item_use.c70
-rw-r--r--src/field/landmark.c366
-rw-r--r--src/field/lottery_corner.c14
-rw-r--r--src/field/map_obj_lock.c6
-rw-r--r--src/field/mauville_man.c29
-rw-r--r--src/field/menu_helpers.c56
-rw-r--r--src/field/money.c49
-rw-r--r--src/field/overworld.c128
-rw-r--r--src/field/party_menu.c332
-rw-r--r--src/field/pc_screen_effect.c128
-rw-r--r--src/field/player_pc.c77
-rw-r--r--src/field/pokeblock.c76
-rw-r--r--src/field/pokenav.c42
-rw-r--r--src/field/region_map.c257
-rw-r--r--src/field/roamer.c18
-rw-r--r--src/field/rotating_gate.c24
-rw-r--r--src/field/safari_zone.c28
-rw-r--r--src/field/scrcmd.c164
-rw-r--r--src/field/script_menu.c34
-rw-r--r--src/field/script_movement.c20
-rw-r--r--src/field/secret_base.c1557
-rw-r--r--src/field/shop.c13
-rw-r--r--src/field/slot_machine.c19
-rw-r--r--src/field/start_menu.c16
-rw-r--r--src/field/starter_choose.c32
-rw-r--r--src/field/trader.c13
-rw-r--r--src/field/trainer_see.c26
-rw-r--r--src/field/tv.c523
-rw-r--r--src/field/use_pokeblock.c20
-rw-r--r--src/field/wallclock.c74
-rw-r--r--src/field/wild_encounter.c838
75 files changed, 13252 insertions, 3696 deletions
diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c
new file mode 100644
index 000000000..6b6064c16
--- /dev/null
+++ b/src/field/battle_tower.c
@@ -0,0 +1,2373 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "battle_transition.h"
+#include "data2.h"
+#include "easy_chat.h"
+#include "constants/easy_chat.h"
+#include "event_data.h"
+#include "item.h"
+#include "constants/items.h"
+#include "main.h"
+#include "constants/map_objects.h"
+#include "constants/moves.h"
+#include "new_game.h"
+#include "overworld.h"
+#include "pokedex.h"
+#include "random.h"
+#include "save.h"
+#include "script_pokemon_80C4.h"
+#include "constants/species.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "trainer.h"
+#include "tv.h"
+#include "constants/vars.h"
+#include "ewram.h"
+
+#if ENGLISH
+#include "../data/battle_tower/trainers.h"
+#elif GERMAN
+#include "../data/battle_tower/trainers_de.h"
+#endif
+
+static const u16 sBattleTowerHeldItems[] = {
+ ITEM_NONE,
+ ITEM_KINGS_ROCK,
+ ITEM_SITRUS_BERRY,
+ ITEM_ORAN_BERRY,
+ ITEM_CHESTO_BERRY,
+ ITEM_HARD_STONE,
+ ITEM_FOCUS_BAND,
+ ITEM_PERSIM_BERRY,
+ ITEM_MIRACLE_SEED,
+ ITEM_BERRY_JUICE,
+ ITEM_MACHO_BRACE,
+ ITEM_SILVER_POWDER,
+ ITEM_CHERI_BERRY,
+ ITEM_BLACK_GLASSES,
+ ITEM_BLACK_BELT,
+ ITEM_SOUL_DEW,
+ ITEM_CHOICE_BAND,
+ ITEM_MAGNET,
+ ITEM_SILK_SCARF,
+ ITEM_WHITE_HERB,
+ ITEM_DEEP_SEA_SCALE,
+ ITEM_DEEP_SEA_TOOTH,
+ ITEM_MYSTIC_WATER,
+ ITEM_SHARP_BEAK,
+ ITEM_QUICK_CLAW,
+ ITEM_LEFTOVERS,
+ ITEM_RAWST_BERRY,
+ ITEM_LIGHT_BALL,
+ ITEM_POISON_BARB,
+ ITEM_NEVER_MELT_ICE,
+ ITEM_ASPEAR_BERRY,
+ ITEM_SPELL_TAG,
+ ITEM_BRIGHT_POWDER,
+ ITEM_LEPPA_BERRY,
+ ITEM_SCOPE_LENS,
+ ITEM_TWISTED_SPOON,
+ ITEM_METAL_COAT,
+ ITEM_MENTAL_HERB,
+ ITEM_CHARCOAL,
+ ITEM_PECHA_BERRY,
+ ITEM_SOFT_SAND,
+ ITEM_LUM_BERRY,
+ ITEM_DRAGON_SCALE,
+ ITEM_DRAGON_FANG,
+ ITEM_IAPAPA_BERRY,
+ ITEM_WIKI_BERRY,
+ ITEM_SEA_INCENSE,
+ ITEM_SHELL_BELL,
+ ITEM_SALAC_BERRY,
+ ITEM_LANSAT_BERRY,
+ ITEM_APICOT_BERRY,
+ ITEM_STARF_BERRY,
+ ITEM_LIECHI_BERRY,
+ ITEM_STICK,
+ ITEM_LAX_INCENSE,
+ ITEM_AGUAV_BERRY,
+ ITEM_FIGY_BERRY,
+ ITEM_THICK_CLUB,
+ ITEM_MAGO_BERRY,
+ ITEM_METAL_POWDER,
+ ITEM_PETAYA_BERRY,
+ ITEM_LUCKY_PUNCH,
+ ITEM_GANLON_BERRY,
+};
+
+#include "../data/battle_tower/level_50_mons.h"
+#include "../data/battle_tower/level_100_mons.h"
+
+static const u8 sMaleTrainerClasses[] = {
+ TRAINER_CLASS_RUIN_MANIAC,
+ TRAINER_CLASS_TUBER_M,
+ TRAINER_CLASS_COOL_TRAINER_M,
+ TRAINER_CLASS_RICH_BOY,
+ TRAINER_CLASS_POKEMANIAC,
+ TRAINER_CLASS_SWIMMER_M,
+ TRAINER_CLASS_BLACK_BELT,
+ TRAINER_CLASS_GUITARIST,
+ TRAINER_CLASS_KINDLER,
+ TRAINER_CLASS_CAMPER,
+ TRAINER_CLASS_BUG_MANIAC,
+ TRAINER_CLASS_PSYCHIC_M,
+ TRAINER_CLASS_GENTLEMAN,
+ TRAINER_CLASS_SCHOOL_KID_M,
+ TRAINER_CLASS_POKEFAN_M,
+ TRAINER_CLASS_EXPERT_M,
+ TRAINER_CLASS_YOUNGSTER,
+ TRAINER_CLASS_FISHERMAN,
+ TRAINER_CLASS_CYCLING_TRIATHLETE_M,
+ TRAINER_CLASS_RUNNING_TRIATHLETE_M,
+ TRAINER_CLASS_SWIMMING_TRIATHLETE_M,
+ TRAINER_CLASS_DRAGON_TAMER,
+ TRAINER_CLASS_BIRD_KEEPER,
+ TRAINER_CLASS_NINJA_BOY,
+ TRAINER_CLASS_SAILOR,
+ TRAINER_CLASS_COLLECTOR,
+ TRAINER_CLASS_POKEMON_BREEDER_M,
+ TRAINER_CLASS_POKEMON_RANGER_M,
+ TRAINER_CLASS_BUG_CATCHER,
+ TRAINER_CLASS_HIKER,
+};
+
+static const u8 sFemaleTrainerClasses[] = {
+ TRAINER_CLASS_AROMA_LADY,
+ TRAINER_CLASS_TUBER_F,
+ TRAINER_CLASS_COOL_TRAINER_F,
+ TRAINER_CLASS_HEX_MANIAC,
+ TRAINER_CLASS_LADY,
+ TRAINER_CLASS_BEAUTY,
+ TRAINER_CLASS_PSYCHIC_F,
+ TRAINER_CLASS_SCHOOL_KID_F,
+ TRAINER_CLASS_POKEFAN_F,
+ TRAINER_CLASS_EXPERT_F,
+ TRAINER_CLASS_CYCLING_TRIATHLETE_F,
+ TRAINER_CLASS_RUNNING_TRIATHLETE_F,
+ TRAINER_CLASS_SWIMMING_TRIATHLETE_F,
+ TRAINER_CLASS_BATTLE_GIRL,
+ TRAINER_CLASS_PARASOL_LADY,
+ TRAINER_CLASS_SWIMMER_F,
+ TRAINER_CLASS_PICNICKER,
+ TRAINER_CLASS_POKEMON_BREEDER_F,
+ TRAINER_CLASS_POKEMON_RANGER_F,
+ TRAINER_CLASS_LASS,
+};
+
+static const u8 sMaleTrainerGfxIds[] = {
+ MAP_OBJ_GFX_HIKER,
+ MAP_OBJ_GFX_TUBER_M,
+ MAP_OBJ_GFX_MAN_4,
+ MAP_OBJ_GFX_BOY_4,
+ MAP_OBJ_GFX_MANIAC,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ MAP_OBJ_GFX_BLACK_BELT,
+ MAP_OBJ_GFX_MAN_6,
+ MAP_OBJ_GFX_MAN_6,
+ MAP_OBJ_GFX_CAMPER,
+ MAP_OBJ_GFX_MANIAC,
+ MAP_OBJ_GFX_PSYCHIC_M,
+ MAP_OBJ_GFX_GENTLEMAN,
+ MAP_OBJ_GFX_SCHOOL_KID_M,
+ MAP_OBJ_GFX_MAN_3,
+ MAP_OBJ_GFX_OLD_MAN_1,
+ MAP_OBJ_GFX_YOUNGSTER,
+ MAP_OBJ_GFX_FISHERMAN,
+ MAP_OBJ_GFX_CYCLING_TRIATHLETE_M,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ MAP_OBJ_GFX_MAN_4,
+ MAP_OBJ_GFX_MAN_6,
+ MAP_OBJ_GFX_LITTLE_BOY_1,
+ MAP_OBJ_GFX_SAILOR,
+ MAP_OBJ_GFX_MANIAC,
+ MAP_OBJ_GFX_MAN_5,
+ MAP_OBJ_GFX_CAMPER,
+ MAP_OBJ_GFX_BUG_CATCHER,
+ MAP_OBJ_GFX_HIKER,
+};
+
+static const u8 sFemaleTrainerGfxIds[] = {
+ MAP_OBJ_GFX_WOMAN_3,
+ MAP_OBJ_GFX_TUBER_F,
+ MAP_OBJ_GFX_WOMAN_7,
+ MAP_OBJ_GFX_WOMAN_1,
+ MAP_OBJ_GFX_WOMAN_3,
+ MAP_OBJ_GFX_BEAUTY,
+ MAP_OBJ_GFX_LASS,
+ MAP_OBJ_GFX_GIRL_3,
+ MAP_OBJ_GFX_WOMAN_2,
+ MAP_OBJ_GFX_OLD_WOMAN_1,
+ MAP_OBJ_GFX_CYCLING_TRIATHLETE_F,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ MAP_OBJ_GFX_GIRL_3,
+ MAP_OBJ_GFX_WOMAN_7,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ MAP_OBJ_GFX_PICNICKER,
+ MAP_OBJ_GFX_WOMAN_3,
+ MAP_OBJ_GFX_PICNICKER,
+ MAP_OBJ_GFX_LASS,
+};
+
+const u16 gBattleTowerBannedSpecies[] = {
+ SPECIES_MEW,
+ SPECIES_MEWTWO,
+ SPECIES_HO_OH,
+ SPECIES_LUGIA,
+ SPECIES_CELEBI,
+ SPECIES_KYOGRE,
+ SPECIES_GROUDON,
+ SPECIES_RAYQUAZA,
+ SPECIES_JIRACHI,
+ SPECIES_DEOXYS,
+ 0xFFFF,
+};
+
+// Item prizes for battle tower streaks of 5 or fewer sets.
+/*static*/ const u16 sShortStreakPrizes[] = {
+ ITEM_HP_UP,
+ ITEM_PROTEIN,
+ ITEM_IRON,
+ ITEM_CALCIUM,
+ ITEM_CARBOS,
+ ITEM_ZINC,
+};
+
+// Item prizes for battle tower streaks of greater than 5 sets.
+/*static*/ const u16 sLongStreakPrizes[] = {
+ ITEM_BRIGHT_POWDER,
+ ITEM_WHITE_HERB,
+ ITEM_QUICK_CLAW,
+ ITEM_LEFTOVERS,
+ ITEM_MENTAL_HERB,
+ ITEM_KINGS_ROCK,
+ ITEM_FOCUS_BAND,
+ ITEM_SCOPE_LENS,
+ ITEM_CHOICE_BAND,
+};
+
+static void ResetBattleTowerStreak(u8 levelType);
+static void ValidateBattleTowerRecordChecksums(void);
+static void PrintEReaderTrainerFarewellMessage(void);
+extern void SetBattleTowerTrainerGfxId(u8);
+extern void sub_8135A3C(void);
+static void sub_8135CFC(void);
+static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *);
+static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
+static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer);
+static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *);
+static void ClearBattleTowerRecord(struct BattleTowerRecord *);
+
+extern const u8 BattleText_Format3[];
+extern const u8 BattleText_Format4[];
+extern const u8 BattleText_Format5[];
+extern const u8 BattleText_Format6[];
+extern const u8 BattleText_Format7[];
+extern const u8 BattleText_Format8[];
+extern const u8 BattleText_Format9[];
+extern u16 gSpecialVar_0x8004;
+extern u8 gTrainerClassToPicIndex[];
+extern u8 gTrainerClassToNameIndex[];
+extern u16 gTrainerBattleOpponent;
+extern u16 gBattleTypeFlags;
+extern u8 gSelectedOrderFromParty[];
+extern u8 gBattleOutcome;
+extern struct Pokemon gUnknown_030042FC[];
+extern struct BattlePokemon gBattleMons[];
+
+void sub_8134548(void)
+{
+ u8 var1 = 0;
+ s32 levelType;
+
+ for (levelType = 0; levelType < 2; levelType++)
+ {
+ switch (gSaveBlock2.battleTower.var_4AE[levelType])
+ {
+ case 0:
+ default:
+ ResetBattleTowerStreak(levelType);
+ if (!var1)
+ {
+ VarSet(VAR_0x4000, 5);
+ }
+ break;
+ case 1:
+ ResetBattleTowerStreak(levelType);
+ VarSet(VAR_0x4000, 1);
+ var1++;
+ break;
+ case 4:
+ VarSet(VAR_0x4000, 2);
+ var1++;
+ break;
+ case 5:
+ VarSet(VAR_0x4000, 3);
+ var1++;
+ break;
+ case 2:
+ VarSet(VAR_0x4000, 4);
+ var1++;
+ break;
+ case 3:
+ case 6:
+ break;
+ }
+ }
+
+ 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);
+ }
+
+ ValidateBattleTowerRecordChecksums();
+}
+
+void ResetBattleTowerStreak(u8 levelType)
+{
+ gSaveBlock2.battleTower.var_4AE[levelType] = 0;
+ gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1;
+ gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1;
+}
+
+// Checks if the next trainer in Battle Tower should be the E-Reader trainer.
+bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak)
+{
+ u8 trainerTeamLevel;
+ u8 monLevel;
+ s32 i;
+ u16 validPartySpecies[6];
+ u16 validPartyHeldItems[6];
+ u8 numValid;
+
+ numValid = 0;
+
+ ValidateEReaderTrainer();
+
+ if (gSpecialVar_Result != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak)
+ {
+ return FALSE;
+ }
+
+ trainerTeamLevel = 50;
+ if (levelType != 0)
+ {
+ trainerTeamLevel = 100;
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level;
+ if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel)
+ {
+ return FALSE;
+ }
+
+ CheckMonBattleTowerBanlist(
+ gSaveBlock2.battleTower.ereaderTrainer.party[i].species,
+ gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem,
+ 1,
+ levelType,
+ monLevel,
+ validPartySpecies,
+ validPartyHeldItems,
+ &numValid);
+ }
+
+ return numValid == 3;
+}
+
+bool8 sub_81346F4(void)
+{
+ s32 recordIndex, i;
+ u8 battleTowerLevelType;
+ u16 winStreak;
+ bool8 retVal;
+ s32 numCandidates;
+ u32 trainerIds[5];
+
+ numCandidates = 0;
+ battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+ if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak))
+ {
+ gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID;
+ retVal = TRUE;
+ }
+ else
+ {
+ // Check if one of the battle tower trainers from record mixing should be the next trainer.
+ for (recordIndex = 0; recordIndex < 5; recordIndex++)
+ {
+ struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex];
+ u32 recordHasData = 0;
+ u32 checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++)
+ {
+ recordHasData |= ((u32 *)record)[i];
+ checksum += ((u32 *)record)[i];
+ }
+
+ if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak
+ && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType
+ && recordHasData
+ && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum)
+ {
+ trainerIds[numCandidates] = recordIndex;
+ numCandidates++;
+ }
+ }
+
+ if (numCandidates == 0)
+ {
+ retVal = FALSE;
+ }
+ else
+ {
+ gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID;
+ retVal = TRUE;
+ }
+ }
+
+ return retVal;
+}
+
+// void sub_81347F8(void)
+// {
+// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType;
+// if (sub_81346F4())
+// {
+// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId);
+// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId;
+// }
+// else
+// {
+// u16 var1;
+
+// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7)
+// {
+// while (1)
+// {
+// s32 i;
+// u32 temp = ((Random() & 0xFF) * 30) >> 8;
+// var1 = temp + 70;
+// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]???
+// { }
+
+// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1)
+// {
+// break;
+// }
+// }
+// }
+// else
+// {
+// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7)
+// {
+// while (1)
+// {
+// s32 i;
+// u32 temp = ((Random() & 0xFF) * 5);
+// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20);
+// var1 = temp / 128 + temp2;
+// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]????
+// { }
+
+// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1)
+// {
+// break;
+// }
+// }
+// }
+// else
+// {
+// while (1)
+// {
+// s32 i;
+// u32 temp = ((Random() & 0xFF) * 320);
+// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10);
+// var1 = temp + temp2;
+// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++)
+// { }
+
+// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1)
+// {
+// break;
+// }
+// }
+// }
+// }
+
+// gSaveBlock2.battleTower.battleTowerTrainerId = var1;
+// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId);
+
+// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7)
+// {
+// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId;
+// }
+// }
+// }
+
+__attribute__((naked))
+void sub_81347F8(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ ldr r5, _08134838 @ =gSaveBlock2\n\
+ ldr r1, _0813483C @ =0x00000554\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 31\n\
+ lsrs r6, r0, 31\n\
+ bl sub_81346F4\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08134848\n\
+ ldr r2, _08134840 @ =0x00000564\n\
+ adds r4, r5, r2\n\
+ ldrb r0, [r4]\n\
+ bl SetBattleTowerTrainerGfxId\n\
+ lsls r0, r6, 1\n\
+ movs r3, 0xAB\n\
+ lsls r3, 3\n\
+ adds r1, r5, r3\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ adds r0, r5, r0\n\
+ ldr r1, _08134844 @ =0x00000569\n\
+ adds r0, r1\n\
+ ldrb r1, [r4]\n\
+ b _081349DC\n\
+ .align 2, 0\n\
+_08134838: .4byte gSaveBlock2\n\
+_0813483C: .4byte 0x00000554\n\
+_08134840: .4byte 0x00000564\n\
+_08134844: .4byte 0x00000569\n\
+_08134848:\n\
+ lsls r0, r6, 1\n\
+ ldr r2, _081348D8 @ =0x0000055c\n\
+ adds r1, r5, r2\n\
+ adds r1, r0, r1\n\
+ ldrh r1, [r1]\n\
+ adds r7, r0, 0\n\
+ cmp r1, 0x7\n\
+ bls _0813485A\n\
+ b _0813495C\n\
+_0813485A:\n\
+ movs r3, 0xAB\n\
+ lsls r3, 3\n\
+ adds r0, r5, r3\n\
+ adds r1, r7, r0\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0x7\n\
+ bne _081348E4\n\
+ adds r6, r5, 0\n\
+ mov r9, r7\n\
+ adds r5, r1, 0\n\
+ ldr r0, _081348DC @ =0x0000056a\n\
+ adds r0, r6\n\
+ mov r10, r0\n\
+ mov r8, r5\n\
+_08134876:\n\
+ bl Random\n\
+ movs r1, 0xFF\n\
+ ands r1, r0\n\
+ lsls r2, r1, 2\n\
+ adds r2, r1\n\
+ ldr r1, _081348D8 @ =0x0000055c\n\
+ adds r4, r6, r1\n\
+ mov r3, r9\n\
+ adds r0, r3, r4\n\
+ ldrh r1, [r0]\n\
+ subs r1, 0x1\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 1\n\
+ adds r0, 0x14\n\
+ lsrs r2, 7\n\
+ adds r2, r0\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ movs r1, 0\n\
+ ldrh r0, [r5]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ bge _081348C8\n\
+ mov r3, r10\n\
+ ldrb r0, [r3]\n\
+ cmp r0, r2\n\
+ beq _081348C8\n\
+ subs r0, r4, 0x4\n\
+ adds r0, r7, r0\n\
+ ldrh r0, [r0]\n\
+ subs r3, r0, 0x1\n\
+ adds r4, 0xE\n\
+_081348BA:\n\
+ adds r1, 0x1\n\
+ cmp r1, r3\n\
+ bge _081348C8\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r2\n\
+ bne _081348BA\n\
+_081348C8:\n\
+ mov r3, r8\n\
+ ldrh r0, [r3]\n\
+ subs r0, 0x1\n\
+ ldr r4, _081348E0 @ =gSaveBlock2\n\
+ cmp r1, r0\n\
+ bne _08134876\n\
+ b _081349B6\n\
+ .align 2, 0\n\
+_081348D8: .4byte 0x0000055c\n\
+_081348DC: .4byte 0x0000056a\n\
+_081348E0: .4byte gSaveBlock2\n\
+_081348E4:\n\
+ adds r6, r5, 0\n\
+ mov r9, r7\n\
+ adds r5, r1, 0\n\
+ ldr r2, _08134950 @ =0x0000056a\n\
+ adds r2, r6\n\
+ mov r10, r2\n\
+ mov r8, r5\n\
+_081348F2:\n\
+ bl Random\n\
+ movs r1, 0xFF\n\
+ ands r1, r0\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsrs r2, r0, 6\n\
+ ldr r3, _08134954 @ =0x0000055c\n\
+ adds r4, r6, r3\n\
+ mov r1, r9\n\
+ adds r0, r1, r4\n\
+ ldrh r1, [r0]\n\
+ subs r1, 0x1\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 1\n\
+ adds r0, r2, r0\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ movs r1, 0\n\
+ ldrh r0, [r5]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ bge _08134942\n\
+ mov r3, r10\n\
+ ldrb r0, [r3]\n\
+ cmp r0, r2\n\
+ beq _08134942\n\
+ subs r0, r4, 0x4\n\
+ adds r0, r7, r0\n\
+ ldrh r0, [r0]\n\
+ subs r3, r0, 0x1\n\
+ adds r4, 0xE\n\
+_08134934:\n\
+ adds r1, 0x1\n\
+ cmp r1, r3\n\
+ bge _08134942\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r2\n\
+ bne _08134934\n\
+_08134942:\n\
+ mov r3, r8\n\
+ ldrh r0, [r3]\n\
+ subs r0, 0x1\n\
+ ldr r4, _08134958 @ =gSaveBlock2\n\
+ cmp r1, r0\n\
+ bne _081348F2\n\
+ b _081349B6\n\
+ .align 2, 0\n\
+_08134950: .4byte 0x0000056a\n\
+_08134954: .4byte 0x0000055c\n\
+_08134958: .4byte gSaveBlock2\n\
+_0813495C:\n\
+ movs r2, 0xAB\n\
+ lsls r2, 3\n\
+ adds r0, r5, r2\n\
+ adds r6, r7, r0\n\
+ ldr r3, _081349EC @ =0x0000056a\n\
+ adds r3, r5\n\
+ mov r8, r3\n\
+ adds r5, r6, 0\n\
+_0813496C:\n\
+ bl Random\n\
+ movs r1, 0xFF\n\
+ ands r1, r0\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ lsls r0, 1\n\
+ asrs r0, 8\n\
+ adds r0, 0x46\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ movs r1, 0\n\
+ ldrh r0, [r6]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ bge _081349AC\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ ldr r4, _081349F0 @ =gSaveBlock2\n\
+ cmp r0, r2\n\
+ beq _081349AC\n\
+ ldrh r0, [r5]\n\
+ subs r3, r0, 0x1\n\
+ ldr r0, _081349EC @ =0x0000056a\n\
+ adds r4, r0\n\
+_0813499E:\n\
+ adds r1, 0x1\n\
+ cmp r1, r3\n\
+ bge _081349AC\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r2\n\
+ bne _0813499E\n\
+_081349AC:\n\
+ ldrh r0, [r6]\n\
+ subs r0, 0x1\n\
+ ldr r4, _081349F0 @ =gSaveBlock2\n\
+ cmp r1, r0\n\
+ bne _0813496C\n\
+_081349B6:\n\
+ ldr r1, _081349F4 @ =0x00000564\n\
+ adds r0, r4, r1\n\
+ strb r2, [r0]\n\
+ ldr r2, _081349F4 @ =0x00000564\n\
+ adds r5, r4, r2\n\
+ ldrb r0, [r5]\n\
+ bl SetBattleTowerTrainerGfxId\n\
+ movs r3, 0xAB\n\
+ lsls r3, 3\n\
+ adds r0, r4, r3\n\
+ adds r1, r7, r0\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0x6\n\
+ bhi _081349DE\n\
+ adds r0, r4, r0\n\
+ ldr r1, _081349F8 @ =0x00000569\n\
+ adds r0, r1\n\
+ ldrb r1, [r5]\n\
+_081349DC:\n\
+ strb r1, [r0]\n\
+_081349DE:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_081349EC: .4byte 0x0000056a\n\
+_081349F0: .4byte gSaveBlock2\n\
+_081349F4: .4byte 0x00000564\n\
+_081349F8: .4byte 0x00000569\n\
+.syntax divided\n");
+}
+
+void SetBattleTowerTrainerGfxId(u8 trainerIndex)
+{
+ u32 i;
+ u8 trainerClass;
+
+ if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass;
+ }
+ else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass;
+ }
+ else
+ {
+ trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass;
+ }
+
+ for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++);
+ if (i != 30)
+ {
+ u8 trainerObjectGfxId = sMaleTrainerGfxIds[i];
+ VarSet(0x4010, trainerObjectGfxId);
+ return;
+ }
+
+ for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++);
+ if (i != 20)
+ {
+ u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i];
+ VarSet(0x4010, trainerObjectGfxId);
+ return;
+ }
+
+ VarSet(0x4010, MAP_OBJ_GFX_BOY_1);
+}
+
+void SetEReaderTrainerGfxId(void)
+{
+ SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID);
+}
+
+// void sub_8134AC0(struct BattleTowerRecord *record)
+// {
+// u16 var1[6];
+// u16 var2[6];
+// s32 i, j, k;
+// s16 l = 0;
+
+// for (i = 0; i < 5; i++)
+// {
+// k = 0;
+// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++);
+// if (j == 4)
+// {
+// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++)
+// {
+// if (record->name[4] == 0xFF)
+// {
+// k = 7;
+// break;
+// }
+// }
+// }
+
+// if (k == 7)
+// {
+// break;
+// }
+// }
+
+// if (i < 5)
+// {
+// gSaveBlock2.battleTower.records[i] = *record;
+// return;
+// }
+
+// i = 0;
+// while (i < 5)
+// {
+// if (gSaveBlock2.battleTower.records[i].winStreak == 0)
+// {
+// if (i > 4)
+// {
+// break;
+// }
+
+// gSaveBlock2.battleTower.records[i] = *record;
+// return;
+// }
+
+// i++;
+// }
+
+// var1[0] = gSaveBlock2.battleTower.records[0].winStreak;
+// var2[0] = 0;
+// l++;
+
+// for (i = 1; i < 5; i++)
+// {
+// j = 0;
+// if (j < l)
+// {
+// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++)
+// {
+// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j])
+// {
+// j = 0;
+// l = 1;
+// var1[0] = gSaveBlock2.battleTower.records[i].winStreak;
+// var2[0] = i;
+// break;
+// }
+// }
+// }
+
+// if (j == l)
+// {
+// var1[l] = gSaveBlock2.battleTower.records[i].winStreak;
+// var2[l] = i;
+// l++;
+// }
+// }
+
+// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record;
+// }
+__attribute__((naked))
+void sub_8134AC0(struct BattleTowerRecord *record)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x1C\n\
+ movs r7, 0\n\
+ mov r8, r0\n\
+ movs r5, 0\n\
+ ldr r0, _08134B3C @ =gSaveBlock2\n\
+ mov r12, r0\n\
+ mov r1, r8\n\
+ ldrb r1, [r1, 0xC]\n\
+ str r1, [sp, 0x18]\n\
+ movs r2, 0xAA\n\
+ lsls r2, 1\n\
+ add r2, r12\n\
+ mov r10, r2\n\
+ mov r9, r5\n\
+_08134AE6:\n\
+ movs r6, 0\n\
+ movs r3, 0\n\
+ ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\
+ add r0, r9\n\
+ ldrb r0, [r0]\n\
+ ldr r1, [sp, 0x18]\n\
+ cmp r0, r1\n\
+ bne _08134B14\n\
+ movs r0, 0xA4\n\
+ muls r0, r5\n\
+ ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\
+ adds r2, r0, r1\n\
+ mov r4, r8\n\
+ adds r4, 0xC\n\
+_08134B02:\n\
+ adds r2, 0x1\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ bgt _08134B14\n\
+ adds r1, r4, r3\n\
+ ldrb r0, [r2]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ beq _08134B02\n\
+_08134B14:\n\
+ cmp r3, 0x4\n\
+ bne _08134B54\n\
+ movs r6, 0\n\
+ mov r2, r10\n\
+ ldrb r0, [r2]\n\
+ mov r3, r8\n\
+ ldrb r3, [r3, 0x8]\n\
+ cmp r0, r3\n\
+ bne _08134B54\n\
+ adds r1, r0, 0\n\
+ movs r0, 0xA4\n\
+ muls r0, r5\n\
+ adds r0, 0x4\n\
+ ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\
+ adds r2, r0, r3\n\
+_08134B32:\n\
+ cmp r1, 0xFF\n\
+ bne _08134B48\n\
+ movs r6, 0x7\n\
+ b _08134B54\n\
+ .align 2, 0\n\
+_08134B3C: .4byte gSaveBlock2\n\
+_08134B40: .4byte gSaveBlock2 + 0x158\n\
+_08134B44: .4byte gSaveBlock2 + 0x150\n\
+_08134B48:\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x6\n\
+ bgt _08134B54\n\
+ ldrb r0, [r2]\n\
+ cmp r0, r1\n\
+ beq _08134B32\n\
+_08134B54:\n\
+ cmp r6, 0x7\n\
+ beq _08134B64\n\
+ movs r0, 0xA4\n\
+ add r10, r0\n\
+ add r9, r0\n\
+ adds r5, 0x1\n\
+ cmp r5, 0x4\n\
+ ble _08134AE6\n\
+\n\
+_08134B64:\n\
+ cmp r5, 0x4\n\
+ bgt _08134B76\n\
+ movs r0, 0xA4\n\
+ muls r0, r5\n\
+ add r0, r12\n\
+ movs r1, 0xA6\n\
+ lsls r1, 1\n\
+ adds r0, r1\n\
+ b _08134B9E\n\
+_08134B76:\n\
+ movs r5, 0\n\
+ movs r1, 0xA7\n\
+ lsls r1, 1\n\
+ add r1, r12\n\
+ b _08134B88\n\
+_08134B80:\n\
+ adds r1, 0xA4\n\
+ adds r5, 0x1\n\
+ cmp r5, 0x4\n\
+ bgt _08134BA8\n\
+_08134B88:\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _08134B80\n\
+ cmp r5, 0x4\n\
+ bgt _08134BA8\n\
+ movs r0, 0xA4\n\
+ muls r0, r5\n\
+ add r0, r12\n\
+ movs r2, 0xA6\n\
+ lsls r2, 1\n\
+ adds r0, r2\n\
+_08134B9E:\n\
+ mov r1, r8\n\
+ movs r2, 0xA4\n\
+ bl memcpy\n\
+ b _08134C5E\n\
+\n\
+_08134BA8:\n\
+ mov r2, sp\n\
+ movs r3, 0xA7\n\
+ lsls r3, 1\n\
+ mov r1, r12\n\
+ adds r0, r1, r3\n\
+ ldrh r0, [r0]\n\
+ movs r1, 0\n\
+ strh r0, [r2]\n\
+ add r0, sp, 0xC\n\
+ strh r1, [r0]\n\
+ adds r7, 0x1\n\
+ movs r5, 0x1\n\
+ add r2, sp, 0xC @var2 = r2\n\
+ mov r9, r2\n\
+ mov r10, r3\n\
+_08134BC6:\n\
+ movs r3, 0\n\
+ adds r0, r5, 0x1\n\
+ mov r12, r0\n\
+ cmp r3, r7\n\
+ bge _08134C0A @ j < l\n\
+ movs r1, 0xA4\n\
+ adds r0, r5, 0\n\
+ muls r0, r1\n\
+ ldr r2, _08134BFC @ =gSaveBlock2\n\
+ adds r0, r2\n\
+ mov r1, r10\n\
+ adds r4, r0, r1\n\
+ mov r6, sp\n\
+_08134BE0:\n\
+ lsls r0, r3, 1\n\
+ add r0, sp\n\
+ ldrh r2, [r4]\n\
+ adds r1, r2, 0\n\
+ ldrh r0, [r0]\n\
+ cmp r1, r0\n\
+ bcs _08134C00\n\
+ movs r3, 0\n\
+ movs r7, 0x1\n\
+ strh r2, [r6]\n\
+ mov r2, r9\n\
+ strh r5, [r2]\n\
+ b _08134C0A\n\
+ .align 2, 0\n\
+_08134BFC: .4byte gSaveBlock2\n\
+_08134C00:\n\
+ cmp r1, r0\n\
+ bhi _08134C0A\n\
+ adds r3, 0x1\n\
+ cmp r3, r7\n\
+ blt _08134BE0\n\
+_08134C0A:\n\
+ cmp r3, r7\n\
+ bne _08134C2A\n\
+ lsls r1, r7, 1\n\
+ mov r3, sp\n\
+ adds r2, r3, r1\n\
+ movs r3, 0xA4\n\
+ adds r0, r5, 0\n\
+ muls r0, r3\n\
+ ldr r3, _08134C70 @ =gSaveBlock2\n\
+ adds r0, r3\n\
+ add r0, r10\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r2]\n\
+ add r1, r9\n\
+ strh r5, [r1]\n\
+ adds r7, 0x1\n\
+_08134C2A:\n\
+ mov r5, r12\n\
+ cmp r5, 0x4\n\
+ ble _08134BC6\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ adds r1, r7, 0\n\
+ bl __modsi3\n\
+ adds r5, r0, 0\n\
+ ldr r2, _08134C70 @ =gSaveBlock2\n\
+ lsls r0, r5, 1\n\
+ add r0, sp\n\
+ adds r0, 0xC\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0xA4\n\
+ muls r0, r1\n\
+ adds r0, r2\n\
+ movs r1, 0xA6\n\
+ lsls r1, 1\n\
+ adds r0, r1\n\
+ mov r1, r8\n\
+ movs r2, 0xA4\n\
+ bl memcpy\n\
+_08134C5E:\n\
+ add sp, 0x1C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08134C70: .4byte gSaveBlock2\n\
+ .syntax divided\n");
+}
+
+u8 get_trainer_class_pic_index(void)
+{
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass];
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass];
+ }
+ else
+ {
+ return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass];
+ }
+}
+
+u8 get_trainer_class_name_index(void)
+{
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass];
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass];
+ }
+ else
+ {
+ return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass];
+ }
+}
+
+void get_trainer_name(u8* dest)
+{
+ s32 i;
+
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ for (i = 0; i < 7; i++)
+ {
+ dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i];
+ }
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ for (i = 0; i < 7; i++)
+ {
+ dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 7; i++)
+ {
+ dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i];
+ }
+ }
+
+ dest[i] = 0xFF;
+}
+
+void FillBattleTowerTrainerParty(void)
+{
+ s32 partyIndex, i;
+ u16 chosenMonIndices[3];
+ u8 friendship;
+ u8 level;
+ u8 fixedIV;
+ u8 battleMonsOffset;
+ u8 monPoolSize;
+ u8 teamFlags;
+ const struct BattleTowerPokemon *battleTowerMons;
+
+ battleMonsOffset = 0;
+ monPoolSize = 60;
+ friendship = 255;
+
+ ZeroEnemyPartyMons();
+
+ // Different trainers have access to different sets of pokemon to use in battle.
+ // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are
+ // stronger. Additionally, the later trainers' pokemon are granted higher IVs.
+ if (gSaveBlock2.battleTower.battleTowerTrainerId < 20)
+ {
+ fixedIV = 6;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30)
+ {
+ fixedIV = 9;
+ battleMonsOffset = 30;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40)
+ {
+ fixedIV = 12;
+ battleMonsOffset = 60;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50)
+ {
+ fixedIV = 15;
+ battleMonsOffset = 90;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60)
+ {
+ fixedIV = 18;
+ battleMonsOffset = 120;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70)
+ {
+ fixedIV = 21;
+ battleMonsOffset = 150;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80)
+ {
+ fixedIV = 31;
+ battleMonsOffset = 180;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ fixedIV = 31;
+ battleMonsOffset = 200;
+ monPoolSize = 100;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ // Load E-Reader trainer's party.
+ for (partyIndex = 0; partyIndex < 3; partyIndex++)
+ {
+ sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]);
+ }
+
+ return;
+ }
+ else
+ {
+ // Load a battle tower record's party. (From record mixing)
+ for (partyIndex = 0; partyIndex < 3; partyIndex++)
+ {
+ sub_803ADE8(
+ &gEnemyParty[partyIndex],
+ &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]);
+ }
+
+ return;
+ }
+
+ // Use the appropriate list of pokemon and level depending on the
+ // current challenge type. (level 50 or level 100 challenge)
+ if (gSaveBlock2.battleTower.battleTowerLevelType != 0)
+ {
+ battleTowerMons = gBattleTowerLevel100Mons;
+ level = 100;
+ }
+ else
+ {
+ battleTowerMons = gBattleTowerLevel50Mons;
+ level = 50;
+ }
+
+ teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags;
+
+ // Attempt to fill the trainer's party with random Pokemon until 3 have been
+ // successfully chosen. The trainer's party may not have duplicate pokemon species
+ // or duplicate held items. Each pokemon must have all of the trainer's team flags
+ // set, as well. If any of those conditions are not met, then the loop starts over
+ // and another pokemon is chosen at random.
+ partyIndex = 0;
+ while (partyIndex != 3)
+ {
+ // Pick a random pokemon index based on the number of pokemon available to choose from
+ // and the starting offset in the battle tower pokemon array.
+ s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset;
+
+ // Ensure the chosen pokemon has compatible team flags with the trainer.
+ if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags)
+ {
+ // Ensure this pokemon species isn't a duplicate.
+ for (i = 0; i < partyIndex; i++)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species)
+ break;
+ }
+
+ if (i != partyIndex)
+ continue;
+
+ // Ensure this pokemon's held item isn't a duplicate.
+ for (i = 0; i < partyIndex; i++)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0
+ && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem])
+ {
+ break;
+ }
+ }
+
+ if (i != partyIndex)
+ continue;
+
+ // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary
+ // because the species and held items were already checked directly above. Perhaps this
+ // is leftover code before the logic for duplicate species and held items was added.
+ for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++);
+
+ if (i != partyIndex)
+ continue;
+
+ chosenMonIndices[partyIndex] = battleMonIndex;
+
+ // Place the chosen pokemon into the trainer's party.
+ CreateMonWithEVSpread(
+ &gEnemyParty[partyIndex],
+ battleTowerMons[battleMonIndex].species,
+ level,
+ fixedIV,
+ battleTowerMons[battleMonIndex].evSpread);
+
+ // Give the chosen pokemon its specified moves.
+ for (i = 0; i < 4; i++)
+ {
+ SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i);
+ if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION)
+ {
+ // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is.
+ friendship = 0;
+ }
+ }
+
+ SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]);
+
+ // The pokemon was successfully added to the trainer's party, so it's safe to move on to
+ // the next party slot.
+ partyIndex++;
+ }
+ }
+}
+
+u32 CountBattleTowerBanlistCaught(void)
+{
+ s32 i;
+ u32 numCaught = 0;
+
+ for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++)
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT))
+ {
+ numCaught++;
+ }
+ }
+
+ return numCaught;
+}
+
+u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend)
+{
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
+ {
+ curIndexToAppend++;
+
+ switch (curIndexToAppend - 1)
+ {
+ case 0:
+ case 2:
+ case 4:
+ case 6:
+ case 8:
+ case 10:
+ if (numToAppend == curIndexToAppend)
+ {
+ StringAppend(gStringVar1, BattleText_Format3);
+ }
+ else if (numToAppend > curIndexToAppend)
+ {
+ StringAppend(gStringVar1, BattleText_Format4);
+ }
+ break;
+ case 1:
+ if (curIndexToAppend == numToAppend)
+ {
+ StringAppend(gStringVar1, BattleText_Format3);
+ }
+ else
+ {
+ StringAppend(gStringVar1, BattleText_Format4);
+ }
+
+ StringAppend(gStringVar1, BattleText_Format7);
+ break;
+ case 3:
+ case 5:
+ case 7:
+ case 9:
+ default:
+ if (curIndexToAppend == numToAppend)
+ {
+ StringAppend(gStringVar1, BattleText_Format3);
+ }
+ else
+ {
+ StringAppend(gStringVar1, BattleText_Format4);
+ }
+
+ StringAppend(gStringVar1, BattleText_Format6);
+ break;
+ }
+
+ StringAppend(gStringVar1, gSpeciesNames[species]);
+ }
+
+ return curIndexToAppend;
+}
+
+void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid)
+{
+ s32 i;
+ u32 counter = 0;
+
+ if (species == SPECIES_EGG || species == SPECIES_NONE)
+ return;
+
+ while (1)
+ {
+ if (gBattleTowerBannedSpecies[counter] == 0xFFFF)
+ goto EXIT2; // Couldn't get the code to match without this GOTO
+
+ if (gBattleTowerBannedSpecies[counter] == species)
+ break;
+
+ counter++;
+ }
+
+ if (gBattleTowerBannedSpecies[counter] != 0xFFFF)
+ return;
+
+ EXIT2:
+ if (battleTowerLevelType == 0 && monLevel > 50)
+ return;
+
+ for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++);
+ if (i != *numValid)
+ return;
+
+ if (heldItem != 0)
+ {
+ for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++);
+ if (i != *numValid)
+ return;
+ }
+
+ validPartySpecies[*numValid] = species;
+ validPartyHeldItems[*numValid] = heldItem;
+ *numValid = *numValid + 1;
+}
+
+void CheckPartyBattleTowerBanlist(void)
+{
+ s32 i;
+ u16 species2;
+ u16 heldItem;
+ u8 level;
+ u16 hp;
+ u32 numBanlistCaught;
+ u16 validPartySpecies[6];
+ u16 validPartyHeldItems[6];
+ u8 counter;
+
+ counter = 0;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+
+ CheckMonBattleTowerBanlist(species2, heldItem, hp, gSpecialVar_Result, level, validPartySpecies, validPartyHeldItems, &counter);
+ }
+
+ if (counter < 3)
+ {
+ gStringVar1[0] = 0xFF;
+ gSpecialVar_0x8004 = 1;
+ counter = 0;
+
+ numBanlistCaught = CountBattleTowerBanlistCaught();
+
+ for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++)
+ {
+ counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught);
+ }
+
+ if (counter == 0)
+ {
+ StringAppend(gStringVar1, BattleText_Format5);
+ StringAppend(gStringVar1, BattleText_Format8);
+ return;
+ }
+
+ if (1 & counter)
+ StringAppend(gStringVar1, BattleText_Format6);
+ else
+ StringAppend(gStringVar1, BattleText_Format5);
+
+ StringAppend(gStringVar1, BattleText_Format9);
+ }
+ else
+ {
+ gSpecialVar_0x8004 = 0;
+ gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_Result;
+ }
+}
+
+void PrintBattleTowerTrainerMessage(u16 *easyChat)
+{
+ sub_80EB544(gStringVar4, easyChat, 2, 3);
+}
+
+void PrintBattleTowerTrainerGreeting(void)
+{
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat);
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat);
+ }
+ else
+ {
+ PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat);
+ }
+}
+
+void sub_81354CC(void)
+{
+ s32 i;
+ u16 heldItem;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ break;
+ case 1:
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM);
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem);
+ }
+ break;
+ case 2:
+ PrintEReaderTrainerFarewellMessage();
+ break;
+ }
+
+ SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+}
+
+void sub_8135534(u8 taskId)
+{
+ if (IsBattleTransitionDone() == TRUE)
+ {
+ gMain.savedCallback = sub_81354CC;
+ SetMainCallback2(sub_800E7C4);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_813556C(void)
+{
+ s32 i;
+ u16 heldItem;
+ u8 transition;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER);
+ gTrainerBattleOpponent = 0;
+
+ FillBattleTowerTrainerParty();
+
+ CreateTask(sub_8135534, 1);
+ current_map_music_set__default_for_battle(0);
+ transition = BattleSetup_GetBattleTowerBattleTransition();
+ BattleTransition_StartOnField(transition);
+ break;
+ case 1:
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, &heldItem);
+ }
+
+ CreateTask(sub_8135534, 1);
+ current_map_music_set__default_for_battle(0);
+ transition = BattleSetup_GetBattleTowerBattleTransition();
+ BattleTransition_StartOnField(transition);
+ break;
+ case 2:
+ ZeroEnemyPartyMons();
+
+ for (i = 0; i < 3; i++)
+ {
+ sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]);
+ }
+
+ gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER);
+ gTrainerBattleOpponent = 0;
+
+ CreateTask(sub_8135534, 1);
+ current_map_music_set__default_for_battle(0);
+ transition = BattleSetup_GetBattleTowerBattleTransition();
+ BattleTransition_StartOnField(transition);
+ break;
+ }
+}
+
+void sub_8135668(void)
+{
+ s32 i;
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType];
+ gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005;
+ break;
+ case 1:
+ gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005;
+ break;
+ case 2:
+ gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005;
+ break;
+ case 3:
+ gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005;
+ break;
+ case 4:
+ gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005;
+ break;
+ case 5:
+ for (i = 0; i < 3; i++)
+ {
+ gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i];
+ }
+ break;
+ case 6:
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer);
+ }
+
+ if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999)
+ {
+ gSaveBlock2.battleTower.totalBattleTowerWins++;
+ }
+
+ gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++;
+ sub_8135A3C();
+ gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
+
+ gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1;
+ gStringVar1[1] = 0xFF;
+ break;
+ case 7:
+ if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430)
+ {
+ gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++;
+ }
+
+ sub_8135A3C();
+ gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
+ break;
+ case 8:
+ gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005;
+ break;
+ case 9:
+ break;
+ case 10:
+ SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak);
+ break;
+ case 11:
+ if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3)
+ {
+ ResetBattleTowerStreak(battleTowerLevelType);
+ }
+ break;
+ case 12:
+ gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB;
+ break;
+ case 13:
+ gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+ break;
+ case 14:
+ gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+ break;
+ }
+}
+
+void sub_81358A4(void)
+{
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ gSpecialVar_Result = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType];
+ break;
+ case 1:
+ gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerLevelType;
+ break;
+ case 2:
+ gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
+ break;
+ case 3:
+ gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
+ break;
+ case 4:
+ gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerTrainerId;
+ break;
+ case 5:
+ case 6:
+ case 7:
+ break;
+ case 8:
+ gSpecialVar_Result = gSaveBlock2.battleTower.unk_554;
+ break;
+ case 9:
+ gSpecialVar_Result = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+ break;
+ case 10:
+ SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak);
+ break;
+ case 11:
+ ResetBattleTowerStreak(battleTowerLevelType);
+ break;
+ case 12:
+ gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB;
+ break;
+ case 13:
+ gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+ break;
+ case 14:
+ gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+ break;
+ }
+}
+
+void sub_8135A14(void)
+{
+ s32 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i];
+ }
+
+ ReducePlayerPartyToThree();
+}
+
+#ifdef NONMATCHING
+void sub_8135A3C(void)
+{
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+ u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+
+ if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak)
+ {
+ gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak;
+ }
+
+ if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1])
+ {
+ u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0];
+ SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak);
+ if (streak > 9999)
+ {
+ gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999;
+ }
+ else
+ {
+ gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak;
+ }
+ }
+ else
+ {
+ u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1];
+ SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak);
+ if (streak > 9999)
+ {
+ gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999;
+ }
+ else
+ {
+ gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_8135A3C(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ ldr r6, _08135A84 @ =gSaveBlock2\n\
+ ldr r1, _08135A88 @ =0x00000554\n\
+ adds r0, r6, r1\n\
+ ldrb r4, [r0]\n\
+ lsls r4, 31\n\
+ lsrs r4, 31\n\
+ adds r0, r4, 0\n\
+ bl GetCurrentBattleTowerWinStreak\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ lsls r4, 1\n\
+ movs r3, 0xAC\n\
+ lsls r3, 3\n\
+ adds r2, r6, r3\n\
+ adds r4, r2\n\
+ ldrh r0, [r4]\n\
+ cmp r0, r5\n\
+ bcs _08135A66\n\
+ strh r5, [r4]\n\
+_08135A66:\n\
+ ldr r0, _08135A8C @ =0x00000562\n\
+ adds r1, r6, r0\n\
+ ldrh r0, [r2]\n\
+ ldrh r3, [r1]\n\
+ cmp r0, r3\n\
+ bls _08135A94\n\
+ adds r5, r0, 0\n\
+ movs r0, 0x20\n\
+ adds r1, r5, 0\n\
+ bl SetGameStat\n\
+ ldr r1, _08135A90 @ =0x0000270f\n\
+ cmp r5, r1\n\
+ bhi _08135AA4\n\
+ b _08135AB4\n\
+ .align 2, 0\n\
+_08135A84: .4byte gSaveBlock2\n\
+_08135A88: .4byte 0x00000554\n\
+_08135A8C: .4byte 0x00000562\n\
+_08135A90: .4byte 0x0000270f\n\
+_08135A94:\n\
+ ldrh r5, [r1]\n\
+ movs r0, 0x20\n\
+ adds r1, r5, 0\n\
+ bl SetGameStat\n\
+ ldr r1, _08135AAC @ =0x0000270f\n\
+ cmp r5, r1\n\
+ bls _08135AB4\n\
+_08135AA4:\n\
+ ldr r2, _08135AB0 @ =0x00000572\n\
+ adds r0, r6, r2\n\
+ strh r1, [r0]\n\
+ b _08135ABA\n\
+ .align 2, 0\n\
+_08135AAC: .4byte 0x0000270f\n\
+_08135AB0: .4byte 0x00000572\n\
+_08135AB4:\n\
+ ldr r3, _08135AC0 @ =0x00000572\n\
+ adds r0, r6, r3\n\
+ strh r5, [r0]\n\
+_08135ABA:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08135AC0: .4byte 0x00000572\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_8135AC4(void)
+{
+ s32 i;
+ u8 trainerClass;
+ struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord;
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ if (gSaveBlock2.playerGender != MALE)
+ {
+ trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1]
+ + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u];
+ }
+ else
+ {
+ trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1]
+ + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u];
+ }
+
+ playerRecord->battleTowerLevelType = battleTowerLevelType;
+ playerRecord->trainerClass = trainerClass;
+
+ copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId);
+ StringCopy8(playerRecord->name, gSaveBlock2.playerName);
+
+ playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+
+ for (i = 0; i < 6; i++)
+ {
+ playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i];
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]);
+ }
+
+ SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord);
+ sub_8135A3C();
+}
+
+void sub_8135BA0(void)
+{
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0)
+ {
+ if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1
+ || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1)
+ {
+ sub_8135AC4();
+ }
+ }
+
+ sub_8135CFC();
+
+ gSaveBlock2.battleTower.battleOutcome = gBattleOutcome;
+
+ if (gSpecialVar_0x8004 != 3)
+ {
+ gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004;
+ }
+
+ VarSet(VAR_0x4000, 0);
+ gSaveBlock2.battleTower.unk_554 = 1;
+ TrySavingData(EREADER_SAVE);
+}
+
+void BattleTower_SoftReset(void)
+{
+ DoSoftReset();
+}
+
+void ValidateBattleTowerRecordChecksums(void)
+{
+ u32 i;
+ s32 recordIndex;
+ struct BattleTowerRecord *record;
+ u32 checksum;
+
+ checksum = 0;
+ for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++)
+ {
+ checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i];
+ }
+
+ if (gSaveBlock2.battleTower.playerRecord.checksum != checksum)
+ {
+ ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord);
+ }
+
+ for (recordIndex = 0; recordIndex < 5; recordIndex++)
+ {
+ record = &gSaveBlock2.battleTower.records[recordIndex];
+ checksum = 0;
+ for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++)
+ {
+ checksum += ((u32 *)record)[i];
+ }
+
+ if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum)
+ {
+ ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]);
+ }
+ }
+}
+
+void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record)
+{
+ u32 i;
+
+ record->checksum = 0;
+ for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++)
+ {
+ record->checksum += ((u32 *)record)[i];
+ }
+}
+
+void ClearBattleTowerRecord(struct BattleTowerRecord *record)
+{
+ u32 i;
+
+ for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++)
+ {
+ ((u32 *)record)[i] = 0;
+ }
+}
+
+void sub_8135CFC(void)
+{
+ s32 i;
+
+ get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName);
+ gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species;
+ gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species;
+
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++)
+ {
+ gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i];
+ }
+}
+
+u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType)
+{
+ u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1)
+ + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
+
+ if (winStreak > 9999)
+ {
+ return 9999;
+ }
+
+ return winStreak;
+}
+
+#ifdef NONMATCHING
+void DetermineBattleTowerPrize(void)
+{
+ u16 prizeItem;
+ struct SaveBlock2 *saveBlock = &gSaveBlock2;
+ u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType;
+
+ if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5)
+ {
+ prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)];
+ }
+ else
+ {
+ prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)];
+ }
+
+ saveBlock->battleTower.prizeItem = prizeItem;
+}
+#else
+__attribute__((naked))
+void DetermineBattleTowerPrize(void)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ ldr r5, _08135DB0 @ =gSaveBlock2\n\
+ ldr r1, _08135DB4 @ =0x00000554\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ lsls r0, 1\n\
+ ldr r2, _08135DB8 @ =0x0000055c\n\
+ adds r1, r5, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r0, 0x5\n\
+ ble _08135DC0\n\
+ bl Random\n\
+ ldr r4, _08135DBC @ =sLongStreakPrizes\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x9\n\
+ b _08135DCC\n\
+ .align 2, 0\n\
+_08135DB0: .4byte gSaveBlock2\n\
+_08135DB4: .4byte 0x00000554\n\
+_08135DB8: .4byte 0x0000055c\n\
+_08135DBC: .4byte sLongStreakPrizes\n\
+_08135DC0:\n\
+ bl Random\n\
+ ldr r4, _08135DE8 @ =sShortStreakPrizes\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x6\n\
+_08135DCC:\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 15\n\
+ adds r0, r4\n\
+ ldrh r1, [r0]\n\
+ movs r2, 0xAD\n\
+ lsls r2, 3\n\
+ adds r0, r5, r2\n\
+ strh r1, [r0]\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08135DE8: .4byte sShortStreakPrizes\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void GiveBattleTowerPrize(void)
+{
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE)
+ {
+ CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1);
+ gSpecialVar_Result = 1;
+ }
+ else
+ {
+ gSpecialVar_Result = 0;
+ gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6;
+ }
+}
+
+void AwardBattleTowerRibbons(void)
+{
+ s32 i;
+ u32 partyIndex;
+ struct Pokemon *pokemon;
+ u8 ribbonType;
+ u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType;
+
+ ribbonType = MON_DATA_WINNING_RIBBON;
+ if (battleTowerLevelType != 0)
+ {
+ ribbonType = MON_DATA_VICTORY_RIBBON;
+ }
+
+ gSpecialVar_Result = 0;
+
+ if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55)
+ {
+ for (i = 0; i < 3; i++)
+ {
+ partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1;
+ pokemon = &gPlayerParty[partyIndex];
+ if (!GetMonData(pokemon, ribbonType))
+ {
+ gSpecialVar_Result = 1;
+ SetMonData(pokemon, ribbonType, &gSpecialVar_Result);
+ }
+ }
+ }
+
+ if (gSpecialVar_Result != 0)
+ {
+ IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
+ }
+}
+
+// This is a leftover debugging function that is used to populate the E-Reader
+// trainer with the player's current data.
+void Debug_FillEReaderTrainerWithPlayerData(void)
+{
+ struct BattleTowerEReaderTrainer *ereaderTrainer;
+ s32 i;
+ s32 j;
+
+ ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer;
+
+ if (gSaveBlock2.playerGender != MALE)
+ {
+ ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1]
+ + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u];
+ }
+ else
+ {
+ ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1]
+ + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u];
+ }
+
+ copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId);
+ StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName);
+
+ ereaderTrainer->winStreak = 1;
+
+ j = 7;
+ for (i = 0; i < 6; i++)
+ {
+ ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i];
+ ereaderTrainer->farewellPlayerLost.easyChat[i] = j;
+ ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6;
+ j++;
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]);
+ }
+
+ SetEReaderTrainerChecksum(ereaderTrainer);
+}
+
+u8 GetEReaderTrainerPicIndex(void)
+{
+ return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass];
+}
+
+u8 GetEReaderTrainerClassNameIndex(void)
+{
+ return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass];
+}
+
+void SetEReaderTrainerName(u8 *trainerName)
+{
+ s32 i;
+
+ for (i = 0; i < 7; i++)
+ {
+ trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i];
+ }
+
+ trainerName[i] = 0xFF;
+}
+
+// Checks if the saved E-Reader trainer is valid.
+void ValidateEReaderTrainer(void)
+{
+ u32 i;
+ u32 checksum;
+ struct BattleTowerEReaderTrainer *ereaderTrainer;
+
+ gSpecialVar_Result = 0;
+ ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer;
+
+ checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ checksum |= ((u32 *)ereaderTrainer)[i];
+ }
+
+ if (checksum == 0)
+ {
+ gSpecialVar_Result = 1;
+ return;
+ }
+
+ checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ checksum += ((u32 *)ereaderTrainer)[i];
+ }
+
+ if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum)
+ {
+ ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer);
+ gSpecialVar_Result = 1;
+ }
+}
+
+void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer)
+{
+ s32 i;
+
+ ereaderTrainer->checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i];
+ }
+}
+
+void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer)
+{
+ u32 i;
+
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++)
+ {
+ ((u32 *)ereaderTrainer)[i] = 0;
+ }
+}
+
+void PrintEReaderTrainerGreeting(void)
+{
+ PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat);
+}
+
+void PrintEReaderTrainerFarewellMessage(void)
+{
+ if (gBattleOutcome == BATTLE_DREW)
+ {
+ gStringVar4[0] = 0xFF;
+ }
+ else if (gBattleOutcome == BATTLE_WON)
+ {
+ PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat);
+ }
+ else
+ {
+ PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat);
+ }
+}
+
+void sub_813610C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gSaveBlock2.battleTower.var_4AE[i] == 1)
+ {
+ sub_80BFD20();
+ }
+ }
+}
+
+#if GERMAN
+u8 de_sub_81364AC(void)
+{
+ if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
+ {
+ return gSaveBlock2.battleTower.ereaderTrainer.trainerClass;
+ }
+ else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
+ {
+ return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass;
+ }
+ else
+ {
+ return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass;
+ }
+}
+
+u8 de_sub_81364F8(void)
+{
+ return gSaveBlock2.battleTower.ereaderTrainer.trainerClass;
+}
+#endif
diff --git a/src/field/berry.c b/src/field/berry.c
index d82eab2a6..088267ad0 100644
--- a/src/field/berry.c
+++ b/src/field/berry.c
@@ -6,16 +6,22 @@
#include "item.h"
#include "item_menu.h"
#include "item_use.h"
-#include "items.h"
+#include "constants/items.h"
#include "main.h"
-#include "rng.h"
+#include "random.h"
#include "text.h"
#define BERRY_NAME_LENGTH 6
+#define BERRY_REGROW_LIMIT 10
+#define MAX_BERRY_TREES 128
+#define BERRY_NONE 0
#define FIRST_BERRY ITEM_CHERI_BERRY
#define LAST_BERRY ITEM_ENIGMA_BERRY
+#define GETBERRYID(berry) ((berry - FIRST_BERRY) + 1)
+#define GETITEMID(berry) ((berry + FIRST_BERRY) - 1)
+
#ifdef ENGLISH
#define NAME_CHERI_BERRY _("CHERI")
#define NAME_CHESTO_BERRY _("CHESTO")
@@ -61,92 +67,92 @@
#define NAME_STARF_BERRY _("STARF")
#define NAME_ENIGMA_BERRY _("ENIGMA")
-const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
-const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
-const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
-const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over.");
-const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious.");
-const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care.");
-const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,");
-const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter.");
-const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich");
-const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour.");
-const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others.");
-const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier.");
-const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors.");
-const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day.");
-const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color");
-const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun.");
-const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving");
-const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES.");
-const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large");
-const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor.");
-const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,");
-const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances.");
-const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy");
-const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it.");
-const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows.");
-const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier.");
-const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its");
-const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light.");
-const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour.");
-const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow.");
-const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy.");
-const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours.");
-const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but");
-const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten.");
-const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh");
-const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet.");
-const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a");
-const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour.");
-const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold.");
-const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour.");
-const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,");
-const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES.");
-const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root.");
-const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower.");
-const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in");
-const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall.");
-const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and");
-const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious.");
-const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round");
-const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour.");
-const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy.");
-const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow.");
-const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not");
-const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity.");
-const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have");
-const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor.");
-const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with");
-const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter.");
-const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it");
-const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days.");
-const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy.");
-const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance.");
-const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere.");
-const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere.");
-const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20");
-const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet.");
-const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so");
-const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is.");
-const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but");
-const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow.");
-const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea.");
-const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land.");
-const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky.");
-const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to");
-const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things.");
-const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling");
-const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used.");
-const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY.");
-const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy.");
-const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the");
-const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage.");
-const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
-const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
+static const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
+static const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
+static const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
+static const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over.");
+static const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious.");
+static const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care.");
+static const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,");
+static const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter.");
+static const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich");
+static const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour.");
+static const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others.");
+static const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier.");
+static const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors.");
+static const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day.");
+static const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color");
+static const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun.");
+static const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving");
+static const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES.");
+static const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large");
+static const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor.");
+static const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,");
+static const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances.");
+static const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy");
+static const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it.");
+static const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows.");
+static const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier.");
+static const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its");
+static const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light.");
+static const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour.");
+static const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow.");
+static const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy.");
+static const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours.");
+static const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but");
+static const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten.");
+static const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh");
+static const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet.");
+static const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a");
+static const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour.");
+static const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold.");
+static const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour.");
+static const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,");
+static const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES.");
+static const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root.");
+static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower.");
+static const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in");
+static const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall.");
+static const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and");
+static const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious.");
+static const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round");
+static const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour.");
+static const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy.");
+static const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow.");
+static const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not");
+static const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity.");
+static const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have");
+static const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor.");
+static const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with");
+static const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter.");
+static const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it");
+static const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days.");
+static const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy.");
+static const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance.");
+static const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere.");
+static const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere.");
+static const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20");
+static const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet.");
+static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so");
+static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is.");
+static const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but");
+static const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow.");
+static const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea.");
+static const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land.");
+static const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky.");
+static const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to");
+static const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things.");
+static const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling");
+static const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used.");
+static const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY.");
+static const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy.");
+static const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the");
+static const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage.");
+static const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
+static const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
#elif defined(GERMAN)
#define NAME_CHERI_BERRY _("AMRENA")
#define NAME_CHESTO_BERRY _("MARON")
@@ -192,92 +198,92 @@ const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars
#define NAME_STARF_BERRY _("KRAMBO")
#define NAME_ENIGMA_BERRY _("ENIGMA")
-const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen.");
-const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf.");
-const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und");
-const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!");
-const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat.");
-const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!");
-const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,");
-const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter.");
-const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr");
-const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!");
-const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und");
-const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater.");
-const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-");
-const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag.");
-const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE");
-const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell.");
-const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-");
-const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen.");
-const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große");
-const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack.");
-const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist");
-const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen.");
-const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,");
-const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können.");
-const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr");
-const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie.");
-const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,");
-const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können.");
-const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer.");
-const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen.");
-const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas");
-const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden.");
-const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt");
-const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz.");
-const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der");
-const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß.");
-const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm");
-const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich.");
-const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht.");
-const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer.");
-const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie");
-const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN.");
-const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine");
-const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume.");
-const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders");
-const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden.");
-const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE.");
-const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft.");
-const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder");
-const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!");
-const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die");
-const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen.");
-const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst");
-const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt.");
-const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-");
-const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist.");
-const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit");
-const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!");
-const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die");
-const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!");
-const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr");
-const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!");
-const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst");
-const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort.");
-const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß.");
-const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß.");
-const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so");
-const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst.");
-const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem");
-const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen.");
-const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres.");
-const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes.");
-const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels.");
-const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,");
-const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens.");
-const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann");
-const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist.");
-const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu");
-const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude.");
-const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der");
-const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?");
-const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint");
-const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen.");
+static const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen.");
+static const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf.");
+static const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und");
+static const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!");
+static const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat.");
+static const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!");
+static const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,");
+static const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter.");
+static const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr");
+static const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!");
+static const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und");
+static const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater.");
+static const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-");
+static const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag.");
+static const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE");
+static const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell.");
+static const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-");
+static const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen.");
+static const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große");
+static const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack.");
+static const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist");
+static const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen.");
+static const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,");
+static const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können.");
+static const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr");
+static const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie.");
+static const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,");
+static const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können.");
+static const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer.");
+static const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas");
+static const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden.");
+static const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt");
+static const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz.");
+static const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der");
+static const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß.");
+static const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm");
+static const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich.");
+static const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht.");
+static const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer.");
+static const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie");
+static const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN.");
+static const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine");
+static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume.");
+static const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders");
+static const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden.");
+static const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE.");
+static const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft.");
+static const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder");
+static const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!");
+static const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die");
+static const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst");
+static const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt.");
+static const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-");
+static const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist.");
+static const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit");
+static const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!");
+static const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die");
+static const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!");
+static const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr");
+static const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!");
+static const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst");
+static const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort.");
+static const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß.");
+static const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß.");
+static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so");
+static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst.");
+static const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem");
+static const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen.");
+static const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres.");
+static const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes.");
+static const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels.");
+static const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+static const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens.");
+static const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann");
+static const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist.");
+static const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu");
+static const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude.");
+static const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der");
+static const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?");
+static const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint");
+static const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen.");
#endif
const struct Berry gBerries[] =
@@ -972,15 +978,29 @@ const struct Berry gBerries[] =
},
};
-const struct BerryTree gBlankBerryTree = {0};
+static const struct BerryTree gBlankBerryTree = {0};
extern u8 S_BerryTree[];
-extern u16 gScriptLastTalked;
+extern u16 gSpecialVar_LastTalked;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
+/*
+ An enigma berry is a type of berry which functions
+ as though it is a custom berry. Because it behaves
+ like its a custom berry, it doesn't hold an identity
+ represented in its icons or descriptions, leaving its
+ information to be decided by the e-reader cards
+ which were intended to deliver these custom
+ berries.
+*/
+
+static u8 CalcBerryYield(struct BerryTree *tree);
+static u16 GetStageDurationByBerryType(u8 berry);
+
// unused
+// this could be static, but making it so causes a compile-time warning.
void ClearEnigmaBerries(void)
{
CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry));
@@ -988,17 +1008,21 @@ void ClearEnigmaBerries(void)
void SetEnigmaBerry(u8 *src)
{
+ // initialize the enigma berry by copying the data from the script.
u32 i;
u8 *dest = (u8*)&gSaveBlock1.enigmaBerry;
for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++)
dest[i] = src[i];
+ // at this point, the description pointer is not yet initialized. we need to initialize it since
+ // we dont know where in memory this is going to be. set the berry desc pointers to the
+ // EnigmaBerry struct's description arrays since these are where the descriptions are stored.
gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1;
gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2;
}
-u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
+static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
{
const u8 *description1;
const u8 *description2;
@@ -1006,10 +1030,13 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
u32 checksum;
u8 *dest;
+ // the description pointers could be pointing to anywhere in memory. we do not want these
+ // pointers to factor into the checksum as it will produce a different result every time: so
+ // back the pointers up and set them to null so the checksum is safe to calculate.
description1 = gSaveBlock1.enigmaBerry.berry.description1;
description2 = gSaveBlock1.enigmaBerry.berry.description2;
- gSaveBlock1.enigmaBerry.berry.description1 = 0;
- gSaveBlock1.enigmaBerry.berry.description2 = 0;
+ gSaveBlock1.enigmaBerry.berry.description1 = NULL;
+ gSaveBlock1.enigmaBerry.berry.description2 = NULL;
dest = (u8*)enigmaBerry;
checksum = 0;
@@ -1018,17 +1045,20 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
checksum += dest[i];
}
+ // the checksum is calculated: the descriptions are safe to restore now.
gSaveBlock1.enigmaBerry.berry.description1 = description1;
gSaveBlock1.enigmaBerry.berry.description2 = description2;
return checksum;
}
+// due to e-reader scans being particularly volatile to failure, it is a requirement to check for
+// their integrity here due to scans possibly failing to produce the correct result.
bool32 IsEnigmaBerryValid(void)
{
- if (!gSaveBlock1.enigmaBerry.berry.stageDuration)
+ if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0)
return FALSE;
- if (!gSaveBlock1.enigmaBerry.berry.maxYield)
+ if (gSaveBlock1.enigmaBerry.berry.maxYield == 0)
return FALSE;
if (GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum)
return FALSE;
@@ -1037,37 +1067,51 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry *GetBerryInfo(u8 berry)
{
- if (berry == 0x2B && IsEnigmaBerryValid())
+ // when getting the pointer to the berry info, enigma berries are handled differently. if your
+ // berry is an Enigma Berry and its checksum is valid, fetch the pointer to its information in
+ // the save block.
+ if (berry == GETBERRYID(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid())
return &gSaveBlock1.enigmaBerry.berry;
else
{
- if (berry == 0 || berry > 0x2B)
- berry = 1;
+ // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was
+ // an enigma berry whos checksum failed, the game will use the Enigma Berry information
+ // for this: meaning if you see the Enigma Berry information, its actually because the
+ // checksum failed.
+ if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY))
+ berry = GETBERRYID(FIRST_BERRY);
return &gBerries[berry - 1];
}
}
-struct BerryTree *GetBerryTreeInfo(u8 id)
+// the save file can handle up to a number of 128 berry trees as indicated by its definition
+// in global.h. Interestingly, this function does not check that limit of 128.
+static struct BerryTree *GetBerryTreeInfo(u8 id)
{
return &gSaveBlock1.berryTrees[id];
}
+// this was called because the berry script was successful: meaning the player chose to
+// water the tree. We need to check for the current tree stage and set the appropriate
+// water flag to true.
bool32 FieldObjectInteractionWaterBerryTree(void)
{
+ // GetBerryTreeInfo does not sanitize the tree retrieved, but there are no known
+ // instances where this can cause problems.
struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject));
switch (tree->stage)
{
- case 1:
+ case BERRY_STAGE_PLANTED:
tree->watered1 = TRUE;
break;
- case 2:
+ case BERRY_STAGE_SPROUTED:
tree->watered2 = TRUE;
break;
- case 3:
+ case BERRY_STAGE_TALLER:
tree->watered3 = TRUE;
break;
- case 4:
+ case BERRY_STAGE_FLOWERING:
tree->watered4 = TRUE;
break;
default:
@@ -1076,10 +1120,10 @@ bool32 FieldObjectInteractionWaterBerryTree(void)
return TRUE;
}
-bool8 IsPlayerFacingPlantedBerryTree(void)
+bool8 IsPlayerFacingUnplantedSoil(void)
{
- if (GetFieldObjectScriptPointerForComparison() == S_BerryTree
- && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
+ if (GetFieldObjectScriptPointerPlayerFacing() == S_BerryTree
+ && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == BERRY_STAGE_NO_BERRY)
return TRUE;
else
return FALSE;
@@ -1087,7 +1131,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void)
bool8 TryToWaterBerryTree(void)
{
- if (GetFieldObjectScriptPointerForComparison() != S_BerryTree)
+ if (GetFieldObjectScriptPointerPlayerFacing() != S_BerryTree)
return FALSE;
else
return FieldObjectInteractionWaterBerryTree();
@@ -1099,70 +1143,84 @@ void ClearBerryTrees(void)
struct SaveBlock1 *saveBlock1 = &gSaveBlock1;
struct BerryTree berryTree = gBlankBerryTree;
- for (i = 0; i < (u8)ARRAY_COUNT(saveBlock1->berryTrees); i++) // casting to u8 fixes a mismatched signed compare. what
+ for (i = 0; i < MAX_BERRY_TREES; i++)
saveBlock1->berryTrees[i] = berryTree;
}
-bool32 BerryTreeGrow(struct BerryTree *tree)
+// when the player does not interact with the tree for a period of time, this is called
+// to advance the grow state.
+static bool32 BerryTreeGrow(struct BerryTree *tree)
{
if (tree->growthSparkle)
return FALSE;
switch (tree->stage)
{
- case 0:
+ case BERRY_STAGE_NO_BERRY:
return FALSE;
- case 4:
+ case BERRY_STAGE_FLOWERING:
tree->berryYield = CalcBerryYield(tree);
- case 1:
- case 2:
- case 3:
+ case BERRY_STAGE_PLANTED:
+ case BERRY_STAGE_SPROUTED:
+ case BERRY_STAGE_TALLER:
tree->stage++;
break;
- case 5:
+ case BERRY_STAGE_BERRIES:
tree->watered1 = 0;
tree->watered2 = 0;
tree->watered3 = 0;
tree->watered4 = 0;
tree->berryYield = 0;
- tree->stage = 2;
- if (++tree->regrowthCount == 10)
+ tree->stage = BERRY_STAGE_SPROUTED;
+ if (++tree->regrowthCount == BERRY_REGROW_LIMIT)
*tree = gBlankBerryTree;
break;
}
return TRUE;
}
-void BerryTreeTimeUpdate(s32 minutes)
+void BerryTreeTimeUpdate(s32 minutesPassed)
{
int i;
struct BerryTree *tree;
- for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.berryTrees); i++)
+ for (i = 0; i < MAX_BERRY_TREES; i++)
{
tree = &gSaveBlock1.berryTrees[i];
- if (tree->berry && tree->stage && !tree->growthSparkle)
+ if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE)
{
- if (minutes >= GetStageDurationByBerryType(tree->berry) * 71)
+ // the player has waited too long to water the berry. Reset the tree. This is because
+ // if the berry state is not in the unwatered state, the tree will grow anyway despite this
+ // check, which means BerryTreeGrow will handle the regrow process for this, removing the
+ // need for this check. This only handles the unwatered soil state.
+ if (minutesPassed >= GetStageDurationByBerryType(tree->berry) * 71)
{
*tree = gBlankBerryTree;
}
else
{
- s32 time = minutes;
+ // because time is altered below, perhaps they thought it was unsafe to change it, even
+ // though that is not how passed arguments behave.
+ s32 time = minutesPassed;
while (time != 0)
{
if (tree->minutesUntilNextStage > time)
{
- tree->minutesUntilNextStage -= time;
+ // its been X minutes since the last berry update, so update
+ // minutesUntilNextStage appropriately to match the time offset
+ // that has passed since the update.
+ tree->minutesUntilNextStage -= time;
break;
}
+ // perform the subtraction the other way around to get the number of minutes since
+ // the inferred stage update that occured, since minutesUntilNextStage is <= time.
+ // we may need this variable to simulate multiple berry cycles in the while loop.
time -= tree->minutesUntilNextStage;
- tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry);
- if (!BerryTreeGrow(tree))
+ tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); // since the tree was inferred to update, set the new minutesUntilNextStage.
+ if (BerryTreeGrow(tree) == FALSE)
break;
- if (tree->stage == 5)
+ if (tree->stage == BERRY_STAGE_BERRIES)
tree->minutesUntilNextStage *= 4;
}
}
@@ -1170,7 +1228,7 @@ void BerryTreeTimeUpdate(s32 minutes)
}
}
-void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
+void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 noSparkle)
{
struct BerryTree *tree = GetBerryTreeInfo(id);
@@ -1178,12 +1236,12 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
tree->berry = berry;
tree->minutesUntilNextStage = GetStageDurationByBerryType(berry);
tree->stage = stage;
- if (stage == 5)
+ if (stage == BERRY_STAGE_BERRIES)
{
tree->berryYield = CalcBerryYield(tree);
tree->minutesUntilNextStage *= 4;
}
- if (!sparkle)
+ if (noSparkle == FALSE)
{
tree->growthSparkle = TRUE;
}
@@ -1209,19 +1267,19 @@ u8 ItemIdToBerryType(u16 item)
u16 berry = item - FIRST_BERRY;
if (berry > LAST_BERRY - FIRST_BERRY)
- return 1;
+ return GETBERRYID(FIRST_BERRY);
else
- return item - FIRST_BERRY + 1;
+ return GETBERRYID(item);
}
-u16 BerryTypeToItemId(u16 berry)
+static u16 BerryTypeToItemId(u16 berry)
{
u16 item = berry - 1;
if (item > LAST_BERRY - FIRST_BERRY)
return FIRST_BERRY;
else
- return berry + FIRST_BERRY - 1;
+ return GETITEMID(berry);
}
void GetBerryNameByBerryType(u8 berry, u8 *string)
@@ -1232,10 +1290,10 @@ void GetBerryNameByBerryType(u8 berry, u8 *string)
void ResetBerryTreeSparkleFlag(u8 id)
{
- GetBerryTreeInfo(id)->growthSparkle = 0;
+ GetBerryTreeInfo(id)->growthSparkle = FALSE;
}
-u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
+static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
{
u8 count = 0;
@@ -1250,18 +1308,20 @@ u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
return count;
}
-u8 GetNumStagesWateredByBerryTreeId(u8 id)
+static u8 GetNumStagesWateredByBerryTreeId(u8 id)
{
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id));
}
-u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
+static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
{
u32 randMin;
u32 randMax;
u32 rand;
u32 extraYield;
+ // depending on if the player gave the tree plenty of water, berry yield will be affected proportionally.
+
if (water == 0)
return min;
else
@@ -1270,7 +1330,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
randMax = (max - min) * (water);
rand = randMin + Random() % (randMax - randMin + 1);
- if ((rand & 3) > 1)
+ if ((rand % 4) > 1)
extraYield = rand / 4 + 1;
else
extraYield = rand / 4;
@@ -1278,7 +1338,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
}
}
-u8 CalcBerryYield(struct BerryTree *tree)
+static u8 CalcBerryYield(struct BerryTree *tree)
{
const struct Berry *berry = GetBerryInfo(tree->berry);
u8 min = berry->minYield;
@@ -1287,12 +1347,12 @@ u8 CalcBerryYield(struct BerryTree *tree)
return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree));
}
-u8 GetBerryCountByBerryTreeId(u8 id)
+static u8 GetBerryCountByBerryTreeId(u8 id)
{
return gSaveBlock1.berryTrees[id].berryYield;
}
-u16 GetStageDurationByBerryType(u8 berry)
+static u16 GetStageDurationByBerryType(u8 berry)
{
return GetBerryInfo(berry)->stageDuration * 60;
}
@@ -1301,18 +1361,23 @@ void FieldObjectInteractionGetBerryTreeData(void)
{
u8 id;
u8 berry;
- u8 unk;
+ u8 localId;
u8 group;
u8 num;
id = FieldObjectGetBerryTreeId(gSelectedMapObject);
berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id);
- unk = gScriptLastTalked;
+ localId = gSpecialVar_LastTalked;
num = gSaveBlock1.location.mapNum;
group = gSaveBlock1.location.mapGroup;
- if (sub_8060234(unk, num, group))
- gSpecialVar_0x8004 = 0xFF;
+ if (IsBerryTreeSparkling(localId, num, group))
+ {
+ // we cannot allow the player to grow/interact with the tree while the tree
+ // is undergoing the sparkling effect, so set the special var to the sparkling
+ // state and let the event script process the flag.
+ gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING;
+ }
else
gSpecialVar_0x8004 = GetStageByBerryTreeId(id);
gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id);
@@ -1320,14 +1385,14 @@ void FieldObjectInteractionGetBerryTreeData(void)
GetBerryNameByBerryType(berry, gStringVar1);
}
-void sub_80B4EE4(void)
+void Berry_FadeAndGoToBerryBagMenu(void)
{
SetMainCallback2(sub_80A68CC);
}
void FieldObjectInteractionPlantBerryTree(void)
{
- u8 berry = ItemIdToBerryType(gScriptItemId);
+ u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE);
FieldObjectInteractionGetBerryTreeData();
@@ -1344,14 +1409,16 @@ void FieldObjectInteractionPickBerryTree(void)
void FieldObjectInteractionRemoveBerryTree(void)
{
RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject));
- sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ sub_8060288(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
-u8 PlayerHasBerries(void)
+bool8 PlayerHasBerries(void)
{
return IsBagPocketNonEmpty(BAG_BERRIES);
}
+// whenever the player is not within view of the berry tree during its sparkle state, the
+// sparkle state will be reset.
void ResetBerryTreeSparkleFlags(void)
{
s16 cam_left;
@@ -1369,7 +1436,7 @@ void ResetBerryTreeSparkleFlags(void)
bottom = top + 8;
for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.mapObjects); i++)
{
- if (gMapObjects[i].active && gMapObjects[i].animPattern == 12)
+ if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) // is the object an active berry tree?
{
cam_left = gMapObjects[i].coords2.x;
cam_top = gMapObjects[i].coords2.y;
diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c
index 1413a02ca..2abbac287 100644
--- a/src/field/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
@@ -4,14 +4,14 @@
#include "decompress.h"
#include "field_map_obj.h"
#include "item_menu.h"
-#include "items.h"
+#include "constants/items.h"
#include "item_use.h"
#include "main.h"
#include "menu.h"
#include "menu_helpers.h"
#include "palette.h"
#include "overworld.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
@@ -28,7 +28,7 @@ struct Struct2000000
/*0x1FFFF*/ u8 var_1FFFF;
};
-extern struct Struct2000000 unk_2000000;
+extern struct Struct2000000 gSharedMem;
extern u16 gUnknown_030041B4;
static EWRAM_DATA u8 gUnknown_0203932C = 0;
@@ -119,13 +119,13 @@ static bool8 sub_8146058(void)
case 5:
if (!MultistepInitMenuWindowContinue())
break;
- unk_2000000.var_1FFFF = 0;
+ gSharedMem.var_1FFFF = 0;
gMain.state += 1;
break;
case 6:
if (!sub_81462B8())
break;
- unk_2000000.var_1FFFF = 0;
+ gSharedMem.var_1FFFF = 0;
gMain.state += 1;
break;
case 7:
@@ -133,12 +133,12 @@ static bool8 sub_8146058(void)
gMain.state += 1;
break;
case 8:
- berry = gScriptItemId + OFFSET_7B;
+ berry = gSpecialVar_ItemId + OFFSET_7B;
gUnknown_0203932C = CreateBerrySprite(berry, 56, 64);
gMain.state += 1;
break;
case 9:
- sub_8146600(gScriptItemId + OFFSET_7B);
+ sub_8146600(gSpecialVar_ItemId + OFFSET_7B);
gMain.state += 1;
break;
case 10:
@@ -191,19 +191,19 @@ bool8 sub_81462B8(void)
u16 i;
void *addr;
- switch (unk_2000000.var_1FFFF)
+ switch (gSharedMem.var_1FFFF)
{
case 0:
LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 1:
LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 2:
LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 3:
for (i = 0; i < 0x400; i++)
@@ -215,19 +215,19 @@ bool8 sub_81462B8(void)
}
addr = (void *)(VRAM + 0x3800);
DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 4:
LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 5:
LoadCompressedObjectPic(&gUnknown_083C1F74);
- unk_2000000.var_1FFFF += 1;
+ gSharedMem.var_1FFFF += 1;
break;
case 6:
LoadCompressedObjectPalette(&gUnknown_083C1F7C);
- unk_2000000.var_1FFFF = 0;
+ gSharedMem.var_1FFFF = 0;
return TRUE;
}
@@ -277,9 +277,9 @@ static void sub_81464E4(void)
u8 buffer[16];
#endif
- berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1);
+ berryInfo = GetBerryInfo(gSpecialVar_ItemId + OFFSET_7B + 1);
- ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_ItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
MenuPrint(gStringVar1, 12, 4);
#if ENGLISH
@@ -437,7 +437,7 @@ static void sub_8146810(s8 berry)
gBagPocketScrollStates[berryPocket].cursorPos += berry;
}
}
- gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
+ gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
DestroySprite(&gSprites[gUnknown_0203932C]);
sub_81466A0();
sub_80A7DD4();
@@ -449,7 +449,7 @@ static void sub_81468BC(void)
sub_81464E4();
// center of berry sprite
- gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64);
+ gUnknown_0203932C = CreateBerrySprite(gSpecialVar_ItemId + OFFSET_7B, 56, 64);
- sub_8146600(gScriptItemId + OFFSET_7B);
+ sub_8146600(gSpecialVar_ItemId + OFFSET_7B);
}
diff --git a/src/field/bike.c b/src/field/bike.c
index 8df901b40..8db01b4b4 100644
--- a/src/field/bike.c
+++ b/src/field/bike.c
@@ -3,23 +3,23 @@
#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
-#include "flags.h"
+#include "constants/flags.h"
#include "global.fieldmap.h"
#include "metatile_behavior.h"
#include "overworld.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
-extern u8 gUnknown_02039250;
-extern u8 gUnknown_02039251;
-extern u8 gUnknown_0202E854;
+extern bool8 gBikeCyclingChallenge;
+extern u8 gBikeCollisions;
+extern u8 gUnusedBikeCameraAheadPanback;
static void MovePlayerOnMachBike(u8, u16, u16);
static u8 GetMachBikeTransition(u8 *);
static void MachBikeTransition_FaceDirection(u8);
-static void MachBikeTransition_80E517C(u8);
-static void MachBikeTransition_80E51C4(u8);
-static void MachBikeTransition_80E5270(u8);
+static void MachBikeTransition_TurnDirection(u8);
+static void MachBikeTransition_TrySpeedUp(u8);
+static void MachBikeTransition_TrySlowDown(u8);
static void MovePlayerOnAcroBike(u8, u16, u16);
static u8 CheckMovementInputAcroBike(u8 *, u16, u16);
static u8 AcroBikeHandleInputNormal(u8 *, u16, u16);
@@ -27,64 +27,74 @@ static u8 AcroBikeHandleInputTurning(u8 *, u16, u16);
static u8 AcroBikeHandleInputWheelieStanding(u8 *, u16, u16);
static u8 AcroBikeHandleInputBunnyHop(u8 *, u16, u16);
static u8 AcroBikeHandleInputWheelieMoving(u8 *, u16, u16);
-static u8 AcroBikeHandleInputState5(u8 *, u16, u16);
-static u8 AcroBikeHandleInputState6(u8 *, u16, u16);
+static u8 AcroBikeHandleInputSidewaysJump(u8 *, u16, u16);
+static u8 AcroBikeHandleInputTurnJump(u8 *, u16, u16);
static void AcroBikeTransition_FaceDirection(u8);
-static void AcroBikeTransition_80E5708(u8);
-static void AcroBikeTransition_80E5744(u8);
+static void AcroBikeTransition_TurnDirection(u8);
+static void AcroBikeTransition_Moving(u8);
static void AcroBikeTransition_NormalToWheelie(u8);
-static void AcroBikeTransition_80E57F8(u8);
-static void AcroBikeTransition_80E5834(u8);
-static void AcroBikeTransition_80E5870(u8);
-static void AcroBikeTransition_80E58AC(u8);
-static void AcroBikeTransition_80E5920(u8);
-static void AcroBikeTransition_80E5990(u8);
-static void AcroBikeTransition_80E59A0(u8);
-static void AcroBikeTransition_80E5A30(u8);
-static void AcroBikeTransition_80E5AC0(u8);
-static void sub_80E5B60(u16, u16);
-static u8 sub_80E5C2C(void);
-static void sub_80E5C7C(u8);
-static void sub_80E5CB8(u8);
-static u8 sub_80E5CF4(u16);
+static void AcroBikeTransition_WheelieToNormal(u8);
+static void AcroBikeTransition_WheelieIdle(u8);
+static void AcroBikeTransition_WheelieHoppingStanding(u8);
+static void AcroBikeTransition_WheelieHoppingMoving(u8);
+static void AcroBikeTransition_SideJump(u8);
+static void AcroBikeTransition_TurnJump(u8);
+static void AcroBikeTransition_WheelieMoving(u8);
+static void AcroBikeTransition_WheelieRisingMoving(u8);
+static void AcroBikeTransition_WheelieLoweringMoving(u8);
+static void AcroBike_TryHistoryUpdate(u16, u16);
+static u8 AcroBike_GetJumpDirection(void);
+static void Bike_UpdateDirTimerHistory(u8);
+static void Bike_UpdateABStartSelectHistory(u8);
+static u8 Bike_DPadToDirection(u16);
static u8 get_some_collision(u8);
-static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8);
+static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *, s16, s16, u8, u8);
static bool8 IsRunningDisallowedByMetatile(u8);
-static void sub_80E5E4C();
+static void Bike_TryAdvanceCyclingRoadCollisions();
static u8 CanBikeFaceDirOnMetatile(u8, u8);
-static bool8 sub_80E5EC0(u8, u8);
-static void sub_80E6024(void);
+static bool8 WillPlayerCollideWithCollision(u8, u8);
+static void Bike_SetBikeStill(void);
+
+/*
+ A bike transition is a type of callback for the bike that actually
+ modifies the bicycle's direction or momentum or otherwise movement.
+ Alternatively, a bike may also have input handlers which process the
+ bike transition to call: the acro bike has input handlers while the mach
+ bike does not. This is because the Acro needs to know the button inputs
+ for its complex tricks and actions.
+*/
static void (*const sMachBikeTransitions[])(u8) =
{
- MachBikeTransition_FaceDirection,
- MachBikeTransition_80E517C,
- MachBikeTransition_80E51C4,
- MachBikeTransition_80E5270,
+ MachBikeTransition_FaceDirection, // Face vs Turn: Face has no anim while Turn does. Turn checks for collision because if you turn right as opposed to face right, if there is a wall there, turn will make a bonk sound effect while face will not.
+ MachBikeTransition_TurnDirection,
+ MachBikeTransition_TrySpeedUp,
+ MachBikeTransition_TrySlowDown,
};
-static void (*const gUnknown_083DB5A4[])(u8) =
+// bikeFrameCounter is input which is represented by gMachBikeSpeeds in order: 0 is normal speed (1 speed), 1 is fast speed (2 speed), 2 is fastest speed (4 speed)
+static void (*const sMachBikeSpeedCallbacks[])(u8) =
{
- PlayerGoSpeed0,
- sub_80593C4,
- sub_80593F4,
+ PlayerGoSpeed1, // normal speed (1 speed)
+ PlayerGoSpeed2, // fast speed (2 speed)
+ PlayerGoSpeed4, // fastest speed (4 speed)
};
static void (*const sAcroBikeTransitions[])(u8) =
{
AcroBikeTransition_FaceDirection,
- AcroBikeTransition_80E5708,
- AcroBikeTransition_80E5744,
+ AcroBikeTransition_TurnDirection,
+ AcroBikeTransition_Moving,
AcroBikeTransition_NormalToWheelie,
- AcroBikeTransition_80E57F8,
- AcroBikeTransition_80E5834,
- AcroBikeTransition_80E5870,
- AcroBikeTransition_80E58AC,
- AcroBikeTransition_80E5920,
- AcroBikeTransition_80E5990,
- AcroBikeTransition_80E59A0,
- AcroBikeTransition_80E5A30,
- AcroBikeTransition_80E5AC0,
+ AcroBikeTransition_WheelieToNormal,
+ AcroBikeTransition_WheelieIdle,
+ AcroBikeTransition_WheelieHoppingStanding,
+ AcroBikeTransition_WheelieHoppingMoving,
+ AcroBikeTransition_SideJump,
+ AcroBikeTransition_TurnJump,
+ AcroBikeTransition_WheelieMoving,
+ AcroBikeTransition_WheelieRisingMoving,
+ AcroBikeTransition_WheelieLoweringMoving,
};
static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) =
@@ -94,19 +104,24 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) =
AcroBikeHandleInputWheelieStanding,
AcroBikeHandleInputBunnyHop,
AcroBikeHandleInputWheelieMoving,
- AcroBikeHandleInputState5,
- AcroBikeHandleInputState6,
+ AcroBikeHandleInputSidewaysJump,
+ AcroBikeHandleInputTurnJump,
};
+// used with bikeFrameCounter from mach bike
const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST};
-static const u8 Unknown_3DB606[] = {4, 0};
-static const struct UnknownStruct1 gUnknown_083DB608[] =
+// this is a list of timers to compare against later, terminated with 0. the only timer being compared against is 4 frames in this list.
+static const u8 AcroBikeJumpTimerList[] = {4, 0};
+
+// this is a list of history inputs to do in order to do the check to retrieve a jump direction for acro bike. it seems to be an extensible list, so its possible that Game Freak may have intended for the Acro Bike to have more complex tricks at some point. The final list only has the acro jump.
+static const struct BikeHistoryInputInfo gAcroBikeTricksList[] =
{
- {1, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 1},
- {2, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 2},
- {3, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 3},
- {4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4},
+ // the 0xF is a mask performed with each byte of the array in order to perform the check on only the last entry of the history list, otherwise the check wouldnt work as there can be 0xF0 as opposed to 0x0F.
+ {DIR_SOUTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_SOUTH},
+ {DIR_NORTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_NORTH},
+ {DIR_WEST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_WEST},
+ {DIR_EAST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_EAST},
};
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys)
@@ -122,54 +137,60 @@ static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys)
sMachBikeTransitions[GetMachBikeTransition(&direction)](direction);
}
-static u8 GetMachBikeTransition(u8 *ptr)
+// dirTraveling is a variable that is 0 when the player is standing still.
+static u8 GetMachBikeTransition(u8 *dirTraveling)
{
+ // if the dir updated before this function, get the relevent new direction to check later.
u8 direction = player_get_direction_upper_nybble();
- if (*ptr == 0)
+ // is the player standing still?
+ if (*dirTraveling == 0)
{
- *ptr = direction;
- if (gPlayerAvatar.unkB == 0)
+ *dirTraveling = direction; // update the direction, since below we either faced a direction or we started moving.
+ if (gPlayerAvatar.bikeSpeed == SPEED_STANDING)
{
- gPlayerAvatar.running2 = 0;
- return 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return MACH_TRANS_FACE_DIRECTION;
}
- gPlayerAvatar.running2 = 2;
- return 3;
+ gPlayerAvatar.runningState = MOVING;
+ return MACH_TRANS_START_MOVING;
}
- if (*ptr != direction && gPlayerAvatar.running2 != 2)
+ // we need to check if the last traveled direction changed from the new direction as well as ensuring that we dont update the state while the player is moving: see the else check.
+ if (*dirTraveling != direction && gPlayerAvatar.runningState != MOVING)
{
- if (gPlayerAvatar.unkB != 0)
+ if (gPlayerAvatar.bikeSpeed != SPEED_STANDING)
{
- *ptr = direction;
- gPlayerAvatar.running2 = 2;
- return 3;
+ *dirTraveling = direction; // implement the new direction
+ gPlayerAvatar.runningState = MOVING;
+ return MACH_TRANS_START_MOVING;
}
- gPlayerAvatar.running2 = 1;
- return 1;
+ // if you didnt start moving but your dir was different, do a turn direction instead.
+ gPlayerAvatar.runningState = TURN_DIRECTION;
+ return MACH_TRANS_TURN_DIRECTION;
}
- else
+ else // the player is either going in the current direction and hasnt changed or their state is currently moving.
{
- gPlayerAvatar.running2 = 2;
- return 2;
+ gPlayerAvatar.runningState = MOVING;
+ return MACH_TRANS_KEEP_MOVING;
}
}
+// the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction.
static void MachBikeTransition_FaceDirection(u8 direction)
{
PlayerFaceDirection(direction);
- sub_80E6024();
+ Bike_SetBikeStill();
}
-static void MachBikeTransition_80E517C(u8 direction)
+static void MachBikeTransition_TurnDirection(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E))
{
PlayerTurnInPlace(direction);
- sub_80E6024();
+ Bike_SetBikeStill();
}
else
{
@@ -177,15 +198,16 @@ static void MachBikeTransition_80E517C(u8 direction)
}
}
-static void MachBikeTransition_80E51C4(u8 direction)
+static void MachBikeTransition_TrySpeedUp(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
u8 collision;
- if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == FALSE)
{
- if (gPlayerAvatar.unkB)
- MachBikeTransition_80E5270(playerMapObj->placeholder18);
+ // we cannot go forward, so either slow down or, if we are stopped, idle face direction.
+ if (gPlayerAvatar.bikeSpeed)
+ MachBikeTransition_TrySlowDown(playerMapObj->placeholder18);
else
MachBikeTransition_FaceDirection(playerMapObj->placeholder18);
}
@@ -194,33 +216,36 @@ static void MachBikeTransition_80E51C4(u8 direction)
collision = get_some_collision(direction);
if (collision > 0 && collision < 12)
{
+ // we hit a solid object, but check to see if its a ledge and then jump.
if (collision == COLLISION_LEDGE_JUMP)
{
PlayerJumpLedge(direction);
}
else
{
- sub_80E6024();
+ // we hit a solid object that is not a ledge, so perform the collision.
+ Bike_SetBikeStill();
if (collision < 5 || collision > 8)
PlayerOnBikeCollide(direction);
}
}
else
{
- gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction);
- gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1
+ // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed.
+ sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction);
+ gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1
if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array
gPlayerAvatar.bikeFrameCounter++;
}
}
}
-static void MachBikeTransition_80E5270(u8 var)
+static void MachBikeTransition_TrySlowDown(u8 var)
{
u8 collision;
- if (gPlayerAvatar.unkB != 0)
- gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB;
+ if (gPlayerAvatar.bikeSpeed != SPEED_STANDING)
+ gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed;
collision = get_some_collision(var);
@@ -232,17 +257,18 @@ static void MachBikeTransition_80E5270(u8 var)
}
else
{
- sub_80E6024();
+ Bike_SetBikeStill();
if (collision < 5 || collision > 8)
PlayerOnBikeCollide(var);
}
}
else
{
- gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var);
+ sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](var);
}
}
+// the acro bike requires the input handler to be executed before the transition can.
static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys)
{
sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection);
@@ -265,118 +291,121 @@ static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys)
//We're standing still with the B button held.
//Do a wheelie.
*newDirection = direction;
- gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
return ACRO_TRANS_NORMAL_TO_WHEELIE;
}
else
{
*newDirection = direction;
- gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
return ACRO_TRANS_FACE_DIRECTION;
}
}
- if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0)
+ if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.bikeSpeed == SPEED_STANDING)
{
- gPlayerAvatar.unkB++;
+ gPlayerAvatar.bikeSpeed++;
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING;
- return 11;
+ return ACRO_TRANS_WHEELIE_RISING_MOVING;
}
- if (*newDirection != direction && gPlayerAvatar.running2 != 2)
+ if (*newDirection != direction && gPlayerAvatar.runningState != MOVING)
{
gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING;
- gPlayerAvatar.unk9 = *newDirection;
- gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.newDirBackup = *newDirection;
+ gPlayerAvatar.runningState = NOT_MOVING;
return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys);
}
- gPlayerAvatar.running2 = 2;
- return 2;
+ gPlayerAvatar.runningState = MOVING;
+ return ACRO_TRANS_MOVING;
}
static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction;
- *newDirection = gPlayerAvatar.unk9;
+ *newDirection = gPlayerAvatar.newDirBackup;
gPlayerAvatar.bikeFrameCounter++;
- //Wait 6 frames before actually changing direction
- if (gPlayerAvatar.bikeFrameCounter > 6)
+ // Wait 6 frames before actually changing direction
+ if (gPlayerAvatar.bikeFrameCounter > 6) // ... because it takes 6 frames to advance 1 tile.
{
- gPlayerAvatar.running2 = 1;
+ gPlayerAvatar.runningState = TURN_DIRECTION;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
- sub_80E6024();
- return 1;
+ Bike_SetBikeStill();
+ return ACRO_TRANS_TURN_DIRECTION;
}
direction = player_get_direction_upper_nybble();
- if (*newDirection == sub_80E5C2C())
+ if (*newDirection == AcroBike_GetJumpDirection())
{
- sub_80E6024();
- gPlayerAvatar.unkB = 1;
+ Bike_SetBikeStill(); // Bike_SetBikeStill sets speed to standing, but the next line immediately overrides it. could have just reset acroBikeState to 0 here instead of wasting a jump.
+ gPlayerAvatar.bikeSpeed = SPEED_NORMAL;
if (*newDirection == GetOppositeDirection(direction))
{
- gPlayerAvatar.acroBikeState = ACRO_STATE_6;
- return 9;
+ // do a turn jump.
+ // no need to update runningState, didnt move.
+ gPlayerAvatar.acroBikeState = ACRO_STATE_TURN_JUMP;
+ return ACRO_TRANS_TURN_JUMP;
}
else
{
- gPlayerAvatar.running2 = 2;
- gPlayerAvatar.acroBikeState = ACRO_STATE_5;
- return 8;
+ // do a sideways jump.
+ gPlayerAvatar.runningState = MOVING; // we need to move, set state to moving.
+ gPlayerAvatar.acroBikeState = ACRO_STATE_SIDE_JUMP;
+ return ACRO_TRANS_SIDE_JUMP;
}
}
*newDirection = direction;
- return 0;
+ return ACRO_TRANS_FACE_DIRECTION;
}
-static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys)
+static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
direction = player_get_direction_upper_nybble();
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
if (heldKeys & B_BUTTON)
gPlayerAvatar.bikeFrameCounter++;
else
{
- //B button was released.
+ // B button was released.
gPlayerAvatar.bikeFrameCounter = 0;
if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
- //Go back to normal on flat ground
- *ptr = direction;
+ // Go back to normal on flat ground
+ *newDirection = direction;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
- sub_80E6024();
- return 4;
+ Bike_SetBikeStill();
+ return ACRO_TRANS_WHEELIE_TO_NORMAL;
}
}
if (gPlayerAvatar.bikeFrameCounter >= 40)
{
- *ptr = direction;
+ *newDirection = direction;
gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP;
- sub_80E6024();
- return 6;
+ Bike_SetBikeStill();
+ return ACRO_TRANS_WHEELIE_HOPPING_STANDING;
}
- if (*ptr == direction)
+ if (*newDirection == direction)
{
- gPlayerAvatar.running2 = 2;
+ gPlayerAvatar.runningState = MOVING;
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING;
- sub_80E6024();
- return 10;
+ Bike_SetBikeStill();
+ return ACRO_TRANS_WHEELIE_MOVING;
}
- if (*ptr == 0)
+ if (*newDirection == 0)
{
- *ptr = direction;
- return 5;
+ *newDirection = direction;
+ return ACRO_TRANS_WHEELIE_IDLE;
}
- gPlayerAvatar.running2 = 1;
- return 5;
+ gPlayerAvatar.runningState = TURN_DIRECTION;
+ return ACRO_TRANS_WHEELIE_IDLE;
}
-static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys)
+static u8 AcroBikeHandleInputBunnyHop(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
@@ -385,42 +414,45 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys)
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (!(heldKeys & B_BUTTON))
{
- //B button was released
- sub_80E6024();
+ // B button was released
+ Bike_SetBikeStill();
if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
- //Do a standing wheelie on a bumpy slope
+ // even though B was released, dont undo the wheelie on the bumpy slope.
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
- return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
+ return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys);
}
else
{
- //Go back to normal on flat ground
- *ptr = direction;
- gPlayerAvatar.running2 = 0;
+ // .. otherwise, go back to normal on flat ground
+ *newDirection = direction;
+ gPlayerAvatar.runningState = NOT_MOVING;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
- return 4;
+ return ACRO_TRANS_WHEELIE_TO_NORMAL;
}
}
- //B Button is still held
+ // B Button is still held
- if (*ptr == DIR_NONE)
+ if (*newDirection == DIR_NONE)
{
- *ptr = direction;
- gPlayerAvatar.running2 = 0;
- return 6;
+ // we did not move, so keep hopping in place without moving.
+ *newDirection = direction;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return ACRO_TRANS_WHEELIE_HOPPING_STANDING;
}
- if (*ptr != direction && gPlayerAvatar.running2 != 2)
+ if (*newDirection != direction && gPlayerAvatar.runningState != MOVING)
{
- gPlayerAvatar.running2 = 1;
- return 6;
+ // we changed direction, so turn but do not move hop.
+ gPlayerAvatar.runningState = TURN_DIRECTION;
+ return ACRO_TRANS_WHEELIE_HOPPING_STANDING;
}
- gPlayerAvatar.running2 = 2;
- return 7;
+ // otherwise, we started moving while hopping
+ gPlayerAvatar.runningState = MOVING;
+ return ACRO_TRANS_WHEELIE_HOPPING_MOVING;
}
-static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys)
+static u8 AcroBikeHandleInputWheelieMoving(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
@@ -429,45 +461,53 @@ static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys)
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (!(heldKeys & B_BUTTON))
{
- sub_80E6024();
+ // we were moving on a wheelie, but we let go while moving. reset bike still status
+ Bike_SetBikeStill();
if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
+ // we let go of B and arent on a bumpy slope, set state to normal because now we need to handle this
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
- if (*ptr == 0)
+ if (*newDirection == DIR_NONE)
{
- *ptr = direction;
- gPlayerAvatar.running2 = 0;
- return 4;
+ // we stopped moving but are turning, still try to lower the wheelie in place.
+ *newDirection = direction;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return ACRO_TRANS_WHEELIE_TO_NORMAL;
}
- if (*ptr != direction && gPlayerAvatar.running2 != 2)
+ if (*newDirection != direction && gPlayerAvatar.runningState != MOVING)
{
- gPlayerAvatar.running2 = 0;
- return 4;
+ // we did not turn while lowering wheelie, so do so without turning.
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return ACRO_TRANS_WHEELIE_TO_NORMAL;
}
- gPlayerAvatar.running2 = 2;
- return 12;
+ // if we are moving while lowering wheelie, put the acro into a lowering state while moving.
+ gPlayerAvatar.runningState = MOVING;
+ return ACRO_TRANS_WHEELIE_LOWERING_MOVING;
}
+ // please do not undo the wheelie on a bumpy slope
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
- return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
+ return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys);
}
- if (*ptr == 0)
+ // we are still holding B.
+ if (*newDirection == DIR_NONE)
{
- *ptr = direction;
+ // idle the wheelie in place because we're holding B without moving.
+ *newDirection = direction;
gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
- gPlayerAvatar.running2 = 0;
- sub_80E6024();
- return 5;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ Bike_SetBikeStill();
+ return ACRO_TRANS_WHEELIE_IDLE;
}
- if (direction != *ptr && gPlayerAvatar.running2 != 2)
+ if (direction != *newDirection && gPlayerAvatar.runningState != MOVING)
{
- gPlayerAvatar.running2 = 0;
- return 5;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ return ACRO_TRANS_WHEELIE_IDLE;
}
- gPlayerAvatar.running2 = 2;
- return 10;
+ gPlayerAvatar.runningState = MOVING;
+ return ACRO_TRANS_WHEELIE_MOVING;
}
-static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys)
+static u8 AcroBikeHandleInputSidewaysJump(u8 *ptr, u16 newKeys, u16 heldKeys)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
@@ -477,7 +517,7 @@ static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys)
return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
}
-static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys)
+static u8 AcroBikeHandleInputTurnJump(u8 *ptr, u16 newKeys, u16 heldKeys)
{
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
@@ -488,7 +528,7 @@ static void AcroBikeTransition_FaceDirection(u8 direction)
PlayerFaceDirection(direction);
}
-static void AcroBikeTransition_80E5708(u8 direction)
+static void AcroBikeTransition_TurnDirection(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
@@ -497,7 +537,7 @@ static void AcroBikeTransition_80E5708(u8 direction)
PlayerFaceDirection(direction);
}
-static void AcroBikeTransition_80E5744(u8 direction)
+static void AcroBikeTransition_Moving(u8 direction)
{
u8 collision;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
@@ -530,41 +570,41 @@ static void AcroBikeTransition_NormalToWheelie(u8 direction)
PlayerStartWheelie(direction);
}
-static void AcroBikeTransition_80E57F8(u8 direction)
+static void AcroBikeTransition_WheelieToNormal(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
- sub_8059534(direction);
+ PlayerEndWheelie(direction);
}
-static void AcroBikeTransition_80E5834(u8 direction)
+static void AcroBikeTransition_WheelieIdle(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
- sub_8059504(direction);
+ PlayerIdleWheelie(direction);
}
-static void AcroBikeTransition_80E5870(u8 direction)
+static void AcroBikeTransition_WheelieHoppingStanding(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
- sub_805954C(direction);
+ PlayerStandingHoppingWheelie(direction);
}
-static void AcroBikeTransition_80E58AC(u8 direction)
+static void AcroBikeTransition_WheelieHoppingMoving(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- AcroBikeTransition_80E5870(playerMapObj->placeholder18);
+ AcroBikeTransition_WheelieHoppingStanding(playerMapObj->placeholder18);
return;
}
var = get_some_collision(direction);
@@ -575,23 +615,23 @@ static void AcroBikeTransition_80E58AC(u8 direction)
}
else if (var == 6)
{
- sub_8059594(direction);
+ PlayerLedgeHoppingWheelie(direction);
}
else if (var < 5 || var > 8)
{
if (var <= 11)
{
- AcroBikeTransition_80E5870(direction);
+ AcroBikeTransition_WheelieHoppingStanding(direction);
}
else
{
derp:
- sub_8059570(direction);
+ PlayerMovingHoppingWheelie(direction);
}
}
}
-static void AcroBikeTransition_80E5920(u8 direction)
+static void AcroBikeTransition_SideJump(u8 direction)
{
u8 var;
struct MapObject *playerMapObj;
@@ -603,12 +643,12 @@ static void AcroBikeTransition_80E5920(u8 direction)
return;
if (var < 10)
{
- AcroBikeTransition_80E5708(direction);
+ AcroBikeTransition_TurnDirection(direction);
return;
}
- if (sub_80E5EC0(var, direction) == 0)
+ if (WillPlayerCollideWithCollision(var, direction) == FALSE)
{
- AcroBikeTransition_80E5708(direction);
+ AcroBikeTransition_TurnDirection(direction);
return;
}
}
@@ -618,19 +658,19 @@ static void AcroBikeTransition_80E5920(u8 direction)
PlayerSetAnimId(sub_80608A4(direction), 2);
}
-static void AcroBikeTransition_80E5990(u8 direction)
+static void AcroBikeTransition_TurnJump(u8 direction)
{
- sub_80595B8(direction);
+ PlayerAcroTurnJump(direction);
}
-static void AcroBikeTransition_80E59A0(u8 direction)
+static void AcroBikeTransition_WheelieMoving(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- sub_8059504(playerMapObj->placeholder18);
+ PlayerIdleWheelie(playerMapObj->placeholder18);
return;
}
var = get_some_collision(direction);
@@ -638,26 +678,26 @@ static void AcroBikeTransition_80E59A0(u8 direction)
{
if (var == 6)
{
- sub_8059594(direction);
+ PlayerLedgeHoppingWheelie(direction);
}
else if (var == 9)
{
- sub_8059504(direction);
+ PlayerIdleWheelie(direction);
}
else if (var <= 4)
{
if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
- sub_8059504(direction);
+ PlayerIdleWheelie(direction);
else
sub_80595DC(direction); //hit wall?
}
return;
}
sub_8059618(direction);
- gPlayerAvatar.running2 = 2;
+ gPlayerAvatar.runningState = MOVING;
}
-static void AcroBikeTransition_80E5A30(u8 direction)
+static void AcroBikeTransition_WheelieRisingMoving(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
@@ -672,33 +712,33 @@ static void AcroBikeTransition_80E5A30(u8 direction)
{
if (var == 6)
{
- sub_8059594(direction);
+ PlayerLedgeHoppingWheelie(direction);
}
else if (var == 9)
{
- sub_8059504(direction);
+ PlayerIdleWheelie(direction);
}
else if (var <= 4)
{
if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
- sub_8059504(direction);
+ PlayerIdleWheelie(direction);
else
sub_80595DC(direction); //hit wall?
}
return;
}
sub_8059600(direction);
- gPlayerAvatar.running2 = 2;
+ gPlayerAvatar.runningState = MOVING;
}
-static void AcroBikeTransition_80E5AC0(u8 direction)
+static void AcroBikeTransition_WheelieLoweringMoving(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- sub_8059534(playerMapObj->placeholder18);
+ PlayerEndWheelie(playerMapObj->placeholder18);
return;
}
var = get_some_collision(direction);
@@ -707,115 +747,115 @@ static void AcroBikeTransition_80E5AC0(u8 direction)
if (var == 6)
PlayerJumpLedge(direction);
else if (var < 5 || var > 8)
- sub_8059534(direction);
+ PlayerEndWheelie(direction);
return;
}
sub_8059630(direction);
}
-void sub_80E5B38(u16 a, u16 b)
+void Bike_TryAcroBikeHistoryUpdate(u16 newKeys, u16 heldKeys)
{
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)
- sub_80E5B60(a, b);
+ AcroBike_TryHistoryUpdate(newKeys, heldKeys);
}
-static void sub_80E5B60(u16 unused, u16 b)
+static void AcroBike_TryHistoryUpdate(u16 newKeys, u16 heldKeys) // newKeys is unused
{
- u8 var;
+ u8 direction = Bike_DPadToDirection(heldKeys);
- var = sub_80E5CF4(b);
- if (var == (gPlayerAvatar.unkC & 0xF))
+ if (direction == (gPlayerAvatar.directionHistory & 0xF))
{
- if (gPlayerAvatar.unk14[0] < 0xFF)
- gPlayerAvatar.unk14[0]++;
+ // increment the timer for direction history since last input.
+ if (gPlayerAvatar.dirTimerHistory[0] < 0xFF)
+ gPlayerAvatar.dirTimerHistory[0]++;
}
else
{
- sub_80E5C7C(var);
- gPlayerAvatar.unkB = 0;
+ Bike_UpdateDirTimerHistory(direction);
+ gPlayerAvatar.bikeSpeed = SPEED_STANDING;
}
- var = b & 0xF;
- if (var == (gPlayerAvatar.unk10 & 0xF))
+ direction = heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON); // directions is reused for some reason.
+ if (direction == (gPlayerAvatar.abStartSelectHistory & 0xF))
{
- if (gPlayerAvatar.unk1C[0] < 0xFF)
- gPlayerAvatar.unk1C[0]++;
+ if (gPlayerAvatar.abStartSelectTimerHistory[0] < 0xFF)
+ gPlayerAvatar.abStartSelectTimerHistory[0]++;
}
else
{
- sub_80E5CB8(var);
- gPlayerAvatar.unkB = 0;
+ Bike_UpdateABStartSelectHistory(direction);
+ gPlayerAvatar.bikeSpeed = SPEED_STANDING;
}
}
-static bool8 sub_80E5BC8(const u8 *a, const u8 *b)
+static bool8 HasPlayerInputTakenLongerThanList(const u8 *dirTimerList, const u8 *abStartSelectTimerList)
{
u8 i;
- for (i = 0; a[i] != 0; i++)
+ for (i = 0; dirTimerList[i] != 0; i++)
{
- if (gPlayerAvatar.unk14[i] > a[i])
+ if (gPlayerAvatar.dirTimerHistory[i] > dirTimerList[i])
return FALSE;
}
- for (i = 0; b[i] != 0; i++)
+ for (i = 0; abStartSelectTimerList[i] != 0; i++)
{
- if (gPlayerAvatar.unk1C[i] > b[i])
+ if (gPlayerAvatar.abStartSelectTimerHistory[i] > abStartSelectTimerList[i])
return FALSE;
}
return TRUE;
}
-static u8 sub_80E5C2C(void)
+static u8 AcroBike_GetJumpDirection(void)
{
u32 i;
for (i = 0; i < 4; i++)
{
- const struct UnknownStruct1 *s = &gUnknown_083DB608[i];
- u32 r1 = gPlayerAvatar.unkC;
- u32 r2 = gPlayerAvatar.unk10;
-
- r1 &= s->unk8;
- r2 &= s->unkC;
- if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14))
- return s->unk18;
+ const struct BikeHistoryInputInfo *historyInputInfo = &gAcroBikeTricksList[i];
+ u32 dirHistory = gPlayerAvatar.directionHistory;
+ u32 abStartSelectHistory = gPlayerAvatar.abStartSelectHistory;
+
+ dirHistory &= historyInputInfo->dirHistoryMask;
+ abStartSelectHistory &= historyInputInfo->abStartSelectHistoryMask;
+ if (dirHistory == historyInputInfo->dirHistoryMatch && abStartSelectHistory == historyInputInfo->abStartSelectHistoryMatch && HasPlayerInputTakenLongerThanList(historyInputInfo->dirTimerHistoryList, historyInputInfo->abStartSelectHistoryList))
+ return historyInputInfo->direction;
}
return 0;
}
-static void sub_80E5C7C(u8 a)
+static void Bike_UpdateDirTimerHistory(u8 dir)
{
u8 i;
- gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF);
+ gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF);
for (i = 7; i != 0; i--)
- gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1];
- gPlayerAvatar.unk14[0] = 1;
+ gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1];
+ gPlayerAvatar.dirTimerHistory[0] = 1;
}
-static void sub_80E5CB8(u8 a)
+static void Bike_UpdateABStartSelectHistory(u8 input)
{
u8 i;
- gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF);
+ gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF);
for (i = 7; i != 0; i--)
- gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1];
- gPlayerAvatar.unk1C[0] = 1;
+ gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1];
+ gPlayerAvatar.abStartSelectTimerHistory[0] = 1;
}
-static u8 sub_80E5CF4(u16 a)
+static u8 Bike_DPadToDirection(u16 heldKeys)
{
- if (a & 0x40)
- return 2;
- if (a & 0x80)
- return 1;
- if (a & 0x20)
- return 3;
- if (a & 0x10)
- return 4;
- return 0;
+ if (heldKeys & DPAD_UP)
+ return DIR_NORTH;
+ if (heldKeys & DPAD_DOWN)
+ return DIR_SOUTH;
+ if (heldKeys & DPAD_LEFT)
+ return DIR_WEST;
+ if (heldKeys & DPAD_RIGHT)
+ return DIR_EAST;
+ return DIR_NONE;
}
static u8 get_some_collision(u8 direction)
@@ -829,10 +869,10 @@ static u8 get_some_collision(u8 direction)
y = playerMapObj->coords2.y;
MoveCoords(direction, &x, &y);
metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y);
- return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior);
+ return Bike_CheckCollisionTryAdvanceCollisionCount(playerMapObj, x, y, direction, metatitleBehavior);
}
-static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior)
+static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior)
{
u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior);
@@ -843,7 +883,7 @@ static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u
collision = 2;
if (collision)
- sub_80E5E4C();
+ Bike_TryAdvanceCyclingRoadCollisions();
return collision;
}
@@ -865,10 +905,10 @@ static bool8 IsRunningDisallowedByMetatile(u8 tile)
return FALSE;
}
-static void sub_80E5E4C(void)
+static void Bike_TryAdvanceCyclingRoadCollisions(void)
{
- if (gUnknown_02039250 != 0 && gUnknown_02039251 < 100)
- gUnknown_02039251++;
+ if (gBikeCyclingChallenge != FALSE && gBikeCollisions < 100)
+ gBikeCollisions++;
}
static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile)
@@ -890,14 +930,14 @@ static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile)
return TRUE;
}
-static bool8 sub_80E5EC0(u8 var1, u8 direction)
+static bool8 WillPlayerCollideWithCollision(u8 newTileCollision, u8 direction)
{
if (direction == DIR_NORTH || direction == DIR_SOUTH)
{
- if (var1 == 10 || var1 == 12)
+ if (newTileCollision == 10 || newTileCollision == 12)
return FALSE;
}
- else if (var1 == 11 || var1 == 13)
+ else if (newTileCollision == 11 || newTileCollision == 13)
{
return FALSE;
}
@@ -930,7 +970,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void)
void GetOnOffBike(u8 var)
{
- gUnknown_0202E854 = 0;
+ gUnusedBikeCameraAheadPanback = FALSE;
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
@@ -946,34 +986,34 @@ void GetOnOffBike(u8 var)
}
}
-void BikeClearState(int var1, int var2)
+void BikeClearState(int newDirHistory, int newAbStartHistory)
{
u8 i;
gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
- gPlayerAvatar.unk9 = 0;
+ gPlayerAvatar.newDirBackup = DIR_NONE;
gPlayerAvatar.bikeFrameCounter = 0;
- gPlayerAvatar.unkB = 0;
- gPlayerAvatar.unkC = var1;
- gPlayerAvatar.unk10 = var2;
+ gPlayerAvatar.bikeSpeed = SPEED_STANDING;
+ gPlayerAvatar.directionHistory = newDirHistory;
+ gPlayerAvatar.abStartSelectHistory = newAbStartHistory;
for (i = 0; i < 8; i++)
- gPlayerAvatar.unk14[i] = 0;
+ gPlayerAvatar.dirTimerHistory[i] = 0;
for (i = 0; i < 8; i++)
- gPlayerAvatar.unk1C[i] = 0;
+ gPlayerAvatar.abStartSelectTimerHistory[i] = 0;
}
-void sub_80E6010(u8 var)
+void Bike_UpdateBikeCounterSpeed(u8 counter)
{
- gPlayerAvatar.bikeFrameCounter = var;
- gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5.
+ gPlayerAvatar.bikeFrameCounter = counter;
+ gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5.
}
-static void sub_80E6024(void)
+static void Bike_SetBikeStill(void)
{
gPlayerAvatar.bikeFrameCounter = 0;
- gPlayerAvatar.unkB = 0;
+ gPlayerAvatar.bikeSpeed = SPEED_STANDING;
}
s16 GetPlayerSpeed(void)
@@ -993,7 +1033,7 @@ s16 GetPlayerSpeed(void)
return SPEED_NORMAL;
}
-void sub_80E6084(void)
+void Bike_HandleBumpySlopeJump(void)
{
s16 x, y;
u8 tileBehavior;
diff --git a/src/field/birch_pc.c b/src/field/birch_pc.c
index 9872dd54d..4b0025504 100644
--- a/src/field/birch_pc.c
+++ b/src/field/birch_pc.c
@@ -2,7 +2,7 @@
#include "event_data.h"
#include "field_message_box.h"
#include "pokedex.h"
-#include "species.h"
+#include "constants/species.h"
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c
index b11b1ff3a..0d304714d 100644
--- a/src/field/braille_puzzles.c
+++ b/src/field/braille_puzzles.c
@@ -4,16 +4,16 @@
#include "field_camera.h"
#include "field_effect.h"
#include "fieldmap.h"
-#include "flags.h"
+#include "constants/flags.h"
#include "main.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "map_obj_lock.h"
#include "menu.h"
#include "rom6.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
-#include "species.h"
+#include "constants/species.h"
#include "task.h"
#include "text.h"
@@ -24,9 +24,9 @@ extern u8 S_OpenRegiceChamber[]; // regiice event script
bool8 ShouldDoBrailleDigEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_DIG)
- && (gSaveBlock1.location.mapGroup == MAP_GROUP_SEALED_CHAMBER_OUTER_ROOM
- && gSaveBlock1.location.mapNum == MAP_ID_SEALED_CHAMBER_OUTER_ROOM))
+ if (!FlagGet(FLAG_SYS_BRAILLE_DIG)
+ && (gSaveBlock1.location.mapGroup == MAP_GROUP(SEALED_CHAMBER_OUTER_ROOM)
+ && gSaveBlock1.location.mapNum == MAP_NUM(SEALED_CHAMBER_OUTER_ROOM)))
{
if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3)
return TRUE;
@@ -49,7 +49,7 @@ void DoBrailleDigEffect(void)
MapGridSetMetatileIdAt(18, 9, 3636);
DrawWholeMapView();
PlaySE(SE_BAN);
- FlagSet(SYS_BRAILLE_DIG);
+ FlagSet(FLAG_SYS_BRAILLE_DIG);
ScriptContext2_Disable();
}
@@ -68,7 +68,7 @@ bool8 CheckRelicanthWailord(void)
bool8 ShouldDoBrailleStrengthEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS))
+ if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(DESERT_RUINS)))
{
if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23)
return TRUE;
@@ -92,13 +92,13 @@ void DoBrailleStrengthEffect(void)
MapGridSetMetatileIdAt(16, 27, 3636);
DrawWholeMapView();
PlaySE(SE_BAN);
- FlagSet(SYS_BRAILLE_STRENGTH);
+ FlagSet(FLAG_SYS_BRAILLE_STRENGTH);
ScriptContext2_Disable();
}
bool8 ShouldDoBrailleFlyEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB))
+ if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(ANCIENT_TOMB)))
{
if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25)
return TRUE;
@@ -138,13 +138,13 @@ void UseFlyAncientTomb_Finish(void)
MapGridSetMetatileIdAt(16, 27, 3636);
DrawWholeMapView();
PlaySE(SE_BAN);
- FlagSet(SYS_BRAILLE_FLY);
+ FlagSet(FLAG_SYS_BRAILLE_FLY);
ScriptContext2_Disable();
}
void DoBrailleWait(void)
{
- if (!FlagGet(SYS_BRAILLE_WAIT))
+ if (!FlagGet(FLAG_SYS_BRAILLE_WAIT))
CreateTask(Task_BrailleWait, 0x50);
}
diff --git a/src/field/choose_party.c b/src/field/choose_party.c
index f35dcdf56..d278eda4a 100644
--- a/src/field/choose_party.c
+++ b/src/field/choose_party.c
@@ -11,12 +11,13 @@
#include "pokemon_summary_screen.h"
#include "overworld.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "strings.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
+#include "ewram.h"
extern u8 gPlayerPartyCount;
extern u8 gLastFieldPokeMenuOpened;
@@ -24,17 +25,16 @@ extern u8 gUnknown_020384F0;
extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
extern u8 gUnknown_0202E8F6;
extern struct Pokemon gUnknown_030042FC[];
-extern const u16 gBattleTowerBanlist[];
+extern const u16 gBattleTowerBannedSpecies[];
EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
extern u8 sub_806BD58(u8, u8);
extern void PartyMenuPrintMonsLevelOrStatus(void);
extern void sub_806BC3C(u8, u8);
-extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int);
extern u8 GetMonStatusAndPokerus();
extern void PartyMenuPrintHP();
-extern bool8 sub_80F9344(void);
+extern bool8 sub_80F9344(void);
static void ClearPartySelection(void);
static bool8 IsMonAllowedInBattleTower(struct Pokemon *);
@@ -176,15 +176,15 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
return TRUE;
}
- if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0
+ if ((gSaveBlock2.battleTower.battleTowerLevelType) == 0
&& GetMonData(pkmn, MON_DATA_LEVEL) > 50)
return FALSE;
// Check if the pkmn is in the ban list
species = GetMonData(pkmn, MON_DATA_SPECIES);
- while (gBattleTowerBanlist[i] != 0xFFFF)
+ while (gBattleTowerBannedSpecies[i] != 0xFFFF)
{
- if (gBattleTowerBanlist[i] == species)
+ if (gBattleTowerBannedSpecies[i] == species)
return FALSE;
i++;
}
@@ -429,11 +429,11 @@ static void sub_81225D4(u8 taskId)
{
if (!gPaletteFade.active)
{
- u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0;
+ u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data[0];
DestroyTask(taskId);
ewram1B000.unk262 = 1;
- ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0);
+ ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, PSS_MODE_NORMAL);
}
}
@@ -879,11 +879,11 @@ static void sub_8123034(u8 taskId)
{
if (!gPaletteFade.active)
{
- u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0;
+ u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data[0];
DestroyTask(taskId);
ewram1B000.unk262 = 1;
- ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0);
+ ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, PSS_MODE_NORMAL);
}
}
diff --git a/src/field/daycare.c b/src/field/daycare.c
index 60cc61e40..c28bc65ca 100644
--- a/src/field/daycare.c
+++ b/src/field/daycare.c
@@ -1,46 +1,50 @@
#include "global.h"
#include "daycare.h"
-#include "pokemon.h"
#include "event_data.h"
-#include "species.h"
-#include "items.h"
-#include "text.h"
-#include "string_util.h"
-#include "mail_data.h"
-#include "name_string_util.h"
-#include "pokemon_storage_system.h"
-#include "rng.h"
-#include "moves.h"
-#include "trade.h"
-#include "strings2.h"
-#include "data/pokemon/egg_moves.h"
-#include "party_menu.h"
#include "field_effect.h"
+#include "constants/items.h"
+#include "mail_data.h"
#include "main.h"
#include "menu.h"
-#include "sound.h"
-#include "songs.h"
-#include "script.h"
+#include "constants/moves.h"
+#include "name_string_util.h"
#include "overworld.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "pokemon_storage_system.h"
+#include "random.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "constants/species.h"
+#include "string_util.h"
+#include "strings2.h"
+#include "text.h"
+#include "trade.h"
+
+// RAM buffers used to assist with BuildEggMoveset()
+IWRAM_DATA u16 gHatchedEggLevelUpMoves[52];
+IWRAM_DATA u16 gHatchedEggFatherMoves[4];
+IWRAM_DATA u16 gHatchedEggFinalMoves[4];
+IWRAM_DATA u16 gHatchedEggEggMoves[12];
+IWRAM_DATA u16 gHatchedEggMotherMoves[4];
-IWRAM_DATA u16 gUnknown_03000470[52];
-IWRAM_DATA u16 gUnknown_030004D8[4];
-IWRAM_DATA u16 gUnknown_030004E0[4];
-IWRAM_DATA u16 gUnknown_030004E8[12];
-IWRAM_DATA u16 gUnknown_03000500[4];
+extern u16 gMoveToLearn;
+
+static void ClearDaycareMail(struct DayCareMail *);
+static void SetInitialEggData(struct Pokemon *, u16, struct DayCare *);
+static u8 GetDaycareCompatibilityScore(struct DayCare *);
-static void sub_80417F4(struct DayCareMail *);
-static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *);
-static u8 daycare_relationship_score(struct DayCareData *);
+#include "../data/pokemon/egg_moves.h"
-const u8 *const gUnknown_08209AC4[] = {
+static const u8 *const sCompatibilityMessages[] = {
DaycareText_GetAlongVeryWell,
DaycareText_GetAlong,
DaycareText_DontLikeOther,
DaycareText_PlayOther
};
-const u8 gUnknown_08209AD4[] = _("タマゴ");
+const u8 sJapaneseEggNickname[] = _("タマゴ");
u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
{
@@ -58,251 +62,284 @@ u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 Daycare_CountPokemon(struct DayCareData *daycare_data)
+u8 CountPokemonInDaycare(struct DayCare *daycare)
{
u8 i, count;
count = 0;
- for(i = 0;i <= 1;i++)
- if(GetBoxMonData(&daycare_data->mons[i], MON_DATA_SPECIES) != 0)
+ for (i = 0; i < 2; i++)
+ {
+ if (GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES) != 0)
count++;
+ }
return count;
}
-void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixingDayCareMail * daycareMailEtc)
+void InitDaycareMailRecordMixing(struct BoxPokemon * daycareMons, struct RecordMixingDayCareMail * daycareMail)
{
u8 i;
- u8 specCount;
- specCount = 0;
- for (i=0; i<2; i++)
+ u8 numDaycareMons = 0;
+
+ for (i = 0; i < 2; i++)
{
- if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE)
+ if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) != SPECIES_NONE)
{
- specCount ++;
- if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
+ numDaycareMons++;
+ if (GetBoxMonData(&daycareMons[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
{
- daycareMailEtc->unk74[i] = 0;
- } else
+ daycareMail->itemsHeld[i] = 0;
+ }
+ else
{
- daycareMailEtc->unk74[i] = 1;
+ daycareMail->itemsHeld[i] = 1;
}
- } else
+ }
+ else
{
- daycareMailEtc->unk74[i] = 1;
+ daycareMail->itemsHeld[i] = 1;
}
}
- daycareMailEtc->unk70 = specCount;
+
+ daycareMail->numDaycareMons = numDaycareMons;
}
-static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
+static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycareMons)
{
u8 i;
- for(i = 0;i <= 1;i++)
- if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0)
+ for (i = 0; i < 2; i++)
+ {
+ if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) == 0)
return i;
+ }
return -1;
}
-static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data)
+static void StorePokemonInDaycare(struct Pokemon * mon, struct DayCare * daycare)
{
- s8 empty_slot;
+ s8 emptySlot;
u8 mail;
u8 *names;
- empty_slot = Daycare_FindEmptySpot(daycare_data->mons);
- if(MonHasMail(mon)) {
- StringCopy((names = daycare_data->misc.mail[empty_slot].names), gSaveBlock2.playerName);
+ emptySlot = Daycare_FindEmptySpot(daycare->mons);
+ if (MonHasMail(mon))
+ {
+ StringCopy((names = daycare->misc.mail[emptySlot].names), gSaveBlock2.playerName);
PadNameString(names, 0xFC);
names += 8;
GetMonNick(mon, names);
mail = GetMonData(mon, MON_DATA_MAIL);
- daycare_data->misc.mail[empty_slot].message = gSaveBlock1.mail[mail];
+ daycare->misc.mail[emptySlot].message = gSaveBlock1.mail[mail];
TakeMailFromMon(mon);
}
- daycare_data->mons[empty_slot] = mon->box;
- BoxMonRestorePP(&daycare_data->mons[empty_slot]);
- daycare_data->misc.countersEtc.steps[empty_slot] = 0;
+
+ daycare->mons[emptySlot] = mon->box;
+ BoxMonRestorePP(&daycare->mons[emptySlot]);
+ daycare->misc.countersEtc.steps[emptySlot] = 0;
ZeroMonData(mon);
party_compaction();
CalculatePlayerPartyCount();
}
-void Daycare_SendPokemon_Special()
+void StoreSelectedPokemonInDaycare(void)
{
- Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData);
+ StorePokemonInDaycare(&gPlayerParty[gLastFieldPokeMenuOpened], &gSaveBlock1.daycare);
}
-static void sub_80414C0(struct DayCareData * daycare_data)
+// Shifts the second daycare pokemon slot into the first slot.
+static void ShiftDaycareSlots(struct DayCare * daycare)
{
- if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0)
+ // This condition is only satisfied when the player takes out the first pokemon from the daycare.
+ if (GetBoxMonData(&daycare->mons[1], MON_DATA_SPECIES) != 0 && GetBoxMonData(&daycare->mons[0], MON_DATA_SPECIES) == 0)
{
- daycare_data->mons[0] = daycare_data->mons[1];
- ZeroBoxMonData(&daycare_data->mons[1]);
- daycare_data->misc.mail[0] = daycare_data->misc.mail[1];
- daycare_data->misc.countersEtc.steps[0] = daycare_data->misc.countersEtc.steps[1];
- daycare_data->misc.countersEtc.steps[1] = 0;
- sub_80417F4(&daycare_data->misc.mail[1]);
+ daycare->mons[0] = daycare->mons[1];
+ ZeroBoxMonData(&daycare->mons[1]);
+
+ daycare->misc.mail[0] = daycare->misc.mail[1];
+ daycare->misc.countersEtc.steps[0] = daycare->misc.countersEtc.steps[1];
+ daycare->misc.countersEtc.steps[1] = 0;
+ ClearDaycareMail(&daycare->misc.mail[1]);
}
}
-u8 TryIncrementMonLevel(struct Pokemon *);
-extern u16 gMoveToLearn;
-
-static void DayCare_LevelUpMoves(struct Pokemon * mon)
+static void ApplyDaycareExperience(struct Pokemon * mon)
{
s32 i;
- u8 r6;
- u16 temp;
+ bool8 firstMove;
+ u16 learnedMove;
for (i = 0; i < MAX_LEVEL; i++)
{
+ // Add the mon's gained daycare experience level by level until it can't level up anymore.
if (TryIncrementMonLevel(mon))
{
- r6 = 1;
- while ((temp = MonTryLearningNewMove(mon, r6)) != 0)
+ // Teach the mon new moves it learned while in the daycare.
+ firstMove = TRUE;
+ while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0)
{
- r6 = 0;
- if (temp == 0xffff)
+ firstMove = FALSE;
+ if (learnedMove == 0xffff)
+ {
+ // Mon already knows 4 moves.
DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
+ }
}
}
else
+ {
break;
+ }
}
+ // Re-calculate the mons stats at its new level.
CalculateMonStats(mon);
}
-static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot)
+static u16 TakeSelectedPokemonFromDaycare(struct DayCare * daycare, u8 slot)
{
u16 species;
u32 experience;
struct Pokemon pokemon;
- GetBoxMonNick(&daycare_data->mons[slot], gStringVar1);
- species = GetBoxMonData(&daycare_data->mons[slot], MON_DATA_SPECIES);
- sub_803B4B4(&daycare_data->mons[slot], &pokemon);
+ GetBoxMonNick(&daycare->mons[slot], gStringVar1);
+ species = GetBoxMonData(&daycare->mons[slot], MON_DATA_SPECIES);
+ sub_803B4B4(&daycare->mons[slot], &pokemon);
+
if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL)
{
- experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot];
- SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience);
- DayCare_LevelUpMoves(&pokemon);
+ experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare->misc.countersEtc.steps[slot];
+ SetMonData(&pokemon, MON_DATA_EXP, &experience);
+ ApplyDaycareExperience(&pokemon);
}
+
gPlayerParty[PARTY_SIZE - 1] = pokemon;
- if (daycare_data->misc.mail[slot].message.itemId)
+ if (daycare->misc.mail[slot].message.itemId)
{
- GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->misc.mail[slot].message);
- sub_80417F4(&daycare_data->misc.mail[slot]);
+ GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare->misc.mail[slot].message);
+ ClearDaycareMail(&daycare->misc.mail[slot]);
}
+
party_compaction();
- ZeroBoxMonData(&daycare_data->mons[slot]);
- daycare_data->misc.countersEtc.steps[slot] = 0;
- sub_80414C0(daycare_data);
+ ZeroBoxMonData(&daycare->mons[slot]);
+ daycare->misc.countersEtc.steps[slot] = 0;
+ ShiftDaycareSlots(daycare);
CalculatePlayerPartyCount();
return species;
}
-u16 sub_8041648()
+u16 TakePokemonFromDaycare(void)
{
- return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ return TakeSelectedPokemonFromDaycare(&gSaveBlock1.daycare, gSpecialVar_0x8004);
}
-u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
- struct BoxPokemon temp = *mon;
- u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps;
- SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
- return GetLevelFromBoxMonExp(&temp);
+static u8 GetLevelAfterDaycareSteps(struct BoxPokemon * mon, u32 steps)
+{
+ struct BoxPokemon tempMon = *mon;
+
+ u32 experience = GetBoxMonData(mon, MON_DATA_EXP) + steps;
+ SetBoxMonData(&tempMon, MON_DATA_EXP, &experience);
+ return GetLevelFromBoxMonExp(&tempMon);
}
-static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot)
+static u8 GetNumLevelsGainedFromSteps(struct DayCare *daycare, u8 slot)
{
u8 levelBefore;
u8 levelAfter;
- levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]);
- levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->misc.countersEtc.steps[slot]);
+ levelBefore = GetLevelFromBoxMonExp(&daycare->mons[slot]);
+ levelAfter = GetLevelAfterDaycareSteps(&daycare->mons[slot], daycare->misc.countersEtc.steps[slot]);
return levelAfter - levelBefore;
}
-static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot)
+static u8 GetNumLevelsGainedForDaycareSlot(struct DayCare *daycare, u8 slot)
{
- u8 levelDelta = sub_80416A0(dayCareData, slot);
- GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2);
- return levelDelta;
+ u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycare, slot);
+ GetBoxMonNick(&daycare->mons[slot], gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2);
+ return numLevelsGained;
}
-static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot)
+static u16 GetDaycareCostForSelectedMon(struct DayCare *daycare, u8 slot)
{
u16 cost;
- u8 levelDelta = sub_80416A0(dayCareData, slot);
- GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
- cost = 100 + 100 * levelDelta;
+ u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycare, slot);
+ GetBoxMonNick(&daycare->mons[slot], gStringVar1);
+ cost = 100 + 100 * numLevelsGained;
ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
return cost;
}
-void sub_8041770(void)
+void GetDaycareCost(void)
{
- gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ gSpecialVar_0x8005 = GetDaycareCostForSelectedMon(&gSaveBlock1.daycare, gSpecialVar_0x8004);
}
-void sub_8041790(u16 i)
+void Debug_AddDaycareSteps(u16 numSteps)
{
- gSaveBlock1.daycareData.misc.countersEtc.steps[0] += i;
- gSaveBlock1.daycareData.misc.countersEtc.steps[1] += i;
+ gSaveBlock1.daycare.misc.countersEtc.steps[0] += numSteps;
+ gSaveBlock1.daycare.misc.countersEtc.steps[1] += numSteps;
}
-u8 sub_80417B8(void)
+u8 GetNumLevelsGainedFromDaycare(void)
{
- if (GetBoxMonData(&gSaveBlock1.daycareData.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0)
- return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ if (GetBoxMonData(&gSaveBlock1.daycare.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0)
+ return GetNumLevelsGainedForDaycareSlot(&gSaveBlock1.daycare, gSpecialVar_0x8004);
+
return 0;
}
-static void sub_80417F4(struct DayCareMail *mail)
+static void ClearDaycareMail(struct DayCareMail *mail)
{
- u8 zero;
u8 *names;
u8 *names2;
- int i;
- zero = 0;
- for (i = 7, names = mail->names + 7; i >= 0; i --)
+ s32 i;
+ u8 zero = 0;
+
+ for (i = 7, names = &mail->names[7]; i >= 0; i--)
+ {
*names-- = zero;
- names2 = mail->names + 8;
+ }
+
+ names2 = &mail->names[8];
zero = 0;
- names = mail->names + 18;
- do *names-- = zero; while ((int)names >= (int)names2);
+ names = &mail->names[18];
+ do *names-- = zero; while ((s32)names >= (s32)names2);
ClearMailStruct(&mail->message);
}
-void unref_sub_8041824(struct DayCareData *dayCareData)
+void unref_sub_8041824(struct DayCare *daycare)
{
u8 slot;
- for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++)
+ for (slot = 0; slot < ARRAY_COUNT(daycare->mons); slot++)
{
- ZeroBoxMonData(&dayCareData->mons[slot]);
- dayCareData->misc.countersEtc.steps[slot] = 0;
- sub_80417F4(&dayCareData->misc.mail[slot]);
+ ZeroBoxMonData(&daycare->mons[slot]);
+ daycare->misc.countersEtc.steps[slot] = 0;
+ ClearDaycareMail(&daycare->misc.mail[slot]);
}
- dayCareData->misc.countersEtc.personalityLo = 0;
- dayCareData->misc.countersEtc.unk_11a = 0;
+
+ daycare->misc.countersEtc.pendingEggPersonality = 0;
+ daycare->misc.countersEtc.eggCycleStepsRemaining = 0;
}
-u16 sub_8041870(u16 species)
+// Determines what the species of an Egg would be based on the given species.
+// It determines this by working backwards through the evolution chain of the
+// given species.
+u16 GetEggSpecies(u16 species)
{
int i, j, k;
bool8 found;
- for (i = 0; i < 5; i ++)
+
+ // Working backwards up to 5 times seems arbitrary, since the maximum number
+ // of times would only be 3 for 3-stage evolutions.
+ for (i = 0; i < 5; i++)
{
found = FALSE;
- for (j = 1; j < NUM_SPECIES; j ++)
+ for (j = 1; j < NUM_SPECIES; j++)
{
- for (k = 0; k < 5; k ++)
+ for (k = 0; k < 5; k++)
{
if (gEvolutionTable[j].evolutions[k].targetSpecies == species)
{
@@ -311,92 +348,118 @@ u16 sub_8041870(u16 species)
break;
}
}
+
if (found)
break;
}
- if (j == 412)
+
+ if (j == NUM_SPECIES)
break;
}
+
return species;
}
-static void sub_80418F0(struct DayCareData *dayCareData)
+static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
{
- dayCareData->misc.countersEtc.personalityLo = (Random() % 0xfffe) + 1;
- FlagSet(0x86);
+ daycare->misc.countersEtc.pendingEggPersonality = (Random() % 0xfffe) + 1;
+ FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
-static void sub_804191C(struct DayCareData *dayCareData)
+static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare)
{
- dayCareData->misc.countersEtc.personalityLo = Random() | 0x8000;
- FlagSet(0x86);
+ daycare->misc.countersEtc.pendingEggPersonality = Random() | 0x8000;
+ FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
-void sub_8041940(void)
+void TriggerPendingDaycareEgg(void)
{
- sub_80418F0(&gSaveBlock1.daycareData);
+ _TriggerPendingDaycareEgg(&gSaveBlock1.daycare);
}
-void sub_8041950(void)
+void TriggerPendingDaycareMaleEgg(void)
{
- sub_804191C(&gSaveBlock1.daycareData);
+ _TriggerPendingDaycareMaleEgg(&gSaveBlock1.daycare);
}
-static void sub_8041960(u8 *data, u8 idx)
+// Removes the selected index from the given IV list and shifts the remaining
+// elements to the left.
+static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv)
{
- int i, j;
- u8 temp[6];
- data[idx] = 0xff;
- for (i = 0; i < 6; i ++)
- temp[i] = data[i];
+ s32 i, j;
+ u8 temp[NUM_STATS];
+
+ ivs[selectedIv] = 0xff;
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ temp[i] = ivs[i];
+ }
+
j = 0;
- for (i = 0; i < 6; i ++)
+ for (i = 0; i < NUM_STATS; i++)
+ {
if (temp[i] != 0xff)
- data[j++] = temp[i];
+ ivs[j++] = temp[i];
+ }
}
-static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
+static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
{
u8 i;
u8 selectedIvs[3];
- u8 allIvs[6];
- u8 whichParent[3];
+ u8 availableIVs[NUM_STATS];
+ u8 whichParent[ARRAY_COUNT(selectedIvs)];
u8 iv;
- for (i = 0; i < 6; i ++)
- allIvs[i] = i;
- for (i = 0; i < 3; i ++)
+
+ // Initialize a list of IV indices.
+ for (i = 0; i < NUM_STATS; i++)
{
- selectedIvs[i] = allIvs[Random() % (6 - i)];
- sub_8041960(allIvs, selectedIvs[i]);
+ availableIVs[i] = i;
+ }
+
+ // Select the 3 IVs that will be inherited.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ {
+ // Randomly pick an IV from the available list.
+ selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)];
+
+ // Remove the selected IV index from the available IV indicies.
+ RemoveIVIndexFromList(availableIVs, selectedIvs[i]);
}
- for (i = 0; i < 3; i ++)
+
+ // Determine which parent each of the selected IVs should inherit from.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ {
whichParent[i] = Random() % 2;
- for (i = 0; i < 3; i ++)
+ }
+
+ // Set each of inherited IVs on the egg mon.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
{
switch (selectedIvs[i])
{
case 0:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_HP_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_HP_IV);
SetMonData(egg, MON_DATA_HP_IV, &iv);
break;
case 1:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_ATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_ATK_IV);
SetMonData(egg, MON_DATA_ATK_IV, &iv);
break;
case 2:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_DEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_DEF_IV);
SetMonData(egg, MON_DATA_DEF_IV, &iv);
break;
case 3:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV);
- SetMonData(egg, MON_DATA_SPD_IV, &iv);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPEED_IV);
+ SetMonData(egg, MON_DATA_SPEED_IV, &iv);
break;
case 4:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPATK_IV);
SetMonData(egg, MON_DATA_SPATK_IV, &iv);
break;
case 5:
- iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPDEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPDEF_IV);
SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
break;
}
@@ -406,17 +469,19 @@ static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
#ifdef NONMATCHING
static
#endif
-u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves)
+// Counts the number of egg moves a pokemon learns and stores the moves in
+// the given array.
+u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
{
u16 eggMoveIdx;
- u16 numMovesFound;
+ u16 numEggMoves;
u16 species;
u16 i;
- numMovesFound = 0;
+ numEggMoves = 0;
eggMoveIdx = 0;
species = GetMonData(pokemon, MON_DATA_SPECIES);
- for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++)
+ for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++)
{
if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
{
@@ -424,57 +489,61 @@ u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves)
break;
}
}
- for (i = 0; i < 10; i ++)
+
+ for (i = 0; i < 10; i++)
{
if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
{
+ // TODO: the curly braces around this if statement are required for a matching build.
break;
}
+
eggMoves[i] = gEggMoves[eggMoveIdx + i];
- numMovesFound++;
+ numEggMoves++;
}
- return numMovesFound;
+
+ return numEggMoves;
}
#ifdef NONMATCHING
-
-void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother)
{
u16 numSharedParentMoves;
u8 numLevelUpMoves;
- u8 numEggMoves;
+ u16 numEggMoves;
u16 i, j;
numSharedParentMoves = 0;
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < 4; i++)
{
- gUnknown_03000500[i] = 0;
- gUnknown_030004D8[i] = 0;
- gUnknown_030004E0[i] = 0;
+ gHatchedEggMotherMoves[i] = 0;
+ gHatchedEggFatherMoves[i] = 0;
+ gHatchedEggFinalMoves[i] = 0;
}
- for (i = 0; i < 10; i ++)
- gUnknown_030004E8[i] = 0;
- for (i = 0; i < 50; i ++)
- gUnknown_03000470[i] = 0;
+ for (i = 0; i < 10; i++)
+ gHatchedEggEggMoves[i] = 0;
+ for (i = 0; i < 50; i++)
+ gHatchedEggLevelUpMoves[i] = 0;
- numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gUnknown_03000470);
- for (i = 0; i < 4; i ++)
+ numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gHatchedEggLevelUpMoves);
+ for (i = 0; i < 4; i++)
{
- gUnknown_030004D8[i] = GetBoxMonData(dad, MON_DATA_MOVE1 + i);
- gUnknown_03000500[i] = GetBoxMonData(mom, MON_DATA_MOVE1 + i);
+ gHatchedEggFatherMoves[i] = GetBoxMonData(father, MON_DATA_MOVE1 + i);
+ gHatchedEggMotherMoves[i] = GetBoxMonData(mother, MON_DATA_MOVE1 + i);
}
- numEggMoves = pokemon_get_eggmoves(egg, gUnknown_030004E8);
- for (i = 0; i < 4; i ++)
+ numEggMoves = GetEggMoves(egg, gHatchedEggEggMoves);
+
+ for (i = 0; i < 4; i++)
{
- if (gUnknown_030004D8[i] != MOVE_NONE)
+ if (gHatchedEggFatherMoves[i] != MOVE_NONE)
{
- for (j = 0; j < numEggMoves; j ++)
+ for (j = 0; j < (u32)numEggMoves; j++)
{
- if (gUnknown_030004D8[i] == gUnknown_030004E8[j])
+ if (gHatchedEggFatherMoves[i] == gHatchedEggEggMoves[j])
{
- if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
- DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ if (GiveMoveToMon(egg, gHatchedEggFatherMoves[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFatherMoves[i]);
break;
}
}
@@ -482,40 +551,41 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
else
break;
}
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < 4; i++)
{
- if (gUnknown_030004D8[i] != MOVE_NONE)
+ if (gHatchedEggFatherMoves[i] != MOVE_NONE)
{
- for (j = 0; j < 50 + 8; j ++)
+ for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++)
{
- if (gUnknown_030004D8[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j))
+ if (gHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j))
{
- if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
- DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ if (GiveMoveToMon(egg, gHatchedEggFatherMoves[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFatherMoves[i]);
}
}
}
}
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < 4; i++)
{
- if (gUnknown_030004D8[i] == MOVE_NONE)
+ if (gHatchedEggFatherMoves[i] == MOVE_NONE)
break;
- for (j = 0; j < 4; j ++)
+ for (j = 0; j < 4; j++)
{
- if (gUnknown_030004D8[i] == gUnknown_03000500[j] && gUnknown_030004D8[i] != MOVE_NONE)
- gUnknown_030004E0[numSharedParentMoves++] = gUnknown_030004D8[i];
+ if (gHatchedEggFatherMoves[i] == gHatchedEggMotherMoves[j] && gHatchedEggFatherMoves[i] != MOVE_NONE)
+ gHatchedEggFinalMoves[numSharedParentMoves++] = gHatchedEggFatherMoves[i];
}
}
- for (i = 0; i < 4; i ++)
+
+ for (i = 0; i < 4; i++)
{
- if (gUnknown_030004E0[i] == MOVE_NONE)
+ if (gHatchedEggFinalMoves[i] == MOVE_NONE)
break;
- for (j = 0; j < numLevelUpMoves; j ++)
+ for (j = 0; j < numLevelUpMoves; j++)
{
- if (gUnknown_03000470[j] != MOVE_NONE && gUnknown_030004E0[i] == gUnknown_03000470[j])
+ if (gHatchedEggLevelUpMoves[j] != MOVE_NONE && gHatchedEggFinalMoves[i] == gHatchedEggLevelUpMoves[j])
{
- if (GiveMoveToMon(egg, gUnknown_030004E0[i]) == 0xffff)
- DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004E0[i]);
+ if (GiveMoveToMon(egg, gHatchedEggFinalMoves[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFinalMoves[i]);
break;
}
}
@@ -523,7 +593,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
}
#else
__attribute__((naked))
-void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
@@ -537,10 +607,10 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tmovs r0, 0\n"
"\tstr r0, [sp]\n"
"\tmovs r6, 0\n"
- "\tldr r5, _08041CC8 @ =gUnknown_03000500\n"
+ "\tldr r5, _08041CC8 @ =gHatchedEggMotherMoves\n"
"\tmovs r2, 0\n"
- "\tldr r4, _08041CCC @ =gUnknown_030004D8\n"
- "\tldr r3, _08041CD0 @ =gUnknown_030004E0\n"
+ "\tldr r4, _08041CCC @ =gHatchedEggFatherMoves\n"
+ "\tldr r3, _08041CD0 @ =gHatchedEggFinalMoves\n"
"_08041BE4:\n"
"\tlsls r1, r6, 1\n"
"\tadds r0, r1, r5\n"
@@ -555,7 +625,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tcmp r6, 0x3\n"
"\tbls _08041BE4\n"
"\tmovs r6, 0\n"
- "\tldr r2, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tldr r2, _08041CD4 @ =gHatchedEggEggMoves\n"
"\tmovs r1, 0\n"
"_08041C02:\n"
"\tlsls r0, r6, 1\n"
@@ -567,7 +637,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tcmp r6, 0x9\n"
"\tbls _08041C02\n"
"\tmovs r6, 0\n"
- "\tldr r2, _08041CD8 @ =gUnknown_03000470\n"
+ "\tldr r2, _08041CD8 @ =gHatchedEggLevelUpMoves\n"
"\tmovs r1, 0\n"
"_08041C18:\n"
"\tlsls r0, r6, 1\n"
@@ -583,13 +653,13 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tbl GetMonData\n"
"\tlsls r0, 16\n"
"\tlsrs r0, 16\n"
- "\tldr r1, _08041CD8 @ =gUnknown_03000470\n"
+ "\tldr r1, _08041CD8 @ =gHatchedEggLevelUpMoves\n"
"\tbl GetLevelUpMovesBySpecies\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tstr r0, [sp, 0x4]\n"
"\tmovs r6, 0\n"
- "\tldr r1, _08041CCC @ =gUnknown_030004D8\n"
+ "\tldr r1, _08041CCC @ =gHatchedEggFatherMoves\n"
"\tmov r8, r1\n"
"_08041C46:\n"
"\tadds r5, r6, 0\n"
@@ -604,7 +674,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tmov r0, r9\n"
"\tadds r1, r5, 0\n"
"\tbl GetBoxMonData\n"
- "\tldr r1, _08041CC8 @ =gUnknown_03000500\n"
+ "\tldr r1, _08041CC8 @ =gHatchedEggMotherMoves\n"
"\tadds r4, r1\n"
"\tstrh r0, [r4]\n"
"\tadds r0, r6, 0x1\n"
@@ -612,15 +682,15 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tlsrs r6, r0, 16\n"
"\tcmp r6, 0x3\n"
"\tbls _08041C46\n"
- "\tldr r1, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tldr r1, _08041CD4 @ =gHatchedEggEggMoves\n"
"\tadds r0, r7, 0\n"
- "\tbl pokemon_get_eggmoves\n"
+ "\tbl GetEggMoves\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tmov r8, r0\n"
"\tmovs r6, 0\n"
"_08041C82:\n"
- "\tldr r0, _08041CCC @ =gUnknown_030004D8\n"
+ "\tldr r0, _08041CCC @ =gHatchedEggFatherMoves\n"
"\tlsls r1, r6, 1\n"
"\tadds r2, r1, r0\n"
"\tldrh r1, [r2]\n"
@@ -633,7 +703,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tadds r4, r2, 0\n"
"\tldr r2, _08041CDC @ =0x0000ffff\n"
"_08041C9A:\n"
- "\tldr r0, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tldr r0, _08041CD4 @ =gHatchedEggEggMoves\n"
"\tlsls r1, r5, 1\n"
"\tadds r1, r0\n"
"\tldrh r0, [r4]\n"
@@ -654,11 +724,11 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tbl DeleteFirstMoveAndGiveMoveToMon\n"
"\tb _08041CEA\n"
"\t.align 2, 0\n"
- "_08041CC8: .4byte gUnknown_03000500\n"
- "_08041CCC: .4byte gUnknown_030004D8\n"
- "_08041CD0: .4byte gUnknown_030004E0\n"
- "_08041CD4: .4byte gUnknown_030004E8\n"
- "_08041CD8: .4byte gUnknown_03000470\n"
+ "_08041CC8: .4byte gHatchedEggMotherMoves\n"
+ "_08041CCC: .4byte gHatchedEggFatherMoves\n"
+ "_08041CD0: .4byte gHatchedEggFinalMoves\n"
+ "_08041CD4: .4byte gHatchedEggEggMoves\n"
+ "_08041CD8: .4byte gHatchedEggLevelUpMoves\n"
"_08041CDC: .4byte 0x0000ffff\n"
"_08041CE0:\n"
"\tadds r0, r5, 0x1\n"
@@ -670,7 +740,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tadds r0, r6, 0x1\n"
"\tlsls r0, 16\n"
"\tlsrs r6, r0, 16\n"
- "\tldr r3, _08041E14 @ =gUnknown_030004D8\n"
+ "\tldr r3, _08041E14 @ =gHatchedEggFatherMoves\n"
"\tmov r9, r3\n"
"\tcmp r6, 0x3\n"
"\tbls _08041C82\n"
@@ -687,7 +757,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tcmp r1, 0\n"
"\tbeq _08041D5C\n"
"\tmovs r5, 0\n"
- "\tldr r0, _08041E14 @ =gUnknown_030004D8\n"
+ "\tldr r0, _08041E14 @ =gHatchedEggFatherMoves\n"
"\tadds r4, r2, r0\n"
"\tldr r6, _08041E18 @ =0x0000ffff\n"
"\tmov r9, r0\n"
@@ -733,12 +803,12 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tmovs r6, 0\n"
"\tmov r2, r9\n"
"\tldrh r0, [r2]\n"
- "\tldr r3, _08041E20 @ =gUnknown_030004E0\n"
+ "\tldr r3, _08041E20 @ =gHatchedEggFinalMoves\n"
"\tmov r10, r3\n"
"\tcmp r0, 0\n"
"\tbeq _08041DC6\n"
"\tmov r4, r9\n"
- "\tldr r0, _08041E24 @ =gUnknown_03000500\n"
+ "\tldr r0, _08041E24 @ =gHatchedEggMotherMoves\n"
"\tmov r9, r0\n"
"\tmov r12, r10\n"
"_08041D7C:\n"
@@ -796,7 +866,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tbcs _08041E38\n"
"\tldr r2, _08041E18 @ =0x0000ffff\n"
"_08041DDE:\n"
- "\tldr r1, _08041E28 @ =gUnknown_03000470\n"
+ "\tldr r1, _08041E28 @ =gHatchedEggLevelUpMoves\n"
"\tlsls r0, r5, 1\n"
"\tadds r0, r1\n"
"\tldrh r1, [r0]\n"
@@ -822,12 +892,12 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tbl DeleteFirstMoveAndGiveMoveToMon\n"
"\tb _08041E38\n"
"\t.align 2, 0\n"
- "_08041E14: .4byte gUnknown_030004D8\n"
+ "_08041E14: .4byte gHatchedEggFatherMoves\n"
"_08041E18: .4byte 0x0000ffff\n"
"_08041E1C: .4byte 0x00000121\n"
- "_08041E20: .4byte gUnknown_030004E0\n"
- "_08041E24: .4byte gUnknown_03000500\n"
- "_08041E28: .4byte gUnknown_03000470\n"
+ "_08041E20: .4byte gHatchedEggFinalMoves\n"
+ "_08041E24: .4byte gHatchedEggMotherMoves\n"
+ "_08041E28: .4byte gHatchedEggLevelUpMoves\n"
"_08041E2C:\n"
"\tadds r0, r5, 0x1\n"
"\tlsls r0, 16\n"
@@ -841,7 +911,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tlsrs r6, r0, 16\n"
"\tcmp r6, 0x3\n"
"\tbhi _08041E50\n"
- "\tldr r0, _08041E60 @ =gUnknown_030004E0\n"
+ "\tldr r0, _08041E60 @ =gHatchedEggFinalMoves\n"
"\tlsls r1, r6, 1\n"
"\tadds r1, r0\n"
"\tldrh r1, [r1]\n"
@@ -858,166 +928,178 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
- "_08041E60: .4byte gUnknown_030004E0");
+ "_08041E60: .4byte gHatchedEggFinalMoves");
}
#endif
-static void RemoveEggFromDayCare(struct DayCareData *dayCareData)
+static void RemoveEggFromDayCare(struct DayCare *daycare)
{
- dayCareData->misc.countersEtc.personalityLo = 0;
- dayCareData->misc.countersEtc.unk_11a = 0;
+ daycare->misc.countersEtc.pendingEggPersonality = 0;
+ daycare->misc.countersEtc.eggCycleStepsRemaining = 0;
}
-void sub_8041E7C(void)
+void RejectEggFromDayCare(void)
{
- RemoveEggFromDayCare(&gSaveBlock1.daycareData);
+ RemoveEggFromDayCare(&gSaveBlock1.daycare);
}
-static void incense_effects(u16 *species, struct DayCareData *dayCareData)
+static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare)
{
- u16 momItem, dadItem;
+ u16 motherItem, fatherItem;
if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
{
- momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM);
- dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM);
- if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE)
+ motherItem = GetBoxMonData(&daycare->mons[0], MON_DATA_HELD_ITEM);
+ fatherItem = GetBoxMonData(&daycare->mons[1], MON_DATA_HELD_ITEM);
+ if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE)
{
*species = SPECIES_WOBBUFFET;
}
- if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE)
+
+ if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE)
{
*species = SPECIES_MARILL;
}
}
}
-static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom
+static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots)
{
u16 i;
u16 species[2];
u16 eggSpecies;
- u8 buffer;
- for (i=0; i<2; i++)
+
+ // Determine which of the daycare mons is the mother and father of the egg.
+ // The 0th index of the parentSlots array is considered the mother slot, and the
+ // 1st index is the father slot.
+ for (i = 0; i < 2; i++)
{
- species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES);
+ species[i] = GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO)
{
- a1[0] = i ^ 1;
- a1[1] = i;
+ parentSlots[0] = i ^ 1;
+ parentSlots[1] = i;
}
- else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE)
+ else if (GetBoxMonGender(&daycare->mons[i]) == MON_FEMALE)
{
- a1[0] = i;
- a1[1] = i ^ 1;
+ parentSlots[0] = i;
+ parentSlots[1] = i ^ 1;
}
}
- eggSpecies = sub_8041870(species[a1[0]]);
- if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+
+ eggSpecies = GetEggSpecies(species[parentSlots[0]]);
+ if (eggSpecies == SPECIES_NIDORAN_F && daycare->misc.countersEtc.pendingEggPersonality & 0x8000)
{
eggSpecies = SPECIES_NIDORAN_M;
}
- if (eggSpecies == SPECIES_ILLUMISE && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+ if (eggSpecies == SPECIES_ILLUMISE && daycare->misc.countersEtc.pendingEggPersonality & 0x8000)
{
eggSpecies = SPECIES_VOLBEAT;
}
- if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE)
+
+ // Make Ditto the "mother" slot if the other daycare mon is male.
+ if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]]) != MON_FEMALE)
{
- buffer = a1[1];
- a1[1] = a1[0];
- a1[0] = buffer;
+ u8 temp = parentSlots[1];
+ parentSlots[1] = parentSlots[0];
+ parentSlots[0] = temp;
}
+
return eggSpecies;
}
-static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg
+static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg
{
struct Pokemon egg;
u16 species;
- u8 parents[2];
+ u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father"
u8 isEgg;
- species = sub_8041EEC(dayCareData, parents);
- incense_effects(&species, dayCareData);
- sub_80420FC(&egg, species, dayCareData);
- InheritIVs(&egg, dayCareData);
- daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]);
+
+ species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots);
+ AlterEggSpeciesWithIncenseItem(&species, daycare);
+ SetInitialEggData(&egg, species, daycare);
+ InheritIVs(&egg, daycare);
+ BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]], &daycare->mons[parentSlots[0]]);
isEgg = TRUE;
SetMonData(&egg, MON_DATA_IS_EGG, &isEgg);
gPlayerParty[5] = egg;
party_compaction();
CalculatePlayerPartyCount();
- RemoveEggFromDayCare(dayCareData);
+ RemoveEggFromDayCare(daycare);
}
-void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg
+void CreateEgg(struct Pokemon *mon, u16 species, bool8 setMetLocation)
{
u8 metLevel;
u16 ball;
u8 language;
u8 metLocation;
u8 isEgg;
+
CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
- SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
- SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+ SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
SetMonData(mon, MON_DATA_LANGUAGE, &language);
- if (overwriteMetLocation)
+ if (setMetLocation)
{
- metLocation = 0xfd;
+ metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo
SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
}
+
isEgg = TRUE;
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
}
-static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData)
+static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare)
{
u32 personality;
u16 ball;
u8 metLevel;
u8 language;
- personality = dayCareData->misc.countersEtc.personalityLo | (Random() << 16);
+
+ personality = daycare->misc.countersEtc.pendingEggPersonality | (Random() << 16);
CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
- SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
- SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+ SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
SetMonData(mon, MON_DATA_LANGUAGE, &language);
}
-void sp0B8_daycare(void)
+void GiveEggFromDaycare(void)
{
- sub_8041FC4(&gSaveBlock1.daycareData);
+ _GiveEggFromDaycare(&gSaveBlock1.daycare);
}
#ifdef NONMATCHING
-static bool8 sub_80421B0(struct DayCareData *dayCareData)
+static bool8 _ShouldEggHatch(struct DayCare *daycare)
{
struct BoxPokemon *parent;
u32 i;
int v0;
int steps;
v0 = 0;
- for (i=0, parent=&dayCareData->mons[0]; i<2; parent++, i++)
+ for (i=0, parent=&daycare->mons[0]; i<2; parent++, i++)
{
if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0))
{
- dayCareData->misc.countersEtc.steps[i]++;
+ daycare->misc.countersEtc.steps[i]++;
v0++;
}
}
- if (dayCareData->misc.countersEtc.personalityLo == 0 && v0 == 2 && dayCareData->misc.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff))
+ if (daycare->misc.countersEtc.pendingEggPersonality == 0 && v0 == 2 && daycare->misc.extra.misc[4] == 0xff && GetDaycareCompatibilityScore(daycare) > (u32)((u32)(Random() * 100) / 0xffff))
{
- sub_8041940();
+ TriggerPendingDaycareEgg();
}
- if ((++dayCareData->misc.countersEtc.unk_11a) == 0xff)
+ if ((++daycare->misc.countersEtc.eggCycleStepsRemaining) == 0xff)
{
for (i=0; i<gPlayerPartyCount; i++)
{
@@ -1030,7 +1112,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)
return TRUE;
}
steps--;
- SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, (u8 *)&steps);
+ SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
}
}
}
@@ -1038,7 +1120,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)
}
#else
__attribute__((naked))
-static bool8 sub_80421B0(struct DayCareData *dayCareData)
+static bool8 _ShouldEggHatch(struct DayCare *daycare)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tsub sp, 0x8\n"
@@ -1082,7 +1164,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)
"\tcmp r0, 0xFF\n"
"\tbne _08042226\n"
"\tadds r0, r7, 0\n"
- "\tbl daycare_relationship_score\n"
+ "\tbl GetDaycareCompatibilityScore\n"
"\tadds r4, r0, 0\n"
"\tlsls r4, 24\n"
"\tlsrs r4, 24\n"
@@ -1095,7 +1177,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)
"\tbl __udivsi3\n"
"\tcmp r4, r0\n"
"\tbls _08042226\n"
- "\tbl sub_8041940\n"
+ "\tbl TriggerPendingDaycareEgg\n"
"_08042226:\n"
"\tmovs r0, 0x8D\n"
"\tlsls r0, 1\n"
@@ -1161,68 +1243,81 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)
}
#endif
-bool8 sub_80422A0(void)
+bool8 ShouldEggHatch(void)
{
- return sub_80421B0(&gSaveBlock1.daycareData);
+ return _ShouldEggHatch(&gSaveBlock1.daycare);
}
-static bool8 sub_80422B4(struct DayCareData *dayCareData)
+static bool8 IsEggPending(struct DayCare *daycare)
{
- return (u32)((-dayCareData->misc.countersEtc.personalityLo) | dayCareData->misc.countersEtc.personalityLo) >> 31;
+ return (u32)((-daycare->misc.countersEtc.pendingEggPersonality) | daycare->misc.countersEtc.pendingEggPersonality) >> 31;
}
-static void sub_80422C4(struct DayCareData *dayCareData)
+static void _GetDaycareMonNicknames(struct DayCare *daycare)
{
u8 language;
- if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0)
+ if (GetBoxMonData(&daycare->mons[0], MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&dayCareData->mons[0], gStringVar1);
- language = GetBoxMonData(&dayCareData->mons[0], MON_DATA_LANGUAGE);
- GetBoxMonData(&dayCareData->mons[0], MON_DATA_OT_NAME, gStringVar3);
+ GetBoxMonNick(&daycare->mons[0], gStringVar1);
+ language = GetBoxMonData(&daycare->mons[0], MON_DATA_LANGUAGE);
+ GetBoxMonData(&daycare->mons[0], MON_DATA_OT_NAME, gStringVar3);
ConvertInternationalString(gStringVar3, language);
}
- if (GetBoxMonData(&dayCareData->mons[1], MON_DATA_SPECIES) != 0)
+
+ if (GetBoxMonData(&daycare->mons[1], MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&dayCareData->mons[1], gStringVar2);
+ GetBoxMonNick(&daycare->mons[1], gStringVar2);
}
}
-u16 sub_8042328(void)
+u16 GetSelectedDaycareMonNickname(void)
{
GetBoxMonNick(&gPlayerParty[gLastFieldPokeMenuOpened].box, gStringVar1);
return GetBoxMonData(&gPlayerParty[gLastFieldPokeMenuOpened].box, MON_DATA_SPECIES);
}
-void sp0B5_daycare(void)
+void GetDaycareMonNicknames(void)
{
- sub_80422C4(&gSaveBlock1.daycareData);
+ _GetDaycareMonNicknames(&gSaveBlock1.daycare);
}
-u8 sp0B6_daycare(void)
+u8 GetDaycareState(void)
{
- u8 monCount;
- if (sub_80422B4(&gSaveBlock1.daycareData))
+ // The daycare can be in 4 possible states:
+ // 0: default state--no deposited mons, no egg
+ // 1: there is an egg waiting for the player to pick it up
+ // 2: there is a single pokemon in the daycare
+ // 3: there are two pokemon in the daycare, no egg
+
+ u8 numMons;
+ if (IsEggPending(&gSaveBlock1.daycare))
{
+ // There is an Egg waiting for the player.
return 1;
}
- monCount = Daycare_CountPokemon(&gSaveBlock1.daycareData);
- if (monCount != 0)
+
+ numMons = CountPokemonInDaycare(&gSaveBlock1.daycare);
+ if (numMons != 0)
{
- return monCount + 1;
+ return numMons + 1;
}
+
return 0;
}
#ifdef NONMATCHING
static
#endif
-bool8 sub_80423A8(u16 *a, u16 *b)
+bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
{
- int i, j;
+ // Determine if the two given egg group lists contain any of the
+ // same egg groups.
+ s32 i, j;
u16 *v0, *v1, v2;
- for (i=0, v0=a; i<2; v0++, i++)
+
+ for (i = 0, v0 = eggGroups1; i < 2; v0++, i++)
{
- for (j=0, v2=*v0, v1=b; j<2; v1++, j++)
+ for (j = 0, v2 = *v0, v1 = eggGroups2; j < 2; v1++, j++)
{
if (v2 == *v1)
{
@@ -1230,11 +1325,12 @@ bool8 sub_80423A8(u16 *a, u16 *b)
}
}
}
+
return FALSE;
}
#ifdef NONMATCHING
-static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
{
u16 species[2];
u32 otIds[2];
@@ -1247,7 +1343,8 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData)
u16 *egg1;
u16 *egg2;
struct BoxPokemon *parent;
- for (i=0, parent=&dayCareData->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++)
+
+ for (i=0, parent=&daycare->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++)
{
*spc = GetBoxMonData(parent, MON_DATA_SPECIES);
*ids++ = GetBoxMonData(parent, MON_DATA_OT_ID);
@@ -1279,7 +1376,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData)
{
return 0;
}
- if (!sub_80423A8(eggGroups[0], eggGroups[1]))
+ if (!EggGroupsOverlap(eggGroups[0], eggGroups[1]))
{
return 0;
}
@@ -1302,7 +1399,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData)
}
#else
__attribute__((naked))
-static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
@@ -1414,7 +1511,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData)
"\tbeq _08042484\n"
"\tadd r1, sp, 0x4\n"
"\tmov r0, sp\n"
- "\tbl sub_80423A8\n"
+ "\tbl EggGroupsOverlap\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbeq _08042484\n"
@@ -1453,17 +1550,17 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData)
}
#endif
-u8 daycare_relationship_score_from_savegame(void)
+u8 GetDaycareCompatibilityScoreFromSave(void)
{
- return daycare_relationship_score(&gSaveBlock1.daycareData);
+ return GetDaycareCompatibilityScore(&gSaveBlock1.daycare);
}
-void sp0B9_daycare_relationship_comment(void)
+void SetDaycareCompatibilityString(void)
{
u8 whichString;
u8 relationshipScore;
- relationshipScore = daycare_relationship_score_from_savegame();
+ relationshipScore = GetDaycareCompatibilityScoreFromSave();
whichString = 0;
if (relationshipScore == 0)
whichString = 3;
@@ -1473,7 +1570,8 @@ void sp0B9_daycare_relationship_comment(void)
whichString = 1;
if (relationshipScore == 70)
whichString = 0;
- StringCopy(gStringVar4, gUnknown_08209AC4[whichString]);
+
+ StringCopy(gStringVar4, sCompatibilityMessages[whichString]);
}
#ifdef NONMATCHING
@@ -1485,12 +1583,12 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
// This portion is nonmatching
flags[1] = 0;
flags[0] = 0;
- for (i = 0; name[i] != EOS; i ++)
+ for (i = 0; name[i] != EOS; i++)
// End nonmatching portion
{
- if (name[i] == CHAR_MALE) flags[0] ++;
- if (name[i] == CHAR_FEMALE) flags[1] ++;
+ if (name[i] == CHAR_MALE) flags[0]++;
+ if (name[i] == CHAR_FEMALE) flags[1]++;
}
if (genderRatio == MON_MALE && flags[0] && !flags[1]) return TRUE;
if (genderRatio == MON_FEMALE && flags[1] && !flags[0]) return TRUE;
@@ -1580,45 +1678,48 @@ static u8 *AppendGenderSymbol(u8 *name, u8 gender)
if (!NameHasGenderSymbol(name, MON_MALE))
return StringAppend(name, gOtherText_MaleSymbol3);
}
-
else if (gender == MON_FEMALE)
{
if (!NameHasGenderSymbol(name, MON_FEMALE))
return StringAppend(name, gOtherText_FemaleSymbol3);
}
+
return StringAppend(name, gOtherText_GenderlessSymbol);
}
-static u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
+static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
{
return AppendGenderSymbol(name, GetBoxMonGender(boxMon));
}
-static void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest)
+static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
{
- u8 buffers[2][20];
+ u8 monNames[2][20];
u8 i;
+
*dest = EOS;
- for (i = 0; i < 2; i ++)
+ for (i = 0; i < 2; i++)
{
- GetBoxMonNick(&dayCareData->mons[i], buffers[i]);
- MonAppendGenderSymbol(buffers[i], &dayCareData->mons[i]);
+ GetBoxMonNick(&daycare->mons[i], monNames[i]);
+ AppendMonGenderSymbol(monNames[i], &daycare->mons[i]);
}
- StringCopy(dest, buffers[0]);
+
+ StringCopy(dest, monNames[0]);
StringAppend(dest, gOtherText_NewLine2);
- StringAppend(dest, buffers[1]);
+ StringAppend(dest, monNames[1]);
StringAppend(dest, gOtherText_NewLine2);
StringAppend(dest, gOtherText_CancelAndLv);
}
-static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest)
+static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest)
{
u8 i;
u8 level;
+
*dest = EOS;
- for (i = 0; i < 2; i ++)
+ for (i = 0; i < 2; i++)
{
- level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->misc.countersEtc.steps[i]);
+ level = GetLevelAfterDaycareSteps(&daycare->mons[i], daycare->misc.countersEtc.steps[i]);
dest[0] = 0x34;
dest[1] = 0xFC;
dest[2] = 0x14;
@@ -1629,10 +1730,11 @@ static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *de
dest[2] = 0x00;
dest = StringCopy(dest + 3, gOtherText_NewLine2);
}
+
*dest = EOS;
}
-static void DaycareLevelMenuProcessKeyInput(u8 taskId)
+static void HandleDaycareLevelMenuInput(u8 taskId)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -1647,7 +1749,7 @@ static void DaycareLevelMenuProcessKeyInput(u8 taskId)
{
if (gTasks[taskId].data[0] != 2)
{
- gTasks[taskId].data[0] ++;
+ gTasks[taskId].data[0]++;
MoveMenuCursor(+1);
PlaySE(SE_SELECT);
}
@@ -1656,7 +1758,7 @@ static void DaycareLevelMenuProcessKeyInput(u8 taskId)
{
HandleDestroyMenuCursors();
PlaySE(SE_SELECT);
- gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0];
+ gLastFieldPokeMenuOpened = gSpecialVar_Result = gTasks[taskId].data[0];
DestroyTask(taskId);
MenuZeroFillWindowRect(15, 6, 29, 13);
EnableBothScriptContexts();
@@ -1664,7 +1766,7 @@ static void DaycareLevelMenuProcessKeyInput(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
HandleDestroyMenuCursors();
- gLastFieldPokeMenuOpened = gScriptResult = 2;
+ gLastFieldPokeMenuOpened = gSpecialVar_Result = 2;
DestroyTask(taskId);
MenuZeroFillWindowRect(15, 6, 29, 13);
EnableBothScriptContexts();
@@ -1675,12 +1777,12 @@ void ShowDaycareLevelMenu(void)
{
u8 buffer[100];
MenuDrawTextWindow(15, 6, 29, 13);
- DaycareLevelMenuGetText(&gSaveBlock1.daycareData, buffer);
+ GetDaycareLevelMenuText(&gSaveBlock1.daycare, buffer);
MenuPrint(buffer, 16, 7);
- DaycareLevelMenuGetLevelText(&gSaveBlock1.daycareData, buffer);
+ GetDaycareLevelMenuLevelText(&gSaveBlock1.daycare, buffer);
MenuPrint_PixelCoords(buffer, 0xce, 0x38, TRUE);
InitMenu(0, 16, 7, 3, 0, 13);
- CreateTask(DaycareLevelMenuProcessKeyInput, 3);
+ CreateTask(HandleDaycareLevelMenuInput, 3);
}
void ChooseSendDaycareMon(void)
diff --git a/src/field/decoration.c b/src/field/decoration.c
index e067191e9..8b774afc3 100644
--- a/src/field/decoration.c
+++ b/src/field/decoration.c
@@ -1,9 +1,10 @@
#include "global.h"
+#include "constants/decorations.h"
#include "main.h"
-#include "map_object_constants.h"
+#include "constants/map_objects.h"
#include "overworld.h"
#include "sound.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "string_util.h"
#include "menu.h"
#include "menu_helpers.h"
@@ -18,6 +19,7 @@
#include "event_data.h"
#include "field_weather.h"
#include "decoration.h"
+#include "ewram.h"
EWRAM_DATA u8 *gUnknown_020388D0 = NULL;
EWRAM_DATA u8 gUnknown_020388D4 = 0;
@@ -1494,7 +1496,7 @@ const union AnimCmd *const gSpriteAnimTable_83EC930[] = {
};
const struct SpriteFrameImage gSpriteImageTable_83EC934[] = {
- {.data = (u8 *)&gUnknown_02038900.image, .size = sizeof gUnknown_02038900.image}
+ {.data = gUnknown_02038900.image, .size = sizeof(gUnknown_02038900.image)}
};
const struct SpriteTemplate gSpriteTemplate_83EC93C = {
@@ -1555,7 +1557,7 @@ const struct SpriteTemplate gSpriteTemplate_83ECA88 = {
const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C};
-u8 *const unref_label_083ECAA8[] = {ewram};
+u8 *const unref_label_083ECAA8[] = {gSharedMem};
// text
@@ -2320,12 +2322,12 @@ void sub_80FF474(void)
u8 j;
for (i=0; i<14; i++)
{
- if (FlagGet(i + 0xae) == 1)
+ if (FlagGet(i + FLAG_DECORATION_2) == 1)
{
- FlagClear(i + 0xae);
+ FlagClear(i + FLAG_DECORATION_2);
for (j=0; j<gMapHeader.events->mapObjectCount; j++)
{
- if (gMapHeader.events->mapObjects[j].flagId == i + 0xae)
+ if (gMapHeader.events->mapObjects[j].flagId == i + FLAG_DECORATION_2)
{
break;
}
@@ -2438,11 +2440,11 @@ void AddDecorationIconObjectFromFieldObject(struct UnkStruct_02038900 * unk_0203
sub_8100874(unk_02038900);
sub_810070C(unk_02038900->palette, ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles + 8 * unk_02038900->decoration->tiles[0])[7] >> 12);
LoadSpritePalette(&gUnknown_083EC954);
- gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0;
+ gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0];
gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83EC93C, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 0);
} else
{
- gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0;
+ gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0];
gUnknown_03004880.unk4 = AddPseudoFieldObject(unk_02038900->decoration->tiles[0], sub_81009A8, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 1);
gSprites[gUnknown_03004880.unk4].oam.priority = 1;
}
@@ -2519,8 +2521,8 @@ void sub_80FF960(u8 taskId)
void sub_80FFAB0(u8 taskId)
{
gTasks[taskId].data[10] = 0;
- gSprites[gUnknown_020391A8].data7 = 1;
- gSprites[gUnknown_020391A9].data7 = 1;
+ gSprites[gUnknown_020391A8].data[7] = 1;
+ gSprites[gUnknown_020391A9].data[7] = 1;
sub_810045C();
sub_8100038(taskId);
}
@@ -2528,8 +2530,8 @@ void sub_80FFAB0(u8 taskId)
void sub_80FFB08(u8 taskId)
{
gTasks[taskId].data[10] = 0;
- gSprites[gUnknown_020391A8].data7 = 1;
- gSprites[gUnknown_020391A9].data7 = 1;
+ gSprites[gUnknown_020391A8].data[7] = 1;
+ gSprites[gUnknown_020391A9].data[7] = 1;
sub_810045C();
DisplayItemMessageOnField(taskId, gSecretBaseText_CancelDecorating, sub_8100248, 0);
}
@@ -3399,13 +3401,13 @@ bool8 sub_8100430(void)
void sub_810045C(void)
{
gUnknown_020391AA = 0;
- gSprites[gUnknown_020391A8].data2 = 0;
- gSprites[gUnknown_020391A8].data3 = 0;
+ gSprites[gUnknown_020391A8].data[2] = 0;
+ gSprites[gUnknown_020391A8].data[3] = 0;
}
void sub_8100494(u8 taskId)
{
- if (!gSprites[gUnknown_020391A8].data4)
+ if (!gSprites[gUnknown_020391A8].data[4])
{
if (gTasks[taskId].data[10] == 1)
{
@@ -3419,29 +3421,29 @@ void sub_8100494(u8 taskId)
if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP)
{
gUnknown_020391AA = DIR_SOUTH;
- gSprites[gUnknown_020391A8].data2 = 0;
- gSprites[gUnknown_020391A8].data3 = -2;
+ gSprites[gUnknown_020391A8].data[2] = 0;
+ gSprites[gUnknown_020391A8].data[3] = -2;
gTasks[taskId].data[1]--;
}
if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN)
{
gUnknown_020391AA = DIR_NORTH;
- gSprites[gUnknown_020391A8].data2 = 0;
- gSprites[gUnknown_020391A8].data3 = 2;
+ gSprites[gUnknown_020391A8].data[2] = 0;
+ gSprites[gUnknown_020391A8].data[3] = 2;
gTasks[taskId].data[1]++;
}
if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT)
{
gUnknown_020391AA = DIR_WEST;
- gSprites[gUnknown_020391A8].data2 = -2;
- gSprites[gUnknown_020391A8].data3 = 0;
+ gSprites[gUnknown_020391A8].data[2] = -2;
+ gSprites[gUnknown_020391A8].data[3] = 0;
gTasks[taskId].data[0]--;
}
if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT)
{
gUnknown_020391AA = DIR_EAST;
- gSprites[gUnknown_020391A8].data2 = 2;
- gSprites[gUnknown_020391A8].data3 = 0;
+ gSprites[gUnknown_020391A8].data[2] = 2;
+ gSprites[gUnknown_020391A8].data[3] = 0;
gTasks[taskId].data[0]++;
}
if (!sub_8100430() || !sub_810038C(taskId))
@@ -3451,8 +3453,8 @@ void sub_8100494(u8 taskId)
}
if (gUnknown_020391AA)
{
- gSprites[gUnknown_020391A8].data4++;
- gSprites[gUnknown_020391A8].data4 &= 7;
+ gSprites[gUnknown_020391A8].data[4]++;
+ gSprites[gUnknown_020391A8].data[4] &= 7;
}
if (!gTasks[taskId].data[10])
{
@@ -3470,7 +3472,7 @@ void sub_8100494(u8 taskId)
void sub_810065C(u8 taskId)
{
MenuZeroFillWindowRect(0, 0, 29, 19);
- gSprites[gUnknown_020391A8].data7 = 0;
+ gSprites[gUnknown_020391A8].data[7] = 0;
gTasks[taskId].data[10] = 0;
gTasks[taskId].func = sub_8100494;
}
@@ -3595,27 +3597,27 @@ void sub_8100930(u8 decoShape)
void sub_81009A8(struct Sprite *sprite)
{
- sprite->data2 = 0;
- sprite->data3 = 0;
- sprite->data4 = 0;
- sprite->data5 = 0;
- sprite->data6 = 0;
- sprite->data7 = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[5] = 0;
+ sprite->data[6] = 0;
+ sprite->data[7] = 0;
sprite->callback = sub_81009C0;
}
void sub_81009C0(struct Sprite *sprite)
{
- if (sprite->data7 == 0)
+ if (sprite->data[7] == 0)
{
- if (sprite->data6 < 15)
+ if (sprite->data[6] < 15)
{
sprite->invisible = 0;
} else
{
sprite->invisible = 1;
}
- sprite->data6 = (sprite->data6 + 1) & 0x1f;
+ sprite->data[6] = (sprite->data[6] + 1) & 0x1f;
} else
{
sprite->invisible = 0;
@@ -3645,10 +3647,10 @@ void sub_8100A7C(void)
{
u16 i;
gSpecialVar_0x8005 = 0;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (gSpecialVar_0x8004 == gUnknown_02039234)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
} else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].decorId]].permission == DECORPERM_SOLID_MAT)
{
gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].flagId;
@@ -3759,7 +3761,7 @@ void SetUpPuttingAwayDecorationPlayerAvatar(void)
{
player_get_direction_lower_nybble();
MenuZeroFillWindowRect(0, 0, 29, 19);
- gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0;
+ gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0];
sub_81016C8();
gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83ECA88, 0x78, 0x50, 0);
if (gSaveBlock2.playerGender == MALE)
@@ -3809,7 +3811,7 @@ void sub_8100E70(u8 taskId)
void sub_8100EEC(u8 taskId)
{
MenuZeroFillWindowRect(0, 0, 29, 19);
- gSprites[gUnknown_020391A8].data7 = 0;
+ gSprites[gUnknown_020391A8].data[7] = 0;
gSprites[gUnknown_020391A8].invisible = 0;
gSprites[gUnknown_020391A8].callback = sub_8101698;
gSprites[gUnknown_020391A9].pos1.x = 0x88;
@@ -4197,8 +4199,8 @@ void sub_8101678(void)
void sub_8101698(struct Sprite *sprite)
{
- sprite->data0 = (sprite->data0 + 1) & 0x1f;
- if (sprite->data0 >= 16)
+ sprite->data[0] = (sprite->data[0] + 1) & 0x1f;
+ if (sprite->data[0] >= 16)
{
sprite->invisible = TRUE;
} else
diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c
index 083cb260c..dd0e972aa 100644
--- a/src/field/decoration_inventory.c
+++ b/src/field/decoration_inventory.c
@@ -1,14 +1,11 @@
-//
-
-//
-
#include "global.h"
+#include "constants/decorations.h"
#include "sprite.h"
#include "task.h"
#include "decoration.h"
#include "decoration_inventory.h"
-#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr}
+#define DECOR_INV(ptr) {.items = ptr, .size = sizeof ptr}
struct DecorationInventory const gDecorationInventories[] = {
DECOR_INV(gSaveBlock1.decorDesk),
diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c
index aaf4dd66a..b67f3a2bd 100644
--- a/src/field/dewford_trend.c
+++ b/src/field/dewford_trend.c
@@ -1,14 +1,14 @@
#include "global.h"
#include "dewford_trend.h"
#include "easy_chat.h"
+#include "constants/easy_chat.h"
#include "event_data.h"
#include "link.h"
-#include "rng.h"
+#include "random.h"
#include "text.h"
+#include "ewram.h"
-extern u8 unk_2000000[];
-
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
static void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c);
@@ -101,10 +101,10 @@ bool8 sub_80FA364(u16 *a)
if (!SB1ContainsWords(a))
{
- if (!FlagGet(SYS_POPWORD_INPUT))
+ if (!FlagGet(FLAG_SYS_POPWORD_INPUT))
{
- FlagSet(SYS_POPWORD_INPUT);
- if (!FlagGet(SYS_MIX_RECORD))
+ FlagSet(FLAG_SYS_POPWORD_INPUT);
+ if (!FlagGet(FLAG_SYS_MIX_RECORD))
{
gSaveBlock1.easyChatPairs[0].words[0] = a[0];
gSaveBlock1.easyChatPairs[0].words[1] = a[1];
@@ -219,12 +219,12 @@ void sub_80FA5E4(void)
if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6)
result = 1;
}
- gScriptResult = result;
+ gSpecialVar_Result = result;
}
void sub_80FA648(void)
{
- gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7;
+ gSpecialVar_Result = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7;
}
static bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c)
diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c
index 6014b3d14..1dce5863e 100644
--- a/src/field/easy_chat.c
+++ b/src/field/easy_chat.c
@@ -1,10 +1,11 @@
#include "global.h"
#include "easy_chat.h"
+#include "constants/easy_chat.h"
#include "data2.h"
#include "event_data.h"
#include "field_message_box.h"
#include "pokedex.h"
-#include "rng.h"
+#include "random.h"
#include "string_util.h"
#include "strings.h"
#include "strings2.h"
@@ -161,7 +162,7 @@ u16 unref_sub_80EB5E0(u16 arg0)
{
case EC_GROUP_POKEMON: // 0
case EC_GROUP_POKEMON_2: // 21
- chars = (u8 *) gSpeciesNames[word];
+ chars = gSpeciesNames[word];
break;
case EC_GROUP_MOVE_1: // 18
case EC_GROUP_MOVE_2: // 19
@@ -278,13 +279,13 @@ void sub_80EB7C4(void)
switch (gSpecialVar_0x8004)
{
case 0:
- words = gSaveBlock1.unk2B1C;
+ words = gSaveBlock1.easyChats.unk2B1C;
arg1 = 2;
arg2 = 2;
break;
case 1:
- words = gSaveBlock1.unk2B28;
- if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20))
+ words = gSaveBlock1.easyChats.unk2B28;
+ if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20))
{
arg1 = 2;
arg2 = 3;
@@ -296,12 +297,12 @@ void sub_80EB7C4(void)
}
break;
case 2:
- words = gSaveBlock1.unk2B34;
+ words = gSaveBlock1.easyChats.unk2B34;
arg1 = 3;
arg2 = 2;
break;
case 3:
- words = gSaveBlock1.unk2B40;
+ words = gSaveBlock1.easyChats.unk2B40;
arg1 = 3;
arg2 = 2;
break;
diff --git a/src/field/event_data.c b/src/field/event_data.c
index 43d49c417..587da8138 100644
--- a/src/field/event_data.c
+++ b/src/field/event_data.c
@@ -3,7 +3,7 @@
#include "pokedex.h"
#define TEMP_FLAGS_SIZE 0x4
-#define TEMP_UPPER_FLAGS_SIZE 0x8
+#define DAILY_FLAGS_SIZE 0x8
#define TEMP_VARS_SIZE 0x20
EWRAM_DATA u16 gSpecialVar_0x8000 = 0;
@@ -18,9 +18,9 @@ EWRAM_DATA u16 gSpecialVar_0x8008 = 0;
EWRAM_DATA u16 gSpecialVar_0x8009 = 0;
EWRAM_DATA u16 gSpecialVar_0x800A = 0;
EWRAM_DATA u16 gSpecialVar_0x800B = 0;
-EWRAM_DATA u16 gScriptResult = 0;
-EWRAM_DATA u16 gScriptLastTalked = 0;
-EWRAM_DATA u16 gScriptFacing = 0;
+EWRAM_DATA u16 gSpecialVar_Result = 0;
+EWRAM_DATA u16 gSpecialVar_LastTalked = 0;
+EWRAM_DATA u16 gSpecialVar_Facing = 0;
EWRAM_DATA u8 gUnknown_0202E8E2[16] = {0};
extern u16 *gSpecialVars[];
@@ -36,16 +36,16 @@ void ClearTempFieldEventData(void)
{
memset(gSaveBlock1.flags, 0, TEMP_FLAGS_SIZE);
memset(gSaveBlock1.vars, 0, TEMP_VARS_SIZE);
- FlagClear(SYS_ENC_UP_ITEM);
- FlagClear(SYS_ENC_DOWN_ITEM);
- FlagClear(SYS_USE_STRENGTH);
- FlagClear(SYS_CTRL_OBJ_DELETE);
+ FlagClear(FLAG_SYS_ENC_UP_ITEM);
+ FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_CTRL_OBJ_DELETE);
}
// probably had different flag splits at one point.
-void ClearUpperFlags(void)
+void ClearDailyFlags(void)
{
- memset(gSaveBlock1.flags + 0x118, 0, TEMP_UPPER_FLAGS_SIZE);
+ memset(gSaveBlock1.flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE);
}
void DisableNationalPokedex(void)
@@ -53,7 +53,7 @@ void DisableNationalPokedex(void)
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
gSaveBlock2.pokedex.nationalMagic = 0;
*nationalDexVar = 0;
- FlagClear(SYS_NATIONAL_DEX);
+ FlagClear(FLAG_SYS_NATIONAL_DEX);
}
void EnableNationalPokedex(void)
@@ -61,7 +61,7 @@ void EnableNationalPokedex(void)
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
gSaveBlock2.pokedex.nationalMagic = 0xDA;
*nationalDexVar = 0x302;
- FlagSet(SYS_NATIONAL_DEX);
+ FlagSet(FLAG_SYS_NATIONAL_DEX);
gSaveBlock2.pokedex.unknown1 = 1;
gSaveBlock2.pokedex.order = 0;
sub_808C0A0();
@@ -69,7 +69,7 @@ void EnableNationalPokedex(void)
bool32 IsNationalPokedexEnabled(void)
{
- if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(SYS_NATIONAL_DEX))
+ if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(FLAG_SYS_NATIONAL_DEX))
return TRUE;
else
return FALSE;
@@ -77,34 +77,34 @@ bool32 IsNationalPokedexEnabled(void)
void DisableMysteryGift(void)
{
- FlagClear(SYS_EXDATA_ENABLE);
+ FlagClear(FLAG_SYS_EXDATA_ENABLE);
}
void EnableMysteryGift(void)
{
- FlagSet(SYS_EXDATA_ENABLE);
+ FlagSet(FLAG_SYS_EXDATA_ENABLE);
}
bool32 IsMysteryGiftEnabled(void)
{
- return FlagGet(SYS_EXDATA_ENABLE);
+ return FlagGet(FLAG_SYS_EXDATA_ENABLE);
}
void DisableResetRTC(void)
{
VarSet(VAR_RESET_RTC_ENABLE, 0);
- FlagClear(SYS_RESET_RTC_ENABLE);
+ FlagClear(FLAG_SYS_RESET_RTC_ENABLE);
}
void EnableResetRTC(void)
{
VarSet(VAR_RESET_RTC_ENABLE, 0x920);
- FlagSet(SYS_RESET_RTC_ENABLE);
+ FlagSet(FLAG_SYS_RESET_RTC_ENABLE);
}
bool32 CanResetRTC(void)
{
- if (FlagGet(SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920)
+ if (FlagGet(FLAG_SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920)
return TRUE;
else
return FALSE;
diff --git a/src/field/field_camera.c b/src/field/field_camera.c
index db51cf054..8384ad8d1 100644
--- a/src/field/field_camera.c
+++ b/src/field/field_camera.c
@@ -7,7 +7,7 @@
#include "sprite.h"
#include "text.h"
-EWRAM_DATA u8 gUnknown_0202E854 = 0;
+EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE;
struct UnknownStruct
{
@@ -322,8 +322,8 @@ static void CameraUpdateCallback(struct CameraSomething *a)
{
if (a->unk4 != 0)
{
- a->unk8 = gSprites[a->unk4].data2;
- a->unkC = gSprites[a->unk4].data3;
+ a->unk8 = gSprites[a->unk4].data[2];
+ a->unkC = gSprites[a->unk4].data[3];
}
}
@@ -455,13 +455,14 @@ static void CameraPanningCB_PanAhead(void)
{
u8 var;
- if (gUnknown_0202E854 == 0)
+ if (gUnusedBikeCameraAheadPanback == FALSE)
{
InstallCameraPanAheadCallback();
}
else
{
- if (gPlayerAvatar.running1 == 1)
+ // this code is never reached.
+ if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
{
gUnknown_0300059C ^= 1;
if (gUnknown_0300059C == 0)
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index ff8e8504c..cd7d3a2e2 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -10,18 +10,18 @@
#include "field_poison.h"
#include "field_specials.h"
#include "fieldmap.h"
-#include "flags.h"
+#include "constants/flags.h"
#include "item_menu.h"
#include "metatile_behavior.h"
#include "overworld.h"
#include "safari_zone.h"
#include "script.h"
#include "secret_base.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "start_menu.h"
#include "trainer_see.h"
-#include "vars.h"
+#include "constants/vars.h"
#include "wild_encounter.h"
struct Coords32
@@ -30,8 +30,8 @@ struct Coords32
s32 y;
};
-extern u16 gScriptLastTalked;
-extern u16 gScriptFacing;
+extern u16 gSpecialVar_LastTalked;
+extern u16 gSpecialVar_Facing;
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
@@ -124,8 +124,8 @@ void FieldClearPlayerInput(struct FieldInput *input)
void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
{
- u8 r6 = gPlayerAvatar.running1;
- u8 r9 = gPlayerAvatar.running2;
+ u8 r6 = gPlayerAvatar.tileTransitionState;
+ u8 r9 = gPlayerAvatar.runningState;
bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9));
if ((r6 == 2 && forcedMove == FALSE) || r6 == 0)
@@ -295,8 +295,8 @@ u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c)
return NULL;
}
gSelectedMapObject = r3;
- gScriptLastTalked = gMapObjects[r3].localId;
- gScriptFacing = c;
+ gSpecialVar_LastTalked = gMapObjects[r3].localId;
+ gSpecialVar_Facing = c;
return GetFieldObjectScriptPointerByFieldObjectId(r3);
}
@@ -316,10 +316,10 @@ static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c)
}
//_080683E8
gSelectedMapObject = r3;
- gScriptLastTalked = gMapObjects[r3].localId;
- gScriptFacing = c;
+ gSpecialVar_LastTalked = gMapObjects[r3].localId;
+ gSpecialVar_Facing = c;
script = GetFieldObjectScriptPointerByFieldObjectId(r3);
- script = GetRamScript(gScriptLastTalked, script);
+ script = GetRamScript(gSpecialVar_LastTalked, script);
return script;
}
@@ -423,11 +423,11 @@ static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c)
static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2)
{
- if (FlagGet(BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
+ if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
return UseSurfScript;
if (MetatileBehavior_IsWaterfall(b) == TRUE)
{
- if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE)
+ if (FlagGet(FLAG_BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE)
return S_UseWaterfall;
else
return S_CannotUseWaterfall;
@@ -437,7 +437,7 @@ static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2)
static bool32 sub_8068770(void)
{
- if (FlagGet(BADGE07_GET) && sub_8068F18() == 2)
+ if (FlagGet(FLAG_BADGE07_GET) && sub_8068F18() == 2)
{
ScriptContext1_SetupScript(UseDiveScript);
return TRUE;
@@ -447,7 +447,7 @@ static bool32 sub_8068770(void)
static bool32 sub_80687A4(void)
{
- if (FlagGet(BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1)
+ if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1)
{
ScriptContext1_SetupScript(S_UseDiveUnderwater);
return TRUE;
@@ -500,9 +500,9 @@ bool8 sub_8068894(void)
ScriptContext1_SetupScript(gUnknown_081A14B8);
return TRUE;
}
- if (sub_80422A0())
+ if (ShouldEggHatch())
{
- IncrementGameStat(13);
+ IncrementGameStat(GAME_STAT_HATCHED_EGGS);
ScriptContext1_SetupScript(S_EggHatch);
return TRUE;
}
@@ -856,7 +856,7 @@ u8 sub_8068F18(void)
return 0;
}
-u8 *GetFieldObjectScriptPointerForComparison(void)
+u8 *GetFieldObjectScriptPointerPlayerFacing(void)
{
u8 r4;
struct MapPosition position;
diff --git a/src/field/field_door.c b/src/field/field_door.c
index ab46f0696..89dae725c 100644
--- a/src/field/field_door.c
+++ b/src/field/field_door.c
@@ -3,19 +3,400 @@
#include "field_camera.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "task.h"
-extern struct DoorAnimFrame gDoorOpenAnimFrames[];
-extern struct DoorAnimFrame gDoorCloseAnimFrames[];
-extern struct DoorGraphics gDoorAnimGraphicsTable[];
+const u8 DoorAnimTiles_04[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/04/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/04/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/04/2.4bpp"),
+};
+
+// TODO: Make these blank palette includes?
+asm(".space 32");
+
+const u8 DoorAnimTiles_05[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/05/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/05/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/05/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_08[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/08/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/08/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/08/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_15[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/15/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/15/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/15/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_16[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/16/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/16/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/16/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_00[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/00/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/00/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/00/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_01[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/01/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/01/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/01/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_02[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/02/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/02/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/02/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_03[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/03/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/03/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/03/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_06[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/06/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/06/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/06/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_07[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/07/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/07/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/07/2.4bpp"),
+};
+
+const u8 DoorAnimTiles_09[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/09/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/09/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/09/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_10[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/10/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/10/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/10/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_11[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/11/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/11/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/11/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_12[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/12/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/12/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/12/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_13[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/13/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/13/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/13/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_14[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/14/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/14/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/14/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_17[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/17/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/17/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/17/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_18[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/18/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/18/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/18/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_19[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/19/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/19/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/19/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_20[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/20/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/20/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/20/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_21[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/21/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/21/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/21/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_22[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/22/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/22/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/22/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_23[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/23/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/23/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/23/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_24[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/24/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/24/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/24/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_25[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/25/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/25/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/25/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_26[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/26/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/26/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/26/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_27[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/27/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/27/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/27/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_28[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/28/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/28/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/28/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_29[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/29/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/29/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/29/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_30[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/30/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/30/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/30/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_31[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/31/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/31/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/31/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_32[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/32/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/32/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/32/2.4bpp"),
+};
+
+asm(".space 32");
+
+const u8 DoorAnimTiles_33[][0x100] =
+{
+ INCBIN_U8("graphics/door_anims/33/0.4bpp"),
+ INCBIN_U8("graphics/door_anims/33/1.4bpp"),
+ INCBIN_U8("graphics/door_anims/33/2.4bpp"),
+};
+
+asm(".space 32");
+
+static const struct DoorAnimFrame gDoorOpenAnimFrames[] =
+{
+ {4, -1},
+ {4, 0},
+ {4, 0x100},
+ {4, 0x200},
+ {0, 0},
+};
+
+static const struct DoorAnimFrame gDoorCloseAnimFrames[] =
+{
+ {4, 0x200},
+ {4, 0x100},
+ {4, 0},
+ {4, -1},
+ {0, 0},
+};
+
+const u8 DoorAnimPalettes_830F8A4[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 00
+const u8 DoorAnimPalettes_830F8AC[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 01
+const u8 DoorAnimPalettes_830F8B4[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 02
+const u8 DoorAnimPalettes_830F8BC[] = {0, 0, 1, 1, 1, 1, 1, 1}; // door 03
+const u8 DoorAnimPalettes_830F8C4[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 04
+const u8 DoorAnimPalettes_830F8CC[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 05
+const u8 DoorAnimPalettes_830F8D4[] = {11, 11, 11, 11, 11, 11, 11, 11}; // door 06
+const u8 DoorAnimPalettes_830F8DC[] = {10, 10, 10, 10, 10, 10, 10, 10}; // door 07
+const u8 DoorAnimPalettes_830F8E4[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 08
+const u8 DoorAnimPalettes_830F8EC[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 09
+const u8 DoorAnimPalettes_830F8F4[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 10
+const u8 DoorAnimPalettes_830F8FC[] = {9, 9, 1, 1, 1, 1, 1, 1}; // door 11
+const u8 DoorAnimPalettes_830F904[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 12
+const u8 DoorAnimPalettes_830F90C[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 13
+const u8 DoorAnimPalettes_830F914[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 14
+const u8 DoorAnimPalettes_830F91C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 15
+const u8 DoorAnimPalettes_830F924[] = {0, 0, 5, 5, 5, 5, 5, 5}; // door 16
+const u8 DoorAnimPalettes_830F92C[] = {6, 6, 1, 1, 1, 1, 1, 1}; // door 17
+const u8 DoorAnimPalettes_830F934[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 18
+const u8 DoorAnimPalettes_830F93C[] = {6, 6, 5, 5, 5, 5, 5, 5}; // door 19
+const u8 DoorAnimPalettes_830F944[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 20
+const u8 DoorAnimPalettes_830F94C[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 21
+const u8 DoorAnimPalettes_830F954[] = {6, 6, 7, 7, 7, 7, 7, 7}; // door 22
+const u8 DoorAnimPalettes_830F95C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 23
+const u8 DoorAnimPalettes_830F964[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 24
+const u8 DoorAnimPalettes_830F96C[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 25
+const u8 DoorAnimPalettes_830F974[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 26
+const u8 DoorAnimPalettes_830F97C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 27
+const u8 DoorAnimPalettes_830F984[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 28
+const u8 DoorAnimPalettes_830F98C[] = {11, 11, 7, 7, 7, 7, 7, 7}; // door 29
+const u8 DoorAnimPalettes_830F994[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 30
+const u8 DoorAnimPalettes_830F99C[] = {6, 6, 7, 7, 7, 7, 7, 7}; // door 31
+const u8 DoorAnimPalettes_830F9A4[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 32
+const u8 DoorAnimPalettes_830F9AC[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 33
+
+static const struct DoorGraphics gDoorAnimGraphicsTable[] =
+{
+ {0x021, 0, DoorAnimTiles_00, DoorAnimPalettes_830F8A4}, // door 00
+ {0x061, 1, DoorAnimTiles_01, DoorAnimPalettes_830F8AC}, // door 01
+ {0x1CD, 1, DoorAnimTiles_02, DoorAnimPalettes_830F8B4}, // door 02
+ {0x041, 1, DoorAnimTiles_03, DoorAnimPalettes_830F8BC}, // door 03
+ {0x248, 0, DoorAnimTiles_04, DoorAnimPalettes_830F8C4}, // door 04
+ {0x249, 0, DoorAnimTiles_05, DoorAnimPalettes_830F8CC}, // door 05
+ {0x22F, 0, DoorAnimTiles_06, DoorAnimPalettes_830F8D4}, // door 06
+ {0x21F, 0, DoorAnimTiles_07, DoorAnimPalettes_830F8DC}, // door 07
+ {0x2A5, 0, DoorAnimTiles_08, DoorAnimPalettes_830F8E4}, // door 08
+ {0x287, 0, DoorAnimTiles_09, DoorAnimPalettes_830F8F4}, // door 09
+ {0x2AC, 0, DoorAnimTiles_10, DoorAnimPalettes_830F934}, // door 10
+ {0x3A1, 0, DoorAnimTiles_11, DoorAnimPalettes_830F93C}, // door 11
+ {0x2DC, 0, DoorAnimTiles_12, DoorAnimPalettes_830F92C}, // door 12
+ {0x225, 0, DoorAnimTiles_13, DoorAnimPalettes_830F924}, // door 13
+ {0x1DB, 1, DoorAnimTiles_14, DoorAnimPalettes_830F94C}, // door 14
+ {0x246, 0, DoorAnimTiles_15, DoorAnimPalettes_830F8EC}, // door 15
+ {0x28E, 0, DoorAnimTiles_16, DoorAnimPalettes_830F944}, // door 16
+ {0x2A1, 0, DoorAnimTiles_17, DoorAnimPalettes_830F8FC}, // door 17
+ {0x21C, 0, DoorAnimTiles_18, DoorAnimPalettes_830F914}, // door 18
+ {0x21E, 0, DoorAnimTiles_19, DoorAnimPalettes_830F91C}, // door 19
+ {0x21D, 1, DoorAnimTiles_20, DoorAnimPalettes_830F904}, // door 20
+ {0x21A, 0, DoorAnimTiles_21, DoorAnimPalettes_830F90C}, // door 21
+ {0x224, 0, DoorAnimTiles_22, DoorAnimPalettes_830F954}, // door 22
+ {0x289, 0, DoorAnimTiles_23, DoorAnimPalettes_830F95C}, // door 23
+ {0x30C, 1, DoorAnimTiles_24, DoorAnimPalettes_830F964}, // door 24
+ {0x32D, 1, DoorAnimTiles_25, DoorAnimPalettes_830F96C}, // door 25
+ {0x2ED, 1, DoorAnimTiles_26, DoorAnimPalettes_830F974}, // door 26
+ {0x264, 1, DoorAnimTiles_27, DoorAnimPalettes_830F97C}, // door 27
+ {0x22B, 0, DoorAnimTiles_28, DoorAnimPalettes_830F984}, // door 28
+ {0x2F7, 0, DoorAnimTiles_29, DoorAnimPalettes_830F98C}, // door 29
+ {0x297, 0, DoorAnimTiles_30, DoorAnimPalettes_830F994}, // door 30
+ {0x285, 1, DoorAnimTiles_31, DoorAnimPalettes_830F99C}, // door 31
+ {0x25D, 1, DoorAnimTiles_32, DoorAnimPalettes_830F9A4}, // door 32
+ {0x20E, 1, DoorAnimTiles_33, DoorAnimPalettes_830F9AC}, // door 33
+ {0, 0, NULL, NULL},
+};
-static void CopyDoorTilesToVram(void *src)
+static void CopyDoorTilesToVram(const void *src)
{
CpuFastSet(src, (void *)(VRAM + 0x7F00), 0x40);
}
-static void door_build_blockdef(u16 *a, u16 b, u8 *c)
+static void door_build_blockdef(u16 *a, u16 b, const u8 *c)
{
int i;
u16 unk;
@@ -32,7 +413,7 @@ static void door_build_blockdef(u16 *a, u16 b, u8 *c)
}
}
-static void DrawCurrentDoorAnimFrame(u32 x, u32 y, u8 *c)
+static void DrawCurrentDoorAnimFrame(u32 x, u32 y, const u8 *c)
{
u16 arr[8];
@@ -48,7 +429,7 @@ static void DrawClosedDoorTiles(u32 x, u32 y)
CurrentMapDrawMetatileAt(x, y);
}
-static void DrawDoor(struct DoorGraphics *gfx, struct DoorAnimFrame *frame, u32 x, u32 y)
+static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame, u32 x, u32 y)
{
if (frame->offset == 0xFFFF)
DrawClosedDoorTiles(x, y);
@@ -96,14 +477,14 @@ static void Task_AnimateDoor(u8 taskId)
DestroyTask(taskId);
}
-static struct DoorAnimFrame *GetLastDoorFrame(struct DoorAnimFrame *frame, void *unused)
+static const struct DoorAnimFrame *GetLastDoorFrame(const struct DoorAnimFrame *frame, const void *unused)
{
while (frame->time != 0)
frame++;
return frame - 1;
}
-static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metatileNum)
+static const struct DoorGraphics *GetDoorGraphics(const struct DoorGraphics *gfx, u16 metatileNum)
{
while (gfx->tiles != NULL)
{
@@ -114,7 +495,7 @@ static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metati
return NULL;
}
-static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, u32 x, u32 y)
+static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frames, u32 x, u32 y)
{
if (FuncIsActiveTask(Task_AnimateDoor) == TRUE)
return -1;
@@ -136,19 +517,19 @@ static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame
}
}
-static void DrawClosedDoor(struct DoorGraphics *unused, u32 x, u32 y)
+static void DrawClosedDoor(const struct DoorGraphics *unused, u32 x, u32 y)
{
DrawClosedDoorTiles(x, y);
}
-static void DrawOpenedDoor(struct DoorGraphics *gfx, u32 x, u32 y)
+static void DrawOpenedDoor(const struct DoorGraphics *gfx, u32 x, u32 y)
{
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
if (gfx != NULL)
DrawDoor(gfx, GetLastDoorFrame(gDoorOpenAnimFrames, gDoorOpenAnimFrames), x, y);
}
-static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y)
+static s8 StartDoorOpenAnimation(const struct DoorGraphics *gfx, u32 x, u32 y)
{
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
if (gfx == NULL)
@@ -157,7 +538,7 @@ static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y)
return StartDoorAnimationTask(gfx, gDoorOpenAnimFrames, x, y);
}
-static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y)
+static s8 StartDoorCloseAnimation(const struct DoorGraphics *gfx, u32 x, u32 y)
{
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
if (gfx == NULL)
@@ -166,7 +547,7 @@ static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y)
return StartDoorAnimationTask(gfx, gDoorCloseAnimFrames, x, y);
}
-static s8 cur_mapdata_get_door_x2_at(struct DoorGraphics *gfx, u32 x, u32 y)
+static s8 cur_mapdata_get_door_x2_at(const struct DoorGraphics *gfx, u32 x, u32 y)
{
gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y));
if (gfx == NULL)
diff --git a/src/field/field_effect.c b/src/field/field_effect.c
index afe020ac7..4337300da 100644
--- a/src/field/field_effect.c
+++ b/src/field/field_effect.c
@@ -12,7 +12,7 @@
#include "overworld.h"
#include "task.h"
#include "sound.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "decoration.h"
#include "field_player_avatar.h"
#include "field_map_obj_helpers.h"
@@ -28,7 +28,7 @@
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
-EWRAM_DATA u32 gFieldEffectArguments[8] = {0};
+EWRAM_DATA s32 gFieldEffectArguments[8] = {0};
const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
@@ -37,7 +37,7 @@ const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_obj
const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp");
-const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp");
+const u8 gSpriteImage_839E7F4[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp");
const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal");
// Graphics for the lights streaking past your Pokemon when it uses a field move.
@@ -110,7 +110,7 @@ const struct SpriteFrameImage gSpriteImageTable_839F170[] = {
};
const struct SpriteFrameImage gSpriteImageTable_839F178[] = {
- {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here
+ {.data = gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here
};
const struct Subsprite Unknown_39F180[] = {
@@ -886,16 +886,16 @@ void PokecenterHealEffect_0(struct Task *task)
void PokecenterHealEffect_1(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 1)
+ if (gSprites[task->data[6]].data[0] > 1)
{
- gSprites[task->data[7]].data0++;
+ gSprites[task->data[7]].data[0]++;
task->data[0]++;
}
}
void PokecenterHealEffect_2(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 4)
+ if (gSprites[task->data[6]].data[0] > 4)
{
task->data[0]++;
}
@@ -903,7 +903,7 @@ void PokecenterHealEffect_2(struct Task *task)
void PokecenterHealEffect_3(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 6)
+ if (gSprites[task->data[6]].data[0] > 6)
{
DestroySprite(&gSprites[task->data[6]]);
FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL);
@@ -949,7 +949,7 @@ void HallOfFameRecordEffect_0(struct Task *task)
void HallOfFameRecordEffect_1(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 1)
+ if (gSprites[task->data[6]].data[0] > 1)
{
task->data[15]++; // was this ever initialized? is this ever used?
task->data[0]++;
@@ -958,7 +958,7 @@ void HallOfFameRecordEffect_1(struct Task *task)
void HallOfFameRecordEffect_2(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 4)
+ if (gSprites[task->data[6]].data[0] > 4)
{
task->data[0]++;
}
@@ -966,7 +966,7 @@ void HallOfFameRecordEffect_2(struct Task *task)
void HallOfFameRecordEffect_3(struct Task *task)
{
- if (gSprites[task->data[6]].data0 > 6)
+ if (gSprites[task->data[6]].data[0] > 6)
{
DestroySprite(&gSprites[task->data[6]]);
FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD);
@@ -984,46 +984,46 @@ u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
sprite = &gSprites[spriteId];
sprite->pos2.x = x;
sprite->pos2.y = y;
- sprite->data5 = data5;
- sprite->data6 = data6;
- sprite->data7 = spriteId;
+ sprite->data[5] = data5;
+ sprite->data[6] = data6;
+ sprite->data[7] = spriteId;
return spriteId;
}
void SpriteCB_PokeballGlowEffect(struct Sprite *sprite)
{
- gUnknown_0839F288[sprite->data0](sprite);
+ gUnknown_0839F288[sprite->data[0]](sprite);
}
void PokeballGlowEffect_0(struct Sprite *sprite)
{
u8 endSpriteId;
- if (sprite->data1 == 0 || (--sprite->data1) == 0)
+ if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
{
- sprite->data1 = 25;
- endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0);
+ sprite->data[1] = 25;
+ endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data[2]].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data[2]].y + sprite->pos2.y, 0);
gSprites[endSpriteId].oam.priority = 2;
- gSprites[endSpriteId].data0 = sprite->data7;
- sprite->data2++;
- sprite->data6--;
+ gSprites[endSpriteId].data[0] = sprite->data[7];
+ sprite->data[2]++;
+ sprite->data[6]--;
PlaySE(SE_BOWA);
}
- if (sprite->data6 == 0)
+ if (sprite->data[6] == 0)
{
- sprite->data1 = 32;
- sprite->data0++;
+ sprite->data[1] = 32;
+ sprite->data[0]++;
}
}
void PokeballGlowEffect_1(struct Sprite *sprite)
{
- if ((--sprite->data1) == 0)
+ if ((--sprite->data[1]) == 0)
{
- sprite->data0++;
- sprite->data1 = 8;
- sprite->data2 = 0;
- sprite->data3 = 0;
- if (sprite->data5)
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ if (sprite->data[5])
{
PlayFanfare(BGM_ME_ASA);
}
@@ -1033,48 +1033,48 @@ void PokeballGlowEffect_1(struct Sprite *sprite)
void PokeballGlowEffect_2(struct Sprite *sprite)
{
u8 phase;
- if ((--sprite->data1) == 0)
+ if ((--sprite->data[1]) == 0)
{
- sprite->data1 = 8;
- sprite->data2++;
- sprite->data2 &= 3;
- if (sprite->data2 == 0)
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 0)
{
- sprite->data3++;
+ sprite->data[3]++;
}
}
- phase = (sprite->data2 + 3) & 3;
+ phase = (sprite->data[2] + 3) & 3;
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
- phase = (sprite->data2 + 2) & 3;
+ phase = (sprite->data[2] + 2) & 3;
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
- phase = (sprite->data2 + 1) & 3;
+ phase = (sprite->data[2] + 1) & 3;
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
- phase = sprite->data2;
+ phase = sprite->data[2];
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
- if (sprite->data3 > 2)
+ if (sprite->data[3] > 2)
{
- sprite->data0++;
- sprite->data1 = 8;
- sprite->data2 = 0;
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
}
}
void PokeballGlowEffect_3(struct Sprite *sprite)
{
u8 phase;
- if ((--sprite->data1) == 0)
+ if ((--sprite->data[1]) == 0)
{
- sprite->data1 = 8;
- sprite->data2++;
- sprite->data2 &= 3;
- if (sprite->data2 == 3)
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 3)
{
- sprite->data0++;
- sprite->data1 = 30;
+ sprite->data[0]++;
+ sprite->data[1] = 30;
}
}
- phase = sprite->data2;
+ phase = sprite->data[2];
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
@@ -1084,22 +1084,22 @@ void PokeballGlowEffect_3(struct Sprite *sprite)
void PokeballGlowEffect_4(struct Sprite *sprite)
{
- if ((--sprite->data1) == 0)
+ if ((--sprite->data[1]) == 0)
{
- sprite->data0++;
+ sprite->data[0]++;
}
}
void PokeballGlowEffect_5(struct Sprite *sprite)
{
- sprite->data0++;
+ sprite->data[0]++;
}
void PokeballGlowEffect_6(struct Sprite *sprite)
{
- if (sprite->data5 == 0 || IsFanfareTaskInactive())
+ if (sprite->data[5] == 0 || IsFanfareTaskInactive())
{
- sprite->data0++;
+ sprite->data[0]++;
}
}
@@ -1109,7 +1109,7 @@ void PokeballGlowEffect_7(struct Sprite *sprite)
void SpriteCB_PokeballGlow(struct Sprite *sprite)
{
- if (gSprites[sprite->data0].data0 > 4)
+ if (gSprites[sprite->data[0]].data[0] > 4)
{
FieldEffectFreeGraphicsResources(sprite);
}
@@ -1129,9 +1129,9 @@ u8 PokecenterHealEffectHelper(s16 x, s16 y)
void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
{
- if (sprite->data0 != 0)
+ if (sprite->data[0] != 0)
{
- sprite->data0 = 0;
+ sprite->data[0] = 0;
sprite->invisible = 0;
StartSpriteAnim(sprite, 1);
}
@@ -1153,21 +1153,21 @@ void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3)
spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0);
}
gSprites[spriteIdAtEnd].invisible = 1;
- gSprites[spriteIdAtEnd].data0 = a0;
+ gSprites[spriteIdAtEnd].data[0] = a0;
}
void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
{
- if (gTasks[sprite->data0].data[15])
+ if (gTasks[sprite->data[0]].data[15])
{
- if (sprite->data1 == 0 || (--sprite->data1) == 0)
+ if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
{
- sprite->data1 = 16;
+ sprite->data[1] = 16;
sprite->invisible ^= 1;
}
- sprite->data2++;
+ sprite->data[2]++;
}
- if (sprite->data2 > 127)
+ if (sprite->data[2] > 127)
{
FieldEffectFreeGraphicsResources(sprite);
}
@@ -1287,7 +1287,7 @@ bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0]
playerSprite = &gSprites[gPlayerAvatar.spriteId];
CameraObjectReset2();
gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble()));
task->data[4] = playerSprite->subspriteMode;
playerObject->mapobj_bit_26 = 1;
@@ -1382,7 +1382,7 @@ bool8 sub_80869B8(struct Task *task)
bool8 sub_80869F8(struct Task *task)
{
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
CameraObjectReset1();
UnfreezeMapObjects();
@@ -1678,7 +1678,7 @@ void sub_8086F64(u8 taskId)
bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject)
{
ScriptContext2_Enable();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
return FALSE;
}
@@ -1725,7 +1725,7 @@ bool8 sub_8087058(struct Task *task, struct MapObject *mapObject)
return TRUE;
}
ScriptContext2_Disable();
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(sub_8086F64));
FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
return FALSE;
@@ -1751,7 +1751,7 @@ void Task_Dive(u8 taskId)
bool8 sub_8087124(struct Task *task)
{
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
return FALSE;
}
@@ -1796,7 +1796,7 @@ bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite
FreezeMapObjects();
CameraObjectReset2();
SetCameraPanningCallback(NULL);
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
mapObject->mapobj_bit_26 = 1;
task->data[1] = 1;
task->data[0]++;
@@ -1913,7 +1913,7 @@ bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite
{
CameraObjectReset2();
FreezeMapObjects();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
mapObject->mapobj_bit_13 = 1;
task->data[0]++;
return FALSE;
@@ -1951,7 +1951,7 @@ bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite
{
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnfreezeMapObjects();
DestroyTask(FindTaskIdByFunc(sub_8087470));
@@ -1996,7 +1996,7 @@ bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite
{
FreezeMapObjects();
CameraObjectReset2();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
mapObject->mapobj_bit_26 = 1;
task->data[0]++;
return FALSE;
@@ -2480,7 +2480,7 @@ void sub_8088228(struct Task *task)
void sub_80882B4(struct Task *task)
{
task->data[5] -= 16;
- if (gSprites[task->data[15]].data7)
+ if (gSprites[task->data[15]].data[7])
{
task->data[0]++;
}
@@ -2607,7 +2607,7 @@ void sub_8088554(struct Task *task)
void sub_80885A8(struct Task *task)
{
sub_80886F8(task);
- if (gSprites[task->data[15]].data7)
+ if (gSprites[task->data[15]].data[7])
{
task->data[0]++;
}
@@ -2827,8 +2827,8 @@ u8 sub_8088830(u32 a0, u32 a1, u32 a2)
sprite = &gSprites[monSprite];
sprite->callback = SpriteCallbackDummy;
sprite->oam.priority = 0;
- sprite->data0 = a0;
- sprite->data6 = v0;
+ sprite->data[0] = a0;
+ sprite->data[6] = v0;
return monSprite;
}
@@ -2839,14 +2839,14 @@ void sub_8088890(struct Sprite *sprite)
if ((sprite->pos1.x -= 20) <= 0x78)
{
sprite->pos1.x = 0x78;
- sprite->data1 = 30;
+ sprite->data[1] = 30;
sprite->callback = sub_80888D4;
- if (sprite->data6)
+ if (sprite->data[6])
{
- PlayCry2(sprite->data0, 0, 0x7d, 0xa);
+ PlayCry2(sprite->data[0], 0, 0x7d, 0xa);
} else
{
- PlayCry1(sprite->data0, 0);
+ PlayCry1(sprite->data[0], 0);
}
}
}
@@ -2855,7 +2855,7 @@ void sub_80888F0(struct Sprite *);
void sub_80888D4(struct Sprite *sprite)
{
- if ((--sprite->data1) == 0)
+ if ((--sprite->data[1]) == 0)
{
sprite->callback = sub_80888F0;
}
@@ -2865,7 +2865,7 @@ void sub_80888F0(struct Sprite *sprite)
{
if (sprite->pos1.x < -0x40)
{
- sprite->data7 = 1;
+ sprite->data[7] = 1;
} else
{
sprite->pos1.x -= 20;
@@ -2893,7 +2893,7 @@ void sub_8088984(struct Task *task)
{
ScriptContext2_Enable();
FreezeMapObjects();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(8);
PlayerGetDestCoords(&task->data[1], &task->data[2]);
MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]);
@@ -2947,7 +2947,7 @@ void sub_8088AF4(struct Task *task)
mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
gPlayerAvatar.flags &= 0xdf;
FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18));
sub_8127ED0(mapObject->mapobj_unk_1A, 1);
@@ -2969,7 +2969,7 @@ u8 FldEff_NPCFlyOut(void)
sprite->oam.paletteNum = 0;
sprite->oam.priority = 1;
sprite->callback = sub_8088BC4;
- sprite->data1 = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[0];
PlaySE(SE_W019);
return spriteId;
}
@@ -2977,19 +2977,19 @@ u8 FldEff_NPCFlyOut(void)
void sub_8088BC4(struct Sprite *sprite)
{
struct Sprite *npcSprite;
- sprite->pos2.x = Cos(sprite->data2, 0x8c);
- sprite->pos2.y = Sin(sprite->data2, 0x48);
- sprite->data2 = (sprite->data2 + 4) & 0xff;
- if (sprite->data0)
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[0])
{
- npcSprite = &gSprites[sprite->data1];
+ npcSprite = &gSprites[sprite->data[1]];
npcSprite->coordOffsetEnabled = 0;
npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x;
npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
npcSprite->pos2.x = 0;
npcSprite->pos2.y = 0;
}
- if (sprite->data2 >= 0x80)
+ if (sprite->data[2] >= 0x80)
{
FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
}
@@ -3024,7 +3024,7 @@ void sub_8088CA0(struct Task *task)
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
task->data[15] = gPlayerAvatar.flags;
- gPlayerAvatar.unk6 = 0x01;
+ gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(1);
sub_8059BF4();
FieldObjectSetSpecialAnim(mapObject, 0x39);
@@ -3149,7 +3149,7 @@ u8 sub_8088F60(void)
u8 sub_8088FA4(u8 spriteId)
{
- return gSprites[spriteId].data7;
+ return gSprites[spriteId].data[7];
}
void sub_8088FC0(u8 spriteId)
@@ -3161,20 +3161,20 @@ void sub_8088FC0(u8 spriteId)
sprite->pos1.y = 0x00;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */);
- sprite->data6 = 0x40;
+ memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */);
+ sprite->data[6] = 0x40;
}
void sub_8088FFC(u8 a0, u8 a1)
{
- gSprites[a0].data6 = a1;
+ gSprites[a0].data[6] = a1;
}
void sub_8089018(struct Sprite *sprite)
{
- if (sprite->data7 == 0)
+ if (sprite->data[7] == 0)
{
- if (sprite->data0 == 0)
+ if (sprite->data[0] == 0)
{
sprite->oam.affineMode = 3;
sprite->affineAnims = gSpriteAffineAnimTable_0839F44C;
@@ -3182,20 +3182,20 @@ void sub_8089018(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 0);
sprite->pos1.x = 0x76;
sprite->pos1.y = -0x30;
- sprite->data0++;
- sprite->data1 = 0x40;
- sprite->data2 = 0x100;
+ sprite->data[0]++;
+ sprite->data[1] = 0x40;
+ sprite->data[2] = 0x100;
}
- sprite->data1 += (sprite->data2 >> 8);
- sprite->pos2.x = Cos(sprite->data1, 0x78);
- sprite->pos2.y = Sin(sprite->data1, 0x78);
- if (sprite->data2 < 0x800)
+ sprite->data[1] += (sprite->data[2] >> 8);
+ sprite->pos2.x = Cos(sprite->data[1], 0x78);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] < 0x800)
{
- sprite->data2 += 0x60;
+ sprite->data[2] += 0x60;
}
- if (sprite->data1 > 0x81)
+ if (sprite->data[1] > 0x81)
{
- sprite->data7++;
+ sprite->data[7]++;
sprite->oam.affineMode = 0;
FreeOamMatrix(sprite->oam.matrixNum);
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0);
@@ -3206,29 +3206,29 @@ void sub_8089018(struct Sprite *sprite)
void sub_80890D8(struct Sprite *sprite)
{
struct Sprite *sprite1;
- sprite->pos2.x = Cos(sprite->data2, 0x8c);
- sprite->pos2.y = Sin(sprite->data2, 0x48);
- sprite->data2 = (sprite->data2 + 4) & 0xff;
- if (sprite->data6 != 0x40)
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[6] != 0x40)
{
- sprite1 = &gSprites[sprite->data6];
+ sprite1 = &gSprites[sprite->data[6]];
sprite1->coordOffsetEnabled = 0;
sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x;
sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
sprite1->pos2.x = 0;
sprite1->pos2.y = 0;
}
- if (sprite->data2 >= 0x80)
+ if (sprite->data[2] >= 0x80)
{
- sprite->data7 = 1;
+ sprite->data[7] = 1;
}
}
void sub_808914C(struct Sprite *sprite)
{
- if (sprite->data7 == 0)
+ if (sprite->data[7] == 0)
{
- if (sprite->data0 == 0)
+ if (sprite->data[0] == 0)
{
sprite->oam.affineMode = 3;
sprite->affineAnims = gSpriteAffineAnimTable_0839F44C;
@@ -3236,31 +3236,31 @@ void sub_808914C(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 1);
sprite->pos1.x = 0x5e;
sprite->pos1.y = -0x20;
- sprite->data0++;
- sprite->data1 = 0xf0;
- sprite->data2 = 0x800;
- sprite->data4 = 0x80;
+ sprite->data[0]++;
+ sprite->data[1] = 0xf0;
+ sprite->data[2] = 0x800;
+ sprite->data[4] = 0x80;
}
- sprite->data1 += sprite->data2 >> 8;
- sprite->data3 += sprite->data2 >> 8;
- sprite->data1 &= 0xff;
- sprite->pos2.x = Cos(sprite->data1, 0x20);
- sprite->pos2.y = Sin(sprite->data1, 0x78);
- if (sprite->data2 > 0x100)
+ sprite->data[1] += sprite->data[2] >> 8;
+ sprite->data[3] += sprite->data[2] >> 8;
+ sprite->data[1] &= 0xff;
+ sprite->pos2.x = Cos(sprite->data[1], 0x20);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] > 0x100)
{
- sprite->data2 -= sprite->data4;
+ sprite->data[2] -= sprite->data[4];
}
- if (sprite->data4 < 0x100)
+ if (sprite->data[4] < 0x100)
{
- sprite->data4 += 24;
+ sprite->data[4] += 24;
}
- if (sprite->data2 < 0x100)
+ if (sprite->data[2] < 0x100)
{
- sprite->data2 = 0x100;
+ sprite->data[2] = 0x100;
}
- if (sprite->data3 >= 60)
+ if (sprite->data[3] >= 60)
{
- sprite->data7++;
+ sprite->data[7]++;
sprite->oam.affineMode = 0;
FreeOamMatrix(sprite->oam.matrixNum);
sprite->invisible = 1;
@@ -3296,7 +3296,7 @@ void sub_80892A0(struct Task *task)
task->data[0]++;
task->data[2] = 17;
task->data[15] = gPlayerAvatar.flags;
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(0x01);
if (task->data[15] & 0x08)
{
@@ -3398,7 +3398,7 @@ void fishE(struct Task *task)
sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state));
FieldObjectTurn(mapObject, DIR_SOUTH);
gPlayerAvatar.flags = task->data[15];
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
FieldEffectActiveListRemove(FLDEFF_FLY_IN);
DestroyTask(FindTaskIdByFunc(sub_8089270));
}
diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c
index 2ad8bdce3..1d831d2e9 100644
--- a/src/field/field_effect_helpers.c
+++ b/src/field/field_effect_helpers.c
@@ -2,7 +2,7 @@
#include "sprite.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "field_map_obj.h"
#include "field_camera.h"
@@ -89,9 +89,9 @@ void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 f
newSprite->affineAnims = gDummySpriteAffineAnimTable;
newSprite->affineAnimBeginning = TRUE;
newSprite->subspriteMode = 0;
- newSprite->data0 = sprite->data0;
- newSprite->data1 = mapObject->localId;
- newSprite->data7 = flag;
+ newSprite->data[0] = sprite->data[0];
+ newSprite->data[1] = mapObject->localId;
+ newSprite->data[7] = flag;
npc_pal_op(mapObject, newSprite);
if (!flag)
{
@@ -110,10 +110,10 @@ static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite)
u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)];
memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C);
- sprite->data2 = 0;
+ sprite->data[2] = 0;
if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E))))
{
- sprite->data2 = unk_8041e2c[whichElement - 1];
+ sprite->data[2] = unk_8041e2c[whichElement - 1];
npc_pal_op_A(mapObject, sprite->oam.paletteNum);
}
else
@@ -162,9 +162,9 @@ static void sub_81269E0(struct Sprite *sprite)
struct MapObject *mapObject;
struct Sprite *oldSprite;
- mapObject = &gMapObjects[sprite->data0];
+ mapObject = &gMapObjects[sprite->data[0]];
oldSprite = &gSprites[mapObject->spriteId];
- if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data1)
+ if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data[1])
{
sprite->inUse = FALSE;
}
@@ -179,13 +179,13 @@ static void sub_81269E0(struct Sprite *sprite)
sprite->subspriteTableNum = oldSprite->subspriteTableNum;
sprite->invisible = oldSprite->invisible;
sprite->pos1.x = oldSprite->pos1.x;
- sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data2;
+ sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data[2];
sprite->centerToCornerVecX = oldSprite->centerToCornerVecX;
sprite->centerToCornerVecY = oldSprite->centerToCornerVecY;
sprite->pos2.x = oldSprite->pos2.x;
sprite->pos2.y = -oldSprite->pos2.y;
sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled;
- if (sprite->data7 == FALSE)
+ if (sprite->data[7] == FALSE)
{
sprite->oam.matrixNum = 0;
if (oldSprite->oam.matrixNum & 0x8)
@@ -224,15 +224,15 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y)
struct Sprite *sprite;
sprite = &gSprites[spriteId];
- if (sprite->invisible || sprite->data0 != x || sprite->data1 != y)
+ if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y)
{
sub_80603CC(x, y, &x2, &y2);
sprite = &gSprites[spriteId];
sprite->pos1.x = x2 + 8;
sprite->pos1.y = y2 + 8;
sprite->invisible = FALSE;
- sprite->data0 = x;
- sprite->data1 = y;
+ sprite->data[0] = x;
+ sprite->data[1] = y;
StartSpriteAnim(sprite, animNum - 1);
}
}
@@ -249,10 +249,10 @@ u32 FldEff_Shadow(void)
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].coordOffsetEnabled = TRUE;
- gSprites[spriteId].data0 = gFieldEffectArguments[0];
- gSprites[spriteId].data1 = gFieldEffectArguments[1];
- gSprites[spriteId].data2 = gFieldEffectArguments[2];
- gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize];
+ gSprites[spriteId].data[0] = gFieldEffectArguments[0];
+ gSprites[spriteId].data[1] = gFieldEffectArguments[1];
+ gSprites[spriteId].data[2] = gFieldEffectArguments[2];
+ gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize];
}
return 0;
}
@@ -263,7 +263,7 @@ void oamc_shadow(struct Sprite *sprite)
struct MapObject *mapObject;
struct Sprite *linkedSprite;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId))
{
FieldEffectStop(sprite, FLDEFF_SHADOW);
}
@@ -273,7 +273,7 @@ void oamc_shadow(struct Sprite *sprite)
linkedSprite = &gSprites[mapObject->spriteId];
sprite->oam.priority = linkedSprite->oam.priority;
sprite->pos1.x = linkedSprite->pos1.x;
- sprite->pos1.y = linkedSprite->pos1.y + sprite->data3;
+ sprite->pos1.y = linkedSprite->pos1.y + sprite->data[3];
if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F))
{
FieldEffectStop(sprite, FLDEFF_SHADOW);
@@ -297,12 +297,12 @@ u32 FldEff_TallGrass(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = gFieldEffectArguments[0];
- sprite->data2 = gFieldEffectArguments[1];
- sprite->data3 = gFieldEffectArguments[4];
- sprite->data4 = gFieldEffectArguments[5];
- sprite->data5 = gFieldEffectArguments[6];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
+ sprite->data[5] = gFieldEffectArguments[6];
if (gFieldEffectArguments[7])
{
SeekSpriteAnim(sprite, 4);
@@ -320,28 +320,28 @@ void unc_grass_normal(struct Sprite *sprite)
u8 mapObjectId;
struct MapObject *mapObject;
- mapNum = sprite->data5 >> 8;
- mapGroup = sprite->data5;
+ mapNum = sprite->data[5] >> 8;
+ mapGroup = sprite->data[5];
if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
{
- sprite->data1 -= gCamera.x;
- sprite->data2 -= gCamera.y;
- sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ sprite->data[1] -= gCamera.x;
+ sprite->data[2] -= gCamera.y;
+ sprite->data[5] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
}
- localId = sprite->data3 >> 8;
- mapNum = sprite->data3;
- mapGroup = sprite->data4;
- metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
- if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ localId = sprite->data[3] >> 8;
+ mapNum = sprite->data[3];
+ mapGroup = sprite->data[4];
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded))
{
FieldEffectStop(sprite, FLDEFF_TALL_GRASS);
}
else
{
mapObject = &gMapObjects[mapObjectId];
- if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2]))
{
- sprite->data7 = TRUE;
+ sprite->data[7] = TRUE;
}
metatileBehavior = 0;
if (sprite->animCmdIndex == 0)
@@ -349,7 +349,7 @@ void unc_grass_normal(struct Sprite *sprite)
metatileBehavior = 4;
}
sub_806487C(sprite, 0);
- sub_812882C(sprite, sprite->data0, metatileBehavior);
+ sub_812882C(sprite, sprite->data[0], metatileBehavior);
}
}
@@ -365,8 +365,8 @@ u32 FldEff_JumpTallGrass(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = 12;
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 12;
}
return 0;
}
@@ -381,7 +381,7 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
if (gSprites[i].inUse)
{
sprite = &gSprites[i];
- if (sprite->callback == unc_grass_normal && (x == sprite->data1 && y == sprite->data2) && (localId == (u8)(sprite->data3 >> 8) && mapNum == (sprite->data3 & 0xFF) && mapGroup == sprite->data4))
+ if (sprite->callback == unc_grass_normal && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4]))
{
return i;
}
@@ -406,12 +406,12 @@ u32 FldEff_LongGrass(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]);
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = gFieldEffectArguments[0];
- sprite->data2 = gFieldEffectArguments[1];
- sprite->data3 = gFieldEffectArguments[4];
- sprite->data4 = gFieldEffectArguments[5];
- sprite->data5 = gFieldEffectArguments[6];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
+ sprite->data[5] = gFieldEffectArguments[6];
if (gFieldEffectArguments[7])
{
SeekSpriteAnim(sprite, 6);
@@ -429,31 +429,31 @@ void unc_grass_tall(struct Sprite *sprite)
u8 mapObjectId;
struct MapObject *mapObject;
- mapNum = sprite->data5 >> 8;
- mapGroup = sprite->data5;
+ mapNum = sprite->data[5] >> 8;
+ mapGroup = sprite->data[5];
if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
{
- sprite->data1 -= gCamera.x;
- sprite->data2 -= gCamera.y;
- sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ sprite->data[1] -= gCamera.x;
+ sprite->data[2] -= gCamera.y;
+ sprite->data[5] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
}
- localId = sprite->data3 >> 8;
- mapNum = sprite->data3;
- mapGroup = sprite->data4;
- metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
- if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ localId = sprite->data[3] >> 8;
+ mapNum = sprite->data[3];
+ mapGroup = sprite->data[4];
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded))
{
FieldEffectStop(sprite, FLDEFF_LONG_GRASS);
}
else
{
mapObject = &gMapObjects[mapObjectId];
- if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2]))
{
- sprite->data7 = TRUE;
+ sprite->data[7] = TRUE;
}
sub_806487C(sprite, 0);
- sub_812882C(sprite, sprite->data0, 0);
+ sub_812882C(sprite, sprite->data[0], 0);
}
}
@@ -469,8 +469,8 @@ u32 FldEff_JumpLongGrass(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = 18;
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 18;
}
return 0;
}
@@ -490,11 +490,11 @@ u32 FldEff_ShortGrass(void)
sprite = &(gSprites[spriteId]);
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
- sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data[4] = gSprites[mapObject->spriteId].pos1.y;
}
return 0;
}
@@ -507,7 +507,7 @@ void sub_8127334(struct Sprite *sprite)
const struct MapObjectGraphicsInfo *graphicsInfo;
struct Sprite *linkedSprite;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18)
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18)
{
FieldEffectStop(sprite, FLDEFF_SHORT_GRASS);
}
@@ -517,10 +517,10 @@ void sub_8127334(struct Sprite *sprite)
linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
y = linkedSprite->pos1.y;
x = linkedSprite->pos1.x;
- if (x != sprite->data3 || y != sprite->data4)
+ if (x != sprite->data[3] || y != sprite->data[4])
{
- sprite->data3 = x;
- sprite->data4 = y;
+ sprite->data[3] = x;
+ sprite->data[4] = y;
if (sprite->animEnded)
{
StartSpriteAnim(sprite, 0);
@@ -547,7 +547,7 @@ u32 FldEff_SandFootprints(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data7 = FLDEFF_SAND_FOOTPRINTS;
+ sprite->data[7] = FLDEFF_SAND_FOOTPRINTS;
StartSpriteAnim(sprite, gFieldEffectArguments[4]);
}
return 0;
@@ -565,7 +565,7 @@ u32 FldEff_DeepSandFootprints(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data7 = FLDEFF_DEEP_SAND_FOOTPRINTS;
+ sprite->data[7] = FLDEFF_DEEP_SAND_FOOTPRINTS;
StartSpriteAnim(sprite, gFieldEffectArguments[4]);
}
return spriteId;
@@ -583,7 +583,7 @@ u32 FldEff_BikeTireTracks(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data7 = FLDEFF_BIKE_TIRE_TRACKS;
+ sprite->data[7] = FLDEFF_BIKE_TIRE_TRACKS;
StartSpriteAnim(sprite, gFieldEffectArguments[4]);
}
return spriteId;
@@ -591,14 +591,14 @@ u32 FldEff_BikeTireTracks(void)
void sub_8127584(struct Sprite *sprite)
{
- gUnknown_08401E40[sprite->data0](sprite);
+ gUnknown_08401E40[sprite->data[0]](sprite);
}
static void sub_81275A0(struct Sprite *sprite)
{
- if (++sprite->data1 > 40)
+ if (++sprite->data[1] > 40)
{
- sprite->data0 = 1;
+ sprite->data[0] = 1;
}
sub_806487C(sprite, FALSE);
}
@@ -606,11 +606,11 @@ static void sub_81275A0(struct Sprite *sprite)
static void sub_81275C4(struct Sprite *sprite)
{
sprite->invisible ^= 1;
- sprite->data1 ++;
+ sprite->data[1] ++;
sub_806487C(sprite, sprite->invisible);
- if (sprite->data1 > 56)
+ if (sprite->data[1] > 56)
{
- FieldEffectStop(sprite, sprite->data7);
+ FieldEffectStop(sprite, sprite->data[7]);
}
}
@@ -633,9 +633,9 @@ u32 FldEff_Splash(void)
sprite->coordOffsetEnabled = TRUE;
linkedSprite = &gSprites[mapObject->spriteId];
sprite->oam.priority = linkedSprite->oam.priority;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
PlaySE(SE_MIZU);
}
@@ -646,7 +646,7 @@ void sub_81276B4(struct Sprite *sprite)
{
u8 mapObjectId;
- if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId))
{
FieldEffectStop(sprite, FLDEFF_SPLASH);
}
@@ -670,8 +670,8 @@ u32 FldEff_JumpSmallSplash(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = FLDEFF_JUMP_SMALL_SPLASH;
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = FLDEFF_JUMP_SMALL_SPLASH;
}
return 0;
}
@@ -688,8 +688,8 @@ u32 FldEff_JumpBigSplash(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = FLDEFF_JUMP_BIG_SPLASH;
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = FLDEFF_JUMP_BIG_SPLASH;
}
return 0;
}
@@ -712,11 +712,11 @@ u32 FldEff_FeetInFlowingWater(void)
sprite->callback = sub_81278D8;
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = -1;
- sprite->data4 = -1;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = -1;
+ sprite->data[4] = -1;
sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
StartSpriteAnim(sprite, 1);
}
@@ -729,7 +729,7 @@ static void sub_81278D8(struct Sprite *sprite)
struct Sprite *linkedSprite;
struct MapObject *mapObject;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19)
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19)
{
FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER);
}
@@ -741,10 +741,10 @@ static void sub_81278D8(struct Sprite *sprite)
sprite->pos1.y = linkedSprite->pos1.y;
sprite->subpriority = linkedSprite->subpriority;
sub_806487C(sprite, FALSE);
- if (mapObject->coords2.x != sprite->data3 || mapObject->coords2.y != sprite->data4)
+ if (mapObject->coords2.x != sprite->data[3] || mapObject->coords2.y != sprite->data[4])
{
- sprite->data3 = mapObject->coords2.x;
- sprite->data4 = mapObject->coords2.y;
+ sprite->data[3] = mapObject->coords2.x;
+ sprite->data[4] = mapObject->coords2.y;
if (!sprite->invisible)
{
PlaySE(SE_MIZU);
@@ -764,7 +764,7 @@ u32 FldEff_Ripple(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = FLDEFF_RIPPLE;
+ sprite->data[0] = FLDEFF_RIPPLE;
}
return 0;
}
@@ -784,11 +784,11 @@ u32 FldEff_HotSpringsWater(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
- sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data[4] = gSprites[mapObject->spriteId].pos1.y;
}
return 0;
}
@@ -799,7 +799,7 @@ void sub_8127A7C(struct Sprite *sprite)
const struct MapObjectGraphicsInfo *graphicsInfo;
struct Sprite *linkedSprite;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21)
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21)
{
FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER);
}
@@ -826,7 +826,7 @@ u32 FldEff_Unknown19(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = FLDEFF_UNKNOWN_19;
+ sprite->data[0] = FLDEFF_UNKNOWN_19;
}
return 0;
}
@@ -843,7 +843,7 @@ u32 FldEff_Unknown20(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = FLDEFF_UNKNOWN_20;
+ sprite->data[0] = FLDEFF_UNKNOWN_20;
}
return 0;
}
@@ -860,7 +860,7 @@ u32 FldEff_Unknown21(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = FLDEFF_UNKNOWN_21;
+ sprite->data[0] = FLDEFF_UNKNOWN_21;
}
return 0;
}
@@ -877,7 +877,7 @@ u32 FldEff_Unknown22(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = FLDEFF_UNKNOWN_22;
+ sprite->data[0] = FLDEFF_UNKNOWN_22;
}
return 0;
}
@@ -909,26 +909,26 @@ u32 FldEff_Ash(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data1 = gFieldEffectArguments[0];
- sprite->data2 = gFieldEffectArguments[1];
- sprite->data3 = gFieldEffectArguments[4];
- sprite->data4 = gFieldEffectArguments[5];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
}
return 0;
}
void sub_8127D84(struct Sprite *sprite)
{
- gUnknown_08401E48[sprite->data0](sprite);
+ gUnknown_08401E48[sprite->data[0]](sprite);
}
static void sub_8127DA0(struct Sprite *sprite)
{
sprite->invisible = TRUE;
sprite->animPaused = TRUE;
- if (--sprite->data4 == 0)
+ if (--sprite->data[4] == 0)
{
- sprite->data0 = 1;
+ sprite->data[0] = 1;
}
}
@@ -936,10 +936,10 @@ static void sub_8127DD0(struct Sprite *sprite)
{
sprite->invisible = FALSE;
sprite->animPaused = FALSE;
- MapGridSetMetatileIdAt(sprite->data1, sprite->data2, sprite->data3);
- CurrentMapDrawMetatileAt(sprite->data1, sprite->data2);
+ MapGridSetMetatileIdAt(sprite->data[1], sprite->data[2], sprite->data[3]);
+ CurrentMapDrawMetatileAt(sprite->data[1], sprite->data[2]);
gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE;
- sprite->data0 = 2;
+ sprite->data[0] = 2;
}
static void sub_8127E30(struct Sprite *sprite)
@@ -963,10 +963,10 @@ u32 FldEff_SurfBlob(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.paletteNum = 0;
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = -1;
- sprite->data6 = -1;
- sprite->data7 = -1;
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = -1;
+ sprite->data[6] = -1;
+ sprite->data[7] = -1;
}
FieldEffectActiveListRemove(FLDEFF_SURF_BLOB);
return spriteId;
@@ -974,33 +974,33 @@ u32 FldEff_SurfBlob(void)
void sub_8127ED0(u8 spriteId, u8 value)
{
- gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF) | (value & 0xF);
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF);
}
void sub_8127EFC(u8 spriteId, u8 value)
{
- gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4);
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4);
}
void sub_8127F28(u8 spriteId, u8 value, s16 data1)
{
- gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8);
- gSprites[spriteId].data1 = data1;
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8);
+ gSprites[spriteId].data[1] = data1;
}
static u8 sub_8127F5C(struct Sprite *sprite)
{
- return sprite->data0 & 0xF;
+ return sprite->data[0] & 0xF;
}
static u8 sub_8127F64(struct Sprite *sprite)
{
- return (sprite->data0 & 0xF0) >> 4;
+ return (sprite->data[0] & 0xF0) >> 4;
}
static u8 sub_8127F70(struct Sprite *sprite)
{
- return (sprite->data0 & 0xF00) >> 8;
+ return (sprite->data[0] & 0xF00) >> 8;
}
void sub_8127F7C(struct Sprite *sprite)
@@ -1008,7 +1008,7 @@ void sub_8127F7C(struct Sprite *sprite)
struct MapObject *mapObject;
struct Sprite *linkedSprite;
- mapObject = &gMapObjects[sprite->data2];
+ mapObject = &gMapObjects[sprite->data[2]];
linkedSprite = &gSprites[mapObject->spriteId];
sub_8127FD4(mapObject, sprite);
sub_812800C(mapObject, sprite);
@@ -1036,15 +1036,15 @@ static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite)
x = mapObject->coords2.x;
y = mapObject->coords2.y;
- if (sprite->pos2.y == 0 && (x != sprite->data6 || y != sprite->data7))
+ if (sprite->pos2.y == 0 && (x != sprite->data[6] || y != sprite->data[7]))
{
- sprite->data5 = sprite->pos2.y;
- for (sprite->data6 = x, sprite->data7 = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data6, y = sprite->data7)
+ sprite->data[5] = sprite->pos2.y;
+ for (sprite->data[6] = x, sprite->data[7] = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data[6], y = sprite->data[7])
{
MoveCoords(i, &x, &y);
if (MapGridGetZCoordAt(x, y) == 3)
{
- sprite->data5 ++;
+ sprite->data[5] ++;
break;
}
}
@@ -1141,13 +1141,13 @@ static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite
v0 = sub_8127F5C(sprite);
if (v0 != 0)
{
- if (((u16)(++ sprite->data4) & unk_8401E5A[sprite->data5]) == 0)
+ if (((u16)(++ sprite->data[4]) & unk_8401E5A[sprite->data[5]]) == 0)
{
- sprite->pos2.y += sprite->data3;
+ sprite->pos2.y += sprite->data[3];
}
- if ((sprite->data4 & 0x0F) == 0)
+ if ((sprite->data[4] & 0x0F) == 0)
{
- sprite->data3 = -sprite->data3;
+ sprite->data[3] = -sprite->data[3];
}
if (v0 != 2)
{
@@ -1157,7 +1157,7 @@ static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite
}
else
{
- linkedSprite->pos2.y = sprite->data1 + sprite->pos2.y;
+ linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y;
}
sprite->pos1.x = linkedSprite->pos1.x;
sprite->pos1.y = linkedSprite->pos1.y + 8;
@@ -1174,8 +1174,8 @@ u8 sub_8128124(u8 oldSpriteId)
sprite = &gSprites[spriteId];
sprite->callback = sub_8128174;
sprite->invisible = TRUE;
- sprite->data0 = oldSpriteId;
- sprite->data1 = 1;
+ sprite->data[0] = oldSpriteId;
+ sprite->data[1] = 1;
return spriteId;
}
@@ -1183,14 +1183,14 @@ static void sub_8128174(struct Sprite *sprite)
{
struct Sprite *oldSprite;
- oldSprite = &gSprites[sprite->data0];
- if (((sprite->data2++) & 0x03) == 0)
+ oldSprite = &gSprites[sprite->data[0]];
+ if (((sprite->data[2]++) & 0x03) == 0)
{
- oldSprite->pos2.y += sprite->data1;
+ oldSprite->pos2.y += sprite->data[1];
}
- if ((sprite->data2 & 0x0F) == 0)
+ if ((sprite->data[2] & 0x0F) == 0)
{
- sprite->data1 = -sprite->data1;
+ sprite->data[1] = -sprite->data[1];
}
}
@@ -1206,8 +1206,8 @@ u32 FldEff_Dust(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->data0 = gFieldEffectArguments[2];
- sprite->data1 = 10;
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 10;
}
return 0;
}
@@ -1229,11 +1229,11 @@ u32 FldEff_SandPile(void)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
- sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data[4] = gSprites[mapObject->spriteId].pos1.y;
sprite->pos2.y = (graphicsInfo->height >> 1) - 2;
SeekSpriteAnim(sprite, 2);
}
@@ -1246,7 +1246,7 @@ void sub_81282E0(struct Sprite *sprite)
s16 x;
s16 y;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20)
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20)
{
FieldEffectStop(sprite, FLDEFF_SAND_PILE);
}
@@ -1254,10 +1254,10 @@ void sub_81282E0(struct Sprite *sprite)
{
y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y;
x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x;
- if (x != sprite->data3 || y != sprite->data4)
+ if (x != sprite->data[3] || y != sprite->data[4])
{
- sprite->data3 = x;
- sprite->data4 = y;
+ sprite->data[3] = x;
+ sprite->data[4] = y;
if (sprite->animEnded)
{
StartSpriteAnim(sprite, 0);
@@ -1288,9 +1288,9 @@ u32 FldEff_Bubbles(void)
void sub_8128410(struct Sprite *sprite)
{
- sprite->data0 += 0x80;
- sprite->data0 &= 0x100;
- sprite->pos1.y -= sprite->data0 >> 8;
+ sprite->data[0] += 0x80;
+ sprite->data[0] &= 0x100;
+ sprite->pos1.y -= sprite->data[0] >> 8;
sub_806487C(sprite, FALSE);
if (sprite->invisible || sprite->animEnded)
{
@@ -1311,7 +1311,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
sprite->oam.paletteNum = 5;
- sprite->data0 = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
+ sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
}
return 0;
}
@@ -1349,10 +1349,10 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled ++;
sprite->oam.paletteNum = paletteNum;
- sprite->data1 = fldEff;
- sprite->data2 = gFieldEffectArguments[0];
- sprite->data3 = gFieldEffectArguments[1];
- sprite->data4 = gFieldEffectArguments[2];
+ sprite->data[1] = fldEff;
+ sprite->data[2] = gFieldEffectArguments[0];
+ sprite->data[3] = gFieldEffectArguments[1];
+ sprite->data[4] = gFieldEffectArguments[2];
}
return spriteId;
}
@@ -1363,9 +1363,9 @@ void sub_81285AC(struct Sprite *sprite)
const struct MapObjectGraphicsInfo *graphicsInfo;
struct Sprite *linkedSprite;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data2, sprite->data3, sprite->data4, &mapObjectId))
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[2], sprite->data[3], sprite->data[4], &mapObjectId))
{
- FieldEffectStop(sprite, sprite->data1);
+ FieldEffectStop(sprite, sprite->data[1]);
}
// else {
graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
@@ -1374,18 +1374,18 @@ void sub_81285AC(struct Sprite *sprite)
sprite->pos1.x = linkedSprite->pos1.x;
sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16;
sprite->subpriority = linkedSprite->subpriority - 1;
- if (sprite->data0 == 1)
+ if (sprite->data[0] == 1)
{
- sprite->data0 ++;
+ sprite->data[0] ++;
StartSpriteAnim(sprite, 1);
}
- if (sprite->data0 == 2 && sprite->animEnded)
+ if (sprite->data[0] == 2 && sprite->animEnded)
{
- sprite->data7 = 1;
+ sprite->data[7] = 1;
}
- if (sprite->data0 == 3)
+ if (sprite->data[0] == 3)
{
- FieldEffectStop(sprite, sprite->data1);
+ FieldEffectStop(sprite, sprite->data[1]);
}
// }
}
@@ -1394,7 +1394,7 @@ void sub_812869C(struct MapObject *mapObject)
{
if (mapObject->mapobj_unk_21 == 1)
{
- gSprites[mapObject->mapobj_unk_1A].data0 ++;
+ gSprites[mapObject->mapobj_unk_1A].data[0] ++;
}
}
@@ -1411,10 +1411,10 @@ bool8 sub_81286C4(struct MapObject *mapObject)
return TRUE;
}
sprite = &gSprites[mapObject->mapobj_unk_1A];
- if (sprite->data7)
+ if (sprite->data[7])
{
mapObject->mapobj_unk_21 = 2;
- sprite->data0 ++;
+ sprite->data[0] ++;
return TRUE;
}
return FALSE;
@@ -1438,19 +1438,19 @@ u32 FldEff_Sparkle(void)
void sub_8128774(struct Sprite *sprite)
{
- if (sprite->data0 == 0)
+ if (sprite->data[0] == 0)
{
if (sprite->animEnded)
{
sprite->invisible = TRUE;
- sprite->data0 ++;
+ sprite->data[0] ++;
}
- if (sprite->data0 == 0)
+ if (sprite->data[0] == 0)
{
return;
}
}
- if (++ sprite->data1 >= 35)
+ if (++ sprite->data[1] >= 35)
{
FieldEffectStop(sprite, FLDEFF_SPARKLE);
}
@@ -1460,12 +1460,12 @@ void sub_81287C4(struct Sprite *sprite)
{
if (sprite->animEnded)
{
- FieldEffectStop(sprite, sprite->data1);
+ FieldEffectStop(sprite, sprite->data[1]);
}
else
{
sub_806487C(sprite, FALSE);
- SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0);
+ SetObjectSubpriorityByZCoord(sprite->data[0], sprite, 0);
}
}
@@ -1473,7 +1473,7 @@ void sub_8128800(struct Sprite *sprite)
{
if (sprite->animEnded)
{
- FieldEffectStop(sprite, sprite->data0);
+ FieldEffectStop(sprite, sprite->data[0]);
}
else
{
diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c
index 82776d18c..829ce2dfa 100644
--- a/src/field/field_fadetransition.c
+++ b/src/field/field_fadetransition.c
@@ -17,7 +17,7 @@
#include "palette.h"
#include "overworld.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "start_menu.h"
#include "task.h"
diff --git a/src/field/field_ground_effect.c b/src/field/field_ground_effect.c
index 5af8ea3e3..25b678ff9 100644
--- a/src/field/field_ground_effect.c
+++ b/src/field/field_ground_effect.c
@@ -458,76 +458,52 @@ bool8 AreZCoordsCompatible(u8 a, u8 b)
void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite)
{
- u8 *ptr;
-
gFieldEffectArguments[0] = mapObj->coords2.x;
gFieldEffectArguments[1] = mapObj->coords2.y;
gFieldEffectArguments[2] = mapObj->elevation;
gFieldEffectArguments[3] = 2;
- gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;
gFieldEffectArguments[5] = mapObj->mapGroup;
-
- ptr = (u8 *)&gSaveBlock1;
- gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
- | (u8)gSaveBlock1.location.mapGroup;
-
+ gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 1;
FieldEffectStart(FLDEFF_TALL_GRASS);
}
void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite)
{
- u8 *ptr;
-
gFieldEffectArguments[0] = mapObj->coords2.x;
gFieldEffectArguments[1] = mapObj->coords2.y;
gFieldEffectArguments[2] = mapObj->elevation;
gFieldEffectArguments[3] = 2;
- gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;
gFieldEffectArguments[5] = mapObj->mapGroup;
-
- ptr = (u8 *)&gSaveBlock1;
- gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
- | (u8)gSaveBlock1.location.mapGroup;
-
+ gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 0;
FieldEffectStart(FLDEFF_TALL_GRASS);
}
void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite)
{
- u8 *ptr;
-
gFieldEffectArguments[0] = mapObj->coords2.x;
gFieldEffectArguments[1] = mapObj->coords2.y;
gFieldEffectArguments[2] = mapObj->elevation;
gFieldEffectArguments[3] = 2;
- gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;
gFieldEffectArguments[5] = mapObj->mapGroup;
-
- ptr = (u8 *)&gSaveBlock1;
- gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
- | (u8)gSaveBlock1.location.mapGroup;
-
+ gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 1;
FieldEffectStart(FLDEFF_LONG_GRASS);
}
void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite)
{
- u8 *ptr;
-
gFieldEffectArguments[0] = mapObj->coords2.x;
gFieldEffectArguments[1] = mapObj->coords2.y;
gFieldEffectArguments[2] = mapObj->elevation;
gFieldEffectArguments[3] = 2;
gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
gFieldEffectArguments[5] = mapObj->mapGroup;
-
- ptr = (u8 *)&gSaveBlock1;
- gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
- | (u8)gSaveBlock1.location.mapGroup;
-
+ gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;
gFieldEffectArguments[7] = 0;
FieldEffectStart(FLDEFF_LONG_GRASS);
}
diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c
index 0cba448a9..81c0c5854 100644
--- a/src/field/field_map_obj.c
+++ b/src/field/field_map_obj.c
@@ -10,12 +10,12 @@
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "palette.h"
-#include "rng.h"
+#include "random.h"
#include "overworld.h"
#include "sprite.h"
#include "metatile_behavior.h"
-#include "map_constants.h"
-#include "map_object_constants.h"
+#include "constants/maps.h"
+#include "constants/map_objects.h"
#include "trainer_see.h"
// rodata
@@ -1354,7 +1354,7 @@ const u32 gFieldEffectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effect_obj
const u32 gFieldEffectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_large.4bpp");
const u32 gFieldEffectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_extra_large.4bpp");
const u32 filler_8368A08[0x48] = {};
-const u32 gFieldEffectPic_CutGrass[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp");
+const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effect_objects/pics/cut_grass.4bpp");
const u32 FieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp");
const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effect_objects/palettes/06.gbapal");
const u32 gFieldEffectPic_Ripple_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/0.4bpp");
@@ -1578,13 +1578,13 @@ void (*const gUnknown_0836DA88[])(struct Sprite *) =
const u8 gUnknown_0836DBBC[] = {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const u8 gUnknown_0836DC09[] = {DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_EAST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH};
-#include "data/field_map_obj/map_object_graphics_info_pointers.h"
-#include "data/field_map_obj/field_effect_object_template_pointers.h"
-#include "data/field_map_obj/map_object_pic_tables.h"
-#include "data/field_map_obj/map_object_anims.h"
-#include "data/field_map_obj/base_oam.h"
-#include "data/field_map_obj/map_object_subsprites.h"
-#include "data/field_map_obj/map_object_graphics_info.h"
+#include "../data/field_map_obj/map_object_graphics_info_pointers.h"
+#include "../data/field_map_obj/field_effect_object_template_pointers.h"
+#include "../data/field_map_obj/map_object_pic_tables.h"
+#include "../data/field_map_obj/map_object_anims.h"
+#include "../data/field_map_obj/base_oam.h"
+#include "../data/field_map_obj/map_object_subsprites.h"
+#include "../data/field_map_obj/map_object_graphics_info.h"
const struct SpritePalette gUnknown_0837377C[] = {
{gMapObjectPalette0, 0x1103},
@@ -1790,14 +1790,14 @@ const u16 *const gUnknown_0837399C[] = {
Unknown_8373988
};
-#include "data/field_map_obj/berry_tree_graphics_tables.h"
-#include "data/field_map_obj/field_effect_objects.h"
+#include "../data/field_map_obj/berry_tree_graphics_tables.h"
+#include "../data/field_map_obj/field_effect_objects.h"
const s16 gUnknown_0837520C[] = {0x20, 0x40, 0x60, 0x80};
const s16 gUnknown_08375204[] = {0x20, 0x40, 0x80, 0xc0};
const s16 gUnknown_0837521C[] = {0x20, 0x30, 0x40, 0x50};
-#include "data/field_map_obj/callback_subroutine_pointers.h"
+#include "../data/field_map_obj/callback_subroutine_pointers.h"
const u8 gUnknown_083755F4[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01};
const u8 gUnknown_083755FD[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05};
@@ -1886,7 +1886,7 @@ const u8 gUnknown_08375767[][4] = {
{3, 4, 2, 1}
};
-#include "data/field_map_obj/anim_func_ptrs.h"
+#include "../data/field_map_obj/anim_func_ptrs.h"
// text
@@ -2343,7 +2343,7 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *
sprite->pos1.y += 16 + sprite->centerToCornerVecY;
sprite->oam.paletteNum = gfxInfo->paletteSlot;
sprite->coordOffsetEnabled = TRUE;
- sprite->data0 = mapObjectId;
+ sprite->data[0] = mapObjectId;
mapObject->spriteId = spriteId;
mapObject->mapobj_bit_12 = gfxInfo->inanimate;
if (!mapObject->mapobj_bit_12)
@@ -2489,8 +2489,8 @@ u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction)
sprite->pos1.y += sprite->centerToCornerVecY;
sprite->oam.paletteNum = gfxInfo->paletteSlot;
sprite->coordOffsetEnabled = TRUE;
- sprite->data0 = b;
- sprite->data1 = elevation;
+ sprite->data[0] = b;
+ sprite->data[1] = elevation;
if (gfxInfo->paletteSlot == 10)
npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot);
if (subspriteTables != NULL)
@@ -2640,7 +2640,7 @@ void sub_805B75C(u8 a, s16 b, s16 c)
SetSubspriteTables(sprite, subspriteTables);
sprite->oam.paletteNum = gfxInfo->paletteSlot;
sprite->coordOffsetEnabled = TRUE;
- sprite->data0 = a;
+ sprite->data[0] = a;
mapObject->spriteId = spriteId;
if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 11)
StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18));
@@ -2775,11 +2775,11 @@ void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGr
gMapObjects[mapObjectId].mapobj_bit_13 = d;
}
-void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup)
+void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, void *localId, void *mapNum, void *mapGroup)
{
- *localId = mapObject->localId;
- *mapNum = mapObject->mapNum;
- *mapGroup = mapObject->mapGroup;
+ *(u8 *)localId = mapObject->localId;
+ *(u8 *)mapNum = mapObject->mapNum;
+ *(u8 *)mapGroup = mapObject->mapGroup;
}
void sub_805BCC0(s16 x, s16 y)
@@ -3042,7 +3042,7 @@ u8 AddCameraObject(u8 a)
u8 spriteId = CreateSprite(&gSpriteTemplate_830FD24, 0, 0, 4);
gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data0 = a;
+ gSprites[spriteId].data[0] = a;
return spriteId;
}
@@ -3050,35 +3050,35 @@ void ObjectCB_CameraObject(struct Sprite *sprite)
{
void (*cameraObjectFuncs[3])(struct Sprite *);
memcpy(cameraObjectFuncs, gCameraObjectFuncs, sizeof gCameraObjectFuncs);
- cameraObjectFuncs[sprite->data1](sprite);
+ cameraObjectFuncs[sprite->data[1]](sprite);
}
void CameraObject_0(struct Sprite *sprite)
{
- sprite->pos1.x = gSprites[sprite->data0].pos1.x;
- sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
sprite->invisible = TRUE;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
CameraObject_1(sprite);
}
void CameraObject_1(struct Sprite *sprite)
{
- s16 x = gSprites[sprite->data0].pos1.x;
- s16 y = gSprites[sprite->data0].pos1.y;
+ s16 x = gSprites[sprite->data[0]].pos1.x;
+ s16 y = gSprites[sprite->data[0]].pos1.y;
- sprite->data2 = x - sprite->pos1.x;
- sprite->data3 = y - sprite->pos1.y;
+ sprite->data[2] = x - sprite->pos1.x;
+ sprite->data[3] = y - sprite->pos1.y;
sprite->pos1.x = x;
sprite->pos1.y = y;
}
void CameraObject_2(struct Sprite *sprite)
{
- sprite->pos1.x = gSprites[sprite->data0].pos1.x;
- sprite->pos1.y = gSprites[sprite->data0].pos1.y;
- sprite->data2 = 0;
- sprite->data3 = 0;
+ sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
}
struct Sprite *FindCameraObject(void)
@@ -3099,7 +3099,7 @@ void CameraObjectReset1(void)
if (cameraSprite != NULL)
{
- cameraSprite->data1 = 0;
+ cameraSprite->data[1] = 0;
cameraSprite->callback(cameraSprite);
}
}
@@ -3110,7 +3110,7 @@ void CameraObjectSetFollowedObjectId(u8 spriteId)
if (cameraSprite != NULL)
{
- cameraSprite->data0 = spriteId;
+ cameraSprite->data[0] = spriteId;
CameraObjectReset1();
}
}
@@ -3122,14 +3122,14 @@ u8 CameraObjectGetFollowedObjectId(void)
if (cameraSprite == NULL)
return 64;
else
- return cameraSprite->data0;
+ return cameraSprite->data[0];
}
void CameraObjectReset2(void)
{
struct Sprite *cameraSprite = FindCameraObject();
- cameraSprite->data1 = 2;
+ cameraSprite->data[1] = 2;
}
u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority)
@@ -3333,7 +3333,7 @@ fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224);
u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -3342,7 +3342,7 @@ extern void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8);
u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -3356,7 +3356,7 @@ u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
- sprite->data1 = 3;
+ sprite->data[1] = 3;
return 1;
}
@@ -3366,7 +3366,7 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) != 0)
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -3381,10 +3381,10 @@ u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite)
memcpy(directions, gUnknown_08375240, 4);
direction = directions[Random() & 3];
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 5;
+ sprite->data[1] = 5;
if (sub_805FF20(mapObject, direction) != 0)
{
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 1;
}
@@ -3393,7 +3393,7 @@ u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18));
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 6;
+ sprite->data[1] = 6;
return 1;
}
@@ -3402,7 +3402,7 @@ u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite) != 0)
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -3649,14 +3649,14 @@ fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270);
u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -3666,7 +3666,7 @@ u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -3675,7 +3675,7 @@ u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -3692,7 +3692,7 @@ u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 3];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -3701,14 +3701,14 @@ fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284);
u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -3719,7 +3719,7 @@ u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
- sprite->data1 = 3;
+ sprite->data[1] = 3;
return 1;
}
@@ -3727,7 +3727,7 @@ u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) != 0)
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -3740,10 +3740,10 @@ u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite)
memcpy(directions, gUnknown_083752A0, 2);
direction = directions[Random() & 1];
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 5;
+ sprite->data[1] = 5;
if (sub_805FF20(mapObject, direction) != 0)
{
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 1;
}
@@ -3752,7 +3752,7 @@ u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18));
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 6;
+ sprite->data[1] = 6;
return 1;
}
@@ -3761,7 +3761,7 @@ u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite) != 0)
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -3771,14 +3771,14 @@ fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4);
u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805D104(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -3789,7 +3789,7 @@ u8 sub_805D130(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
- sprite->data1 = 3;
+ sprite->data[1] = 3;
return 1;
}
@@ -3797,7 +3797,7 @@ u8 sub_805D16C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) != 0)
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -3810,10 +3810,10 @@ u8 sub_805D18C(struct MapObject *mapObject, struct Sprite *sprite)
memcpy(directions, gUnknown_083752C0, 2);
direction = directions[Random() & 1];
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 5;
+ sprite->data[1] = 5;
if (sub_805FF20(mapObject, direction) != 0)
{
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 1;
}
@@ -3822,7 +3822,7 @@ u8 sub_805D1D8(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18));
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 6;
+ sprite->data[1] = 6;
return 1;
}
@@ -3831,7 +3831,7 @@ u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite) != 0)
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -3842,7 +3842,7 @@ u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -3850,7 +3850,7 @@ u8 sub_805D2A0(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite) != 0)
{
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
return 0;
@@ -3867,18 +3867,18 @@ u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite);
void FieldObjectCB_BerryTree(struct Sprite *sprite)
{
struct MapObject *mapObject;
- mapObject = &gMapObjects[sprite->data0];
- if (!(sprite->data7 & 1))
+ mapObject = &gMapObjects[sprite->data[0]];
+ if (!(sprite->data[7] & 1))
{
get_berry_tree_graphics(mapObject, sprite);
- sprite->data7 |= 1;
+ sprite->data[7] |= 1;
}
meta_step(mapObject, sprite, sub_805D314);
}
u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite)
{
- return gUnknown_083752D0[sprite->data1](mapObject, sprite);
+ return gUnknown_083752D0[sprite->data[1]](mapObject, sprite);
}
u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sprite)
@@ -3890,7 +3890,7 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp
berryTreeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId);
if (!berryTreeStage)
{
- if (!(sprite->data7 & 4) && sprite->animNum == 4)
+ if (!(sprite->data[7] & 4) && sprite->animNum == 4)
{
gFieldEffectArguments[0] = mapObject->coords2.x;
gFieldEffectArguments[1] = mapObject->coords2.y;
@@ -3906,12 +3906,12 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp
berryTreeStage--;
if (sprite->animNum != berryTreeStage)
{
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
get_berry_tree_graphics(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, 0x39);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -3919,7 +3919,7 @@ u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
- sprite->data1 = 0;
+ sprite->data[1] = 0;
return 1;
}
return 0;
@@ -3928,9 +3928,9 @@ u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite)
u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 3;
- sprite->data2 = 0;
- sprite->data7 |= 2;
+ sprite->data[1] = 3;
+ sprite->data[2] = 0;
+ sprite->data[7] |= 2;
gFieldEffectArguments[0] = mapObject->coords2.x;
gFieldEffectArguments[1] = mapObject->coords2.y;
gFieldEffectArguments[2] = sprite->subpriority - 1;
@@ -3941,14 +3941,14 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp
u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite)
{
- sprite->data2++;
- mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1);
+ sprite->data[2]++;
+ mapObject->mapobj_bit_13 = ((sprite->data[2] & 0x2) >> 1);
sprite->animPaused = 1;
- if (sprite->data2 > 64)
+ if (sprite->data[2] > 64)
{
get_berry_tree_graphics(mapObject, sprite);
- sprite->data1 = 4;
- sprite->data2 = 0;
+ sprite->data[1] = 4;
+ sprite->data[2] = 0;
return 1;
}
return 0;
@@ -3956,13 +3956,13 @@ u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite)
u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite)
{
- sprite->data2++;
- mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1);
+ sprite->data[2]++;
+ mapObject->mapobj_bit_13 = ((sprite->data[2] & 0x2) >> 1);
sprite->animPaused = 1;
- if (sprite->data2 > 64)
+ if (sprite->data[2] > 64)
{
- sprite->data1 = 0;
- sprite->data7 &= (-3);
+ sprite->data[1] = 0;
+ sprite->data[7] &= (-3);
return 1;
}
return 0;
@@ -3973,14 +3973,14 @@ fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4);
u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805D54C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -3990,7 +3990,7 @@ u8 sub_805D578(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -3999,7 +3999,7 @@ u8 sub_805D5BC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4016,7 +4016,7 @@ u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4025,14 +4025,14 @@ fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8);
u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805D68C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4042,7 +4042,7 @@ u8 sub_805D6B8(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837520C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4051,7 +4051,7 @@ u8 sub_805D6FC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4068,7 +4068,7 @@ u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4077,14 +4077,14 @@ fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C);
u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805D7CC(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4094,7 +4094,7 @@ u8 sub_805D7F8(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4103,7 +4103,7 @@ u8 sub_805D83C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4120,7 +4120,7 @@ u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4129,14 +4129,14 @@ fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324);
u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805D90C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4146,7 +4146,7 @@ u8 sub_805D938(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4155,7 +4155,7 @@ u8 sub_805D97C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4172,7 +4172,7 @@ u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4181,14 +4181,14 @@ fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C);
u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805DA4C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4198,7 +4198,7 @@ u8 sub_805DA78(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4207,7 +4207,7 @@ u8 sub_805DABC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4224,7 +4224,7 @@ u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4233,14 +4233,14 @@ fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354);
u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805DB8C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4250,7 +4250,7 @@ u8 sub_805DBB8(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4259,7 +4259,7 @@ u8 sub_805DBFC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4276,7 +4276,7 @@ u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 1];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4285,14 +4285,14 @@ fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C);
u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805DCCC(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4302,7 +4302,7 @@ u8 sub_805DCF8(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4311,7 +4311,7 @@ u8 sub_805DD3C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4328,7 +4328,7 @@ u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 3];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4337,14 +4337,14 @@ fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384);
u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805DE0C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4354,7 +4354,7 @@ u8 sub_805DE38(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4363,7 +4363,7 @@ u8 sub_805DE7C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4380,7 +4380,7 @@ u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 3];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4389,14 +4389,14 @@ fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C);
u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805DF4C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4406,7 +4406,7 @@ u8 sub_805DF78(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4415,7 +4415,7 @@ u8 sub_805DFBC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4432,7 +4432,7 @@ u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 3];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4441,14 +4441,14 @@ fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4);
u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805E08C(struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4458,7 +4458,7 @@ u8 sub_805E0B8(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_8064820(sprite, gUnknown_0837521C[Random() & 3]);
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4467,7 +4467,7 @@ u8 sub_805E0FC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 4;
+ sprite->data[1] = 4;
return 1;
}
return 0;
@@ -4484,7 +4484,7 @@ u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[Random() & 3];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4494,7 +4494,7 @@ u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4503,7 +4503,7 @@ u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
sub_8064820(sprite, 0x30);
- sprite->data1 = 2;
+ sprite->data[1] = 2;
}
return 0;
}
@@ -4512,7 +4512,7 @@ u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4528,7 +4528,7 @@ u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[mapObject->mapobj_unk_18];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 0;
+ sprite->data[1] = 0;
return 1;
}
@@ -4538,7 +4538,7 @@ u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4547,7 +4547,7 @@ u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
sub_8064820(sprite, 0x30);
- sprite->data1 = 2;
+ sprite->data[1] = 2;
}
return 0;
}
@@ -4556,7 +4556,7 @@ u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
- sprite->data1 = 3;
+ sprite->data[1] = 3;
}
return 0;
}
@@ -4572,7 +4572,7 @@ u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite)
direction = directions[mapObject->mapobj_unk_18];
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 0;
+ sprite->data[1] = 0;
return 1;
}
@@ -4581,7 +4581,7 @@ fieldmap_object_cb(sub_805E37C, sub_805E3A0, gUnknown_083753FC);
u8 sub_805E3C0(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4594,7 +4594,7 @@ u8 sub_805E3D4(struct MapObject *mapObject, struct Sprite *sprite)
direction = GetOppositeDirection(direction);
}
FieldObjectSetDirection(mapObject, direction);
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4622,7 +4622,7 @@ u8 sub_805E40C(struct MapObject *mapObject, struct Sprite *sprite)
}
FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId);
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 3;
+ sprite->data[1] = 3;
return 1;
}
@@ -4631,7 +4631,7 @@ u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -4639,7 +4639,7 @@ u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite)
u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -4667,7 +4667,7 @@ u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct
}
FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId);
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -4676,7 +4676,7 @@ u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -5004,13 +5004,13 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite
{
mapObject->mapobj_unk_21 = player_get_direction_lower_nybble();
}
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite)
{
- if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2)
+ if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER)
{
return 0;
}
@@ -5022,7 +5022,7 @@ u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite)
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
mapObject->mapobj_bit_1 = 0;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
}
return 0;
}
@@ -5036,7 +5036,7 @@ bool8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, boo
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2)));
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -5055,7 +5055,7 @@ bool8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, boo
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = 1;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
@@ -5074,7 +5074,7 @@ bool8 sub_805F4F0(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5093,7 +5093,7 @@ bool8 sub_805F5A8(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5112,7 +5112,7 @@ bool8 sub_805F660(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5124,7 +5124,7 @@ bool8 cph_IM_DIFFERENT(struct MapObject *mapObject, struct Sprite *sprite, u8 pl
direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
FieldObjectSetRegularAnim(mapObject, sprite, sub_806084C(direction));
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5143,7 +5143,7 @@ bool8 sub_805F760(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5164,7 +5164,7 @@ bool8 oac_hopping(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
mapObject->mapobj_bit_1 = TRUE;
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return TRUE;
}
@@ -5172,7 +5172,7 @@ fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0);
u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite)
{
- if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2)
+ if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER)
{
return 0;
}
@@ -5184,15 +5184,15 @@ u8 sub_805F9F8(struct MapObject *, struct Sprite *);
void FieldObjectCB_TreeDisguise(struct Sprite *sprite)
{
struct MapObject *mapObject;
- mapObject = &gMapObjects[sprite->data0];
- if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
+ mapObject = &gMapObjects[sprite->data[0]];
+ if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data[7] == 0))
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE);
mapObject->mapobj_unk_21 = 1;
- sprite->data7 ++;
+ sprite->data[7] ++;
}
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8);
+ meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805F9F8);
}
u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite)
@@ -5204,34 +5204,34 @@ u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite)
void FieldObjectCB_MountainDisguise(struct Sprite *sprite)
{
struct MapObject *mapObject;
- mapObject = &gMapObjects[sprite->data0];
- if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
+ mapObject = &gMapObjects[sprite->data[0]];
+ if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data[7] == 0))
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE);
mapObject->mapobj_unk_21 = 1;
- sprite->data7 ++;
+ sprite->data[7] ++;
}
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8);
+ meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805F9F8);
}
u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite);
void FieldObjectCB_Hidden1(struct Sprite *sprite)
{
- if (sprite->data7 == 0)
+ if (sprite->data[7] == 0)
{
- gMapObjects[sprite->data0].mapobj_bit_26 = 1;
+ gMapObjects[sprite->data[0]].mapobj_bit_26 = 1;
sprite->subspriteMode = 2;
sprite->oam.priority = 3;
- sprite->data7 ++;
+ sprite->data[7] ++;
}
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8);
+ meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805FAD8);
}
u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite)
{
- return gUnknown_083755CC[sprite->data1](mapObject, sprite);
+ return gUnknown_083755CC[sprite->data[1]](mapObject, sprite);
}
u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite)
@@ -5244,7 +5244,7 @@ u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
- sprite->data1 = 0;
+ sprite->data[1] = 0;
}
return 0;
}
@@ -5255,7 +5255,7 @@ u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -5265,7 +5265,7 @@ u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -5275,7 +5275,7 @@ u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18));
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -5286,7 +5286,7 @@ u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite)
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
mapObject->mapobj_bit_13 = 1;
- sprite->data1 = 1;
+ sprite->data[1] = 1;
return 1;
}
@@ -5294,7 +5294,7 @@ u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
- sprite->data1 = 2;
+ sprite->data[1] = 2;
return 1;
}
return 0;
@@ -5314,7 +5314,7 @@ void npc_reset(struct MapObject *mapObject, struct Sprite *sprite)
mapObject->mapobj_bit_6 = 0;
mapObject->mapobj_bit_7 = 0;
mapObject->mapobj_unk_1C = 0xff;
- sprite->data1 = 0;
+ sprite->data[1] = 0;
}
u8 FieldObjectDirectionToImageAnimId(u8 direction)
@@ -5446,7 +5446,7 @@ void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern)
mapObject->mapobj_unk_21 = 0;
mapObject->animId = 0;
gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern];
- gSprites[mapObject->spriteId].data1 = 0;
+ gSprites[mapObject->spriteId].data[1] = 0;
}
u8 npc_running_behaviour_by_direction(u8 direction)
@@ -5549,17 +5549,16 @@ static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s
return 0;
}
-bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup)
+// this function is only used in berry.c, but its unknown whether its intended context is the berry tree check or if its checking for the flickering.
+bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 mapObjectId;
+
if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
- {
- if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2)
- {
- return 1;
- }
- }
- return 0;
+ if (gSprites[gMapObjects[mapObjectId].spriteId].data[7] & 2)
+ return TRUE;
+
+ return FALSE;
}
void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup)
@@ -5567,7 +5566,7 @@ void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup)
u8 mapObjectId;
if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
{
- gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4;
+ gSprites[gMapObjects[mapObjectId].spriteId].data[7] |= 4;
}
}
@@ -5705,7 +5704,7 @@ bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId)
mapObject->mapobj_unk_1C = specialAnimId;
mapObject->mapobj_bit_6 = 1;
mapObject->mapobj_bit_7 = 0;
- gSprites[mapObject->spriteId].data2 = 0;
+ gSprites[mapObject->spriteId].data[2] = 0;
return FALSE;
}
@@ -5728,8 +5727,8 @@ void FieldObjectClearAnim(struct MapObject *mapObject)
mapObject->mapobj_unk_1C = 0xFF;
mapObject->mapobj_bit_6 = 0;
mapObject->mapobj_bit_7 = 0;
- gSprites[mapObject->spriteId].data1 = 0;
- gSprites[mapObject->spriteId].data2 = 0;
+ gSprites[mapObject->spriteId].data[1] = 0;
+ gSprites[mapObject->spriteId].data[2] = 0;
}
bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject)
@@ -5963,7 +5962,7 @@ u32 state_to_direction(u8 a0, u32 a1, u32 a2)
void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite)
{
- if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite))
+ if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data[2]](mapObject, sprite))
{
mapObject->mapobj_bit_7 = 1;
}
@@ -5971,10 +5970,10 @@ void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *spri
bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite)
{
- if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite))
+ if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data[2]](mapObject, sprite))
{
mapObject->mapobj_unk_1C = 0xFF;
- sprite->data2 = 0;
+ sprite->data[2] = 0;
return 1;
}
return 0;
@@ -5983,7 +5982,7 @@ bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *spr
void FieldObjectSetRegularAnim(struct MapObject *mapObject, struct Sprite *sprite, u8 animId)
{
mapObject->mapobj_unk_1C = animId;
- sprite->data2 = 0;
+ sprite->data[2] = 0;
}
void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 direction)
@@ -5992,7 +5991,7 @@ void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
npc_coords_shift_still(mapObject);
sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18));
sprite->animPaused = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
}
u8 sub_8060CE0(struct MapObject *mapObject, struct Sprite *sprite)
@@ -6031,7 +6030,7 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
oamt_npc_ministep_reset(sprite, direction, a3);
sprite->animPaused = 0;
mapObject->mapobj_bit_2 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
}
extern u8 (*const gUnknown_083759C0[5])(u8);
@@ -6076,7 +6075,7 @@ void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
sub_806467C(sprite, direction);
sprite->animPaused = 0;
mapObject->mapobj_bit_2 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
}
void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction)
@@ -6109,7 +6108,7 @@ bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (an_walk_any_2(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6127,7 +6126,7 @@ bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (an_walk_any_2(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6145,7 +6144,7 @@ bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (an_walk_any_2(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6163,7 +6162,7 @@ bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (an_walk_any_2(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6181,7 +6180,7 @@ bool8 sub_806105C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6199,7 +6198,7 @@ bool8 sub_806109C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6217,7 +6216,7 @@ bool8 sub_80610DC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6235,7 +6234,7 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6253,7 +6252,7 @@ void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]);
npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y);
sub_80646E4(sprite, direction, a4, a5);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
sprite->animPaused = 0;
mapObject->mapobj_bit_2 = 1;
mapObject->mapobj_bit_4 = 1;
@@ -6274,11 +6273,11 @@ u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const ca
u8 retval;
memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A);
retval = callback(sprite);
- if (retval == 1 && vSPp4[sprite->data4] != 0)
+ if (retval == 1 && vSPp4[sprite->data[4]] != 0)
{
x = 0;
y = 0;
- sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]);
+ sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data[4]], vSPp4[sprite->data[4]]);
npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y);
mapObject->mapobj_bit_2 = 1;
mapObject->mapobj_bit_4 = 1;
@@ -6354,7 +6353,7 @@ bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6371,7 +6370,7 @@ bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6388,7 +6387,7 @@ bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6405,7 +6404,7 @@ bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6413,16 +6412,16 @@ bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite)
void sub_8061508(struct Sprite *sprite, u16 duration)
{
- sprite->data2 = 1;
- sprite->data3 = duration;
+ sprite->data[2] = 1;
+ sprite->data[3] = duration;
}
bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite)
{
- sprite->data3--;
- if (!sprite->data3)
+ sprite->data[3]--;
+ if (!sprite->data[3])
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6473,7 +6472,7 @@ bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6488,7 +6487,7 @@ bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6503,7 +6502,7 @@ bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6518,7 +6517,7 @@ bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6529,16 +6528,16 @@ void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
FieldObjectSetDirection(mapObject, direction);
sub_805FE28(mapObject, sprite, animId);
sprite->animPaused = 0;
- sprite->data2 = 1;
- sprite->data3 = duration;
+ sprite->data[2] = 1;
+ sprite->data[3] = duration;
}
bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite)
{
- sprite->data3--;
- if (sprite->data3 == 0)
+ sprite->data[3]--;
+ if (sprite->data[3] == 0)
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
sprite->animPaused = 1;
return TRUE;
}
@@ -6547,7 +6546,7 @@ bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite)
{
- if (sprite->data3 & 1)
+ if (sprite->data[3] & 1)
{
sprite->animDelayCounter++;
}
@@ -6662,7 +6661,7 @@ bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6681,7 +6680,7 @@ bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6700,7 +6699,7 @@ bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6719,7 +6718,7 @@ bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6737,7 +6736,7 @@ bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6755,7 +6754,7 @@ bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6774,7 +6773,7 @@ bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6793,7 +6792,7 @@ bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6811,7 +6810,7 @@ bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6829,7 +6828,7 @@ bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6848,7 +6847,7 @@ bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6867,7 +6866,7 @@ bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6885,7 +6884,7 @@ bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6903,7 +6902,7 @@ bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6921,7 +6920,7 @@ bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6939,7 +6938,7 @@ bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6949,7 +6948,7 @@ void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct
{
obj_anim_image_set_and_seek(sprite, animNum, 0);
FieldObjectSetDirection(mapObject, direction);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
}
bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite)
@@ -6964,7 +6963,7 @@ bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064864(sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -6988,7 +6987,7 @@ bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8061340(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
mapObject->mapobj_bit_5 = 0;
return TRUE;
}
@@ -7007,7 +7006,7 @@ bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8061340(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
mapObject->mapobj_bit_5 = 0;
return TRUE;
}
@@ -7026,7 +7025,7 @@ bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8061340(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
mapObject->mapobj_bit_5 = 0;
return TRUE;
}
@@ -7045,7 +7044,7 @@ bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8061340(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
mapObject->mapobj_bit_5 = 0;
return TRUE;
}
@@ -7055,36 +7054,36 @@ bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite)
{
u8 objectId;
- if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId))
+ if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), &objectId))
{
an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y));
}
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite)
{
u8 objectId;
- if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId))
+ if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), &objectId))
{
an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)));
}
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_9 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_9 = 0;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
@@ -7101,7 +7100,7 @@ bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7120,7 +7119,7 @@ bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7139,7 +7138,7 @@ bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7158,7 +7157,7 @@ bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7177,7 +7176,7 @@ bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7196,7 +7195,7 @@ bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7215,7 +7214,7 @@ bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7234,7 +7233,7 @@ bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7253,7 +7252,7 @@ bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061358(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7272,7 +7271,7 @@ bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061358(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7291,7 +7290,7 @@ bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061358(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7310,7 +7309,7 @@ bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061358(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7331,66 +7330,66 @@ bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_25 = 0;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_25 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_12 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_13 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_13 = 0;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
FieldEffectStart(FLDEFF_HEART_ICON);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
@@ -7405,13 +7404,13 @@ bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite)
}
else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A)
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
else
{
sub_812869C(mapObject);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return sub_8062704(mapObject, sprite);
}
}
@@ -7420,7 +7419,7 @@ bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_81286C4(mapObject))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7429,7 +7428,7 @@ bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite)
{
obj_anim_image_set_and_seek(sprite, 1, 0);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return FALSE;
}
@@ -7438,7 +7437,7 @@ bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8064864(sprite))
{
sub_8064820(sprite, 0x20);
- sprite->data2 = 2;
+ sprite->data[2] = 2;
}
return FALSE;
}
@@ -7449,7 +7448,7 @@ bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8064824(sprite))
{
mapObject->mapobj_bit_13 = 1;
- sprite->data2 = 3;
+ sprite->data[2] = 3;
}
return FALSE;
}
@@ -7457,7 +7456,7 @@ bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite)
{
obj_anim_image_set_and_seek(sprite, 1, 0);
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return FALSE;
}
@@ -7466,7 +7465,7 @@ bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8064864(sprite))
{
sub_8064820(sprite, 0x20);
- sprite->data2 = 2;
+ sprite->data[2] = 2;
}
return FALSE;
}
@@ -7477,7 +7476,7 @@ bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8064824(sprite))
{
mapObject->mapobj_bit_13 = 1;
- sprite->data2 = 3;
+ sprite->data[2] = 3;
}
return FALSE;
}
@@ -7485,14 +7484,14 @@ bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite)
bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_26 = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_26 = 0;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
return TRUE;
}
@@ -7528,7 +7527,7 @@ bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite)
if (an_walk_any_2(mapObject, sprite))
{
sprite->affineAnimPaused = 1;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7549,7 +7548,7 @@ bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite)
if (an_walk_any_2(mapObject, sprite))
{
sprite->affineAnimPaused = 1;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7561,7 +7560,7 @@ void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 directio
npc_coords_shift_still(mapObject);
sub_805FE64(mapObject, sprite, sub_805FDD8(direction));
sprite->animPaused = 1;
- sprite->data2 = 1;
+ sprite->data[2] = 1;
}
bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite)
@@ -7680,7 +7679,7 @@ bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7699,7 +7698,7 @@ bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7718,7 +7717,7 @@ bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7737,7 +7736,7 @@ bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7756,7 +7755,7 @@ bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7775,7 +7774,7 @@ bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7794,7 +7793,7 @@ bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7813,7 +7812,7 @@ bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7832,7 +7831,7 @@ bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7851,7 +7850,7 @@ bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7870,7 +7869,7 @@ bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7889,7 +7888,7 @@ bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite)
if (sub_8061328(mapObject, sprite))
{
mapObject->mapobj_bit_22 = 0;
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7938,7 +7937,7 @@ bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7956,7 +7955,7 @@ bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7974,7 +7973,7 @@ bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -7992,7 +7991,7 @@ bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8016,7 +8015,7 @@ bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8034,7 +8033,7 @@ bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8052,7 +8051,7 @@ bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8070,7 +8069,7 @@ bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8095,7 +8094,7 @@ bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8113,7 +8112,7 @@ bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8131,7 +8130,7 @@ bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
@@ -8149,7 +8148,7 @@ bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite)
{
if (npc_obj_ministep_stop_on_arrival(mapObject, sprite))
{
- sprite->data2 = 2;
+ sprite->data[2] = 2;
return TRUE;
}
return FALSE;
diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c
index b453d3794..f1a113d44 100644
--- a/src/field/field_map_obj_helpers.c
+++ b/src/field/field_map_obj_helpers.c
@@ -98,21 +98,21 @@ void Step8(struct Sprite *sprite, u8 dir)
void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3)
{
- sprite->data3 = a2;
- sprite->data4 = a3;
- sprite->data5 = 0;
+ sprite->data[3] = a2;
+ sprite->data[4] = a3;
+ sprite->data[5] = 0;
}
bool8 obj_npc_ministep(struct Sprite *sprite)
{
- if (sprite->data5 >= gUnknown_08376194[sprite->data4])
+ if (sprite->data[5] >= gUnknown_08376194[sprite->data[4]])
return FALSE;
- gUnknown_08376180[sprite->data4][sprite->data5](sprite, sprite->data3);
+ gUnknown_08376180[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]);
- sprite->data5++;
+ sprite->data[5]++;
- if (sprite->data5 < gUnknown_08376194[sprite->data4])
+ if (sprite->data[5] < gUnknown_08376194[sprite->data[4]])
return FALSE;
return TRUE;
@@ -120,22 +120,22 @@ bool8 obj_npc_ministep(struct Sprite *sprite)
void sub_806467C(struct Sprite *sprite, u8 a2)
{
- sprite->data3 = a2;
- sprite->data4 = 0;
- sprite->data5 = 0;
+ sprite->data[3] = a2;
+ sprite->data[4] = 0;
+ sprite->data[5] = 0;
}
bool8 sub_806468C(struct Sprite *sprite)
{
- if (!(sprite->data4 & 1))
+ if (!(sprite->data[4] & 1))
{
- Step1(sprite, sprite->data3);
- sprite->data5++;
+ Step1(sprite, sprite->data[3]);
+ sprite->data[5]++;
}
- sprite->data4++;
+ sprite->data[4]++;
- if (sprite->data5 > 15)
+ if (sprite->data[5] > 15)
return TRUE;
else
return FALSE;
@@ -148,10 +148,10 @@ s16 sub_80646C8(s16 a1, u8 a2)
void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4)
{
- sprite->data3 = a2;
- sprite->data4 = a3;
- sprite->data5 = a4;
- sprite->data6 = 0;
+ sprite->data[3] = a2;
+ sprite->data[4] = a3;
+ sprite->data[5] = a4;
+ sprite->data[6] = 0;
}
u8 sub_8064704(struct Sprite *sprite)
@@ -165,17 +165,17 @@ u8 sub_8064704(struct Sprite *sprite)
v2 = 0;
- if (sprite->data4)
- Step1(sprite, sprite->data3);
+ if (sprite->data[4])
+ Step1(sprite, sprite->data[3]);
- sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5);
+ sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]);
- sprite->data6++;
+ sprite->data[6]++;
- if (sprite->data6 == (v5[sprite->data4] >> 1))
+ if (sprite->data[6] == (v5[sprite->data[4]] >> 1))
v2 = 1;
- if (sprite->data6 >= v5[sprite->data4])
+ if (sprite->data[6] >= v5[sprite->data[4]])
{
sprite->pos2.y = 0;
v2 = -1;
@@ -195,17 +195,17 @@ u8 sub_806478C(struct Sprite *sprite)
v2 = 0;
- if (sprite->data4 && !(sprite->data6 & 1))
- Step1(sprite, sprite->data3);
+ if (sprite->data[4] && !(sprite->data[6] & 1))
+ Step1(sprite, sprite->data[3]);
- sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5);
+ sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]);
- sprite->data6++;
+ sprite->data[6]++;
- if (sprite->data6 == (v5[sprite->data4] >> 1))
+ if (sprite->data[6] == (v5[sprite->data[4]] >> 1))
v2 = 1;
- if (sprite->data6 >= v5[sprite->data4])
+ if (sprite->data[6] >= v5[sprite->data[4]])
{
sprite->pos2.y = 0;
v2 = -1;
@@ -216,14 +216,14 @@ u8 sub_806478C(struct Sprite *sprite)
void sub_8064820(struct Sprite *sprite, u16 a2)
{
- sprite->data3 = a2;
+ sprite->data[3] = a2;
}
bool8 sub_8064824(struct Sprite *sprite)
{
- sprite->data3--;
+ sprite->data[3]--;
- if (sprite->data3 == 0)
+ if (sprite->data[3] == 0)
return TRUE;
else
return FALSE;
@@ -273,7 +273,7 @@ void sub_806487C(struct Sprite *sprite, bool8 invisible)
void sub_8064970(struct Sprite *sprite)
{
- SetObjectSubpriorityByZCoord(sprite->data1, sprite, 1);
+ SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
sub_806487C(sprite, 0);
}
@@ -283,7 +283,7 @@ void sub_8064990(u8 a1, u8 dir)
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
- if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data0 == a1)
+ if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data[0] == a1)
{
u8 animNum = FieldObjectDirectionToImageAnimId(dir);
StartSpriteAnim(sprite, animNum);
@@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir)
u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
return FieldEffectStart(fieldEffectId);
}
diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c
index 6c1c9123a..d80076be4 100644
--- a/src/field/field_player_avatar.c
+++ b/src/field/field_player_avatar.c
@@ -9,15 +9,15 @@
#include "field_map_obj_helpers.h"
#include "fieldmap.h"
#include "main.h"
-#include "map_object_constants.h"
+#include "constants/map_objects.h"
#include "menu.h"
#include "metatile_behavior.h"
#include "party_menu.h"
-#include "rng.h"
+#include "random.h"
#include "overworld.h"
#include "rotating_gate.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "strings2.h"
#include "task.h"
@@ -31,7 +31,7 @@ static bool8 sub_8058854(struct MapObject *, u8);
static void npc_clear_strange_bits(struct MapObject *a);
static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c);
static void PlayerAllowForcedMovementIfMovingSameDirection(void);
-static u8 TryDoMetatileBehaviorForcedMovement(void);
+static bool8 TryDoMetatileBehaviorForcedMovement(void);
static u8 GetForcedMovementByMetatileBehavior(void);
static void MovePlayerNotOnBike(u8 a, u16 b);
static u8 CheckMovementInputNotOnBike(u8 a);
@@ -49,7 +49,7 @@ static void PlayerNotOnBikeCollide(u8 a);
static void PlayCollisionSoundIfNotFacingWarp(u8 a);
static void sub_8059D60(struct MapObject *a);
static void StartStrengthAnim(u8 a, u8 b);
-static void sub_8059F94(void);
+static void DoPlayerMatJump(void);
static void sub_805A06C(void);
static bool8 (*const gUnknown_0830FB58[])(u8) =
@@ -73,7 +73,7 @@ static bool8 (*const gUnknown_0830FB58[])(u8) =
MetatileBehavior_0xBC,
MetatileBehavior_IsMuddySlope,
};
-static u8 (*const gUnknown_0830FBA0[])(void) =
+static bool8 (*const gUnknown_0830FBA0[])(void) =
{
ForcedMovement_None,
ForcedMovement_Slip,
@@ -91,7 +91,7 @@ static u8 (*const gUnknown_0830FBA0[])(void) =
ForcedMovement_SlideWest,
ForcedMovement_SlideEast,
sub_8058B0C,
- sub_8058C04,
+ ForcedMovement_MatJump,
sub_8058C10,
ForcedMovement_MuddySlope,
};
@@ -182,9 +182,9 @@ static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct
sub_8059EA4,
sub_8059F40,
};
-static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) =
+static u8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct MapObject *) =
{
- sub_805A000,
+ PlayerAvatar_DoSecretBaseMatJump,
};
static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) =
{
@@ -201,9 +201,9 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys)
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
sub_8059D60(playerMapObj);
- if (gPlayerAvatar.unk6 == 0)
+ if (gPlayerAvatar.preventStep == FALSE)
{
- sub_80E5B38(newKeys, heldKeys);
+ Bike_TryAcroBikeHistoryUpdate(newKeys, heldKeys);
if (!sub_8058854(playerMapObj, direction))
{
npc_clear_strange_bits(playerMapObj);
@@ -256,11 +256,11 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held
static void PlayerAllowForcedMovementIfMovingSameDirection(void)
{
- if (gPlayerAvatar.running2 == 2)
+ if (gPlayerAvatar.runningState == MOVING)
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5;
}
-static u8 TryDoMetatileBehaviorForcedMovement(void)
+static bool8 TryDoMetatileBehaviorForcedMovement(void)
{
return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()]();
}
@@ -282,7 +282,7 @@ static u8 GetForcedMovementByMetatileBehavior(void)
return 0;
}
-u8 ForcedMovement_None(void)
+bool8 ForcedMovement_None(void)
{
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6)
{
@@ -293,7 +293,7 @@ u8 ForcedMovement_None(void)
FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18);
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6;
}
- return 0;
+ return FALSE;
}
static u8 DoForcedMovement(u8 direction, void (*b)(u8))
@@ -314,13 +314,13 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8))
if (collisionType == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
- playerAvatar->running2 = 2;
+ playerAvatar->runningState = MOVING;
return 1;
}
}
else
{
- playerAvatar->running2 = 2;
+ playerAvatar->runningState = MOVING;
b(direction);
return 1;
}
@@ -334,47 +334,47 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8))
return DoForcedMovement(playerMapObj->placeholder18, a);
}
-u8 ForcedMovement_Slip(void)
+bool8 ForcedMovement_Slip(void)
{
- return DoForcedMovementInCurrentDirection(sub_80593C4);
+ return DoForcedMovementInCurrentDirection(PlayerGoSpeed2);
}
-u8 sub_8058AAC(void)
+bool8 sub_8058AAC(void)
{
- return DoForcedMovement(1, PlayerGoSpeed0);
+ return DoForcedMovement(1, PlayerGoSpeed1);
}
-u8 sub_8058AC4(void)
+bool8 sub_8058AC4(void)
{
- return DoForcedMovement(2, PlayerGoSpeed0);
+ return DoForcedMovement(2, PlayerGoSpeed1);
}
-u8 sub_8058ADC(void)
+bool8 sub_8058ADC(void)
{
- return DoForcedMovement(3, PlayerGoSpeed0);
+ return DoForcedMovement(3, PlayerGoSpeed1);
}
-u8 sub_8058AF4(void)
+bool8 sub_8058AF4(void)
{
- return DoForcedMovement(4, PlayerGoSpeed0);
+ return DoForcedMovement(4, PlayerGoSpeed1);
}
-u8 sub_8058B0C(void)
+bool8 sub_8058B0C(void)
{
return DoForcedMovement(1, npc_use_some_d2s);
}
-u8 sub_8058B24(void)
+bool8 sub_8058B24(void)
{
return DoForcedMovement(2, npc_use_some_d2s);
}
-u8 sub_8058B3C(void)
+bool8 sub_8058B3C(void)
{
return DoForcedMovement(3, npc_use_some_d2s);
}
-u8 sub_8058B54(void)
+bool8 sub_8058B54(void)
{
return DoForcedMovement(4, npc_use_some_d2s);
}
@@ -388,51 +388,51 @@ static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
return DoForcedMovement(direction, b);
}
-u8 ForcedMovement_SlideSouth(void)
+bool8 ForcedMovement_SlideSouth(void)
{
- return ForcedMovement_Slide(1, sub_80593C4);
+ return ForcedMovement_Slide(1, PlayerGoSpeed2);
}
-u8 ForcedMovement_SlideNorth(void)
+bool8 ForcedMovement_SlideNorth(void)
{
- return ForcedMovement_Slide(2, sub_80593C4);
+ return ForcedMovement_Slide(2, PlayerGoSpeed2);
}
-u8 ForcedMovement_SlideWest(void)
+bool8 ForcedMovement_SlideWest(void)
{
- return ForcedMovement_Slide(3, sub_80593C4);
+ return ForcedMovement_Slide(3, PlayerGoSpeed2);
}
-u8 ForcedMovement_SlideEast(void)
+bool8 ForcedMovement_SlideEast(void)
{
- return ForcedMovement_Slide(4, sub_80593C4);
+ return ForcedMovement_Slide(4, PlayerGoSpeed2);
}
-u8 sub_8058C04(void)
+bool8 ForcedMovement_MatJump(void)
{
- sub_8059F94();
- return 1;
+ DoPlayerMatJump();
+ return TRUE;
}
-u8 sub_8058C10(void)
+bool8 sub_8058C10(void)
{
sub_805A06C();
- return 1;
+ return TRUE;
}
-u8 ForcedMovement_MuddySlope(void)
+bool8 ForcedMovement_MuddySlope(void)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3)
{
- sub_80E6010(0);
+ Bike_UpdateBikeCounterSpeed(0);
playerMapObj->mapobj_bit_9 = 1;
- return DoForcedMovement(1, sub_80593C4);
+ return DoForcedMovement(1, PlayerGoSpeed2);
}
else
{
- return 0;
+ return FALSE;
}
}
@@ -445,17 +445,17 @@ static u8 CheckMovementInputNotOnBike(u8 direction)
{
if (direction == DIR_NONE)
{
- gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
return 0;
}
- else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2)
+ else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.runningState != MOVING)
{
- gPlayerAvatar.running2 = 1;
+ gPlayerAvatar.runningState = TURN_DIRECTION;
return 1;
}
else
{
- gPlayerAvatar.running2 = 2;
+ gPlayerAvatar.runningState = MOVING;
return 2;
}
}
@@ -486,10 +486,11 @@ void sub_8058D0C(u8 direction, u16 heldKeys)
case 0:
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
{
- sub_80593C4(direction);
+ // speed 2 is fast, same speed as running
+ PlayerGoSpeed2(direction);
return;
}
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH)
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH)
&& IsRunningDisallowed(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0)
{
sub_805940C(direction);
@@ -497,7 +498,7 @@ void sub_8058D0C(u8 direction, u16 heldKeys)
}
else
{
- PlayerGoSpeed0(direction);
+ PlayerGoSpeed1(direction);
}
}
}
@@ -562,7 +563,7 @@ static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c)
static u8 sub_8058F6C(s16 a, s16 b, u8 c)
{
- if (FlagGet(SYS_USE_STRENGTH))
+ if (FlagGet(FLAG_SYS_USE_STRENGTH))
{
u8 mapObjectId = GetFieldObjectIdByXY(a, b);
@@ -601,14 +602,14 @@ static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d)
void SetPlayerAvatarTransitionFlags(u16 a)
{
- gPlayerAvatar.bike |= a;
+ gPlayerAvatar.unk1 |= a;
DoPlayerAvatarTransition();
}
static void DoPlayerAvatarTransition(void)
{
u8 i;
- u32 flags = gPlayerAvatar.bike;
+ u32 flags = gPlayerAvatar.unk1;
if (flags != 0)
{
@@ -627,7 +628,7 @@ static void DoPlayerAvatarTransition(void)
}
#endif
}
- gPlayerAvatar.bike = 0;
+ gPlayerAvatar.unk1 = 0;
}
}
@@ -656,7 +657,7 @@ void PlayerAvatarTransition_AcroBike(struct MapObject *a)
FieldObjectTurn(a, a->placeholder18);
SetPlayerAvatarStateMask(4);
BikeClearState(0, 0);
- sub_80E6084();
+ Bike_HandleBumpySlopeJump();
}
void PlayerAvatarTransition_Surfing(struct MapObject *a)
@@ -689,18 +690,18 @@ void sub_80591F4(struct MapObject *a)
void sub_8059204(void)
{
- gPlayerAvatar.running1 = 0;
+ gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
if (PlayerIsAnimActive())
{
if (!PlayerCheckIfAnimFinishedOrInactive())
{
if (!player_is_anim_in_certain_ranges())
- gPlayerAvatar.running1 = 1;
+ gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION;
}
else
{
if (!sub_80592A4())
- gPlayerAvatar.running1 = 2;
+ gPlayerAvatar.tileTransitionState = T_TILE_CENTER;
}
}
}
@@ -721,7 +722,7 @@ static bool8 player_is_anim_in_certain_ranges(void)
static bool8 sub_80592A4(void)
{
- if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1)
+ if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION)
return TRUE;
else
return FALSE;
@@ -761,12 +762,14 @@ void PlayerSetAnimId(u8 animId, u8 b)
}
}
-void PlayerGoSpeed0(u8 a)
+// normal speed (1 speed)
+void PlayerGoSpeed1(u8 a)
{
PlayerSetAnimId(GetGoSpeed0AnimId(a), 2);
}
-void sub_80593C4(u8 a)
+// fast speed (2 speed)
+void PlayerGoSpeed2(u8 a)
{
PlayerSetAnimId(sub_8060744(a), 2);
}
@@ -776,7 +779,8 @@ void npc_use_some_d2s(u8 a)
PlayerSetAnimId(d2s_08064034(a), 2);
}
-void sub_80593F4(u8 a)
+// fastest speed (4 speed)
+void PlayerGoSpeed4(u8 a)
{
PlayerSetAnimId(sub_806079C(a), 2);
}
@@ -816,48 +820,54 @@ void PlayerJumpLedge(u8 direction)
void sub_80594C0(void)
{
- if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0)
+ if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
{
if (player_should_look_direction_be_enforced_upon_movement())
sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18));
}
}
-void sub_8059504(u8 a)
+// wheelie idle
+void PlayerIdleWheelie(u8 a)
{
PlayerSetAnimId(sub_80609D8(a), 1);
}
-//normal to wheelie
+// normal to wheelie
void PlayerStartWheelie(u8 a)
{
PlayerSetAnimId(sub_8060A04(a), 1);
}
-void sub_8059534(u8 a)
+// wheelie to normal
+void PlayerEndWheelie(u8 a)
{
PlayerSetAnimId(sub_8060A30(a), 1);
}
-void sub_805954C(u8 a)
+// wheelie hopping standing
+void PlayerStandingHoppingWheelie(u8 a)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(sub_8060A5C(a), 1);
}
-void sub_8059570(u8 a)
+// wheelie hopping moving
+void PlayerMovingHoppingWheelie(u8 a)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(sub_8060A88(a), 2);
}
-void sub_8059594(u8 a)
+// wheelie hopping ledge
+void PlayerLedgeHoppingWheelie(u8 a)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(sub_8060AB4(a), 8);
}
-void sub_80595B8(u8 direction)
+// acro turn jump
+void PlayerAcroTurnJump(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(sub_8060878(direction), 1);
@@ -963,8 +973,8 @@ void sub_80597F4(void)
FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18);
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
- sub_80E6084();
- sub_80E6010(0);
+ Bike_HandleBumpySlopeJump();
+ Bike_UpdateBikeCounterSpeed(0);
}
}
@@ -1060,7 +1070,6 @@ bool8 IsPlayerFacingSurfableFishableWater(void)
void ClearPlayerAvatarInfo(void)
{
- //TODO: 0x24 should be the size of gPlayerAvatar
memset(&gPlayerAvatar, 0, sizeof(struct PlayerAvatar));
}
@@ -1099,7 +1108,7 @@ void SetPlayerAvatarExtraStateTransition(u8 a, u8 b)
{
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender);
- gPlayerAvatar.bike |= unk | b;
+ gPlayerAvatar.unk1 |= unk | b;
DoPlayerAvatarTransition();
}
@@ -1127,8 +1136,8 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
mapObject->mapobj_unk_1B = sub_8126B54();
FieldObjectTurn(mapObject, direction);
ClearPlayerAvatarInfo();
- gPlayerAvatar.running2 = 0;
- gPlayerAvatar.running1 = 0;
+ gPlayerAvatar.runningState = NOT_MOVING;
+ gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
gPlayerAvatar.mapObjectId = mapObjectId;
gPlayerAvatar.spriteId = mapObject->spriteId;
gPlayerAvatar.gender = gender;
@@ -1212,7 +1221,7 @@ static void sub_8059E2C(u8 taskId)
u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c)
{
ScriptContext2_Enable();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
return 0;
}
@@ -1244,7 +1253,7 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c)
{
FieldObjectClearAnimIfSpecialAnimFinished(b);
FieldObjectClearAnimIfSpecialAnimFinished(c);
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
DestroyTask(FindTaskIdByFunc(sub_8059E2C));
}
@@ -1253,24 +1262,23 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c)
/* Some field effect */
-static void sub_8059FB4(u8 taskId);
+static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
-static void sub_8059F94(void)
+static void DoPlayerMatJump(void)
{
- u8 taskId = CreateTask(sub_8059FB4, 0xFF);
-
- sub_8059FB4(taskId);
+ DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF));
}
-static void sub_8059FB4(u8 taskId)
+static void DoPlayerAvatarSecretBaseMatJump(u8 taskId)
{
- while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId]))
+ while (sPlayerAvatarSecretBaseMatJump[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId]))
;
}
-u8 sub_805A000(struct Task *task, struct MapObject *mapObject)
+// because data[0] is used to call this, it can be inferred that there may have been multiple mat jump functions at one point, so the name for these groups of functions is appropriate in assuming the sole use of mat jump.
+u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct MapObject *mapObject)
{
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
PlaySE(SE_DANSA);
@@ -1278,9 +1286,9 @@ u8 sub_805A000(struct Task *task, struct MapObject *mapObject)
task->data[1]++;
if (task->data[1] > 1)
{
- gPlayerAvatar.unk6 = 0;
- gPlayerAvatar.bike |= 0x20;
- DestroyTask(FindTaskIdByFunc(sub_8059FB4));
+ gPlayerAvatar.preventStep = FALSE;
+ gPlayerAvatar.unk1 |= 0x20;
+ DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
}
}
return 0;
@@ -1307,7 +1315,7 @@ u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject)
{
task->data[0]++;
task->data[1] = mapObject->placeholder18;
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
ScriptContext2_Enable();
PlaySE(SE_TK_WARPIN);
return 1;
@@ -1349,7 +1357,7 @@ u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject)
{
FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1])));
ScriptContext2_Disable();
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(sub_805A08C));
}
return 0;
@@ -1369,7 +1377,7 @@ void sub_805A20C(u8 a)
Overworld_ChangeMusicToDefault();
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
taskId = CreateTask(taskFF_0805D1D4, 0xFF);
gTasks[taskId].data[0] = a;
taskFF_0805D1D4(taskId);
@@ -1397,7 +1405,7 @@ static void sub_805A2D0(u8 taskId)
{
sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0));
FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18));
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]);
DestroyTask(taskId);
@@ -1462,7 +1470,7 @@ static void Task_Fishing(u8 taskId)
u8 Fishing1(struct Task *task)
{
ScriptContext2_Enable();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
task->tStep++;
return 0;
}
@@ -1647,7 +1655,7 @@ u8 Fishing11(struct Task *task)
if (task->tFrameCounter != 0)
{
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
FishingWildEncounter(task->tFishingRod);
sub_80BE97C(1);
@@ -1707,7 +1715,7 @@ u8 Fishing16(struct Task *task)
{
if (MenuUpdateWindowText())
{
- gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnfreezeMapObjects();
MenuZeroFillScreen();
diff --git a/src/field/field_poison.c b/src/field/field_poison.c
index 1244b9c62..49678f269 100644
--- a/src/field/field_poison.c
+++ b/src/field/field_poison.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "field_poison.h"
#include "field_message_box.h"
-#include "fldeff_80C5CD4.h"
+#include "fldeff_poison.h"
#include "pokemon.h"
#include "pokemon_summary_screen.h"
#include "script.h"
@@ -9,7 +9,7 @@
#include "task.h"
#include "text.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 fieldPoisonText_PokemonFainted[];
bool32 CheckMonIsValid(struct Pokemon *pkmn)
@@ -93,9 +93,9 @@ void Task_WhiteOut(u8 taskId)
break;
case 2: //Done checking Pokemon
if (AllMonsFainted())
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
EnableBothScriptContexts();
DestroyTask(taskId);
break;
@@ -128,7 +128,7 @@ s32 DoPoisonFieldEffect(void)
hp--;
if (hp == 0)
numFainting++; //Pokemon will now faint due to poison
- SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp);
+ SetMonData(pkmn, MON_DATA_HP, &hp);
numPoisoned++;
}
pkmn++;
diff --git a/src/field/field_region_map.c b/src/field/field_region_map.c
index 7cb22e5df..73e101d8f 100644
--- a/src/field/field_region_map.c
+++ b/src/field/field_region_map.c
@@ -7,6 +7,7 @@
#include "sprite.h"
#include "strings2.h"
#include "text.h"
+#include "ewram.h"
struct RegionMapStruct
{
@@ -24,14 +25,11 @@ struct UnkStruct
u16 unk888;
};
-extern u8 ewram[];
-#define unk_2000000 (*(struct UnkStruct *)(ewram))
-
void FieldInitRegionMap(MainCallback callback)
{
SetVBlankCallback(NULL);
- unk_2000000.unk888 = 0;
- unk_2000000.callback = callback;
+ ewram0_5.unk888 = 0;
+ ewram0_5.callback = callback;
SetMainCallback2(CB2_FieldInitRegionMap);
}
@@ -49,7 +47,7 @@ void CB2_FieldInitRegionMap(void)
ResetSpriteData();
FreeAllSpritePalettes();
// TODO: remove this cast
- InitRegionMap((void *)&unk_2000000.unk8, 0);
+ InitRegionMap((void *)&ewram0_5.unk8, 0);
CreateRegionMapPlayerIcon(0, 0);
CreateRegionMapCursor(1, 1);
SetUpWindowConfig(&gWindowConfig_81E709C);
@@ -82,15 +80,15 @@ void CB2_FieldRegionMap(void)
void sub_813EFDC(void)
{
- switch (unk_2000000.unk888)
+ switch (ewram0_5.unk888)
{
case 0:
REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
- unk_2000000.unk888++;
+ ewram0_5.unk888++;
break;
case 1:
if (!gPaletteFade.active)
- unk_2000000.unk888++;
+ ewram0_5.unk888++;
break;
case 2:
switch (sub_80FAB60())
@@ -100,18 +98,18 @@ void sub_813EFDC(void)
break;
case 4:
case 5:
- unk_2000000.unk888++;
+ ewram0_5.unk888++;
}
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
- unk_2000000.unk888++;
+ ewram0_5.unk888++;
break;
case 4:
if (!gPaletteFade.active)
{
FreeRegionMapIconResources();
- SetMainCallback2(unk_2000000.callback);
+ SetMainCallback2(ewram0_5.callback);
}
break;
}
@@ -120,6 +118,6 @@ void sub_813EFDC(void)
void sub_813F0C8(void)
{
MenuFillWindowRectWithBlankTile(17, 17, 28, 18);
- if (unk_2000000.unk8.unk16)
- MenuPrint(unk_2000000.unk8.str, 17, 17);
+ if (ewram0_5.unk8.unk16)
+ MenuPrint(ewram0_5.unk8.str, 17, 17);
}
diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c
index 0c76d254d..a472d5a9c 100644
--- a/src/field/field_screen_effect.c
+++ b/src/field/field_screen_effect.c
@@ -9,16 +9,6 @@
#include "text.h"
#include "unknown_task.h"
-struct UnknownStruct1
-{
- u8 filler0[0x14];
- u8 unk14;
- u8 filler15[0xB];
-};
-extern struct UnknownStruct1 gUnknown_03004DC0;
-
-extern u16 gUnknown_03004DE0[][0x3C0];
-
const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 };
const s32 gMaxFlashLevel = 4;
@@ -74,11 +64,11 @@ static void sub_8081424(u8 taskId)
switch (data[0])
{
case 0:
- sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]);
+ sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.srcBank][0], data[1], data[2], data[3]);
data[0] = 1;
break;
case 1:
- sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]);
+ sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.srcBank][0], data[1], data[2], data[3]);
data[0] = 0;
data[3] += data[5];
if (data[3] > data[4])
@@ -293,17 +283,17 @@ void sub_80818A4(void)
u8 taskId = CreateTask(sub_80816A8, 80);
s16 *data = gTasks[taskId].data;
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
data[1] = 0;
data[2] = 104;
}
- else if (gScriptResult == 1)
+ else if (gSpecialVar_Result == 1)
{
data[1] = 1;
data[2] = 104;
}
- else if (gScriptResult == 2)
+ else if (gSpecialVar_Result == 2)
{
data[1] = 0;
data[2] = 120;
diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c
index d4b59c8a2..0b7fe336e 100644
--- a/src/field/field_special_scene.c
+++ b/src/field/field_special_scene.c
@@ -11,13 +11,59 @@
#include "overworld.h"
#include "script.h"
#include "script_movement.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
+// TODO: Move somewhere else
+enum
+{
+ STEP_17 = 0x17,
+ STEP_18,
+ STEP_END = 0xFE,
+};
+
+const u32 gMapObjectPic_MovingBox[] = INCBIN_U32("graphics/map_objects/pics/misc/moving_box.4bpp");
+const u16 gMapObjectPalette19[] = INCBIN_U16("graphics/map_objects/palettes/19.gbapal");
+
+static const s8 gTruckCamera_HorizontalTable[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ -1,
+ -1,
+ -1,
+ 0,
+};
+
+const u8 gUnknown_083D295F[] =
+{
+ STEP_18,
+ STEP_END,
+};
+
+const u8 gUnknown_083D2961[] =
+{
+ STEP_17,
+ STEP_END,
+};
+
// porthole states
enum
{
@@ -27,12 +73,7 @@ enum
EXIT_PORTHOLE,
};
-extern s8 gTruckCamera_HorizontalTable[];
-
-extern u8 gUnknown_083D295F[];
-extern u8 gUnknown_083D2961[];
-
-s32 GetTruckCameraBobbingY(int a1)
+s16 GetTruckCameraBobbingY(int a1)
{
if (!(a1 % 120))
return -1;
@@ -42,7 +83,7 @@ s32 GetTruckCameraBobbingY(int a1)
return 0;
}
-s32 GetTruckBoxMovement(int a1) // for the box movement?
+s16 GetTruckBoxMovement(int a1) // for the box movement?
{
if (!((a1 + 120) % 180))
return -1;
@@ -53,28 +94,22 @@ s32 GetTruckBoxMovement(int a1) // for the box movement?
void Task_Truck1(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 cameraYpan;
- s16 box1 = 0;
- s16 box2 = 0;
- s16 box3 = 0;
- u8 mapNum, mapGroup;
- register s16 zero asm("r4");
+ s16 cameraYpan, cameraXpan = 0;
+ s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
- sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3);
+ sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
- sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3);
+ sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
- mapNum = gSaveBlock1.location.mapNum;
- mapGroup = gSaveBlock1.location.mapGroup;
- zero = 0;
- sub_805BD90(3, mapNum, mapGroup, -3, box3);
+ sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run
- data[0] = zero; // reset the timer if it gets stuck.
+ data[0] = 0; // reset the timer if it gets stuck.
+ // this also matches with directly calling GetTruckCameraBobbingY within SetCameraPanning, but this is consistent with a later function that requires a temp variable.
cameraYpan = GetTruckCameraBobbingY(data[0]);
- SetCameraPanning(0, cameraYpan);
+ SetCameraPanning(cameraXpan, cameraYpan);
}
void Task_Truck2(u8 taskId)
@@ -82,9 +117,7 @@ void Task_Truck2(u8 taskId)
s16 *data = gTasks[taskId].data;
s16 cameraYpan;
s16 cameraXpan;
- s16 box1;
- s16 box2;
- s16 box3;
+ s16 box1, box2, box3;
data[0]++;
data[2]++;
@@ -137,7 +170,7 @@ void Task_Truck3(u8 taskId)
{
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
cameraYpan = 0;
- SetCameraPanning(cameraXpan, 0);
+ SetCameraPanning(cameraXpan, cameraYpan);
sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3);
sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan);
@@ -340,7 +373,7 @@ void sub_80C791C(void)
void sub_80C7958(void)
{
- FlagSet(SYS_CRUISE_MODE);
+ FlagSet(FLAG_SYS_CRUISE_MODE);
FlagSet(0x4001);
FlagSet(0x4000);
saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1);
diff --git a/src/field/field_specials.c b/src/field/field_specials.c
index 36362d098..87a9e2d5d 100644
--- a/src/field/field_specials.c
+++ b/src/field/field_specials.c
@@ -11,22 +11,22 @@
#include "field_camera.h"
#include "field_player_avatar.h"
#include "main.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "overworld.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "string_util.h"
#include "strings.h"
#include "pokeblock.h"
-#include "species.h"
-#include "abilities.h"
-#include "moves.h"
+#include "constants/species.h"
+#include "constants/abilities.h"
+#include "constants/moves.h"
#include "text.h"
#include "wallclock.h"
#include "tv.h"
#include "rtc.h"
#include "link.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "menu.h"
#include "starter_choose.h"
@@ -34,7 +34,7 @@
#include "battle_tower.h"
#include "field_weather.h"
#include "pokemon_summary_screen.h"
-#include "rng.h"
+#include "random.h"
#if ENGLISH
#define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD
@@ -46,11 +46,13 @@ extern struct WarpData gUnknown_020297F0;
extern u8 gBattleOutcome;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
-EWRAM_DATA u8 gUnknown_02039250 = 0;
-EWRAM_DATA u8 gUnknown_02039251 = 0;
-EWRAM_DATA u32 gUnknown_02039254 = 0;
+extern u8 *const gUnknown_083D1464[3];
+
+EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE;
+EWRAM_DATA u8 gBikeCollisions = 0;
+EWRAM_DATA u32 gBikeCyclingTimer = 0;
EWRAM_DATA u8 gUnknown_02039258 = 0;
EWRAM_DATA u8 gUnknown_02039259 = 0;
EWRAM_DATA u8 gUnknown_0203925A = 0;
@@ -76,16 +78,16 @@ void ScrSpecial_ViewWallClock(void)
void ResetCyclingRoadChallengeData(void)
{
- gUnknown_02039250 = 0;
- gUnknown_02039251 = 0;
- gUnknown_02039254 = 0;
+ gBikeCyclingChallenge = FALSE;
+ gBikeCollisions = 0;
+ gBikeCyclingTimer = 0;
}
void ScrSpecial_BeginCyclingRoadChallenge(void)
{
- gUnknown_02039250 = 1;
- gUnknown_02039251 = 0;
- gUnknown_02039254 = gMain.vblankCounter1;
+ gBikeCyclingChallenge = TRUE;
+ gBikeCollisions = 0;
+ gBikeCyclingTimer = gMain.vblankCounter1;
}
u16 GetPlayerAvatarBike(void)
@@ -167,14 +169,14 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1)
}
- gScriptResult = result;
+ gSpecialVar_Result = result;
}
void FinishCyclingRoadChallenge(void) {
- const u32 time = gMain.vblankCounter1 - gUnknown_02039254;
+ const u32 time = gMain.vblankCounter1 - gBikeCyclingTimer;
- DetermineCyclingRoadResults(time, gUnknown_02039251);
- RecordCyclingRoadResults(time, gUnknown_02039251);
+ DetermineCyclingRoadResults(time, gBikeCollisions);
+ RecordCyclingRoadResults(time, gBikeCollisions);
}
static void RecordCyclingRoadResults(u32 arg0, u8 arg1) {
@@ -205,7 +207,7 @@ u16 GetRecordedCyclingRoadResults(void) {
}
void UpdateCyclingRoadState(void) {
- if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)
+ if (gUnknown_020297F0.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) && gUnknown_020297F0.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))
{
return;
}
@@ -219,18 +221,18 @@ void UpdateCyclingRoadState(void) {
void SetSSTidalFlag(void)
{
- FlagSet(SYS_CRUISE_MODE);
+ FlagSet(FLAG_SYS_CRUISE_MODE);
*GetVarPointer(VAR_CRUISE_STEP_COUNT) = 0;
}
void ResetSSTidalFlag(void)
{
- FlagClear(SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
}
bool32 CountSSTidalStep(u16 delta)
{
- if (!FlagGet(SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc)
+ if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc)
{
return FALSE;
}
@@ -257,38 +259,38 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
case 2:
if (*varCruiseStepCount < 60)
{
- *mapNum = MAP_ID_ROUTE134;
+ *mapNum = MAP_NUM(ROUTE134);
*x = *varCruiseStepCount + 19;
}
else if (*varCruiseStepCount < 140)
{
- *mapNum = MAP_ID_ROUTE133;
+ *mapNum = MAP_NUM(ROUTE133);
*x = *varCruiseStepCount - 60;
}
else
{
- *mapNum = MAP_ID_ROUTE132;
+ *mapNum = MAP_NUM(ROUTE132);
*x = *varCruiseStepCount - 140;
}
break;
case 7:
if (*varCruiseStepCount < 66)
{
- *mapNum = MAP_ID_ROUTE132;
+ *mapNum = MAP_NUM(ROUTE132);
*x = 65 - *varCruiseStepCount;
}
else if (*varCruiseStepCount < 146) {
- *mapNum = MAP_ID_ROUTE133;
+ *mapNum = MAP_NUM(ROUTE133);
*x = 145 - *varCruiseStepCount;
}
else
{
- *mapNum = MAP_ID_ROUTE134;
+ *mapNum = MAP_NUM(ROUTE134);
*x = 224 - *varCruiseStepCount;
}
break;
}
- *mapGroup = MAP_GROUP_ROUTE132;
+ *mapGroup = MAP_GROUP(ROUTE132);
*y = 20;
return 0;
}
@@ -700,11 +702,11 @@ void CableCarWarp(void)
{
if (gSpecialVar_0x8004 != 0)
{
- Overworld_SetWarpDestination(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4);
+ Overworld_SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4);
}
else
{
- Overworld_SetWarpDestination(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4);
+ Overworld_SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4);
}
}
@@ -999,22 +1001,22 @@ void SetDepartmentStoreFloorVar(void)
u8 deptStoreFloor;
switch (gSaveBlock1.warp2.mapNum)
{
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_1F:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
deptStoreFloor = 0;
break;
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_2F:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F):
deptStoreFloor = 1;
break;
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_3F:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F):
deptStoreFloor = 2;
break;
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_4F:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F):
deptStoreFloor = 3;
break;
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_5F:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
deptStoreFloor = 4;
break;
- case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:
+ case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP):
deptStoreFloor = 15;
break;
default:
@@ -1110,17 +1112,17 @@ void sub_810E984(u8 taskId)
saved_warp2_set_2(0, gUnknown_03000760[gUnknown_0203925B].var1, gUnknown_03000760[gUnknown_0203925B].var2, -1, 2, 1);
if (gSpecialVar_0x8005 == gUnknown_0203925B)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
PlaySE(SE_SELECT);
MenuZeroFillWindowRect(0, 0, 29, 12);
sub_810EC9C(taskId);
}
else
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gSpecialVar_0x8005 = gUnknown_0203925B;
sub_810EBEC();
- FieldObjectTurnByLocalIdAndMap(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH);
+ FieldObjectTurnByLocalIdAndMap(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH);
sub_810EEDC();
MenuZeroFillScreen();
DestroyTask(taskId);
@@ -1128,7 +1130,7 @@ void sub_810E984(u8 taskId)
}
else if (gMain.newKeys & B_BUTTON)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -1514,12 +1516,12 @@ void IsGrassTypeInParty(void)
species = GetMonData(pokemon, MON_DATA_SPECIES);
if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS)
{
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
return;
}
}
}
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
}
const u8 *const gUnknown_083F83C0[] = {
@@ -1577,7 +1579,7 @@ void sub_810F118(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
HandleDestroyMenuCursors();
- gScriptResult = gUnknown_0203925B;
+ gSpecialVar_Result = gUnknown_0203925B;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -1586,7 +1588,7 @@ void sub_810F118(u8 taskId)
if (gMain.newKeys & B_BUTTON)
{
HandleDestroyMenuCursors();
- gScriptResult = 0x7f;
+ gSpecialVar_Result = 0x7f;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -1789,7 +1791,7 @@ u16 sub_810F404(void)
void sub_810F414(void)
{
- sub_8135FF4(gStringVar1);
+ SetEReaderTrainerName(gStringVar1);
}
const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
@@ -1863,7 +1865,7 @@ void GivLeadMonEffortRibbon(void)
{
bool8 ribbonSet;
IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
- FlagSet(SYS_RIBBON_GET);
+ FlagSet(FLAG_SYS_RIBBON_GET);
ribbonSet = TRUE;
SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet);
}
@@ -1879,14 +1881,14 @@ bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void)
u8 sub_810F5BC(void)
{
- if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP_RUSTURF_TUNNEL && gSaveBlock1.location.mapNum == MAP_ID_RUSTURF_TUNNEL)
+ if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) && gSaveBlock1.location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(RUSTURF_TUNNEL))
{
- if (FlagGet(0x3a3))
+ if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1))
{
VarSet(VAR_0x409a, 4);
return TRUE;
}
- else if (FlagGet(0x3a4))
+ else if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2))
{
VarSet(VAR_0x409a, 5);
return TRUE;
@@ -1905,13 +1907,13 @@ void PutZigzagoonInPlayerParty(void)
u16 monData;
CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0);
monData = TRUE;
- SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, (u8 *)&monData);
+ SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, &monData);
monData = MOVE_TACKLE;
- SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (u8 *)&monData);
+ SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, &monData);
monData = MOVE_NONE;
- SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (u8 *)&monData);
- SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (u8 *)&monData);
- SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (u8 *)&monData);
+ SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, &monData);
+ SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, &monData);
+ SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, &monData);
}
bool8 IsStarterInParty(void)
@@ -2000,7 +2002,7 @@ static void sub_810F814(u8 taskId)
bool8 sub_810F828(void)
{
- return FlagGet(0x2b8);
+ return FlagGet(FLAG_UNKNOWN_2B8);
}
void SetRoute119Weather(void)
@@ -2075,27 +2077,27 @@ bool8 sub_810F96C(void)
void sub_810F9AC(void)
{
- if (gScriptResult >= 10000)
+ if (gSpecialVar_Result >= 10000)
{
- sub_80BF088(0, gScriptResult);
+ sub_80BF088(0, gSpecialVar_Result);
}
- else if (gScriptResult >= 1000)
+ else if (gSpecialVar_Result >= 1000)
{
gStringVar1[0] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 1, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
- else if (gScriptResult >= 100)
+ else if (gSpecialVar_Result >= 100)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 2, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
- else if (gScriptResult >= 10)
+ else if (gSpecialVar_Result >= 10)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 3, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
else
{
@@ -2103,7 +2105,7 @@ void sub_810F9AC(void)
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
gStringVar1[3] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 4, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
}
diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c
index da6f162c2..108ba64ba 100644
--- a/src/field/field_tasks.c
+++ b/src/field/field_tasks.c
@@ -1,14 +1,10 @@
-//
-
-//
-
#include "global.h"
#include "task.h"
#include "main.h"
-#include "vars.h"
+#include "constants/vars.h"
#include "bike.h"
#include "item.h"
-#include "items.h"
+#include "constants/items.h"
#include "event_data.h"
#include "overworld.h"
#include "clock.h"
@@ -20,7 +16,7 @@
#include "fieldmap.h"
#include "field_player_avatar.h"
#include "field_camera.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "field_tasks.h"
@@ -201,7 +197,7 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8
void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag)
{
const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y));
- const struct MetatileOffset *offsetData2 = offsetData;
+ const struct MetatileOffset *offsetdata2 = offsetData;
if (offsetData != NULL)
{
MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId);
@@ -209,10 +205,10 @@ void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32
{
CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y);
}
- MapGridSetMetatileIdAt(x + offsetData2[1].x, y + offsetData2[1].y, offsetData2[1].tileId);
+ MapGridSetMetatileIdAt(x + offsetdata2[1].x, y + offsetdata2[1].y, offsetdata2[1].tileId);
if (flag)
{
- CurrentMapDrawMetatileAt(x + offsetData2[1].x, y + offsetData2[1].y);
+ CurrentMapDrawMetatileAt(x + offsetdata2[1].x, y + offsetdata2[1].y);
}
}
}
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index 8dcfd62fa..ff26b45bf 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -1,120 +1,296 @@
#include "global.h"
+#include "blend_palette.h"
+#include "field_map_obj.h"
#include "field_weather.h"
#include "palette.h"
+#include "random.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
#include "sprite.h"
#include "task.h"
+#include "trig.h"
+#include "ewram.h"
+
+#define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00))
+
+struct RGBColor
+{
+ u16 r:5;
+ u16 g:5;
+ u16 b:5;
+};
+
+struct WeatherPaletteData
+{
+ u16 data[0][0x1000]; // unknown length
+};
+
+struct WeatherCallbacks
+{
+ void (*initVars)(void);
+ void (*main)(void);
+ void (*initAll)(void);
+ bool8 (*finish)(void);
+};
+
+extern struct Weather gWeather;
+extern u8 gUnknown_0202FF38[];
+extern u16 gUnknown_0202FF58;
+IWRAM_DATA const u8 *gUnknown_030006DC;
+
+const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz");
+const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz");
+const u8 DroughtPaletteData_2[] = INCBIN_U8("graphics/weather/drought2.bin.lz");
+const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz");
+const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz");
+const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz");
-extern u8 *gUnknown_083970E8;
-extern u8 (*gUnknown_08396FC8[][4])(void);
-extern u8 (*gUnknown_083970B8[])(void);
-IWRAM_DATA u8 *gUnknown_030006DC;
-extern u8 gUnknown_083970C8;
extern u8 (*gUnknown_0202FC48)[32];
extern u8 gUnknown_0202F9E8[32];
+static const u8 *const sCompressedDroughtPalettes[] =
+{
+ DroughtPaletteData_0,
+ DroughtPaletteData_1,
+ DroughtPaletteData_2,
+ DroughtPaletteData_3,
+ DroughtPaletteData_4,
+ DroughtPaletteData_5,
+ gSharedMem,
+};
+
+// This is a pointer to gWeather. All code in this file accesses gWeather directly,
+// while code in other field weather files accesses gWeather through this pointer.
+// This is likely the result of compiler optimization, since using the pointer in
+// this file produces the same result as accessing gWeather directly.
+struct Weather *const gWeatherPtr = &gWeather;
-void sub_807C828(void)
+void None_Init(void);
+void None_Main(void);
+bool8 None_Finish(void);
+void Clouds_InitVars(void);
+void Clouds_Main(void);
+void Clouds_InitAll(void);
+bool8 Clouds_Finish(void);
+void Weather2_InitVars(void);
+void Weather2_Main(void);
+void Weather2_InitAll(void);
+bool8 Weather2_Finish(void);
+void LightRain_InitVars(void);
+void LightRain_Main(void);
+void LightRain_InitAll(void);
+bool8 LightRain_Finish(void);
+void Snow_InitVars(void);
+void Snow_Main(void);
+void Snow_InitAll(void);
+bool8 Snow_Finish(void);
+void MedRain_InitVars(void);
+void Rain_Main(void);
+void MedRain_InitAll(void);
+bool8 Rain_Finish(void);
+void Fog1_InitVars(void);
+void Fog1_Main(void);
+void Fog1_InitAll(void);
+bool8 Fog1_Finish(void);
+void Ash_InitVars(void);
+void Ash_Main(void);
+void Ash_InitAll(void);
+bool8 Ash_Finish(void);
+void Sandstorm_InitVars(void);
+void Sandstorm_Main(void);
+void Sandstorm_InitAll(void);
+bool8 Sandstorm_Finish(void);
+void Fog2_InitVars(void);
+void Fog2_Main(void);
+void Fog2_InitAll(void);
+bool8 Fog2_Finish(void);
+void Fog1_InitVars(void);
+void Fog1_Main(void);
+void Fog1_InitAll(void);
+bool8 Fog1_Finish(void);
+void Weather11_InitVars(void);
+void Weather11_Main(void);
+void Weather11_InitAll(void);
+bool8 Weather11_Finish(void);
+void Drought_InitVars(void);
+void Drought_Main(void);
+void Drought_InitAll(void);
+bool8 Drought_Finish(void);
+void HeavyRain_InitVars(void);
+void Rain_Main(void);
+void HeavyRain_InitAll(void);
+bool8 Rain_Finish(void);
+void Bubbles_InitVars(void);
+void Bubbles_Main(void);
+void Bubbles_InitAll(void);
+bool8 Bubbles_Finish(void);
+
+static const struct WeatherCallbacks sWeatherFuncs[] =
+{
+ {None_Init, None_Main, None_Init, None_Finish},
+ {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
+ {Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish},
+ {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain
+ {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
+ {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
+ {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
+ {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
+ {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
+ {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
+ {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
+ {Weather11_InitVars, Weather11_Main, Weather11_InitAll, Weather11_Finish},
+ {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
+ {HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
+ {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
+};
+
+void (*const gUnknown_083970B8[])(void) =
+{
+ sub_807CC24,
+ sub_807CCAC,
+ nullsub_39,
+ nullsub_39,
+};
+
+const u8 gUnknown_083970C8[] =
+{
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 2,
+ 1,
+ 2,
+ 2,
+ 2,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+};
+
+const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
+
+void StartWeather(void)
{
u8 index;
- if (!FuncIsActiveTask(&sub_807CA34))
+ if (!FuncIsActiveTask(Task_WeatherMain))
{
index = AllocSpritePalette(0x1200);
- CpuCopy32(&gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
+ CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
sub_807CB10();
- gWeather.unknown_6D5 = index;
- gWeather.unknown_6D4 = AllocSpritePalette(0x1201);
- gWeather.unknown_6DA = 0;
- gWeather.unknown_6D8 = 0;
- gWeather.unknown_6DE = 0;
- gWeather.unknown_6E4 = 0;
- gWeather.unknown_700 = 0;
- gWeather.unknown_6FB = 0;
- gWeather.unknown_724 = 0;
- gWeather.unknown_716 = 0;
- gWeather.unknown_717 = 0;
- gWeather.unknown_72E = 0;
- gWeather.unknown_6FA = 0;
- sub_807DB64(16, 0);
- gWeather.unknown_6D0 = 0;
- gWeather.unknown_6C6 = 3;
- gWeather.unknown_6C8 = 0;
- gWeather.unknown_6D3 = 1;
- gWeather.unknown_6C9 = CreateTask(&sub_807C9E4, 80);
+ gWeatherPtr->unknown_6D5 = index;
+ gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201);
+ gWeatherPtr->rainSpriteCount = 0;
+ gWeatherPtr->unknown_6D8 = 0;
+ gWeatherPtr->cloudSpritesCreated = 0;
+ gWeatherPtr->snowflakeSpriteCount = 0;
+ gWeatherPtr->ashSpritesCreated = 0;
+ gWeatherPtr->fog1SpritesCreated = 0;
+ gWeatherPtr->fog2SpritesCreated = 0;
+ gWeatherPtr->sandstormSprites1Created = 0;
+ gWeatherPtr->sandstormSprites2Created = 0;
+ gWeatherPtr->unknown_72E = 0;
+ gWeatherPtr->unknown_6FA = 0;
+ Weather_SetBlendCoeffs(16, 0);
+ gWeatherPtr->currWeather = 0;
+ gWeatherPtr->unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C8 = 0;
+ gWeatherPtr->unknown_6D3 = 1;
+ gWeatherPtr->unknown_6C9 = CreateTask(Task_WeatherInit, 80);
}
}
void DoWeatherEffect(u8 effect)
{
- if (effect != 3 && effect != 5 && effect != 13)
+ if (effect != WEATHER_RAIN_LIGHT && effect != WEATHER_RAIN_MED && effect != WEATHER_RAIN_HEAVY)
{
PlayRainSoundEffect();
}
- if (gWeather.unknown_6D1 != effect && gWeather.unknown_6D0 == effect)
+ if (gWeatherPtr->nextWeather != effect && gWeatherPtr->currWeather == effect)
{
- gUnknown_08396FC8[effect][0]();
+ sWeatherFuncs[effect].initVars();
}
- gWeather.unknown_6D3 = 0;
- gWeather.unknown_6D1 = effect;
- gWeather.unknown_6CE = 0;
+ gWeatherPtr->unknown_6D3 = 0;
+ gWeatherPtr->nextWeather = effect;
+ gWeatherPtr->finishStep = 0;
}
void sub_807C988(u8 effect)
{
PlayRainSoundEffect();
- gWeather.unknown_6D0 = effect;
- gWeather.unknown_6D1 = effect;
+ gWeatherPtr->currWeather = effect;
+ gWeatherPtr->nextWeather = effect;
}
void sub_807C9B4(u8 effect)
{
PlayRainSoundEffect();
- gWeather.unknown_6D0 = effect;
- gWeather.unknown_6D1 = effect;
- gWeather.unknown_6C8 = 1;
+ gWeatherPtr->currWeather = effect;
+ gWeatherPtr->nextWeather = effect;
+ gWeatherPtr->unknown_6C8 = 1;
}
-void sub_807C9E4(u8 task)
+void Task_WeatherInit(u8 taskId)
{
- if (gWeather.unknown_6C8)
+ if (gWeatherPtr->unknown_6C8)
{
- gUnknown_08396FC8[gWeather.unknown_6D0][2]();
- gTasks[task].func = &sub_807CA34;
+ sWeatherFuncs[gWeatherPtr->currWeather].initAll();
+ gTasks[taskId].func = Task_WeatherMain;
}
}
-void sub_807CA34(u8 task)
+void Task_WeatherMain(u8 taskId)
{
- u8 v1;
- if (gWeather.unknown_6D0 != gWeather.unknown_6D1)
+ if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather)
{
- v1 = gUnknown_08396FC8[gWeather.unknown_6D0][3]();
- if (!v1)
+ if (!sWeatherFuncs[gWeatherPtr->currWeather].finish())
{
- gUnknown_08396FC8[gWeather.unknown_6D1][0]();
- gWeather.unknown_6C3 = 0; // compiler reuses v1
- gWeather.unknown_6C6 = 0; // compiler reuses v1
- gWeather.unknown_6D0 = gWeather.unknown_6D1;
- gWeather.unknown_6D3 = 1;
+ sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
+ gWeatherPtr->unknown_6C3 = 0;
+ gWeatherPtr->unknown_6C6 = 0;
+ gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
+ gWeatherPtr->unknown_6D3 = 1;
}
}
else
{
- gUnknown_08396FC8[gWeather.unknown_6D0][1]();
+ sWeatherFuncs[gWeatherPtr->currWeather].main();
}
- gUnknown_083970B8[gWeather.unknown_6C6]();
+ gUnknown_083970B8[gWeatherPtr->unknown_6C6]();
}
-void sub_807CAE8(void)
+void None_Init(void)
{
- gWeather.unknown_6C1 = 0;
- gWeather.unknown_6C2 = 0;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 0;
}
-void nullsub_38(void)
+void None_Main(void)
{
}
-u32 sub_807CB0C(void)
+u8 None_Finish(void)
{
return 0;
}
@@ -122,7 +298,7 @@ u32 sub_807CB0C(void)
void sub_807CB10(void)
{
u16 v0;
- u8(*v1)[32];
+ u8 (*v1)[32];
u16 v2;
u16 v4;
u16 v5;
@@ -132,30 +308,22 @@ void sub_807CB10(void)
u16 v11;
s16 dunno;
- gUnknown_030006DC = &gUnknown_083970C8;
+ gUnknown_030006DC = gUnknown_083970C8;
for (v0 = 0; v0 <= 1; v0++)
{
if (v0 == 0)
- {
- v1 = &gUnknown_0202F9E8;
- }
+ v1 = gWeatherPtr->unknown_200;
else
- {
- v1 = &gUnknown_0202F9E8 + 19;
- }
+ v1 = gWeatherPtr->unk460;
+
for (v2 = 0; (u16)v2 <= 0x1f; v2++)
{
v4 = v2 << 8;
if (v0 == 0)
- {
v5 = (v2 << 8) / 16;
- }
else
- {
v5 = 0;
- }
- v6 = 0;
- for (; v6 <= 2; v6++)
+ for (v6 = 0; v6 <= 2; v6++)
{
v4 = (v4 - v5);
v1[v6][v2] = v4 >> 8;
@@ -202,59 +370,53 @@ void sub_807CB10(void)
void sub_807CC24(void)
{
- if (gWeather.unknown_6C0 == gWeather.unknown_6C1)
+ if (gWeatherPtr->unknown_6C0 == gWeatherPtr->unknown_6C1)
{
- gWeather.unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C6 = 3;
}
else
{
- if (++gWeather.unknown_6C3 >= gWeather.unknown_6C2)
+ if (++gWeatherPtr->unknown_6C3 >= gWeatherPtr->unknown_6C2)
{
- gWeather.unknown_6C3 = 0;
- if (gWeather.unknown_6C0 < gWeather.unknown_6C1)
- {
- gWeather.unknown_6C0++;
- }
+ gWeatherPtr->unknown_6C3 = 0;
+ if (gWeatherPtr->unknown_6C0 < gWeatherPtr->unknown_6C1)
+ gWeatherPtr->unknown_6C0++;
else
- {
- gWeather.unknown_6C0--;
- }
- sub_807CEBC(0, 0x20, gWeather.unknown_6C0);
+ gWeatherPtr->unknown_6C0--;
+ sub_807CEBC(0, 0x20, gWeatherPtr->unknown_6C0);
}
}
}
void sub_807CCAC(void)
{
- if (++gWeather.unknown_6CB > 1)
+ if (++gWeatherPtr->unknown_6CB > 1)
+ gWeatherPtr->unknown_6CA = 0;
+ switch (gWeatherPtr->currWeather)
{
- gWeather.unknown_6CA = 0;
- }
- switch (gWeather.unknown_6D0)
- {
- case 3:
- case 4:
- case 5:
+ case WEATHER_RAIN_LIGHT:
+ case WEATHER_RAIN_MED:
+ case WEATHER_RAIN_HEAVY:
+ case WEATHER_SNOW:
case 11:
- case 13:
if (sub_807CDC4() == 0)
{
- gWeather.unknown_6C0 = 3;
- gWeather.unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C0 = 3;
+ gWeatherPtr->unknown_6C6 = 3;
}
break;
case 12:
if (sub_807CE24() == 0)
{
- gWeather.unknown_6C0 = -6;
- gWeather.unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C0 = -6;
+ gWeatherPtr->unknown_6C6 = 3;
}
break;
case 6:
if (sub_807CE7C() == 0)
{
- gWeather.unknown_6C0 = 0;
- gWeather.unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C0 = 0;
+ gWeatherPtr->unknown_6C6 = 3;
}
break;
case 7:
@@ -264,8 +426,8 @@ void sub_807CCAC(void)
default:
if (!gPaletteFade.active)
{
- gWeather.unknown_6C0 = gWeather.unknown_6C1;
- gWeather.unknown_6C6 = 3;
+ gWeatherPtr->unknown_6C0 = gWeatherPtr->unknown_6C1;
+ gWeatherPtr->unknown_6C6 = 3;
}
break;
}
@@ -273,47 +435,728 @@ void sub_807CCAC(void)
u8 sub_807CDC4(void)
{
- if (gWeather.unknown_6C7 == 0x10)
- {
+ if (gWeatherPtr->unknown_6C7 == 0x10)
return 0;
- }
- if (++gWeather.unknown_6C7 >= 0x10)
+ if (++gWeatherPtr->unknown_6C7 >= 0x10)
{
sub_807CEBC(0, 0x20, 3);
- gWeather.unknown_6C7 = 0x10;
+ gWeatherPtr->unknown_6C7 = 0x10;
return 0;
}
- sub_807D1BC(0, 0x20, 3, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4);
+ sub_807D1BC(0, 0x20, 3, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
return 1;
}
u8 sub_807CE24(void)
{
- if (gWeather.unknown_6C7 == 0x10)
- {
+ if (gWeatherPtr->unknown_6C7 == 0x10)
return 0;
- }
- if (++gWeather.unknown_6C7 >= 0x10)
+ if (++gWeatherPtr->unknown_6C7 >= 0x10)
{
sub_807CEBC(0, 0x20, -6);
- gWeather.unknown_6C7 = 0x10;
+ gWeatherPtr->unknown_6C7 = 0x10;
return 0;
}
- sub_807D304(-6, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4);
+ sub_807D304(-6, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
return 1;
}
u8 sub_807CE7C(void)
{
- if (gWeather.unknown_6C7 == 0x10)
- {
+ if (gWeatherPtr->unknown_6C7 == 0x10)
return 0;
- }
- ++gWeather.unknown_6C7;
- sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4);
+ ++gWeatherPtr->unknown_6C7;
+ sub_807D424(0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4);
return 1;
}
void nullsub_39(void)
{
}
+
+void sub_807CEBC(u8 a, u8 b, s8 c)
+{
+ u16 r4;
+ u16 palOffset;
+ u8 *r6;
+ u16 i;
+
+ if (c > 0)
+ {
+ c = c - 1;
+ palOffset = a * 16;
+ b += a;
+ r4 = a;
+ while (r4 < b)
+ {
+ if (gUnknown_030006DC[r4] == 0)
+ {
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ u8 r, g, b;
+
+ if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeatherPtr->unknown_6D5)
+ r6 = gWeatherPtr->unk460[c];
+ else
+ r6 = gWeatherPtr->unknown_200[c];
+ if (r4 == 16 || r4 > 0x1B)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ if (gPlttBufferUnfaded[palOffset] == 0x2D9F)
+ {
+ palOffset++;
+ }
+ else
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+
+ r = r6[color.r];
+ g = r6[color.g];
+ b = r6[color.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+
+ r = r6[color.r];
+ g = r6[color.g];
+ b = r6[color.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+ }
+ r4++;
+ }
+ }
+ else if (c < 0)
+ {
+ c = -c - 1;
+ palOffset = a * 16;
+ b += a;
+ r4 = a;
+ while (r4 < b)
+ {
+ if (gUnknown_030006DC[r4] == 0)
+ {
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ if (r4 == 16 || r4 > 0x1B)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ if (gPlttBufferUnfaded[palOffset] != 0x2D9F)
+ gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ palOffset++;
+ }
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])];
+ palOffset++;
+ }
+ }
+ }
+ r4++;
+ }
+ }
+ else
+ {
+ CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16));
+ }
+}
+
+void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e)
+{
+ u16 palOffset;
+ u16 r4;
+ u16 i;
+ struct RGBColor color = *(struct RGBColor *)&e;
+ u8 r_ = color.r;
+ u8 g_ = color.g;
+ u8 b_ = color.b;
+
+ palOffset = a1 * 16;
+ a2 += a1;
+ c = c - 1;
+ r4 = a1;
+ while (r4 < a2)
+ {
+ if (gUnknown_030006DC[r4] == 0)
+ {
+ BlendPalette(palOffset, 16, d, e);
+ palOffset += 16;
+ }
+ else
+ {
+ u8 *r5;
+
+ if (gUnknown_030006DC[r4] == 1)
+ r5 = gWeatherPtr->unknown_200[c];
+ else
+ r5 = gWeatherPtr->unk460[c];
+
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = r5[color.r];
+ u8 g = r5[color.g];
+ u8 b = r5[color.b];
+
+ r += ((r_ - r) * d) >> 4;
+ g += ((g_ - g) * d) >> 4;
+ b += ((b_ - b) * d) >> 4;
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+ r4++;
+ }
+}
+
+void sub_807D304(s8 a, u8 coeff, u16 c)
+{
+ struct RGBColor color;
+ u8 r_;
+ u8 g_;
+ u8 b_;
+ u16 r4;
+ u16 palOffset;
+ u16 r12;
+
+ a = -a - 1;
+ color = *(struct RGBColor *)&c;
+ r_ = color.r;
+ g_ = color.g;
+ b_ = color.b;
+ palOffset = 0;
+ for (r4 = 0; r4 < 32; r4++)
+ {
+ if (gUnknown_030006DC[r4] == 0)
+ {
+ BlendPalette(palOffset, 16, coeff, c);
+ palOffset += 16;
+ }
+ else
+ {
+ for (r12 = 0; r12 < 16; r12++)
+ {
+ u32 offset;
+ struct RGBColor color1;
+ struct RGBColor color2;
+ u8 r1, g1, b1;
+ u8 r2, g2, b2;
+
+ color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r1 = color1.r;
+ g1 = color1.g;
+ b1 = color1.b;
+
+ offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1);
+ color2 = *(struct RGBColor *)&eWeatherPaletteData.data[a][offset];
+ r2 = color2.r;
+ g2 = color2.g;
+ b2 = color2.b;
+
+ r2 += ((r_ - r2) * coeff) >> 4;
+ g2 += ((g_ - g2) * coeff) >> 4;
+ b2 += ((b_ - b2) * coeff) >> 4;
+
+ gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2;
+ }
+ }
+ }
+}
+
+bool8 sub_807D574(u8);
+
+void sub_807D424(u8 a, u16 b)
+{
+ struct RGBColor color;
+ u8 r_;
+ u8 g_;
+ u8 b_;
+ u16 r4;
+
+ BlendPalette(0, 0x100, a, b);
+ color = *(struct RGBColor *)&b;
+ r_ = color.r;
+ g_ = color.g;
+ b_ = color.b;
+
+ r4 = 16;
+ while (r4 < 32)
+ {
+ if (sub_807D574(r4))
+ {
+ u16 r12 = (r4 + 1) * 16;
+ u16 r6 = r4 * 16;
+
+ while (r6 < r12)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[r6];
+ u8 r = color.r;
+ u8 g = color.g;
+ u8 b = color.b;
+
+ r += ((28 - r) * 3) >> 2;
+ g += ((31 - g) * 3) >> 2;
+ b += ((28 - b) * 3) >> 2;
+
+ r += ((r_ - r) * a) >> 4;
+ g += ((g_ - g) * a) >> 4;
+ b += ((b_ - b) * a) >> 4;
+
+ gPlttBufferFaded[r6] = (b << 10) | (g << 5) | r;
+ r6++;
+ }
+ }
+ else
+ {
+ BlendPalette(r4 * 16, 16, a, b);
+ }
+ r4++;
+ }
+}
+
+void sub_807D540(u8 a)
+{
+ if (gWeatherPtr->unknown_6FA < 6)
+ {
+ gWeatherPtr->unknown_6F4[gWeatherPtr->unknown_6FA] = a;
+ gWeatherPtr->unknown_6FA++;
+ }
+}
+
+bool8 sub_807D574(u8 a)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->unknown_6FA; i++)
+ {
+ if (gWeatherPtr->unknown_6F4[i] == a)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_807D5BC(s8 a)
+{
+ if (gWeatherPtr->unknown_6C6 == 3)
+ {
+ sub_807CEBC(0, 32, a);
+ gWeatherPtr->unknown_6C0 = a;
+ }
+}
+
+void sub_807D5F0(u8 a, u8 b, u8 c)
+{
+ if (gWeatherPtr->unknown_6C6 == 3)
+ {
+ gWeatherPtr->unknown_6C6 = 0;
+ gWeatherPtr->unknown_6C0 = a;
+ gWeatherPtr->unknown_6C1 = b;
+ gWeatherPtr->unknown_6C3 = 0;
+ gWeatherPtr->unknown_6C2 = c;
+ sub_807D5BC(a);
+ }
+}
+
+void fade_screen(u8 a, u8 delay)
+{
+ u32 fadeColor;
+ u32 r1;
+ u32 r2;
+
+ switch (a)
+ {
+ case 0:
+ fadeColor = 0;
+ r1 = 0;
+ break;
+ case 2:
+ fadeColor = 0xFFFF;
+ r1 = 0;
+ break;
+ case 1:
+ fadeColor = 0;
+ r1 = 1;
+ break;
+ case 3:
+ fadeColor = 0xFFFF;
+ r1 = 1;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN_LIGHT:
+ case WEATHER_RAIN_MED:
+ case WEATHER_RAIN_HEAVY:
+ case WEATHER_SNOW:
+ case 6:
+ case 11:
+ case 12:
+ r2 = 1;
+ break;
+ default:
+ r2 = 0;
+ break;
+ }
+
+ if (r1 != 0)
+ {
+ if (r2 != 0)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
+ gWeatherPtr->unknown_6C6 = 2;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6C4 = fadeColor;
+ if (r2 != 0)
+ gWeatherPtr->unknown_6C7 = 0;
+ else
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
+ gWeatherPtr->unknown_6C6 = 1;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->unknown_6C8 = 1;
+ }
+}
+
+bool8 sub_807D770(void)
+{
+ return gWeatherPtr->unknown_6C6 ^ 1 ? TRUE : FALSE;
+}
+
+void sub_807D78C(u8 a)
+{
+ u16 r4 = 16 + a;
+ u16 i;
+
+ switch (gWeatherPtr->unknown_6C6)
+ {
+ case 1:
+ if (gWeatherPtr->unknown_6CA != 0)
+ {
+ if (gWeatherPtr->currWeather == 6)
+ sub_807D540(r4);
+ r4 *= 16;
+ for (i = 0; i < 16; i++)
+ gPlttBufferFaded[r4 + i] = gWeatherPtr->unknown_6C4;
+ }
+ break;
+ case 2:
+ r4 *= 16;
+ CpuFastCopy(gPlttBufferFaded + r4, gPlttBufferUnfaded + r4, 32);
+ BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ break;
+ default:
+ if (gWeatherPtr->currWeather != 6)
+ {
+ sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0);
+ }
+ else
+ {
+ r4 *= 16;
+ BlendPalette(r4, 16, 12, 0x73FC);
+ }
+ break;
+ }
+}
+
+void sub_807D874(u8 a)
+{
+ sub_807CEBC(a, 1, gWeatherPtr->unknown_6C0);
+}
+
+u8 unref_sub_807D894(void)
+{
+ if (gWeatherPtr->unknown_6C6 == 1)
+ return gWeatherPtr->unknown_6CA;
+ else
+ return 0;
+}
+
+void sub_807D8C0(const u16 *palette)
+{
+ LoadPalette(palette, 0x100 + gWeatherPtr->unknown_6D4 * 16, 32);
+ sub_807D78C(gWeatherPtr->unknown_6D4);
+}
+
+void sub_807D8F0(u8 *a, u8 *b)
+{
+ u8 r4 = *a;
+ u16 i;
+
+ if (r4 < 7)
+ {
+ r4--;
+ LZ77UnCompWram(sCompressedDroughtPalettes[r4], eWeatherPaletteData.data[r4]);
+ if (r4 == 0)
+ {
+ eWeatherPaletteData.data[r4][0] = 0x421;
+ for (i = 1; i < 0x1000; i++)
+ eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4][i - 1];
+ }
+ else
+ {
+ for (i = 0; i < 0x1000; i++)
+ eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i];
+ }
+ if (++(*a) == 7)
+ {
+ *a = 32;
+ *b = 32;
+ }
+ }
+}
+
+void sub_807D9A8(void)
+{
+ gWeatherPtr->unknown_74D = 1;
+ gWeatherPtr->unknown_74E = 1;
+}
+
+bool8 sub_807D9C8(void)
+{
+ if (gWeatherPtr->unknown_74D < 32)
+ {
+ sub_807D8F0(&gWeatherPtr->unknown_74D, &gWeatherPtr->unknown_74E);
+ if (gWeatherPtr->unknown_74D < 32)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_807DA04(s8 a)
+{
+ sub_807D5BC(-a - 1);
+}
+
+void sub_807DA14(void)
+{
+ gWeatherPtr->unknown_73C = 0;
+ gWeatherPtr->unknown_740 = 0;
+ gWeatherPtr->unknown_742 = 0;
+ gWeatherPtr->unknown_73E = 0;
+ gUnknown_0202FF58 = 5;
+}
+
+void sub_807DA4C(void)
+{
+ switch (gWeatherPtr->unknown_742)
+ {
+ case 0:
+ if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807DA04(gWeatherPtr->unknown_73C++);
+ if (gWeatherPtr->unknown_73C > 5)
+ {
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ gWeatherPtr->unknown_742 = 1;
+ gWeatherPtr->unknown_740 = 0x3C;
+ }
+ }
+ break;
+ case 1:
+ gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F;
+ gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2;
+ if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E)
+ sub_807DA04(gWeatherPtr->unknown_73C);
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ break;
+ case 2:
+ if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807DA04(--gWeatherPtr->unknown_73C);
+ if (gWeatherPtr->unknown_73C == 3)
+ gWeatherPtr->unknown_742 = 0;
+ }
+ break;
+ }
+}
+
+void Weather_SetBlendCoeffs(u8 eva, u8 evb)
+{
+ gWeatherPtr->currBlendEVA = eva;
+ gWeatherPtr->currBlendEVB = evb;
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ REG_BLDALPHA = BLDALPHA_BLEND(eva, evb);
+}
+
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
+{
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ gWeatherPtr->blendDelay = delay;
+ gWeatherPtr->unknown_739 = 0;
+ gWeatherPtr->unknown_738 = 0;
+}
+
+bool8 Weather_UpdateBlend(void)
+{
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ if (++gWeatherPtr->unknown_739 > gWeatherPtr->blendDelay)
+ {
+ gWeatherPtr->unknown_739 = 0;
+ gWeatherPtr->unknown_738++;
+
+ // Update currBlendEVA and currBlendEVB on alternate frames
+ if (gWeatherPtr->unknown_738 & 1)
+ {
+ if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA++;
+ else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA--;
+ }
+ else
+ {
+ if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB++;
+ else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB--;
+ }
+ }
+
+ REG_BLDALPHA = BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ return FALSE;
+}
+
+void unref_sub_807DCB4(u8 a)
+{
+ switch (a)
+ {
+ case 1:
+ SetWeather(1);
+ break;
+ case 2:
+ SetWeather(2);
+ break;
+ case 3:
+ SetWeather(3);
+ break;
+ case 4:
+ SetWeather(4);
+ break;
+ case 5:
+ SetWeather(5);
+ break;
+ case 6:
+ SetWeather(6);
+ break;
+ case 7:
+ SetWeather(9);
+ break;
+ case 8:
+ SetWeather(7);
+ break;
+ case 9:
+ SetWeather(8);
+ break;
+ case 10:
+ SetWeather(11);
+ break;
+ }
+}
+
+u8 weather_get_current(void)
+{
+ return gWeatherPtr->currWeather;
+}
+
+void SetRainStrengthFromSoundEffect(u16 sndEff)
+{
+ if (gWeatherPtr->unknown_6C6 != 2)
+ {
+ switch (sndEff)
+ {
+ case SE_T_KOAME:
+ gWeatherPtr->rainStrength = 0;
+ break;
+ case SE_T_OOAME:
+ gWeatherPtr->rainStrength = 1;
+ break;
+ case SE_T_AME:
+ gWeatherPtr->rainStrength = 2;
+ break;
+ default:
+ return;
+ }
+ PlaySE(sndEff);
+ }
+}
+
+void PlayRainSoundEffect(void)
+{
+ if (IsSpecialSEPlaying())
+ {
+ switch (gWeatherPtr->rainStrength)
+ {
+ case 0:
+ PlaySE(SE_T_KOAME_E);
+ break;
+ case 1:
+ PlaySE(SE_T_OOAME_E);
+ break;
+ case 2:
+ default:
+ PlaySE(SE_T_AME_E);
+ break;
+ }
+ }
+}
+
+u8 sub_807DDFC(void)
+{
+ return gWeatherPtr->unknown_6D3;
+}
+
+void sub_807DE10(void)
+{
+ gWeatherPtr->unknown_6C6 = 2;
+}
+
+void unref_sub_807DE24(void)
+{
+ gWeatherPtr->unknown_6C6 = 3;
+}
+
+void sub_807DE38(u8 a)
+{
+ CpuCopy16(gUnknown_083970C8, gUnknown_0202FF38, 32);
+ gUnknown_0202FF38[a] = 0;
+ gUnknown_030006DC = gUnknown_0202FF38;
+}
+
+void sub_807DE68(void)
+{
+ gUnknown_030006DC = gUnknown_083970C8;
+}
diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c
new file mode 100644
index 000000000..31eda4393
--- /dev/null
+++ b/src/field/field_weather_effects.c
@@ -0,0 +1,2383 @@
+#include "global.h"
+#include "field_map_obj.h"
+#include "field_weather.h"
+#include "overworld.h"
+#include "random.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+
+extern struct Weather *const gWeatherPtr;
+
+const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal");
+const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal");
+const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp");
+const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp");
+const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
+const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
+const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
+const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp");
+const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp");
+const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
+const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
+
+static const struct Coords16 gUnknown_0839A9C8[] =
+{
+ { 0, 66},
+ { 5, 73},
+ {10, 78},
+};
+
+static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, sizeof(gWeatherCloudTiles), 0x1200};
+
+static const struct OamData gOamData_839A9DC =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839A9E4[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839A9EC[] =
+{
+ gSpriteAnim_839A9E4,
+};
+
+void sub_807E0F4(struct Sprite *);
+static const struct SpriteTemplate sCloudSpriteTemplate =
+{
+ .tileTag = 4608,
+ .paletteTag = 4609,
+ .oam = &gOamData_839A9DC,
+ .anims = gSpriteAnimTable_839A9EC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807E0F4,
+};
+
+extern void sub_807D5BC(s8 a);
+extern void sub_807D8C0(const u16 *palette);
+extern void sub_807D9A8(void);
+extern bool8 sub_807D9C8(void);
+extern void sub_807DA14(void);
+extern void sub_807DA4C(void);
+extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c);
+extern bool8 Weather_UpdateBlend(void);
+extern void SetRainStrengthFromSoundEffect(u16 sndEff);
+extern void sub_807D5F0(u8 a, u8 b, u8 c);
+
+//------------------------------------------------------------------------------
+// Clouds
+//------------------------------------------------------------------------------
+
+void Clouds_InitVars(void)
+{
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->initStep = 0;
+ if (gWeatherPtr->cloudSpritesCreated == FALSE)
+ Weather_SetBlendCoeffs(0, 16);
+}
+
+void Clouds_Main(void);
+
+void Clouds_InitAll(void)
+{
+ Clouds_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Clouds_Main();
+}
+
+void CreateCloudSprites(void);
+
+void Clouds_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateCloudSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+void sub_807E0A0(void);
+
+bool8 Clouds_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ return TRUE;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ sub_807E0A0();
+ gWeatherPtr->finishStep++;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// Weather 2
+//------------------------------------------------------------------------------
+
+void Weather2_InitVars(void)
+{
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+}
+
+void Weather2_InitAll(void)
+{
+ Weather2_InitVars();
+}
+
+void Weather2_Main(void)
+{
+}
+
+int Weather2_Finish(void)
+{
+ return 0;
+}
+
+void CreateCloudSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->cloudSpritesCreated == TRUE)
+ return;
+ LoadSpriteSheet(&sCloudSpriteSheet);
+ sub_807D8C0(gUnknown_08397108);
+ for (i = 0; i < 3; i++)
+ {
+ u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
+
+ if (spriteId != 64)
+ {
+ struct Sprite *sprite;
+
+ gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId];
+ sprite = gWeatherPtr->sprites.s1.cloudSprites[i];
+ sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->cloudSpritesCreated = TRUE;
+}
+
+void sub_807E0A0(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->cloudSpritesCreated == FALSE)
+ return;
+ for (i = 0; i < 3; i++)
+ {
+ if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1200);
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+}
+
+void sub_807E0F4(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 1) & 1;
+ if (sprite->data[0] != 0)
+ sprite->pos1.x--;
+}
+
+//------------------------------------------------------------------------------
+// Drought
+//------------------------------------------------------------------------------
+
+void Drought_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 0;
+}
+
+void Drought_Main(void);
+
+void Drought_InitAll(void)
+{
+ Drought_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Drought_Main();
+}
+
+void Drought_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ if (gWeatherPtr->unknown_6C6 != 0)
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ sub_807D9A8();
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (sub_807D9C8() == FALSE)
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ sub_807DA14();
+ gWeatherPtr->initStep++;
+ break;
+ case 4:
+ sub_807DA4C();
+ if (gWeatherPtr->unknown_73C == 6)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ sub_807DA4C();
+ break;
+ }
+}
+
+int Drought_Finish(void)
+{
+ return 0;
+}
+
+void task50_0807B6D4(u8);
+
+void sub_807E25C(void)
+{
+ CreateTask(task50_0807B6D4, 0x50);
+}
+
+#define tState data[0]
+#define tBlendY data[1]
+#define tBlendDelay data[2]
+#define tWinRange data[3]
+
+void task50_0807B6D4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->tState)
+ {
+ case 0:
+ task->tBlendY = 0;
+ task->tBlendDelay = 0;
+ task->tWinRange = REG_WININ;
+ REG_WININ = WIN_RANGE(63, 63);
+ REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ
+ | BLDCNT_EFFECT_LIGHTEN;
+ REG_BLDY = 0;
+ task->tState++;
+ // fall through
+ case 1:
+ task->tBlendY += 3;
+ if (task->tBlendY > 16)
+ task->tBlendY = 16;
+ REG_BLDY = task->tBlendY;
+ if (task->tBlendY >= 16)
+ task->tState++;
+ break;
+ case 2:
+ task->tBlendDelay++;
+ if (task->tBlendDelay > 9)
+ {
+ task->tBlendDelay = 0;
+ task->tBlendY--;
+ if (task->tBlendY <= 0)
+ {
+ task->tBlendY = 0;
+ task->tState++;
+ }
+ REG_BLDY = task->tBlendY;
+ }
+ break;
+ case 3:
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+ REG_WININ = task->tWinRange;
+ task->tState++;
+ break;
+ case 4:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+#undef tState
+#undef tBlendY
+#undef tBlendDelay
+#undef tWinRange
+
+//------------------------------------------------------------------------------
+// Light Rain
+//------------------------------------------------------------------------------
+
+void LightRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 8;
+ gWeatherPtr->unknown_6DC = 0;
+ gWeatherPtr->unknown_6D9 = 10;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+ SetRainStrengthFromSoundEffect(SE_T_KOAME);
+}
+
+void LightRain_Main(void);
+
+void LightRain_InitAll(void)
+{
+ LightRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ LightRain_Main();
+}
+
+void LoadRainSpriteSheet(void);
+u8 CreateRainSprite(void);
+u8 sub_807E8E8(void);
+
+void LightRain_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (CreateRainSprite() == 0)
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (sub_807E8E8() == FALSE)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+void DestroyRainSprites(void);
+
+bool8 LightRain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ {
+ gWeatherPtr->finishStep = 0xFF;
+ return FALSE;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6D9 = 0;
+ gWeatherPtr->finishStep++;
+ }
+ // fall through
+ case 1:
+ if (sub_807E8E8() == FALSE)
+ {
+ DestroyRainSprites();
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// defined below
+extern const s16 gUnknown_0839AABC[][2];
+extern const u16 gUnknown_0839AAC4[][2];
+
+void sub_807E4EC(struct Sprite *sprite)
+{
+ u32 randVal;
+ u16 r6;
+ s32 r4;
+ s32 r0;
+
+ if (sprite->data[1] == 0)
+ sprite->data[1] = 361;
+ randVal = sprite->data[1] * 1103515245 + 12345;
+ sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600;
+
+ r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
+
+ r4 = sprite->data[1] % 30;
+ sprite->data[2] = r4 * 8; // useless assignment
+
+ r0 = sprite->data[1] / 30;
+ sprite->data[3] = r0 * 8; // useless assignment
+
+ sprite->data[2] = r4;
+ sprite->data[2] <<= 7;
+
+ sprite->data[3] = r0;
+ sprite->data[3] <<= 7;
+
+ sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6;
+ sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6;
+
+ StartSpriteAnim(sprite, 0);
+ sprite->data[4] = 0;
+ sprite->coordOffsetEnabled = FALSE;
+ sprite->data[0] = r6;
+}
+
+void sub_807E5C0(struct Sprite *sprite)
+{
+ if (sprite->data[4] == 0)
+ {
+ sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0];
+ sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+
+ if (sprite->data[5] != 0
+ && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248)
+ && sprite->pos1.y >= -16 && sprite->pos1.y <= 176)
+ sprite->invisible = FALSE;
+ else
+ sprite->invisible = TRUE;
+
+ sprite->data[0]--;
+ if (sprite->data[0] == 0)
+ {
+ StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1);
+ sprite->data[4] = 1;
+ sprite->pos1.x -= gSpriteCoordOffsetX;
+ sprite->pos1.y -= gSpriteCoordOffsetY;
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ }
+ else if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sub_807E4EC(sprite);
+ }
+}
+
+void sub_807E6C4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sub_807E4EC(sprite);
+ sprite->callback = sub_807E5C0;
+ }
+ else
+ {
+ sprite->data[0]--;
+ }
+}
+
+void sub_807E6F0(struct Sprite *sprite, u16 b)
+{
+ u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
+ u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
+ u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
+
+ while (--r6 != 0xFFFF)
+ sub_807E4EC(sprite);
+ if (r4 < r8)
+ {
+ while (--r4 != 0xFFFF)
+ sub_807E5C0(sprite);
+ sprite->data[6] = 0;
+ }
+ else
+ {
+ sprite->data[0] = r4 - r8;
+ sprite->invisible = TRUE;
+ sprite->data[6] = 1;
+ }
+}
+
+extern const struct SpriteSheet sRainSpriteSheet; // defined below
+
+void LoadRainSpriteSheet(void)
+{
+ LoadSpriteSheet(&sRainSpriteSheet);
+}
+
+static const struct Coords16 sRainSpriteCoords[] =
+{
+ { 0, 0},
+ { 0, 160},
+ { 0, 64},
+ {144, 224},
+ {144, 128},
+ { 32, 32},
+ { 32, 192},
+ { 32, 96},
+ { 72, 128},
+ { 72, 32},
+ { 72, 192},
+ {216, 96},
+ {216, 0},
+ {104, 160},
+ {104, 64},
+ {104, 224},
+ {144, 0},
+ {144, 160},
+ {144, 64},
+ { 32, 224},
+ { 32, 128},
+ { 72, 32},
+ { 72, 192},
+ { 48, 96},
+};
+
+static const struct OamData gOamData_839AA68 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AA70[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gSpriteAnim_839AA78[] =
+{
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AA88[] =
+{
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AA98[] =
+{
+ gSpriteAnim_839AA70,
+ gSpriteAnim_839AA78,
+ gSpriteAnim_839AA88,
+};
+
+static const struct SpriteTemplate sRainSpriteTemplate =
+{
+ .tileTag = 4614,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AA68,
+ .anims = gSpriteAnimTable_839AA98,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807E5C0,
+};
+
+
+const s16 gUnknown_0839AABC[][2] =
+{
+ {-104, 208},
+ {-160, 320},
+};
+
+const u16 gUnknown_0839AAC4[][2] =
+{
+ {18, 7},
+ {12, 10},
+};
+
+static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206};
+
+static const struct OamData gOamData_839AAD4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteFrameImage gSpriteImageTable_839AADC[] =
+{
+ {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)},
+ {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)},
+};
+
+static const union AnimCmd gSpriteAnim_839AAEC[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AAF4[] =
+{
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AAFC[] =
+{
+ gSpriteAnim_839AAEC,
+ gSpriteAnim_839AAF4,
+};
+
+void sub_807ED48(struct Sprite *);
+static const struct SpriteTemplate sSnowflakeSpriteTemplate =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AAD4,
+ .anims = gSpriteAnimTable_839AAFC,
+ .images = gSpriteImageTable_839AADC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807ED48,
+};
+
+// unused data
+static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
+
+static const struct OamData gOamData_839AB2C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AB34[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB3C[] =
+{
+ ANIMCMD_FRAME(32, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB44[] =
+{
+ ANIMCMD_FRAME(64, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB4C[] =
+{
+ ANIMCMD_FRAME(96, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB54[] =
+{
+ ANIMCMD_FRAME(128, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB5C[] =
+{
+ ANIMCMD_FRAME(160, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AB64[] =
+{
+ gSpriteAnim_839AB34,
+ gSpriteAnim_839AB3C,
+ gSpriteAnim_839AB44,
+ gSpriteAnim_839AB4C,
+ gSpriteAnim_839AB54,
+ gSpriteAnim_839AB5C,
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] =
+{
+ gSpriteAffineAnim_839AB7C,
+};
+
+static void Fog1SpriteCallback(struct Sprite *);
+static const struct SpriteTemplate sFog1SpriteTemplate =
+{
+ .tileTag = 4609,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AB2C,
+ .anims = gSpriteAnimTable_839AB64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_839AB8C,
+ .callback = Fog1SpriteCallback,
+};
+
+bool8 CreateRainSprite(void)
+{
+ u8 spriteNum;
+ u8 spriteId;
+
+ if (gWeatherPtr->rainSpriteCount == 24)
+ return FALSE;
+
+ spriteNum = gWeatherPtr->rainSpriteCount;
+ spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate,
+ sRainSpriteCoords[spriteNum].x, sRainSpriteCoords[spriteNum].y, 78);
+ if (spriteId != 64)
+ {
+ gSprites[spriteId].data[5] = 0;
+ gSprites[spriteId].data[1] = spriteNum * 145;
+ while (gSprites[spriteId].data[1] >= 600)
+ gSprites[spriteId].data[1] -= 600;
+ sub_807E4EC(&gSprites[spriteId]);
+ sub_807E6F0(&gSprites[spriteId], spriteNum * 9);
+ gSprites[spriteId].invisible = TRUE;
+ gWeatherPtr->sprites.s1.rainSprites[spriteNum] = &gSprites[spriteId];
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.rainSprites[spriteNum] = NULL;
+ }
+
+ if (++gWeatherPtr->rainSpriteCount == 24)
+ {
+ u16 i;
+
+ for (i = 0; i < 24; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i]->data[6] == 0)
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E5C0;
+ else
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E6C4;
+ }
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_807E8E8(void)
+{
+ if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9)
+ return FALSE;
+
+ if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB)
+ {
+ gWeatherPtr->unknown_6D6 = 0;
+ if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9)
+ {
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6D8--;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+void DestroyRainSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->rainSpriteCount; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]);
+ }
+ gWeatherPtr->rainSpriteCount = 0;
+ FreeSpriteTilesByTag(0x1206);
+}
+
+//------------------------------------------------------------------------------
+// Snow
+//------------------------------------------------------------------------------
+
+void Snow_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->unknown_6E5 = 16;
+ gWeatherPtr->unknown_6E0 = 0;
+}
+
+void Snow_Main(void);
+void sub_807ED48(struct Sprite *);
+
+void Snow_InitAll(void)
+{
+ Snow_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ {
+ u16 i;
+
+ Snow_Main();
+ for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++)
+ {
+ sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]);
+ }
+ }
+}
+
+u8 snowflakes_progress(void);
+
+void Snow_Main(void)
+{
+ if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+}
+
+bool8 Snow_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6E5 = 0;
+ gWeatherPtr->unknown_6E0 = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ if (snowflakes_progress() == FALSE)
+ {
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 CreateSnowflakeSprite(void);
+bool8 RemoveSnowflakeSprite(void);
+
+bool8 snowflakes_progress(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5)
+ return FALSE;
+
+ gWeatherPtr->unknown_6E0++;
+ if (gWeatherPtr->unknown_6E0 > 36)
+ {
+ gWeatherPtr->unknown_6E0 = 0;
+ if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5)
+ CreateSnowflakeSprite();
+ else
+ RemoveSnowflakeSprite();
+ }
+ return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5);
+}
+
+void sub_807EC40(struct Sprite *);
+
+bool8 CreateSnowflakeSprite(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78);
+
+ if (spriteId == 64)
+ return FALSE;
+ gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount;
+ sub_807EC40(&gSprites[spriteId]);
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId];
+ return TRUE;
+}
+
+bool8 RemoveSnowflakeSprite(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount != 0)
+ {
+ DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_807EC40(struct Sprite *sprite)
+{
+ u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30);
+ u16 r6;
+
+ sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->pos2.x = 0;
+ r6 = Random();
+ sprite->data[1] = (r6 & 3) * 5 + 64;
+ sprite->data[7] = (r6 & 3) * 5 + 64;
+ StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1);
+ sprite->data[3] = 0;
+ sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1;
+ sprite->data[6] = (r6 & 0x1F) + 210;
+ sprite->data[5] = 0;
+}
+
+void sub_807ECEC(struct Sprite *sprite)
+{
+ if (gWeatherPtr->unknown_6E2 > 18)
+ {
+ sprite->invisible = FALSE;
+ sprite->callback = sub_807ED48;
+ sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->data[0] = sprite->pos1.y * 128;
+ gWeatherPtr->unknown_6E2 = 0;
+ }
+}
+
+void sub_807ED48(struct Sprite *sprite)
+{
+ s16 r3;
+ s16 r2;
+
+ sprite->data[0] += sprite->data[1];
+ sprite->pos1.y = sprite->data[0] >> 7;
+ sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF;
+ sprite->pos2.x = gSineTable[sprite->data[3]] / 64;
+
+ r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF;
+ if (r3 & 0x100)
+ r3 = -0x100 | r3; // hmm... what is this?
+ if (r3 < -3)
+ sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ else if (r3 > 242)
+ sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+
+ r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF;
+ if (r2 > 163 && r2 < 171)
+ {
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->data[5] = 0;
+ sprite->data[6] = 220;
+ }
+ else if (r2 > 242 && r2 < 250)
+ {
+ sprite->pos1.y = 163;
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->data[5] = 0;
+ sprite->data[6] = 220;
+ sprite->invisible = TRUE;
+ sprite->callback = sub_807ECEC;
+ }
+
+ sprite->data[5]++;
+ if (sprite->data[5] == sprite->data[6])
+ {
+ sub_807EC40(sprite);
+ sprite->pos1.y = 250;
+ sprite->invisible = TRUE;
+ sprite->callback = sub_807ECEC;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Medium Rain
+//------------------------------------------------------------------------------
+
+void MedRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 4;
+ gWeatherPtr->unknown_6DC = 0;
+ gWeatherPtr->unknown_6D9 = 16;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ gWeatherPtr->unknown_6ED = 0;
+ SetRainStrengthFromSoundEffect(SE_T_AME);
+}
+
+void Rain_Main(void);
+
+void MedRain_InitAll(void)
+{
+ MedRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Rain_Main();
+}
+
+//------------------------------------------------------------------------------
+// Heavy Rain
+//------------------------------------------------------------------------------
+
+void HeavyRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 4;
+ gWeatherPtr->unknown_6DC = 1;
+ gWeatherPtr->unknown_6D9 = 24;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ SetRainStrengthFromSoundEffect(SE_T_OOAME);
+}
+
+void HeavyRain_InitAll(void)
+{
+ HeavyRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Rain_Main();
+}
+
+void UpdateThunderSound(void);
+void SetThunderCounter(u16);
+
+void Rain_Main(void)
+{
+ UpdateThunderSound();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (CreateRainSprite())
+ break;
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (sub_807E8E8())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ if (gWeatherPtr->unknown_6C6 == 0)
+ break;
+ gWeatherPtr->initStep = 6;
+ break;
+ case 4:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6E6 = (Random() % 360) + 360;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 5:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ gWeatherPtr->initStep++;
+ break;
+ case 6:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6EB = Random() % 2;
+ gWeatherPtr->initStep++;
+ break;
+ case 7:
+ gWeatherPtr->unknown_6EC = (Random() & 1) + 1;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 8:
+ sub_807D5BC(19);
+ if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
+ SetThunderCounter(20);
+ gWeatherPtr->unknown_6E6 = (Random() % 3) + 6;
+ gWeatherPtr->initStep++;
+ break;
+ case 9:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ sub_807D5BC(3);
+ gWeatherPtr->unknown_6EA = 1;
+ if (--gWeatherPtr->unknown_6EC != 0)
+ {
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep = 10;
+ }
+ else if (gWeatherPtr->unknown_6EB == 0)
+ {
+ gWeatherPtr->initStep = 4;
+ }
+ else
+ {
+ gWeatherPtr->initStep = 11;
+ }
+ break;
+ case 10:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ gWeatherPtr->initStep = 8;
+ break;
+ case 11:
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep++;
+ break;
+ case 12:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ SetThunderCounter(100);
+ sub_807D5BC(19);
+ // Why use "% 16" everywhere else and "& 0xF" here. So dumb.
+ gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
+ gWeatherPtr->initStep++;
+ break;
+ case 13:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ sub_807D5F0(19, 3, 5);
+ gWeatherPtr->initStep++;
+ break;
+ case 14:
+ if (gWeatherPtr->unknown_6C6 != 3)
+ break;
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->initStep = 4;
+ break;
+ }
+}
+
+bool8 Rain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6EA = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ Rain_Main();
+ if (gWeatherPtr->unknown_6EA != 0)
+ {
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ return FALSE;
+ gWeatherPtr->unknown_6D9 = 0;
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ if (sub_807E8E8())
+ break;
+ DestroyRainSprites();
+ gWeatherPtr->unknown_6ED = 0;
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void SetThunderCounter(u16 max)
+{
+ if (gWeatherPtr->unknown_6ED == 0)
+ {
+ gWeatherPtr->thunderCounter = Random() % max;
+ gWeatherPtr->unknown_6ED = 1;
+ }
+}
+
+void UpdateThunderSound(void)
+{
+ if (gWeatherPtr->unknown_6ED == 1)
+ {
+ if (gWeatherPtr->thunderCounter == 0)
+ {
+ if (IsSEPlaying())
+ return;
+ if (Random() & 1)
+ PlaySE(SE_T_KAMI);
+ else
+ PlaySE(SE_T_KAMI2);
+ gWeatherPtr->unknown_6ED = 0;
+ }
+ else
+ {
+ gWeatherPtr->thunderCounter--;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// Fog 1
+//------------------------------------------------------------------------------
+
+void Fog1_Main(void);
+static void CreateFog1Sprites(void);
+static void DestroyFog1Sprites(void);
+
+void Fog1_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ if (gWeatherPtr->fog1SpritesCreated == 0)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2 = 0;
+ gWeatherPtr->fog1ScrollPosX = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Fog1_InitAll(void)
+{
+ Fog1_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Fog1_Main();
+}
+
+void Fog1_Main(void)
+{
+ gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
+ if (++gWeatherPtr->unknown_6F0 > 3)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2++;
+ }
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFog1Sprites();
+ if (gWeatherPtr->currWeather == WEATHER_FOG_1)
+ Weather_SetTargetBlendCoeffs(12, 8, 3);
+ else
+ Weather_SetTargetBlendCoeffs(4, 16, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Fog1_Finish(void)
+{
+ gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
+ if (++gWeatherPtr->unknown_6F0 > 3)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2++;
+ }
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 3);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFog1Sprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define sprColumn data[0]
+
+static void Fog1SpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = (u8)gSpriteCoordOffsetY;
+ sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->sprColumn * 64;
+ if (sprite->pos1.x > 0x10F)
+ {
+ sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->sprColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void CreateFog1Sprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->fog1SpritesCreated)
+ {
+ struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201};
+
+ LoadSpriteSheet(&fog1SpriteSheet);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->sprColumn = i % 5;
+ sprite->pos1.x = (i % 5) * 64 + 32;
+ sprite->pos1.y = (i / 5) * 64 + 32;
+ gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->fog1SpritesCreated = TRUE;
+ }
+}
+
+#undef sprColumn
+
+static void DestroyFog1Sprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fog1SpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1201);
+ gWeatherPtr->fog1SpritesCreated = 0;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Volcanic ash
+//------------------------------------------------------------------------------
+
+void Ash_Main(void);
+void LoadAshSpriteSheet(void);
+void CreateAshSprites(void);
+void DestroyAshSprites(void);
+
+void Ash_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->unknown_6FE = 20;
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ Weather_SetBlendCoeffs(0, 16);
+ REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients!
+ }
+}
+
+void Ash_InitAll(void)
+{
+ Ash_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Ash_Main();
+}
+
+void Ash_Main(void)
+{
+ gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF;
+ while (gWeatherPtr->unknown_6FC > 0xEF)
+ gWeatherPtr->unknown_6FC -= 0xF0;
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadAshSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!gWeatherPtr->ashSpritesCreated)
+ CreateAshSprites();
+ Weather_SetTargetBlendCoeffs(16, 0, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ default:
+ Weather_UpdateBlend();
+ break;
+ }
+}
+
+bool8 Ash_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ DestroyAshSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ REG_BLDALPHA = 0;
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static const struct SpriteSheet sAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202};
+
+void LoadAshSpriteSheet(void)
+{
+ LoadSpriteSheet(&sAshSpriteSheet);
+}
+
+const struct OamData gOamData_839ABB8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 15,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839ABC0[] =
+{
+ ANIMCMD_FRAME(0, 60),
+ ANIMCMD_FRAME(64, 60),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_839ABCC[] =
+{
+ gSpriteAnim_839ABC0,
+};
+
+void sub_807FAA8(struct Sprite *);
+static const struct SpriteTemplate sAshSpriteTemplate =
+{
+ .tileTag = 4610,
+ .paletteTag = 4608,
+ .oam = &gOamData_839ABB8,
+ .anims = gSpriteAnimTable_839ABCC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807FAA8,
+};
+
+void CreateAshSprites(void)
+{
+ u8 i;
+
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[1] = 0;
+ sprite->data[2] = (u8)(i % 5);
+ sprite->data[3] = (u8)(i / 5);
+ sprite->data[0] = sprite->data[3] * 64 + 32;
+ gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->ashSpritesCreated = TRUE;
+ }
+}
+
+void DestroyAshSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1202);
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ }
+}
+
+void sub_807FAA8(struct Sprite *sprite)
+{
+ sprite->data[1]++;
+ if (sprite->data[1] > 5)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0];
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Fog 2
+//------------------------------------------------------------------------------
+
+void Fog2_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2 = 1;
+ if (gWeatherPtr->fog2SpritesCreated == 0)
+ {
+ gWeatherPtr->unknown_71C = 0;
+ gWeatherPtr->unknown_71E = 0;
+ gWeatherPtr->unknown_720 = 0;
+ gWeatherPtr->unknown_722 = 0;
+ gWeatherPtr->unknown_718 = 0;
+ gWeatherPtr->unknown_71A = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Fog2_Main(void);
+
+void Fog2_InitAll(void)
+{
+ Fog2_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Fog2_Main();
+}
+
+void sub_807FC9C(void);
+void CreateFog2Sprites(void);
+
+void Fog2_Main(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFog2Sprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 8);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void DestroyFog2Sprites(void);
+
+bool8 Fog2_Finish(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFog2Sprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_807FC9C(void)
+{
+ if (++gWeatherPtr->unknown_71C > 2)
+ {
+ gWeatherPtr->unknown_720++;
+ gWeatherPtr->unknown_71C = 0;
+ }
+
+ if (++gWeatherPtr->unknown_71E > 4)
+ {
+ gWeatherPtr->unknown_722++;
+ gWeatherPtr->unknown_71E = 0;
+ }
+
+ gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF;
+ gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722;
+}
+
+extern const struct SpriteTemplate sFog2SpriteTemplate; // defined below
+
+void CreateFog2Sprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->fog2SpritesCreated)
+ {
+ struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1203};
+
+ LoadSpriteSheet(&fog2SpriteSheet);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[0] = i % 5;
+ sprite->data[1] = i / 5;
+ gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->fog2SpritesCreated = TRUE;
+ }
+}
+
+const struct OamData gOamData_839ABF0 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839ABF8[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839AC00[] =
+{
+ gSpriteAnim_839ABF8,
+};
+
+void Fog2SpriteCallback(struct Sprite *);
+const struct SpriteTemplate sFog2SpriteTemplate =
+{
+ .tileTag = 4611,
+ .paletteTag = 4608,
+ .oam = &gOamData_839ABF0,
+ .anims = gSpriteAnimTable_839AC00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Fog2SpriteCallback,
+};
+
+void DestroyFog2Sprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fog2SpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fog2Sprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1203);
+ gWeatherPtr->fog2SpritesCreated = FALSE;
+ }
+}
+
+void Fog2SpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_71A;
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Sandstorm
+//------------------------------------------------------------------------------
+
+void Sandstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->unknown_6C1 = 0;
+ gWeatherPtr->unknown_6C2 = 20;
+ if (gWeatherPtr->sandstormSprites1Created == 0)
+ {
+ gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
+ gWeatherPtr->unknown_712 = 8;
+ gWeatherPtr->unknown_714 = 0;
+ // Dead code. How does the compiler not optimize this out?
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Sandstorm_Main(void);
+
+void Sandstorm_InitAll(void)
+{
+ Sandstorm_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Sandstorm_Main();
+}
+
+void sub_808002C(void);
+void sub_8080064(void);
+void CreateSandstormSprites_1(void);
+void CreateSandstormSprites_2(void);
+
+void Sandstorm_Main(void)
+{
+ sub_8080064();
+ sub_808002C();
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 32;
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateSandstormSprites_1();
+ CreateSandstormSprites_2();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(16, 0, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void sub_80800E4(void);
+
+bool8 Sandstorm_Finish(void)
+{
+ sub_8080064();
+ sub_808002C();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 0);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ sub_80800E4();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_808002C(void)
+{
+ if (gWeatherPtr->unknown_714++ > 4)
+ {
+ gWeatherPtr->unknown_712++;
+ gWeatherPtr->unknown_714 = 0;
+ }
+}
+
+void sub_8080064(void)
+{
+ gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4;
+ gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712];
+ gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF;
+ gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8);
+}
+
+void sub_80800E4(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->sandstormSprites1Created)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites1[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]);
+ }
+ gWeatherPtr->sandstormSprites1Created = FALSE;
+ FreeSpriteTilesByTag(0x1204);
+ }
+
+ if (gWeatherPtr->sandstormSprites2Created)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]);
+ }
+ gWeatherPtr->sandstormSprites2Created = FALSE;
+ }
+}
+
+const struct OamData gOamData_839AC1C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839AC24[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_839AC2C[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839AC34[] =
+{
+ gSpriteAnim_839AC24,
+ gSpriteAnim_839AC2C,
+};
+
+void SandstormSpriteCallback1(struct Sprite *);
+const struct SpriteTemplate sSandstormSpriteTemplate =
+{
+ .tileTag = 4612,
+ .paletteTag = 4609,
+ .oam = &gOamData_839AC1C,
+ .anims = gSpriteAnimTable_839AC34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SandstormSpriteCallback1,
+};
+
+static const struct SpriteSheet sSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204};
+
+void CreateSandstormSprites_1(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->sandstormSprites1Created)
+ {
+ LoadSpriteSheet(&sSandstormSpriteSheet);
+ sub_807D8C0(gUnknown_08397128);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[0] = i % 5;
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[1] = i / 5;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
+ }
+ }
+ gWeatherPtr->sandstormSprites1Created = TRUE;
+ }
+}
+
+const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0};
+
+void SandstormSpriteCallback2(struct Sprite *);
+
+void CreateSandstormSprites_2(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->sandstormSprites2Created)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 0x18, 0xD0, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[1] = i * 51;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[0] = 8;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[2] = 0;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[3] = gUnknown_0839AC5C[i];
+ StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
+ CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0);
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = SandstormSpriteCallback2;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL;
+ }
+ gWeatherPtr->sandstormSprites2Created = TRUE;
+ }
+ }
+}
+
+void SandstormSpriteCallback1(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_710;
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+void SandstormSpriteCallback3(struct Sprite *);
+
+void SandstormSpriteCallback2(struct Sprite *sprite)
+{
+ if (--sprite->data[3] == -1)
+ sprite->callback = SandstormSpriteCallback3;
+}
+
+void SandstormSpriteCallback3(struct Sprite *sprite)
+{
+ u32 x;
+ u32 y;
+
+ if (--sprite->pos1.y < -48)
+ {
+ sprite->pos1.y = 208;
+ sprite->data[0] = 4;
+ }
+ x = sprite->data[0] * gSineTable[sprite->data[1]];
+ y = sprite->data[0] * gSineTable[sprite->data[1] + 64];
+ sprite->pos2.x = x >> 8;
+ sprite->pos2.y = y >> 8;
+ sprite->data[1] = (sprite->data[1] + 10) & 0xFF;
+ if (++sprite->data[2] > 8)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Weather 11
+//------------------------------------------------------------------------------
+
+void Weather11_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->unknown_6C1 = 3;
+ gWeatherPtr->unknown_6C2 = 20;
+}
+
+void Weather11_InitAll(void)
+{
+ Weather11_InitVars();
+}
+
+void Weather11_Main(void)
+{
+}
+
+bool8 Weather11_Finish(void)
+{
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// Weather 14
+//------------------------------------------------------------------------------
+
+const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30};
+
+const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205};
+
+void Bubbles_InitVars(void)
+{
+ Fog1_InitVars();
+ if (gWeatherPtr->unknown_72E == 0)
+ {
+ LoadSpriteSheet(&gWeatherBubbleSpriteSheet);
+ gWeatherPtr->unknown_728 = 0;
+ gWeatherPtr->unknown_726 = gUnknown_0839AC68[0];
+ gWeatherPtr->unknown_72A = 0;
+ gWeatherPtr->unknown_72C = 0;
+ }
+}
+
+void Bubbles_Main(void);
+
+void Bubbles_InitAll(void)
+{
+ Bubbles_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Bubbles_Main();
+}
+
+void sub_8080588(u16);
+
+void Bubbles_Main(void)
+{
+ Fog1_Main();
+ if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728])
+ {
+ gWeatherPtr->unknown_726 = 0;
+ if (++gWeatherPtr->unknown_728 > 7)
+ gWeatherPtr->unknown_728 = 0;
+ sub_8080588(gWeatherPtr->unknown_72A);
+ if (++gWeatherPtr->unknown_72A > 12)
+ gWeatherPtr->unknown_72A = 0;
+ }
+}
+
+void sub_8080610(void);
+
+bool8 Bubbles_Finish(void)
+{
+ if (!Fog1_Finish())
+ {
+ sub_8080610();
+ return FALSE;
+ }
+ return TRUE;
+}
+
+const s16 gUnknown_0839AC78[][2] =
+{
+ {120, 160},
+ {376, 160},
+ { 40, 140},
+ {296, 140},
+ {180, 130},
+ {436, 130},
+ { 60, 160},
+ {436, 160},
+ {220, 180},
+ {476, 180},
+ { 10, 90},
+ {266, 90},
+ {256, 160},
+};
+
+const union AnimCmd gSpriteAnim_839ACAC[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839ACB8[] =
+{
+ gSpriteAnim_839ACAC,
+};
+
+extern const struct OamData gOamData_837DF24;
+
+void unc_0807DAB4(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_839ACBC =
+{
+ .tileTag = 4613,
+ .paletteTag = 4608,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_839ACB8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = unc_0807DAB4,
+};
+
+void sub_8080588(u16 a)
+{
+ s16 x = gUnknown_0839AC78[a][0];
+ s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY;
+ u8 spriteId = CreateSpriteAtEnd(
+ &gSpriteTemplate_839ACBC,
+ x,
+ y,
+ 0);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = 0;
+ gWeatherPtr->unknown_72C++;
+ }
+}
+
+void sub_8080610(void)
+{
+ u16 i;
+
+ for (i = 0; i < 64; i++)
+ {
+ if (gSprites[i].template == &gSpriteTemplate_839ACBC)
+ DestroySprite(&gSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1205);
+}
+
+void unc_0807DAB4(struct Sprite *sprite)
+{
+ ++sprite->data[0];
+ if (++sprite->data[0] > 8) // double increment
+ {
+ sprite->data[0] = 0;
+ if (sprite->data[1] == 0)
+ {
+ if (++sprite->pos2.x > 4)
+ sprite->data[1] = 1;
+ }
+ else
+ {
+ if (--sprite->pos2.x <= 0)
+ sprite->data[1] = 0;
+ }
+ }
+ sprite->pos1.y -= 3;
+ if (++sprite->data[2] > 0x77)
+ DestroySprite(sprite);
+}
+
+//------------------------------------------------------------------------------
+
+u8 TranslateWeatherNum(u8);
+void UpdateRainCounter(u8, u8);
+
+void SetSav1Weather(u32 weather)
+{
+ u8 oldWeather = gSaveBlock1.weather;
+
+ gSaveBlock1.weather = TranslateWeatherNum(weather);
+ UpdateRainCounter(gSaveBlock1.weather, oldWeather);
+}
+
+u8 GetSav1Weather(void)
+{
+ return gSaveBlock1.weather;
+}
+
+void SetSav1WeatherFromCurrMapHeader(void)
+{
+ u8 oldWeather = gSaveBlock1.weather;
+
+ gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather);
+ UpdateRainCounter(gSaveBlock1.weather, oldWeather);
+}
+
+void SetWeather(u32 weather)
+{
+ SetSav1Weather(weather);
+ DoWeatherEffect(GetSav1Weather());
+}
+
+void SetWeather_Unused(u32 weather)
+{
+ SetSav1Weather(weather);
+ sub_807C988(GetSav1Weather());
+}
+
+void DoCurrentWeather(void)
+{
+ DoWeatherEffect(GetSav1Weather());
+}
+
+void sub_8080750(void)
+{
+ sub_807C988(GetSav1Weather());
+}
+
+static const u8 sWeatherCycle1[] = {2, 3, 5, 3};
+static const u8 sWeatherCycle2[] = {2, 2, 3, 2};
+
+u8 TranslateWeatherNum(u8 weather)
+{
+ switch (weather)
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ case 3: return 3;
+ case 4: return 4;
+ case 5: return 5;
+ case 6: return 6;
+ case 7: return 7;
+ case 8: return 8;
+ case 9: return 9;
+ case 10: return 10;
+ case 11: return 11;
+ case 12: return 12;
+ case 13: return 13;
+ case 14: return 14;
+ case 20: return sWeatherCycle1[gSaveBlock1.filler_2F];
+ case 21: return sWeatherCycle2[gSaveBlock1.filler_2F];
+ default: return 0;
+ }
+}
+
+void UpdateWeatherPerDay(u16 increment)
+{
+ u16 weatherStage = gSaveBlock1.filler_2F + increment;
+ weatherStage %= 4;
+ gSaveBlock1.filler_2F = weatherStage;
+}
+
+void UpdateRainCounter(u8 newWeather, u8 oldWeather)
+{
+ if (newWeather != oldWeather
+ && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
+ IncrementGameStat(0x28);
+}
diff --git a/src/field/fldeff_berrytree.c b/src/field/fldeff_berrytree.c
new file mode 100644
index 000000000..0763c0314
--- /dev/null
+++ b/src/field/fldeff_berrytree.c
@@ -0,0 +1,56 @@
+#include "global.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "script.h"
+
+static void Task_WateringBerryTreeAnim_0(u8);
+static void Task_WateringBerryTreeAnim_1(u8);
+static void Task_WateringBerryTreeAnim_2(u8);
+static void Task_WateringBerryTreeAnim_3(u8);
+
+static void Task_WateringBerryTreeAnim_0(u8 taskId)
+{
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_1;
+}
+
+static void Task_WateringBerryTreeAnim_1(u8 taskId)
+{
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)
+ || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ sub_8059D08(player_get_direction_lower_nybble());
+ FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble()));
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_2;
+ }
+}
+
+static void Task_WateringBerryTreeAnim_2(u8 taskId)
+{
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ s16 value = gTasks[taskId].data[1]++;
+
+ if (value < 10)
+ {
+ FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble()));
+ }
+ else
+ {
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_3;
+ }
+ }
+}
+
+static void Task_WateringBerryTreeAnim_3(u8 taskId)
+{
+ SetPlayerAvatarTransitionFlags(sub_80597D0());
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+void DoWateringBerryTreeAnim(void)
+{
+ CreateTask(Task_WateringBerryTreeAnim_0, 80);
+}
diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c
index 00643a979..e4328acfc 100644
--- a/src/field/fldeff_cut.c
+++ b/src/field/fldeff_cut.c
@@ -2,6 +2,7 @@
#include "fldeff_cut.h"
#include "field_camera.h"
#include "field_effect.h"
+#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "map_obj_lock.h"
@@ -11,24 +12,65 @@
#include "overworld.h"
#include "rom6.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "trig.h"
-
-extern u8 gCutGrassSpriteArray[8]; // seems to be an array of 8 sprite IDs
+#include "ewram.h"
extern void (*gFieldCallback)(void);
extern void (*gUnknown_03005CE4)(void);
+extern u8 gLastFieldPokeMenuOpened;
-extern struct SpriteTemplate gSpriteTemplate_CutGrass;
+extern const u8 S_UseCut[];
-extern struct MapPosition gUnknown_0203923C;
+const struct OamData gOamData_CutGrass =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 1,
+ .priority = 1,
+ .paletteNum = 1,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_CutGrass[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_JUMP(0),
+};
-extern u8 gLastFieldPokeMenuOpened;
+const union AnimCmd *const gSpriteAnimTable_CutGrass[] =
+{
+ gSpriteAnim_CutGrass,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_CutGrass[] =
+{
+ {gFieldEffectPic_CutGrass, 0x20},
+};
-extern u8 S_UseCut[];
+const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
+
+static void sub_80A2A48(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_CutGrass =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .oam = &gOamData_CutGrass,
+ .anims = gSpriteAnimTable_CutGrass,
+ .images = gSpriteImageTable_CutGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A2A48,
+};
bool8 SetUpFieldMove_Cut(void)
{
@@ -135,9 +177,9 @@ bool8 FldEff_CutGrass(void)
// populate sprite ID array
for(i = 0; i < 8; i++)
{
- gCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass,
+ eCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass,
gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
- gSprites[gCutGrassSpriteArray[i]].data2 = 32 * i;
+ gSprites[eCutGrassSpriteArray[i]].data[2] = 32 * i;
}
return 0;
}
@@ -241,11 +283,11 @@ void sub_80A28F4(s16 x, s16 y)
}
}
-void sub_80A2A48(struct Sprite *sprite)
+static void sub_80A2A48(struct Sprite *sprite)
{
- sprite->data0 = 8;
- sprite->data1 = 0;
- sprite->data3 = 0;
+ sprite->data[0] = 8;
+ sprite->data[1] = 0;
+ sprite->data[3] = 0;
sprite->callback = (void *)objc_8097BBC;
}
@@ -254,16 +296,16 @@ void objc_8097BBC(struct Sprite *sprite)
u16 tempdata;
u16 tempdata2;
- sprite->pos2.x = Sin(sprite->data2, sprite->data0);
- sprite->pos2.y = Cos(sprite->data2, sprite->data0);
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]);
+ sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]);
- sprite->data2 = (sprite->data2 + 8) & 0xFF;
- sprite->data0 += ((tempdata2 = sprite->data3) << 16 >> 18) + 1; // what?
- sprite->data3 = tempdata2 + 1;
+ sprite->data[2] = (sprite->data[2] + 8) & 0xFF;
+ sprite->data[0] += ((tempdata2 = sprite->data[3]) << 16 >> 18) + 1; // what?
+ sprite->data[3] = tempdata2 + 1;
- tempdata = sprite->data1;
+ tempdata = sprite->data[1];
if((s16)tempdata != 28) // done rotating the grass, execute clean up function
- sprite->data1++;
+ sprite->data[1]++;
else
sprite->callback = (void *)sub_80A2AB8;
}
@@ -273,8 +315,8 @@ void sub_80A2AB8(void)
u8 i;
for (i = 1; i < 8; i++)
- DestroySprite(&gSprites[gCutGrassSpriteArray[i]]);
- FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS);
+ DestroySprite(&gSprites[eCutGrassSpriteArray[i]]);
+ FieldEffectStop(&gSprites[eCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS);
sub_8064E2C();
ScriptContext2_Disable();
}
diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c
new file mode 100644
index 000000000..37f024b9f
--- /dev/null
+++ b/src/field/fldeff_decoration.c
@@ -0,0 +1,364 @@
+#include "global.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_effect.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+
+extern const u8 gSpriteImage_83D21EC[];
+extern const u8 gSpriteImage_83D22EC[];
+extern const u8 gSpriteImage_83D23EC[];
+extern const u16 gTilesetPalettes_SecretBase[][16];
+
+const struct OamData gOamData_83D266C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83D2674[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_FRAME(2, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D2684[] =
+{
+ gSpriteAnim_83D2674,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83D2688[] =
+{
+ {gSpriteImage_83D21EC, 0x100},
+ {gSpriteImage_83D22EC, 0x100},
+ {gSpriteImage_83D23EC, 0x100},
+};
+
+void SpriteCB_SandPillar_0(struct Sprite *);
+void SpriteCB_SandPillar_1(struct Sprite *);
+void SpriteCB_SandPillar_2(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_83D26A0 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4110,
+ .oam = &gOamData_83D266C,
+ .anims = gSpriteAnimTable_83D2684,
+ .images = gSpriteImageTable_83D2688,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_SandPillar_0,
+};
+
+// This uses one of the secret base palettes, so there is no "09.pal" file.
+const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], 0x100E};
+
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
+
+static void sub_80C68EC(u8);
+static void DoBalloonSoundEffect(s16);
+
+void sub_80C68A4(s16 metatileId, s16 x, s16 y)
+{
+ u8 taskId = CreateTask(sub_80C68EC, 0);
+
+ gTasks[taskId].data[0] = metatileId;
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = 1;
+}
+
+static void sub_80C68EC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[3] == 6)
+ data[3] = 0;
+ else
+ data[3]++;
+
+ if (data[3] == 0)
+ {
+ if (data[4] == 2)
+ DoBalloonSoundEffect(data[0]);
+ MapGridSetMetatileIdAt(data[1], data[2], data[0] + data[4]);
+ CurrentMapDrawMetatileAt(data[1], data[2]);
+ if (data[4] == 3)
+ DestroyTask(taskId);
+ else
+ data[4]++;
+ }
+}
+
+static void DoBalloonSoundEffect(s16 metatileId)
+{
+ switch (metatileId)
+ {
+ case 824:
+ PlaySE(SE_FUUSEN1);
+ break;
+ case 828:
+ PlaySE(SE_FUUSEN2);
+ break;
+ case 832:
+ PlaySE(SE_FUUSEN3);
+ break;
+ case 552:
+ PlaySE(SE_TOY_DANGO);
+ break;
+ }
+}
+
+bool8 FldEff_Nop47(void)
+{
+ return FALSE;
+}
+
+bool8 FldEff_Nop48(void)
+{
+ return FALSE;
+}
+
+static void sub_80C69C4(s16 x, s16 y)
+{
+ PlaySE(SE_TOY_KABE);
+ MapGridSetMetatileIdAt(x, y, 630);
+ MapGridSetMetatileIdAt(x, y - 1, 622);
+ CurrentMapDrawMetatileAt(x, y);
+ CurrentMapDrawMetatileAt(x, y - 1);
+}
+
+static void sub_80C6A14(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 7)
+ {
+ sub_80C69C4(gTasks[taskId].data[1], gTasks[taskId].data[2]);
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+}
+
+void sub_80C6A54(s16 x, s16 y)
+{
+ u8 dir = player_get_direction_lower_nybble();
+ if (dir == DIR_SOUTH)
+ {
+ sub_80C69C4(x, y);
+ }
+ else if (dir == DIR_NORTH)
+ {
+ u8 taskId = CreateTask(sub_80C6A14, 5);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ }
+}
+
+static void Task_DecorationSoundEffect(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 7)
+ {
+ switch (gTasks[taskId].data[0])
+ {
+ case 632:
+ PlaySE(SE_TOY_C);
+ break;
+ case 633:
+ PlaySE(SE_TOY_D);
+ break;
+ case 634:
+ PlaySE(SE_TOY_E);
+ break;
+ case 635:
+ PlaySE(SE_TOY_F);
+ break;
+ case 636:
+ PlaySE(SE_TOY_G);
+ break;
+ case 637:
+ PlaySE(SE_TOY_A);
+ break;
+ case 638:
+ PlaySE(SE_TOY_B);
+ break;
+ case 691:
+ PlaySE(SE_TOY_C1);
+ break;
+ }
+
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[1]++;
+ }
+}
+
+void DoDecorationSoundEffect(s16 arg)
+{
+ u8 taskId = CreateTask(Task_DecorationSoundEffect, 5);
+ gTasks[taskId].data[0] = arg;
+ gTasks[taskId].data[1] = 0;
+}
+
+void SpriteCB_YellowCave4Sparkle(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+ if (sprite->data[0] == 8)
+ PlaySE(SE_W215);
+ if (sprite->data[0] >= 32)
+ DestroySprite(sprite);
+}
+
+void DoYellowCave4Sparkle(void)
+{
+ s16 x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x;
+ s16 y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y;
+ u8 spriteId;
+
+ sub_8060470(&x, &y, 8, 4);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].oam.paletteNum = 5;
+ gSprites[spriteId].callback = SpriteCB_YellowCave4Sparkle;
+ gSprites[spriteId].data[0] = 0;
+ }
+}
+
+bool8 FldEff_SandPillar(void)
+{
+ s16 x, y;
+
+ ScriptContext2_Enable();
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ gFieldEffectArguments[5] = x;
+ gFieldEffectArguments[6] = y;
+
+ switch (player_get_direction_lower_nybble())
+ {
+ case DIR_SOUTH:
+ CreateSprite(
+ &gSpriteTemplate_83D26A0,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 32,
+ 0);
+ break;
+ case DIR_NORTH:
+ CreateSprite(
+ &gSpriteTemplate_83D26A0,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y,
+ 148);
+ break;
+ case DIR_WEST:
+ CreateSprite(
+ &gSpriteTemplate_83D26A0,
+ gSprites[gPlayerAvatar.spriteId].oam.x - 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 16,
+ 148);
+ break;
+ case DIR_EAST:
+ CreateSprite(
+ &gSpriteTemplate_83D26A0,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 24,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 16,
+ 148);
+ break;
+ }
+
+ return FALSE;
+}
+
+void SpriteCB_SandPillar_0(struct Sprite *sprite)
+{
+ PlaySE(SE_W088);
+ if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646)
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586);
+ else
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644);
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
+ sprite->data[0] = 0;
+ sprite->callback = SpriteCB_SandPillar_1;
+}
+
+void SpriteCB_SandPillar_1(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 18)
+ {
+ sprite->data[0]++;
+ }
+ else
+ {
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
+ sprite->data[0] = 0;
+ sprite->callback = SpriteCB_SandPillar_2;
+ }
+}
+
+void SpriteCB_SandPillar_2(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SAND_PILLAR);
+ EnableBothScriptContexts();
+}
+
+void GetShieldToyTVDecorationInfo(void)
+{
+ s16 x, y;
+ s32 metatileId;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+
+ metatileId = MapGridGetMetatileIdAt(x, y);
+
+ switch (metatileId)
+ {
+ case 822:
+ ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar2, gSecretBaseText_GoldRank);
+ gSpecialVar_Result = 0;
+ break;
+ case 734:
+ ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
+ StringCopy(gStringVar2, gSecretBaseText_SilverRank);
+ gSpecialVar_Result = 0;
+ break;
+ case 756:
+ gSpecialVar_Result = 1;
+ break;
+ case 757:
+ gSpecialVar_Result = 2;
+ break;
+ case 758:
+ gSpecialVar_Result = 3;
+ break;
+ }
+}
diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c
index 1ee8a8f05..22f170184 100644
--- a/src/field/fldeff_flash.c
+++ b/src/field/fldeff_flash.c
@@ -7,7 +7,7 @@
#include "overworld.h"
#include "rom6.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
@@ -21,14 +21,6 @@ struct FlashStruct
void (*func)(void);
};
-extern struct FlashStruct gUnknown_083F7FC4[];
-extern u16 gCaveTransitionPalette_White[];
-extern u16 gCaveTransitionPalette_Black[];
-extern u16 gUnknown_083F808C[];
-extern u16 gUnknown_083F809C[];
-extern u16 gCaveTransitionTilemap[];
-extern u8 gCaveTransitionTiles[];
-
extern u8 gLastFieldPokeMenuOpened;
extern void (*gUnknown_03005CE4)(void);
@@ -46,10 +38,42 @@ void sub_810D00C(u8);
void sub_810D028(u8);
void sub_810D0C4(u8);
void sub_810D128(u8);
+void sub_810CFF8(void);
+void sub_810CE48(void);
+
+static const struct FlashStruct gUnknown_083F7FC4[] =
+{
+ {1, 4, 1, 0, sub_810CFF8},
+ {2, 4, 1, 0, sub_810CFF8},
+ {3, 4, 1, 0, sub_810CFF8},
+ {5, 4, 1, 0, sub_810CFF8},
+ {6, 4, 1, 0, sub_810CFF8},
+ {7, 4, 1, 0, sub_810CFF8},
+ {8, 4, 1, 0, sub_810CFF8},
+ {9, 4, 1, 0, sub_810CFF8},
+ {4, 1, 0, 1, sub_810CE48},
+ {4, 2, 0, 1, sub_810CE48},
+ {4, 3, 0, 1, sub_810CE48},
+ {4, 5, 0, 1, sub_810CE48},
+ {4, 6, 0, 1, sub_810CE48},
+ {4, 7, 0, 1, sub_810CE48},
+ {4, 8, 0, 1, sub_810CE48},
+ {4, 9, 0, 1, sub_810CE48},
+ {0, 0, 0, 0, NULL},
+};
+
+// TODO: Make these extracted palettes?
+static const u16 gCaveTransitionPalette_White[] = {0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF};
+static const u16 gCaveTransitionPalette_Black[] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
+
+static const u16 gUnknown_083F808C[] = INCBIN_U16("graphics/misc/83F808C.gbapal");
+static const u16 gUnknown_083F809C[] = INCBIN_U16("graphics/misc/83F809C.gbapal");
+static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz");
+static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz");
bool8 SetUpFieldMove_Flash(void)
{
- if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH))
+ if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
{
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_810CBFC;
@@ -70,7 +94,7 @@ void sub_810CBFC(void)
void sub_810CC34(void)
{
PlaySE(SE_W115);
- FlagSet(SYS_USE_FLASH);
+ FlagSet(FLAG_SYS_USE_FLASH);
ScriptContext1_SetupScript(gUnknown_081B694A);
}
diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c
new file mode 100644
index 000000000..b0052d59d
--- /dev/null
+++ b/src/field/fldeff_poison.c
@@ -0,0 +1,44 @@
+#include "global.h"
+#include "fldeff_poison.h"
+#include "task.h"
+#include "constants/songs.h"
+#include "sound.h"
+
+static void Task_FieldPoisonEffect(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[1] += 2;
+ if (data[1] > 8)
+ {
+ data[0]++;
+ }
+ break;
+ case 1:
+ data[1] -= 2;
+ if (data[1] == 0)
+ {
+ data[0]++;
+ }
+ break;
+ case 2:
+ DestroyTask(taskId);
+ return;
+ }
+
+ REG_MOSAIC = (data[1] << 4) | data[1];
+}
+
+void DoFieldPoisonEffect(void)
+{
+ PlaySE(SE_DOKU);
+ CreateTask(Task_FieldPoisonEffect, 80);
+}
+
+bool32 FieldPoisonEffectIsRunning(void)
+{
+ return FuncIsActiveTask(Task_FieldPoisonEffect);
+}
diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c
new file mode 100644
index 000000000..ec72885b5
--- /dev/null
+++ b/src/field/fldeff_recordmixing.c
@@ -0,0 +1,83 @@
+#include "global.h"
+#include "field_map_obj.h"
+#include "fldeff_recordmixing.h"
+#include "sprite.h"
+
+extern const struct OamData gFieldOamData_32x8;
+
+static const u8 sSpriteImage_83D26C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/0.4bpp");
+static const u8 sSpriteImage_83D2740[] = INCBIN_U8("graphics/unknown_sprites/83D2860/1.4bpp");
+static const u8 sSpriteImage_83D27C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/2.4bpp");
+static const u16 sPalette_3D2840[] = INCBIN_U16("graphics/unknown/unknown_3D2840.gbapal");
+
+
+static const struct SpriteFrameImage sSpriteImageTable_83FD950[] =
+{
+ { sSpriteImage_83D26C0, sizeof(sSpriteImage_83D26C0) },
+ { sSpriteImage_83D2740, sizeof(sSpriteImage_83D2740) },
+ { sSpriteImage_83D27C0, sizeof(sSpriteImage_83D27C0) },
+};
+
+static const struct SpritePalette sUnknown_083D2878 = { sPalette_3D2840, 0x1000 };
+
+static const union AnimCmd sSpriteAnim_83D2880[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sSpriteAnimTable_83D2890[] =
+{
+ sSpriteAnim_83D2880,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_83D2894 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .oam = &gFieldOamData_32x8,
+ .anims = sSpriteAnimTable_83D2890,
+ .images = sSpriteImageTable_83FD950,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+u8 CreateRecordMixingSprite(void)
+{
+ u8 spriteId;
+
+ LoadSpritePalette(&sUnknown_083D2878);
+
+ spriteId = CreateSprite(&sSpriteTemplate_83D2894, 0, 0, 82);
+
+ if (spriteId == MAX_SPRITES)
+ {
+ return MAX_SPRITES;
+ }
+ else
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ sub_8060388(16, 13, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->pos1.x += 16;
+ sprite->pos1.y += 2;
+ }
+
+ return spriteId;
+}
+
+void DestroyRecordMixingSprite(void)
+{
+ int i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &sSpriteTemplate_83D2894)
+ {
+ FreeSpritePalette(&gSprites[i]);
+ DestroySprite(&gSprites[i]);
+ }
+ }
+}
diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c
new file mode 100644
index 000000000..8d71a4fb9
--- /dev/null
+++ b/src/field/fldeff_secret_base_pc.c
@@ -0,0 +1,69 @@
+#include "global.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "task.h"
+
+static void Task_SecretBasePCTurnOn(u8);
+
+u32 FldEff_SecretBasePCTurnOn(void)
+{
+ s16 x, y;
+ u8 taskId;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ taskId = CreateTask(Task_SecretBasePCTurnOn, 0);
+ gTasks[taskId].data[0] = x;
+ gTasks[taskId].data[1] = y;
+ gTasks[taskId].data[2] = 0;
+
+ return 0;
+}
+
+static void Task_SecretBasePCTurnOn(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[2])
+ {
+ case 4:
+ case 12:
+ MapGridSetMetatileIdAt(data[0], data[1], 548);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ break;
+ case 8:
+ case 16:
+ MapGridSetMetatileIdAt(data[0], data[1], 544);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ break;
+ case 20:
+ MapGridSetMetatileIdAt(data[0], data[1], 548);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ FieldEffectActiveListRemove(FLDEFF_SECRET_BASE_PC_TURN_ON);
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ return;
+ }
+
+ data[2]++;
+}
+
+void DoSecretBasePCTurnOffEffect(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ PlaySE(SE_PC_OFF);
+
+ if (!VarGet(VAR_0x4054))
+ MapGridSetMetatileIdAt(x, y, 3616);
+ else
+ MapGridSetMetatileIdAt(x, y, 3617);
+
+ CurrentMapDrawMetatileAt(x, y);
+}
diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c
new file mode 100644
index 000000000..bf8e98403
--- /dev/null
+++ b/src/field/fldeff_secretpower.c
@@ -0,0 +1,484 @@
+#include "global.h"
+#include "event_data.h"
+#include "fieldmap.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "metatile_behavior.h"
+#include "metatile_behaviors.h"
+#include "overworld.h"
+#include "pokemon_menu.h"
+#include "rom6.h"
+#include "script.h"
+#include "secret_base.h"
+#include "constants/songs.h"
+#include "sound.h"
+
+extern u8 gUnknown_081A2CE6[];
+extern u8 gUnknown_081A2D3E[];
+extern u8 gUnknown_081A2D96[];
+
+const u8 gSpriteImage_83D198C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/0.4bpp");
+const u8 gSpriteImage_83D1A0C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/1.4bpp");
+const u8 gSpriteImage_83D1A8C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/2.4bpp");
+const u8 gSpriteImage_83D1B0C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/3.4bpp");
+const u8 gSpriteImage_83D1B8C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/4.4bpp");
+const u8 gUnusedEmptySpace_83D1C0C[32] = {0};
+const u16 gFieldEffectObjectPalette7[] = INCBIN_U16("graphics/field_effect_objects/palettes/07.gbapal");
+const u8 gSpriteImage_83D1C4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/0.4bpp");
+const u8 gSpriteImage_83D1CCC[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/1.4bpp");
+const u8 gSpriteImage_83D1D4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/2.4bpp");
+const u8 gSpriteImage_83D1DCC[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/3.4bpp");
+const u8 gSpriteImage_83D1E4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/4.4bpp");
+const u8 gSpriteImage_83D1ECC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/0.4bpp");
+const u8 gSpriteImage_83D1F4C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/1.4bpp");
+const u8 gSpriteImage_83D1FCC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/2.4bpp");
+const u8 gSpriteImage_83D204C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/3.4bpp");
+const u8 gSpriteImage_83D20CC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/4.4bpp");
+const u8 gSpriteImage_83D214C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/5.4bpp"); // unused
+const u16 gFieldEffectObjectPalette8[] = INCBIN_U16("graphics/field_effect_objects/palettes/08.gbapal");
+const u8 gSpriteImage_83D21EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/0.4bpp");
+const u8 gSpriteImage_83D22EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/1.4bpp");
+const u8 gSpriteImage_83D23EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/2.4bpp");
+
+const struct OamData gOamData_83D24EC =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83D24F4[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D250C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D2524[] =
+{
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D253C[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D2554[] =
+{
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D256C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D2584[] =
+{
+ gSpriteAnim_83D24F4,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D2588[] =
+{
+ gSpriteAnim_83D250C,
+ gSpriteAnim_83D2524,
+ gSpriteAnim_83D253C,
+ gSpriteAnim_83D2554,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D2598[] =
+{
+ gSpriteAnim_83D256C,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83D259C[] =
+{
+ {gSpriteImage_83D198C, 0x80},
+ {gSpriteImage_83D1A0C, 0x80},
+ {gSpriteImage_83D1A8C, 0x80},
+ {gSpriteImage_83D1B0C, 0x80},
+ {gSpriteImage_83D1B8C, 0x80},
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83D25C4[] =
+{
+ {gSpriteImage_83D1ECC, 0x80},
+ {gSpriteImage_83D1F4C, 0x80},
+ {gSpriteImage_83D1FCC, 0x80},
+ {gSpriteImage_83D204C, 0x80},
+ {gSpriteImage_83D20CC, 0x80},
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83D25EC[] =
+{
+ {gSpriteImage_83D1C4C, 0x80},
+ {gSpriteImage_83D1CCC, 0x80},
+ {gSpriteImage_83D1D4C, 0x80},
+ {gSpriteImage_83D1DCC, 0x80},
+ {gSpriteImage_83D1E4C, 0x80},
+};
+
+void sub_80C644C(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_83D2614 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4099,
+ .oam = &gOamData_83D24EC,
+ .anims = gSpriteAnimTable_83D2584,
+ .images = gSpriteImageTable_83D259C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80C644C,
+};
+
+void sub_80C6598(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_83D262C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4104,
+ .oam = &gOamData_83D24EC,
+ .anims = gSpriteAnimTable_83D2588,
+ .images = gSpriteImageTable_83D25C4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80C6598,
+};
+
+void sub_80C66BC(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_83D2644 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4104,
+ .oam = &gOamData_83D24EC,
+ .anims = gSpriteAnimTable_83D2598,
+ .images = gSpriteImageTable_83D25EC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80C66BC,
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003};
+const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008};
+
+void sub_80C639C(void);
+void sub_80C63E8(void);
+void sub_80C6468(struct Sprite *);
+void sub_80C6498(struct Sprite *);
+void sub_80C64A8(void);
+void sub_80C64F4(void);
+void sub_80C65C4(struct Sprite *);
+void sub_80C65FC(struct Sprite *);
+void sub_80C660C(void);
+void sub_80C6658(void);
+void sub_80C66D8(struct Sprite *sprite);
+void sub_80C6708(struct Sprite *sprite);
+
+void sub_80C6264(void)
+{
+ sub_80BBFD8(&gUnknown_0203923C, gMapHeader.events);
+ sub_80BB5E4();
+}
+
+void sub_80C6280(void)
+{
+ switch (gFieldEffectArguments[1])
+ {
+ case 1:
+ gFieldEffectArguments[5] = 8;
+ gFieldEffectArguments[6] = 40;
+ break;
+ case 2:
+ gFieldEffectArguments[5] = 8;
+ gFieldEffectArguments[6] = 8;
+ break;
+ case 3:
+ gFieldEffectArguments[5] = -8;
+ gFieldEffectArguments[6] = 24;
+ break;
+ case 4:
+ gFieldEffectArguments[5] = 24;
+ gFieldEffectArguments[6] = 24;
+ break;
+ }
+}
+
+bool8 SetUpFieldMove_SecretPower(void)
+{
+ u8 behavior;
+
+ sub_80BB63C();
+
+ if (gSpecialVar_Result == 1 || player_get_direction_lower_nybble() != DIR_NORTH)
+ return FALSE;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y);
+ behavior = MapGridGetMetatileBehaviorAt(gUnknown_0203923C.x, gUnknown_0203923C.y);
+
+ if (MetatileBehavior_IsSecretBaseCave(behavior) == TRUE)
+ {
+ sub_80C6264();
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_80C639C;
+ return TRUE;
+ }
+
+ if (MetatileBehavior_IsSecretBaseTree(behavior) == TRUE)
+ {
+ sub_80C6264();
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_80C64A8;
+ return TRUE;
+ }
+
+ if (MetatileBehavior_IsSecretBaseShrub(behavior) == TRUE)
+ {
+ sub_80C6264();
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_80C660C;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_80C639C(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(gUnknown_081A2CE6);
+}
+
+bool8 FldEff_UseSecretPowerCave(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (uintptr_t)sub_80C63E8 >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)sub_80C63E8;
+
+ return FALSE;
+}
+
+void sub_80C63E8(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_CAVE);
+ FieldEffectStart(FLDEFF_SECRET_POWER_CAVE);
+}
+
+bool8 FldEff_SecretPowerCave(void)
+{
+ sub_80C6280();
+ CreateSprite(
+ &gSpriteTemplate_83D2614,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+ return FALSE;
+}
+
+void sub_80C644C(struct Sprite *sprite)
+{
+ PlaySE(SE_W088);
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C6468;
+}
+
+void sub_80C6468(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 40)
+ {
+ sprite->data[0]++;
+ if (sprite->data[0] == 20 )
+ sub_80BB800();
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C6498;
+ }
+}
+
+void sub_80C6498(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE);
+ EnableBothScriptContexts();
+}
+
+void sub_80C64A8(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(gUnknown_081A2D3E);
+}
+
+bool8 FldEff_UseSecretPowerTree(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (uintptr_t)sub_80C64F4 >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)sub_80C64F4;
+
+ return FALSE;
+}
+
+void sub_80C64F4(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_TREE);
+ FieldEffectStart(FLDEFF_SECRET_POWER_TREE);
+}
+
+bool8 FldEff_SecretPowerTree(void)
+{
+ s16 behavior = MapGridGetMetatileBehaviorAt(gUnknown_0203923C.x, gUnknown_0203923C.y) & 0xFFF;
+
+ if (behavior == MB_SECRET_BASE_SPOT_TREE_1)
+ {
+ gFieldEffectArguments[7] = 0;
+ }
+
+ if (behavior == MB_SECRET_BASE_SPOT_TREE_2)
+ {
+ gFieldEffectArguments[7] = 2;
+ }
+
+ sub_80C6280();
+
+ CreateSprite(
+ &gSpriteTemplate_83D262C,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+
+ if (gFieldEffectArguments[7] == 1 || gFieldEffectArguments[7] == 3)
+ sub_80BB800();
+
+ return FALSE;
+}
+
+void sub_80C6598(struct Sprite *sprite)
+{
+ PlaySE(SE_W010);
+ sprite->animNum = gFieldEffectArguments[7];
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C65C4;
+}
+
+void sub_80C65C4(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+
+ if (sprite->data[0] >= 40)
+ {
+ if (gFieldEffectArguments[7] == 0 || gFieldEffectArguments[7] == 2)
+ sub_80BB800();
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C65FC;
+ }
+}
+
+
+void sub_80C65FC(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE);
+ EnableBothScriptContexts();
+}
+
+void sub_80C660C(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(gUnknown_081A2D96);
+}
+
+bool8 FldEff_UseSecretPowerShrub(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (uintptr_t)sub_80C6658 >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)sub_80C6658;
+
+ return FALSE;
+}
+
+void sub_80C6658(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_SHRUB);
+ FieldEffectStart(FLDEFF_SECRET_POWER_SHRUB);
+}
+
+bool8 FldEff_SecretPowerShrub(void)
+{
+ sub_80C6280();
+ CreateSprite(
+ &gSpriteTemplate_83D2644,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+ return FALSE;
+}
+
+void sub_80C66BC(struct Sprite *sprite)
+{
+ PlaySE(SE_W077);
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C66D8;
+}
+
+void sub_80C66D8(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 40)
+ {
+ sprite->data[0]++;
+ if (sprite->data[0] == 20 )
+ sub_80BB800();
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80C6708;
+ }
+}
+
+
+void sub_80C6708(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB);
+ EnableBothScriptContexts();
+}
diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c
index 22f9c13f5..a574232a8 100644
--- a/src/field/fldeff_softboiled.c
+++ b/src/field/fldeff_softboiled.c
@@ -4,11 +4,12 @@
#include "party_menu.h"
#include "pokemon.h"
#include "pokemon_menu.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "strings.h"
#include "task.h"
+#include "ewram.h"
struct Struct2001000 {
u8 unk0;
@@ -38,15 +39,9 @@ struct Struct201C000 {
#define WINDOW_RIGHT 29
#endif
-#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000))
-#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000))
-#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000))
-
// extern
extern u8 gUnknown_0202E8F6;
extern u8 gLastFieldPokeMenuOpened;
-
-extern u8 unk_2000000[];
extern u8 gUnknown_0202E8F4;
// Static
@@ -87,8 +82,8 @@ static void sub_8133D50(u8 taskId) {
struct Sprite *sprites = gSprites;
- unk1 = sprites[EWRAM_1000.unk1].data0;
- unk2 = sprites[EWRAM_1000.unk2].data0;
+ unk1 = sprites[EWRAM_1000.unk1].data[0];
+ unk2 = sprites[EWRAM_1000.unk2].data[0];
if (unk1 > 5 || unk2 > 5)
{
@@ -96,7 +91,7 @@ static void sub_8133D50(u8 taskId) {
return;
}
- EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data0];
+ EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data[0]];
hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP);
if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp)
@@ -107,7 +102,7 @@ static void sub_8133D50(u8 taskId) {
PlaySE(SE_KAIFUKU);
- EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data0;
+ EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data[0];
pokemon = &gPlayerParty[EWRAM_1C000.unk5];
EWRAM_1C000.unk0 = pokemon;
diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c
index d9603d094..565ac1651 100644
--- a/src/field/fldeff_strength.c
+++ b/src/field/fldeff_strength.c
@@ -14,7 +14,7 @@ static void sub_811AA38(void);
static void sub_811AA9C(void);
extern u8 gLastFieldPokeMenuOpened;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern void (*gFieldCallback)(void);
extern void (*gUnknown_03005CE4)(void);
@@ -24,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void)
{
if (ShouldDoBrailleStrengthEffect())
{
- gScriptResult = gLastFieldPokeMenuOpened;
+ gSpecialVar_Result = gLastFieldPokeMenuOpened;
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA38;
}
@@ -32,7 +32,7 @@ bool8 SetUpFieldMove_Strength(void)
{
if (npc_before_player_of_type(87) != TRUE)
return 0;
- gScriptResult = gLastFieldPokeMenuOpened;
+ gSpecialVar_Result = gLastFieldPokeMenuOpened;
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA18;
}
diff --git a/src/field/heal_location.c b/src/field/heal_location.c
index 42bc18567..a10c7a7b8 100644
--- a/src/field/heal_location.c
+++ b/src/field/heal_location.c
@@ -1,33 +1,33 @@
#include "global.h"
#include "heal_location.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#define NUM_HEAL_LOCATIONS 22
static const struct HealLocation sHealLocations[] =
{
- {MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 4, 2},
- {MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 4, 2},
- {MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, 20, 17},
- {MAP_GROUP_SLATEPORT_CITY, MAP_ID_SLATEPORT_CITY, 19, 20},
- {MAP_GROUP_MAUVILLE_CITY, MAP_ID_MAUVILLE_CITY, 22, 6},
- {MAP_GROUP_RUSTBORO_CITY, MAP_ID_RUSTBORO_CITY, 16, 39},
- {MAP_GROUP_FORTREE_CITY, MAP_ID_FORTREE_CITY, 5, 7},
- {MAP_GROUP_LILYCOVE_CITY, MAP_ID_LILYCOVE_CITY, 24, 15},
- {MAP_GROUP_MOSSDEEP_CITY, MAP_ID_MOSSDEEP_CITY, 28, 17},
- {MAP_GROUP_SOOTOPOLIS_CITY, MAP_ID_SOOTOPOLIS_CITY, 43, 32},
- {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 27, 49},
- {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 5, 9},
- {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 14, 9},
- {MAP_GROUP_OLDALE_TOWN, MAP_ID_OLDALE_TOWN, 6, 17},
- {MAP_GROUP_DEWFORD_TOWN, MAP_ID_DEWFORD_TOWN, 2, 11},
- {MAP_GROUP_LAVARIDGE_TOWN, MAP_ID_LAVARIDGE_TOWN, 9, 7},
- {MAP_GROUP_FALLARBOR_TOWN, MAP_ID_FALLARBOR_TOWN, 14, 8},
- {MAP_GROUP_VERDANTURF_TOWN, MAP_ID_VERDANTURF_TOWN, 16, 4},
- {MAP_GROUP_PACIFIDLOG_TOWN, MAP_ID_PACIFIDLOG_TOWN, 8, 16},
- {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 18, 6},
- {MAP_GROUP_BATTLE_TOWER_OUTSIDE, MAP_ID_BATTLE_TOWER_OUTSIDE, 14, 9},
- {MAP_GROUP_SOUTHERN_ISLAND_EXTERIOR, MAP_ID_SOUTHERN_ISLAND_EXTERIOR, 15, 20},
+ {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2},
+ {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2},
+ {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17},
+ {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20},
+ {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6},
+ {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39},
+ {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7},
+ {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15},
+ {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17},
+ {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32},
+ {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49},
+ {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9},
+ {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9},
+ {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17},
+ {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11},
+ {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7},
+ {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8},
+ {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4},
+ {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16},
+ {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6},
+ {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9},
+ {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20},
};
u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum)
diff --git a/src/field/item.c b/src/field/item.c
index fd49f5c39..66d7d65df 100644
--- a/src/field/item.c
+++ b/src/field/item.c
@@ -1,7 +1,7 @@
#include "global.h"
-#include "hold_effects.h"
+#include "constants/hold_effects.h"
#include "item.h"
-#include "items.h"
+#include "constants/items.h"
#include "item_use.h"
#include "berry.h"
#include "string_util.h"
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index c508bcacf..4e283ffe9 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -8,7 +8,7 @@
#include "field_player_avatar.h"
#include "graphics.h"
#include "item.h"
-#include "items.h"
+#include "constants/items.h"
#include "item_menu.h"
#include "item_use.h"
#include "link.h"
@@ -25,7 +25,7 @@
#include "pokemon_menu.h"
#include "overworld.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "strings.h"
@@ -34,9 +34,9 @@
#include "task.h"
#include "text.h"
#include "unknown_task.h"
+#include "ewram.h"
// External stuff
-extern u8 ewram[];
extern void gpu_pal_allocator_reset__manage_upper_four(void);
extern void sub_80F9020(void);
extern void sub_80F9988();
@@ -138,7 +138,7 @@ EWRAM_DATA static s8 sCurrentBagPocket = 0;
EWRAM_DATA static u8 gUnknown_0203855A = 0;
EWRAM_DATA static s8 gUnknown_0203855B = 0;
EWRAM_DATA static s8 gUnknown_0203855C = 0;
-EWRAM_DATA u16 gScriptItemId = 0;
+EWRAM_DATA u16 gSpecialVar_ItemId = 0;
EWRAM_DATA u8 gUnknown_02038560 = 0;
EWRAM_DATA u8 gUnknown_02038561 = 0;
EWRAM_DATA static u8 gUnknown_02038562 = 0;
@@ -158,12 +158,6 @@ extern struct PocketScrollState gBagPocketScrollStates[];
extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots
extern const u8 Event_NoRegisteredItem[];
-#define ewramBerryPic (ewram + 0)
-#define ewramBerryPicTemp (ewram + 0x1000)
-#define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle)
-#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle)
-#define ewramBagSetupStep (ewram[0x1FFFF])
-
extern const struct CompressedSpriteSheet sMaleBagSpriteSheet;
extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet;
extern const struct CompressedSpritePalette sBagSpritePalette;
@@ -1668,7 +1662,7 @@ static void sub_80A4BF0(u16 *a)
const u8 *text;
if (i == 0)
- text = sub_80A4B90(gScriptItemId);
+ text = sub_80A4B90(gSpecialVar_ItemId);
else
text = sItemPopupMenuActions[sPopupMenuActionList[i]].text;
MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2);
@@ -1855,7 +1849,7 @@ static void sub_80A50C8(u8 taskId)
{
if (r5[10] == 0)
{
- gScriptItemId = 0;
+ gSpecialVar_ItemId = 0;
gUnknown_083C16BC[sReturnLocation].onBagClose(taskId);
}
else
@@ -1870,7 +1864,7 @@ static void sub_80A50C8(u8 taskId)
{
PlaySE(SE_SELECT);
gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos;
- gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
+ gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId);
sub_80F98A4(0);
sub_80F98A4(1);
@@ -1893,7 +1887,7 @@ static void sub_80A50C8(u8 taskId)
{
if (sReturnLocation != RETURN_TO_FIELD_5)
{
- gScriptItemId = 0;
+ gSpecialVar_ItemId = 0;
gUnknown_083C16BC[sReturnLocation].onBagClose(taskId);
}
}
@@ -2533,7 +2527,7 @@ static void sub_80A57C4(void)
gUnknown_02038564 = 1;
r5 = 9;
}
- else if (sub_80F92F4(gScriptItemId) == 0)
+ else if (sub_80F92F4(gSpecialVar_ItemId) == 0)
{
sPopupMenuActionList = gUnknown_083C16AE[4];
gUnknown_02038564 = 1;
@@ -2660,10 +2654,10 @@ void sub_80A5B40(void)
static void HandlePopupMenuAction_UseOnField(u8 taskId)
{
- if (ItemId_GetFieldFunc(gScriptItemId) != NULL)
+ if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL)
{
PlaySE(SE_SELECT);
- if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1)
+ if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1)
{
sub_80A5BF8(taskId);
}
@@ -2671,7 +2665,7 @@ static void HandlePopupMenuAction_UseOnField(u8 taskId)
{
gTasks[taskId].data[2] = 0;
if (sCurrentBagPocket != BAG_POCKET_BERRIES)
- ItemId_GetFieldFunc(gScriptItemId)(taskId);
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
sub_80C9C7C(taskId);
}
@@ -2799,7 +2793,7 @@ static void sub_80A5EA0(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]);
+ sub_80A5DA0(gSpecialVar_ItemId, gTasks[taskId].data[1]);
DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4);
}
else if (gMain.newKeys & B_BUTTON)
@@ -2833,7 +2827,7 @@ static void sub_80A5F80(u8 taskId)
static void HandlePopupMenuAction_Register(u8 taskId)
{
PlaySE(SE_SELECT);
- if (gSaveBlock1.registeredItem == gScriptItemId)
+ if (gSaveBlock1.registeredItem == gSpecialVar_ItemId)
{
// Un-register the registered item
RemoveSelectIconFromRegisteredItem();
@@ -2842,7 +2836,7 @@ static void HandlePopupMenuAction_Register(u8 taskId)
else
{
AddSelectIconToRegisteredItem();
- gSaveBlock1.registeredItem = gScriptItemId;
+ gSaveBlock1.registeredItem = gSpecialVar_ItemId;
}
sub_80A7528(0);
sub_80A41D4(taskId);
@@ -2871,7 +2865,7 @@ static void sub_80A6024(u8 taskId)
static void DisplayCannotBeHeldMessage(u8 taskId)
{
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld);
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1);
@@ -2880,13 +2874,13 @@ static void DisplayCannotBeHeldMessage(u8 taskId)
static void HandlePopupMenuAction_Give(u8 taskId)
{
PlaySE(SE_SELECT);
- if (sub_80F931C(gScriptItemId) == 0)
+ if (sub_80F931C(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1);
}
- else if (ItemId_GetImportance(gScriptItemId) == 0)
+ else if (ItemId_GetImportance(gSpecialVar_ItemId) == 0)
{
if (CalculatePlayerPartyCount() == 0)
{
@@ -2937,21 +2931,21 @@ static void OnItemSelect_PkmnList(u8 taskId)
{
u8 r6 = sCurrentBagPocket + 1;
- if (sub_80F931C(gScriptItemId) == 0)
+ if (sub_80F931C(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1);
}
- else if (sub_80F92F4(gScriptItemId) == 0)
+ else if (sub_80F92F4(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere);
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1);
}
- else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0)
+ else if (r6 != 5 && ItemId_GetImportance(gSpecialVar_ItemId) == 0)
{
gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16;
gTasks[taskId].data[9] = (u32)sub_808A3F8;
@@ -2989,8 +2983,8 @@ static void OnItemSelect_Shop(u8 taskId)
gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1;
sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos);
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar2);
- if (ItemId_GetPrice(gScriptItemId) == 0)
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
{
StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1);
@@ -3031,7 +3025,7 @@ static void sub_80A648C(u8 taskId)
sub_80A418C(1, 1, 1, 11, 3);
else
sub_80A418C(1, 1, 1, 11, 2);
- BuyMenuDisplayMessage(gScriptItemId, 1);
+ BuyMenuDisplayMessage(gSpecialVar_ItemId, 1);
sub_80A683C();
}
@@ -3053,7 +3047,7 @@ static void sub_80A6548(u8 taskId)
static void sub_80A6574(u8 taskId)
{
PlaySE(SE_REGI);
- sub_80A6870(gScriptItemId, gTasks[taskId].data[1]);
+ sub_80A6870(gSpecialVar_ItemId, gTasks[taskId].data[1]);
gTasks[taskId].func = sub_80A6548;
}
@@ -3061,7 +3055,7 @@ static void sub_80A65AC(u8 taskId)
{
MenuZeroFillWindowRect(7, 6, 13, 12);
sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6);
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1);
sub_80A3D5C(taskId);
@@ -3085,14 +3079,14 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
if (sub_80A5350(taskId) == TRUE)
{
MenuZeroFillWindowRect(6, 11, 12, 11);
- BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]);
+ BuyMenuDisplayMessage(gSpecialVar_ItemId, gTasks[taskId].data[1]);
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
MenuZeroFillWindowRect(0, 10, 13, 13);
sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3);
- ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gOtherText_CanPay);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1);
}
@@ -3233,7 +3227,7 @@ static void sub_80A6A84(u8 taskId)
s16 *taskData = gTasks[taskId].data;
sub_80A4DA4(gBGTilemapBuffers[1]);
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3);
MenuZeroFillWindowRect(7, 6, 11, 13);
sub_80A7528(7);
@@ -3256,14 +3250,14 @@ static void sub_80A6B64(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (ItemId_GetImportance(gScriptItemId) == 2)
+ if (ItemId_GetImportance(gSpecialVar_ItemId) == 2)
{
gTasks[taskId].func = sub_80A6B00;
sub_80A7528(9);
}
else
{
- if (AddPCItem(gScriptItemId, taskData[1]) == TRUE)
+ if (AddPCItem(gSpecialVar_ItemId, taskData[1]) == TRUE)
{
sub_80A6A84(taskId);
}
@@ -3331,7 +3325,7 @@ bool32 sub_80A6D1C(void)
FreezeMapObjects();
sub_80594C0();
sub_80597F4();
- gScriptItemId = gSaveBlock1.registeredItem;
+ gSpecialVar_ItemId = gSaveBlock1.registeredItem;
taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8);
gTasks[taskId].data[2] = 1;
return TRUE;
@@ -3421,7 +3415,7 @@ static const u8 gUnknown_083C170A[] = {5, 0};
static void sub_80A6FDC(void)
{
- if (ItemId_GetBattleUsage(gScriptItemId) != 0)
+ if (ItemId_GetBattleUsage(gSpecialVar_ItemId) != 0)
{
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
@@ -3460,10 +3454,10 @@ static void OnBagClose_Battle(u8 taskId)
static void HandlePopupMenuAction_UseInBattle(u8 taskId)
{
- if (ItemId_GetBattleFunc(gScriptItemId) != NULL)
+ if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL)
{
PlaySE(SE_SELECT);
- ItemId_GetBattleFunc(gScriptItemId)(taskId);
+ ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
}
}
@@ -3531,7 +3525,7 @@ static void sub_80A7230(u8 taskId)
PlaySE(SE_SELECT);
sub_80F98A4(2);
sub_80F98A4(3);
- gScriptItemId = ITEM_POKE_BALL;
+ gSpecialVar_ItemId = ITEM_POKE_BALL;
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1;
@@ -3830,7 +3824,7 @@ static void sub_80A7768(void)
int var;
if (r4->unk1 == 1)
- text = sub_80A4B90(gScriptItemId);
+ text = sub_80A4B90(gSpecialVar_ItemId);
else
text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text;
var = r4->unk1 - 1;
@@ -4086,11 +4080,11 @@ static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30
static void sub_80A7998(struct Sprite *sprite)
{
sprite->animNum = 0;
- sprite->data0 = 0;
- sprite->data1 = 0;
- sprite->data2 = 0;
- sprite->data3 = 0;
- sprite->data4 = 0;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
sprite->callback = sub_80A79B4;
}
@@ -4104,7 +4098,7 @@ static void sub_80A79B4(struct Sprite *sprite)
static void sub_80A79EC(struct Sprite *sprite)
{
- switch (sprite->data3)
+ switch (sprite->data[3])
{
case 0:
if (gUnknown_0203855B != 6)
@@ -4118,26 +4112,26 @@ static void sub_80A79EC(struct Sprite *sprite)
sprite->animBeginning = TRUE;
sprite->animNum = 0;
sprite->pos1.y -= 4;
- sprite->data0 = 4;
- sprite->data3 = 1;
+ sprite->data[0] = 4;
+ sprite->data[3] = 1;
sub_80A7AE4(sprite);
}
break;
case 1:
- if (sprite->data0 != 0)
+ if (sprite->data[0] != 0)
{
- if (sprite->data1 != 0)
+ if (sprite->data[1] != 0)
{
sprite->pos1.y++;
- sprite->data0--;
+ sprite->data[0]--;
}
- sprite->data1 = (sprite->data1 + 1) & 1;
+ sprite->data[1] = (sprite->data[1] + 1) & 1;
}
else
{
gUnknown_0203855B = -1;
- sprite->data1 = 0;
- sprite->data3 = 0;
+ sprite->data[1] = 0;
+ sprite->data[3] = 0;
}
break;
}
@@ -4145,17 +4139,17 @@ static void sub_80A79EC(struct Sprite *sprite)
static void sub_80A7A94(struct Sprite *sprite)
{
- switch (sprite->data4)
+ switch (sprite->data[4])
{
case 0:
sprite->oam.affineMode = 1;
sprite->affineAnims = sBagSpriteAffineAnimTable;
InitSpriteAffineAnim(sprite);
- sprite->data4 = 1;
+ sprite->data[4] = 1;
break;
case 1:
- sprite->data2++;
- if (sprite->data2 == 12)
+ sprite->data[2]++;
+ if (sprite->data[2] == 12)
sub_80A7AE4(sprite);
break;
}
@@ -4165,8 +4159,8 @@ static void sub_80A7AE4(struct Sprite *sprite)
{
gUnknown_0203855C = 0;
sprite->oam.affineMode = 0;
- sprite->data2 = 0;
- sprite->data4 = 0;
+ sprite->data[2] = 0;
+ sprite->data[4] = 0;
FreeOamMatrix(sprite->oam.matrixNum);
}
@@ -4234,45 +4228,45 @@ static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8}
static void sub_80A7B28(struct Sprite *sprite)
{
- sprite->data3 = 0;
- sprite->data0 = 0;
+ sprite->data[3] = 0;
+ sprite->data[0] = 0;
sub_80A7B6C(sprite);
sprite->callback = sub_80A7B6C;
}
static void sub_80A7B48(struct Sprite *sprite)
{
- sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1);
- sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1);
+ sprite->centerToCornerVecX = sprite->data[5] - ((sprite->data[0] + 1) & 1);
+ sprite->centerToCornerVecY = sprite->data[6] - ((sprite->data[0] + 1) & 1);
}
static void sub_80A7B6C(struct Sprite *sprite)
{
- if (sprite->data7 != 0)
+ if (sprite->data[7] != 0)
{
- switch (sprite->data3)
+ switch (sprite->data[3])
{
case 0:
sprite->oam.affineMode = 1;
- if (sprite->data7 == 1)
+ if (sprite->data[7] == 1)
sprite->affineAnims = gSpriteAffineAnimTable_83C1D20;
else
sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1;
InitSpriteAffineAnim(sprite);
- sprite->data3 = 1;
- sprite->data5 = sprite->centerToCornerVecX;
- sprite->data6 = sprite->centerToCornerVecY;
+ sprite->data[3] = 1;
+ sprite->data[5] = sprite->centerToCornerVecX;
+ sprite->data[6] = sprite->centerToCornerVecY;
sub_80A7B48(sprite);
break;
case 1:
- sprite->data0++;
+ sprite->data[0]++;
sub_80A7B48(sprite);
- if (sprite->data0 == 32)
+ if (sprite->data[0] == 32)
{
- sprite->data0 = 0;
- sprite->data3 = 0;
- sprite->centerToCornerVecX = sprite->data5;
- sprite->centerToCornerVecY = sprite->data6;
+ sprite->data[0] = 0;
+ sprite->data[3] = 0;
+ sprite->centerToCornerVecX = sprite->data[5];
+ sprite->centerToCornerVecY = sprite->data[6];
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0;
sprite->callback = SpriteCallbackDummy;
@@ -4297,7 +4291,7 @@ static void CreateBagPokeballSprite(u8 a)
{
LoadSpritePalette(&sPokeballSpritePalette);
sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0);
- gSprites[sPokeballSpriteId].data7 = a;
+ gSprites[sPokeballSpriteId].data[7] = a;
}
static void sub_80A7C64(void)
diff --git a/src/field/item_use.c b/src/field/item_use.c
index 68da27fdb..37cd8ba78 100644
--- a/src/field/item_use.c
+++ b/src/field/item_use.c
@@ -14,7 +14,7 @@
#include "fieldmap.h"
#include "item.h"
#include "item_menu.h"
-#include "items.h"
+#include "constants/items.h"
#include "mail.h"
#include "main.h"
#include "map_obj_lock.h"
@@ -29,12 +29,12 @@
#include "overworld.h"
#include "rom_8094928.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
-#include "vars.h"
+#include "constants/vars.h"
extern void (*gFieldItemUseCallback)(u8);
extern void (*gFieldCallback)(void);
@@ -80,10 +80,10 @@ void ExecuteSwitchToOverworldFromItemUse(u8 taskId)
{
u8 taskData;
- if (gScriptItemId == 0xAF)
+ if (gSpecialVar_ItemId == 0xAF)
taskData = gTasks[taskId].data[15] - 1;
else
- taskData = ItemId_GetType(gScriptItemId) - 1;
+ taskData = ItemId_GetType(gSpecialVar_ItemId) - 1;
gTasks[taskId].data[8] = (u32)gExitToOverworldFuncList[taskData] >> 16;
gTasks[taskId].data[9] = (u32)gExitToOverworldFuncList[taskData];
@@ -157,7 +157,7 @@ void ItemMenu_ReadMail(u8 taskId)
if (!gPaletteFade.active)
{
- mailStruct.itemId = gScriptItemId;
+ mailStruct.itemId = gSpecialVar_ItemId;
HandleReadMail(&mailStruct, sub_80A5D04, 0);
DestroyTask(taskId);
}
@@ -177,7 +177,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
PlayerGetDestCoords(&x, &y);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- if (FlagGet(SYS_CYCLING_ROAD) == TRUE // on cycling road?
+ if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE // on cycling road?
|| MetatileBehavior_IsVerticalRail(tileBehavior) == TRUE
|| MetatileBehavior_IsHorizontalRail(tileBehavior) == TRUE
|| MetatileBehavior_IsIsolatedVerticalRail(tileBehavior) == TRUE
@@ -199,9 +199,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
void ItemUseOnFieldCB_Bike(u8 taskId)
{
- if (ItemId_GetSecondaryId(gScriptItemId) == 0)
+ if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 0)
GetOnOffBike(2);
- if (ItemId_GetSecondaryId(gScriptItemId) == 1)
+ if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 1)
GetOnOffBike(4);
sub_8064E2C();
@@ -252,7 +252,7 @@ void ItemUseOutOfBattle_Rod(u8 taskId)
void ItemUseOnFieldCB_Rod(u8 taskId)
{
- StartFishing(ItemId_GetSecondaryId(gScriptItemId));
+ StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
}
@@ -770,17 +770,17 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId)
if (gTasks[taskId].data[2] == 0)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1);
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BB8, 1);
}
else
{
- DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0);
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BD8, 0);
}
}
void sub_80C9C7C(u8 taskId)
{
- if (IsPlayerFacingPlantedBerryTree() == TRUE)
+ if (IsPlayerFacingUnplantedSoil() == TRUE)
{
gFieldItemUseCallback = sub_80C9D00;
gFieldCallback = ExecuteItemUseFromBlackPalette;
@@ -791,13 +791,13 @@ void sub_80C9C7C(u8 taskId)
}
else
{
- ItemId_GetFieldFunc(gScriptItemId)(taskId);
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
}
}
void sub_80C9D00(u8 taskId)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
ScriptContext2_Enable();
ScriptContext1_SetupScript(gUnknown_081A1654);
DestroyTask(taskId);
@@ -876,7 +876,7 @@ void ItemUseOutOfBattle_TMHM(u8 taskId)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (gScriptItemId >= ITEM_HM01)
+ if (gSpecialVar_ItemId >= ITEM_HM01)
DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM
else
DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM
@@ -892,7 +892,7 @@ void sub_80C9F10(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
- StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]);
+ StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]);
StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove);
DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1);
}
@@ -913,9 +913,9 @@ void sub_80C9FC0(u8 var)
static void PrepareItemUseMessage(void)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
sub_80A3E0C();
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem);
}
@@ -923,7 +923,7 @@ void ItemUseOutOfBattle_Repel(u8 var)
{
if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
{
- VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId));
+ VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
PrepareItemUseMessage();
DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1);
}
@@ -936,7 +936,7 @@ void ItemUseOutOfBattle_Repel(u8 var)
void sub_80CA07C(void)
{
sub_80A3E0C();
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
}
void sub_80CA098(u8 taskId)
@@ -950,19 +950,19 @@ void sub_80CA098(u8 taskId)
void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
{
- if (gScriptItemId == ITEM_WHITE_FLUTE)
+ if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE)
{
- FlagSet(SYS_ENC_UP_ITEM);
- FlagClear(SYS_ENC_DOWN_ITEM);
+ FlagSet(FLAG_SYS_ENC_UP_ITEM);
+ FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
sub_80CA07C();
StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute);
gTasks[taskId].func = sub_80CA098;
gTasks[taskId].data[15] = 0;
}
- else if (gScriptItemId == ITEM_BLACK_FLUTE)
+ else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE)
{
- FlagSet(SYS_ENC_DOWN_ITEM);
- FlagClear(SYS_ENC_UP_ITEM);
+ FlagSet(FLAG_SYS_ENC_DOWN_ITEM);
+ FlagClear(FLAG_SYS_ENC_UP_ITEM);
sub_80CA07C();
StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel);
gTasks[taskId].func = sub_80CA098;
@@ -1016,7 +1016,7 @@ void ItemUseInBattle_PokeBall(u8 var)
{
if (PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
sub_80A7094(var);
}
else
@@ -1037,8 +1037,8 @@ void sub_80CA2BC(u8 taskId)
if(++gTasks[taskId].data[15] > 7)
{
PlaySE(SE_KAIFUKU);
- RemoveBagItem(gScriptItemId, 1);
- DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ DisplayItemMessageOnField(taskId, sub_803F378(gSpecialVar_ItemId), sub_80CA294, 1);
}
}
@@ -1048,7 +1048,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE)
+ if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
{
DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1);
}
@@ -1097,9 +1097,9 @@ void unref_sub_80CA448(u8 var)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE)
+ if (ExecuteTableBasedItemEffect__(0, gSpecialVar_ItemId, 0) == FALSE)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
GetMonNickname(&gPlayerParty[0], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion);
DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1);
@@ -1127,7 +1127,7 @@ void ItemUseInBattle_Escape(u8 taskId)
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
{
- switch (GetItemEffectType(gScriptItemId) - 1)
+ switch (GetItemEffectType(gSpecialVar_ItemId) - 1)
{
case 1:
case 2:
@@ -1170,7 +1170,7 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
void ItemUseInBattle_EnigmaBerry(u8 taskId)
{
- switch (GetItemEffectType(gScriptItemId))
+ switch (GetItemEffectType(gSpecialVar_ItemId))
{
case 0:
ItemUseInBattle_StatIncrease(taskId);
diff --git a/src/field/landmark.c b/src/field/landmark.c
index 6a53716bb..476821ec6 100644
--- a/src/field/landmark.c
+++ b/src/field/landmark.c
@@ -1,12 +1,11 @@
#include "global.h"
#include "landmark.h"
#include "event_data.h"
-
-#define MAPSEC_NONE 0x58
+#include "region_map_sections.h"
struct Landmark
{
- u8 *name;
+ const u8 *name;
u16 flag;
};
@@ -14,16 +13,361 @@ struct LandmarkList
{
u8 mapSection;
u8 id;
- const struct Landmark **landmarks;
+ const struct Landmark *const *landmarks;
+};
+
+extern const u8 gLandmarkName_FlowerShop[];
+extern const u8 gLandmarkName_PetalburgWoods[];
+extern const u8 gLandmarkName_MrBrineysCottage[];
+extern const u8 gLandmarkName_AbandonedShip[];
+extern const u8 gLandmarkName_SeashoreHouse[];
+extern const u8 gLandmarkName_SlateportBeach[];
+extern const u8 gLandmarkName_CyclingRoad[];
+extern const u8 gLandmarkName_NewMauville[];
+extern const u8 gLandmarkName_TrickHouse[];
+extern const u8 gLandmarkName_OldLadysRestShop[];
+extern const u8 gLandmarkName_Desert[];
+extern const u8 gLandmarkName_WinstrateFamily[];
+extern const u8 gLandmarkName_CableCar[];
+extern const u8 gLandmarkName_GlassWorkshop[];
+extern const u8 gLandmarkName_WeatherInstitute[];
+extern const u8 gLandmarkName_MeteorFalls[];
+extern const u8 gLandmarkName_TunnelersRestHouse[];
+extern const u8 gLandmarkName_RusturfTunnel[];
+extern const u8 gLandmarkName_PokemonDayCare[];
+extern const u8 gLandmarkName_SafariZoneEntrance[];
+extern const u8 gLandmarkName_MtPyre[];
+extern const u8 gLandmarkName_ShoalCave[];
+extern const u8 gLandmarkName_SeafloorCavern[];
+extern const u8 gLandmarkName_GraniteCave[];
+extern const u8 gLandmarkName_OceanCurrent[];
+extern const u8 gLandmarkName_LanettesHouse[];
+extern const u8 gLandmarkName_FieryPath[];
+extern const u8 gLandmarkName_JaggedPass[];
+extern const u8 gLandmarkName_BerryMastersHouse[];
+extern const u8 gLandmarkName_IslandCave[];
+extern const u8 gLandmarkName_DesertRuins[];
+extern const u8 gLandmarkName_ScorchedSlab[];
+extern const u8 gLandmarkName_AncientTomb[];
+extern const u8 gLandmarkName_SealedChamber[];
+extern const u8 gLandmarkName_FossilManiacsHouse[];
+extern const u8 gLandmarkName_HuntersHouse[];
+extern const u8 gLandmarkName_SkyPillar[];
+
+static const struct Landmark Landmark_FlowerShop = {gLandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP};
+static const struct Landmark Landmark_PetalburgWoods = {gLandmarkName_PetalburgWoods, -1};
+static const struct Landmark Landmark_MrBrineysCottage = {gLandmarkName_MrBrineysCottage, FLAG_LANDMARK_MR_BRINEY_HOUSE};
+static const struct Landmark Landmark_AbandonedShip = {gLandmarkName_AbandonedShip, FLAG_LANDMARK_ABANDONED_SHIP};
+static const struct Landmark Landmark_SeashoreHouse = {gLandmarkName_SeashoreHouse, FLAG_LANDMARK_SEASHORE_HOUSE};
+static const struct Landmark Landmark_SlateportBeach = {gLandmarkName_SlateportBeach, -1};
+static const struct Landmark Landmark_CyclingRoad = {gLandmarkName_CyclingRoad, -1};
+static const struct Landmark Landmark_NewMauville = {gLandmarkName_NewMauville, FLAG_LANDMARK_NEW_MAUVILLE};
+static const struct Landmark Landmark_TrickHouse = {gLandmarkName_TrickHouse, FLAG_LANDMARK_TRICK_HOUSE};
+static const struct Landmark Landmark_OldLadysRestShop = {gLandmarkName_OldLadysRestShop, FLAG_LANDMARK_OLD_LADY_REST_SHOP};
+static const struct Landmark Landmark_Desert = {gLandmarkName_Desert, -1};
+static const struct Landmark Landmark_WinstrateFamily = {gLandmarkName_WinstrateFamily, FLAG_LANDMARK_WINSTRATE_FAMILY};
+static const struct Landmark Landmark_CableCar = {gLandmarkName_CableCar, -1};
+static const struct Landmark Landmark_GlassWorkshop = {gLandmarkName_GlassWorkshop, FLAG_LANDMARK_GLASS_WORKSHOP};
+static const struct Landmark Landmark_WeatherInstitute = {gLandmarkName_WeatherInstitute, -1};
+static const struct Landmark Landmark_MeteorFalls = {gLandmarkName_MeteorFalls, -1};
+static const struct Landmark Landmark_TunnelersRestHouse = {gLandmarkName_TunnelersRestHouse, FLAG_LANDMARK_TUNNELERS_REST_HOUSE};
+static const struct Landmark Landmark_RusturfTunnel = {gLandmarkName_RusturfTunnel, -1};
+static const struct Landmark Landmark_PokemonDayCare = {gLandmarkName_PokemonDayCare, FLAG_LANDMARK_POKEMON_DAYCARE};
+static const struct Landmark Landmark_SafariZoneEntrance = {gLandmarkName_SafariZoneEntrance, -1};
+static const struct Landmark Landmark_MtPyre = {gLandmarkName_MtPyre, -1};
+static const struct Landmark Landmark_ShoalCave = {gLandmarkName_ShoalCave, -1};
+static const struct Landmark Landmark_SeafloorCavern = {gLandmarkName_SeafloorCavern, FLAG_LANDMARK_SEAFLOOR_CAVERN};
+static const struct Landmark Landmark_GraniteCave = {gLandmarkName_GraniteCave, -1};
+static const struct Landmark Landmark_OceanCurrent = {gLandmarkName_OceanCurrent, -1};
+static const struct Landmark Landmark_LanettesHouse = {gLandmarkName_LanettesHouse, FLAG_LANDMARK_LANETTES_HOUSE};
+static const struct Landmark Landmark_FieryPath = {gLandmarkName_FieryPath, FLAG_LANDMARK_FIERY_PATH};
+static const struct Landmark Landmark_JaggedPass = {gLandmarkName_JaggedPass, -1};
+static const struct Landmark Landmark_BerryMastersHouse = {gLandmarkName_BerryMastersHouse, FLAG_LANDMARK_BERRY_MASTERS_HOUSE};
+static const struct Landmark Landmark_IslandCave = {gLandmarkName_IslandCave, FLAG_LANDMARK_ISLAND_CAVE};
+static const struct Landmark Landmark_DesertRuins = {gLandmarkName_DesertRuins, FLAG_LANDMARK_DESERT_RUINS};
+static const struct Landmark Landmark_ScorchedSlab = {gLandmarkName_ScorchedSlab, FLAG_LANDMARK_SCORCHED_SLAB};
+static const struct Landmark Landmark_AncientTomb = {gLandmarkName_AncientTomb, FLAG_LANDMARK_ANCIENT_TOMB};
+static const struct Landmark Landmark_SealedChamber = {gLandmarkName_SealedChamber, FLAG_LANDMARK_SEALED_CHAMBER};
+static const struct Landmark Landmark_FossilManiacsHouse = {gLandmarkName_FossilManiacsHouse, FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE};
+static const struct Landmark Landmark_HuntersHouse = {gLandmarkName_HuntersHouse, FLAG_LANDMARK_HUNTERS_HOUSE};
+static const struct Landmark Landmark_SkyPillar = {gLandmarkName_SkyPillar, FLAG_LANDMARK_SKY_PILLAR};
+
+static const struct Landmark *const Landmarks_Route104_0[] =
+{
+ &Landmark_FlowerShop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route104_1[] =
+{
+ &Landmark_PetalburgWoods,
+ &Landmark_MrBrineysCottage,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route105_0[] =
+{
+ &Landmark_IslandCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route106_1[] =
+{
+ &Landmark_GraniteCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route108_0[] =
+{
+ &Landmark_AbandonedShip,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route109_0[] =
+{
+ &Landmark_SeashoreHouse,
+ &Landmark_SlateportBeach,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_0[] =
+{
+ &Landmark_CyclingRoad,
+ &Landmark_NewMauville,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_1[] =
+{
+ &Landmark_CyclingRoad,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route110_2[] =
+{
+ &Landmark_CyclingRoad,
+ &Landmark_TrickHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_0[] =
+{
+ &Landmark_OldLadysRestShop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_1[] =
+{
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_3[] =
+{
+ &Landmark_DesertRuins,
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route111_4[] =
+{
+ &Landmark_WinstrateFamily,
+ &Landmark_Desert,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route112_0[] =
+{
+ &Landmark_FieryPath,
+ &Landmark_JaggedPass,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route112_1[] =
+{
+ &Landmark_CableCar,
+ &Landmark_FieryPath,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route113_1[] =
+{
+ &Landmark_GlassWorkshop,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route114_1[] =
+{
+ &Landmark_FossilManiacsHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route114_2[] =
+{
+ &Landmark_LanettesHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_MeteorFalls[] =
+{
+ &Landmark_MeteorFalls,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route116_1[] =
+{
+ &Landmark_TunnelersRestHouse,
+ &Landmark_RusturfTunnel,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route116_2[] =
+{
+ &Landmark_RusturfTunnel,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route117_2[] =
+{
+ &Landmark_PokemonDayCare,
+ NULL,
};
-extern const struct LandmarkList gLandmarkLists[];
+static const struct Landmark *const Landmarks_Route119_1[] =
+{
+ &Landmark_WeatherInstitute,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route120_0[] =
+{
+ &Landmark_ScorchedSlab,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route120_2[] =
+{
+ &Landmark_AncientTomb,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route121_2[] =
+{
+ &Landmark_SafariZoneEntrance,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route122_0[] =
+{
+ &Landmark_MtPyre,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route123_0[] =
+{
+ &Landmark_BerryMastersHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route124_7[] =
+{
+ &Landmark_HuntersHouse,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route125_2[] =
+{
+ &Landmark_ShoalCave,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route128_1[] =
+{
+ &Landmark_SeafloorCavern,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route131_1[] =
+{
+ &Landmark_SkyPillar,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_OceanCurrent[] =
+{
+ &Landmark_OceanCurrent,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_Route134_2[] =
+{
+ &Landmark_SealedChamber,
+ &Landmark_OceanCurrent,
+ NULL,
+};
+
+static const struct Landmark *const Landmarks_MtChimney_2[] =
+{
+ &Landmark_CableCar,
+ &Landmark_JaggedPass,
+ NULL,
+};
+
+static const struct LandmarkList gLandmarkLists[] =
+{
+ {MAPSEC_Route104, 0, Landmarks_Route104_0},
+ {MAPSEC_Route104, 1, Landmarks_Route104_1},
+ {MAPSEC_Route105, 0, Landmarks_Route105_0},
+ {MAPSEC_Route106, 1, Landmarks_Route106_1},
+ {MAPSEC_Route108, 0, Landmarks_Route108_0},
+ {MAPSEC_Route109, 0, Landmarks_Route109_0},
+ {MAPSEC_Route110, 0, Landmarks_Route110_0},
+ {MAPSEC_Route110, 1, Landmarks_Route110_1},
+ {MAPSEC_Route110, 2, Landmarks_Route110_2},
+ {MAPSEC_Route111, 0, Landmarks_Route111_0},
+ {MAPSEC_Route111, 1, Landmarks_Route111_1},
+ {MAPSEC_Route111, 2, Landmarks_Route111_1},
+ {MAPSEC_Route111, 3, Landmarks_Route111_3},
+ {MAPSEC_Route111, 4, Landmarks_Route111_4},
+ {MAPSEC_Route112, 0, Landmarks_Route112_0},
+ {MAPSEC_Route112, 1, Landmarks_Route112_1},
+ {MAPSEC_Route113, 1, Landmarks_Route113_1},
+ {MAPSEC_Route114, 1, Landmarks_Route114_1},
+ {MAPSEC_Route114, 2, Landmarks_Route114_2},
+ {MAPSEC_Route114, 3, Landmarks_MeteorFalls},
+ {MAPSEC_Route115, 0, Landmarks_MeteorFalls},
+ {MAPSEC_Route115, 1, Landmarks_MeteorFalls},
+ {MAPSEC_Route116, 1, Landmarks_Route116_1},
+ {MAPSEC_Route116, 2, Landmarks_Route116_2},
+ {MAPSEC_Route117, 2, Landmarks_Route117_2},
+ {MAPSEC_Route119, 1, Landmarks_Route119_1},
+ {MAPSEC_Route120, 0, Landmarks_Route120_0},
+ {MAPSEC_Route120, 2, Landmarks_Route120_2},
+ {MAPSEC_Route121, 2, Landmarks_Route121_2},
+ {MAPSEC_Route122, 0, Landmarks_Route122_0},
+ {MAPSEC_Route123, 0, Landmarks_Route123_0},
+ {MAPSEC_Route122, 1, Landmarks_Route122_0},
+ {MAPSEC_Route124, 7, Landmarks_Route124_7},
+ {MAPSEC_Route125, 2, Landmarks_Route125_2},
+ {MAPSEC_Route128, 1, Landmarks_Route128_1},
+ {MAPSEC_Route131, 1, Landmarks_Route131_1},
+ {MAPSEC_Route132, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route132, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route133, 2, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 0, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 1, Landmarks_OceanCurrent},
+ {MAPSEC_Route134, 2, Landmarks_Route134_2},
+ {MAPSEC_MtChimney, 2, Landmarks_MtChimney_2},
+ {MAPSEC_Nothing, 0, NULL},
+};
-static const struct Landmark **GetLandmarks(u8 mapSection, u8 id);
+static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id);
-u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count)
+const u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count)
{
- const struct Landmark **landmarks = GetLandmarks(mapSection, id);
+ const struct Landmark *const *landmarks = GetLandmarks(mapSection, id);
if (!landmarks)
return NULL;
@@ -48,11 +392,11 @@ u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count)
return (*landmarks)->name;
}
-static const struct Landmark **GetLandmarks(u8 mapSection, u8 id)
+static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
{
u16 i = 0;
- for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++)
+ for (; gLandmarkLists[i].mapSection != MAPSEC_Nothing; i++)
{
if (gLandmarkLists[i].mapSection > mapSection)
return NULL;
@@ -60,7 +404,7 @@ static const struct Landmark **GetLandmarks(u8 mapSection, u8 id)
break;
}
- if (gLandmarkLists[i].mapSection == MAPSEC_NONE)
+ if (gLandmarkLists[i].mapSection == MAPSEC_Nothing)
return NULL;
for (; gLandmarkLists[i].mapSection == mapSection; i++)
diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c
index c2c25b9ac..83febc56e 100644
--- a/src/field/lottery_corner.c
+++ b/src/field/lottery_corner.c
@@ -1,13 +1,13 @@
#include "global.h"
#include "lottery_corner.h"
#include "event_data.h"
-#include "items.h"
-#include "rng.h"
-#include "species.h"
+#include "constants/items.h"
+#include "random.h"
+#include "constants/species.h"
#include "string_util.h"
#include "text.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
extern struct PokemonStorage gPokemonStorage;
extern u16 gSpecialVar_0x8005;
@@ -46,7 +46,7 @@ void SetRandomLotteryNumber(u16 i)
void RetrieveLotteryNumber(void)
{
u16 lottoNumber = GetLotteryNumber();
- gScriptResult = lottoNumber;
+ gSpecialVar_Result = lottoNumber;
}
void PickLotteryCornerTicket(void)
@@ -70,7 +70,7 @@ void PickLotteryCornerTicket(void)
if (!GetMonData(pkmn, MON_DATA_IS_EGG))
{
u32 otId = GetMonData(pkmn, MON_DATA_OT_ID);
- u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId);
+ u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId);
if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1)
{
@@ -97,7 +97,7 @@ void PickLotteryCornerTicket(void)
!GetBoxMonData(pkmn, MON_DATA_IS_EGG))
{
u32 otId = GetBoxMonData(pkmn, MON_DATA_OT_ID);
- u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId);
+ u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId);
if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1)
{
diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c
index 2856320b8..954fcb446 100644
--- a/src/field/map_obj_lock.c
+++ b/src/field/map_obj_lock.c
@@ -6,11 +6,11 @@
#include "script_movement.h"
#include "task.h"
-extern u16 gScriptFacing;
+extern u16 gSpecialVar_Facing;
bool8 walkrun_is_standing_still(void)
{
- if (gPlayerAvatar.running1 == 1)
+ if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
return FALSE;
else
return TRUE;
@@ -109,7 +109,7 @@ void unref_sub_8064E5C(void)
void sub_8064EAC(void)
{
- FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gScriptFacing);
+ FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gSpecialVar_Facing);
}
void sub_8064ED4(void)
diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c
index 33bc39648..30f6f5233 100644
--- a/src/field/mauville_man.c
+++ b/src/field/mauville_man.c
@@ -2,14 +2,15 @@
#include "bard_music.h"
#include "mauville_man.h"
#include "easy_chat.h"
+#include "constants/easy_chat.h"
#include "event_data.h"
#include "field_message_box.h"
#include "m4a.h"
#include "menu.h"
#include "overworld.h"
-#include "rng.h"
+#include "random.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
@@ -20,7 +21,7 @@
extern struct MusicPlayerInfo gMPlay_SE2;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
extern const u8 gTextStoryteller_Story1Title[];
@@ -257,12 +258,12 @@ static u8 GetCurrentMauvilleOldMan(void)
void ScrSpecial_GetCurrentMauvilleMan(void)
{
- gScriptResult = GetCurrentMauvilleOldMan();
+ gSpecialVar_Result = GetCurrentMauvilleOldMan();
}
void ScrSpecial_HasBardSongBeenChanged(void)
{
- u16 *scriptResult = &gScriptResult; // why??
+ u16 *scriptResult = &gSpecialVar_Result; // why??
struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
*scriptResult = bard->hasChangedSong;
@@ -349,7 +350,7 @@ void ScrSpecial_PlayBardSong(void)
void ScrSpecial_GetHipsterSpokenFlag(void)
{
- u16 *scriptResult = &gScriptResult; // again??
+ u16 *scriptResult = &gSpecialVar_Result; // again??
struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
*scriptResult = hipster->alreadySpoken;
@@ -368,12 +369,12 @@ void ScrSpecial_HipsterTeachWord(void)
if (var == 0xFFFF)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
}
else
{
EasyChat_GetWordText(gStringVar1, var);
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
@@ -383,12 +384,12 @@ void ScrSpecial_GiddyShouldTellAnotherTale(void)
if (giddy->taleCounter == 10)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
giddy->taleCounter = 0;
}
else
{
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
@@ -420,7 +421,7 @@ void ScrSpecial_GenerateGiddyLine(void)
else
giddy->taleCounter++;
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
#ifdef NONMATCHING
@@ -1250,11 +1251,11 @@ static void Task_StoryListMenu(u8 taskId)
break;
if (selection == -1 || selection == GetFreeStorySlot())
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
else
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_03000748 = selection;
}
HandleDestroyMenuCursors();
@@ -1265,7 +1266,7 @@ static void Task_StoryListMenu(u8 taskId)
}
}
-// Sets gScriptResult to TRUE if player selected a story
+// Sets gSpecialVar_Result to TRUE if player selected a story
void ScrSpecial_StorytellerStoryListMenu(void)
{
CreateTask(Task_StoryListMenu, 0x50);
diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c
index 14e823355..e3ef0c790 100644
--- a/src/field/menu_helpers.c
+++ b/src/field/menu_helpers.c
@@ -1,14 +1,14 @@
#include "global.h"
#include "item_menu.h"
-#include "items.h"
+#include "constants/items.h"
#include "link.h"
#include "mail_data.h"
#include "main.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "menu.h"
#include "menu_helpers.h"
#include "overworld.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
@@ -261,7 +261,7 @@ bool8 sub_80F92F4(u16 itemId)
return TRUE;
}
- if (!(gSaveBlock1.location.mapGroup == MAP_GROUP_TRADE_CENTER && gSaveBlock1.location.mapNum == MAP_ID_TRADE_CENTER))
+ if (!(gSaveBlock1.location.mapGroup == MAP_GROUP(TRADE_CENTER) && gSaveBlock1.location.mapNum == MAP_NUM(TRADE_CENTER)))
{
return TRUE;
}
@@ -405,15 +405,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
if (gUnknown_020388C0[0] == 0xFF)
{
gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[0]].data2 = -1;
+ gSprites[gUnknown_020388C0[0]].data[2] = -1;
if (gUnknown_020388C0[1] != 0xFF)
{
gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1;
- gSprites[gUnknown_020388C0[0]].data3 = gSprites[gUnknown_020388C0[1]].data3;
+ gSprites[gUnknown_020388C0[0]].data[3] = gSprites[gUnknown_020388C0[1]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[0]].data3 = 0;
+ gSprites[gUnknown_020388C0[0]].data[3] = 0;
}
}
break;
@@ -422,15 +422,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
if (gUnknown_020388C0[1] == 0xFF)
{
gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0);
- gSprites[gUnknown_020388C0[1]].data2 = 1;
+ gSprites[gUnknown_020388C0[1]].data[2] = 1;
if (gUnknown_020388C0[0] != 0xFF)
{
gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1;
- gSprites[gUnknown_020388C0[1]].data3 = gSprites[gUnknown_020388C0[0]].data3;
+ gSprites[gUnknown_020388C0[1]].data[3] = gSprites[gUnknown_020388C0[0]].data[3];
}
else
{
- gSprites[gUnknown_020388C0[1]].data3 = 0;
+ gSprites[gUnknown_020388C0[1]].data[3] = 0;
}
}
break;
@@ -439,15 +439,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
if (gUnknown_020388C0[2] == 0xFF)
{
gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[2]].data0 = -1;
+ gSprites[gUnknown_020388C0[2]].data[0] = -1;
if (gUnknown_020388C0[3] != 0xFF)
{
gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1;
- gSprites[gUnknown_020388C0[2]].data1 = gSprites[gUnknown_020388C0[3]].data1;
+ gSprites[gUnknown_020388C0[2]].data[1] = gSprites[gUnknown_020388C0[3]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[2]].data1 = 0;
+ gSprites[gUnknown_020388C0[2]].data[1] = 0;
}
}
break;
@@ -456,15 +456,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y)
if (gUnknown_020388C0[3] == 0xFF)
{
gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0);
- gSprites[gUnknown_020388C0[3]].data0 = 1;
+ gSprites[gUnknown_020388C0[3]].data[0] = 1;
if (gUnknown_020388C0[2] != 0xFF)
{
gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1;
- gSprites[gUnknown_020388C0[3]].data1 = gSprites[gUnknown_020388C0[2]].data1;
+ gSprites[gUnknown_020388C0[3]].data[1] = gSprites[gUnknown_020388C0[2]].data[1];
}
else
{
- gSprites[gUnknown_020388C0[3]].data1 = 0;
+ gSprites[gUnknown_020388C0[3]].data[1] = 0;
}
}
break;
@@ -502,23 +502,23 @@ void BuyMenuFreeMemory(void)
static void sub_80F9834(struct Sprite *sprite)
{
- if (sprite->data1 == 0)
+ if (sprite->data[1] == 0)
{
- sprite->pos2.x += sprite->data0;
+ sprite->pos2.x += sprite->data[0];
}
- if (sprite->data3 == 0)
+ if (sprite->data[3] == 0)
{
- sprite->pos2.y += sprite->data2;
+ sprite->pos2.y += sprite->data[2];
}
- sprite->data1++;
- sprite->data3++;
- if (sprite->data1 > 2)
+ sprite->data[1]++;
+ sprite->data[3]++;
+ if (sprite->data[1] > 2)
{
- sprite->data1 = 0;
+ sprite->data[1] = 0;
}
- if (sprite->data3 > 2)
+ if (sprite->data[3] > 2)
{
- sprite->data3 = 0;
+ sprite->data[3] = 0;
}
if (sprite->pos2.x == 8 || sprite->pos2.x == -8)
{
@@ -552,8 +552,8 @@ static void sub_80F9914(u8 id)
{
gSprites[gUnknown_020388C0[id]].pos2.x = 0;
gSprites[gUnknown_020388C0[id]].pos2.y = 0;
- gSprites[gUnknown_020388C0[id]].data1 = 0;
- gSprites[gUnknown_020388C0[id]].data3 = 0;
+ gSprites[gUnknown_020388C0[id]].data[1] = 0;
+ gSprites[gUnknown_020388C0[id]].data[3] = 0;
}
}
diff --git a/src/field/money.c b/src/field/money.c
index 5d0f0ae8d..f277ac905 100644
--- a/src/field/money.c
+++ b/src/field/money.c
@@ -4,6 +4,7 @@
#include "menu.h"
#include "sprite.h"
#include "string_util.h"
+#include "graphics.h"
#define SPRITE_TAG_MONEY (0x2722)
@@ -11,9 +12,47 @@ extern u16 gSpecialVar_0x8005;
static EWRAM_DATA u8 gUnknown_02038734 = 0;
-extern const struct CompressedSpriteSheet gUnknown_083CF584;
-extern const struct CompressedSpritePalette gUnknown_083CF58C;
-extern const struct SpriteTemplate gSpriteTemplate_83CF56C;
+static const struct OamData gOamData_83CF558 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83CF560[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_83CF568[] =
+{
+ gSpriteAnim_83CF560,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CF56C =
+{
+ .tileTag = 10018,
+ .paletteTag = 10018,
+ .oam = &gOamData_83CF558,
+ .anims = gSpriteAnimTable_83CF568,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct CompressedSpriteSheet gUnknown_083CF584[] = {gMenuMoneyGfx, 256, SPRITE_TAG_MONEY};
+const struct CompressedSpritePalette gUnknown_083CF58C[] = {gMenuMoneyPal, SPRITE_TAG_MONEY};
bool8 IsEnoughMoney(u32 budget, u32 cost)
{
@@ -239,8 +278,8 @@ void OpenMoneyWindow(u32 amount, u8 x, u8 y)
MenuDrawTextWindow(x, y, x + 13, y + 3);
UpdateMoneyWindow(amount, x, y);
- LoadCompressedObjectPic(&gUnknown_083CF584);
- LoadCompressedObjectPalette(&gUnknown_083CF58C);
+ LoadCompressedObjectPic(gUnknown_083CF584);
+ LoadCompressedObjectPalette(gUnknown_083CF58C);
gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0);
}
diff --git a/src/field/overworld.c b/src/field/overworld.c
index d6f255409..834a2afa4 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -25,23 +25,23 @@
#include "link.h"
#include "load_save.h"
#include "main.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "map_name_popup.h"
#include "menu.h"
#include "metatile_behavior.h"
#include "new_game.h"
#include "palette.h"
#include "play_time.h"
-#include "rng.h"
+#include "random.h"
#include "roamer.h"
#include "rotating_gate.h"
#include "safari_zone.h"
#include "script.h"
#include "script_pokemon_80C4.h"
#include "secret_base.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
-#include "species.h"
+#include "constants/species.h"
#include "start_menu.h"
#include "task.h"
#include "tileset_anim.h"
@@ -203,47 +203,47 @@ static void DoWhiteOut(void)
void Overworld_ResetStateAfterFly(void)
{
player_avatar_init_params_reset();
- FlagClear(SYS_CYCLING_ROAD);
- FlagClear(SYS_CRUISE_MODE);
- FlagClear(SYS_SAFARI_MODE);
- FlagClear(SYS_USE_STRENGTH);
- FlagClear(SYS_USE_FLASH);
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
}
void Overworld_ResetStateAfterTeleport(void)
{
player_avatar_init_params_reset();
- FlagClear(SYS_CYCLING_ROAD);
- FlagClear(SYS_CRUISE_MODE);
- FlagClear(SYS_SAFARI_MODE);
- FlagClear(SYS_USE_STRENGTH);
- FlagClear(SYS_USE_FLASH);
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
ScriptContext2_RunNewScript(gUnknown_0819FC9F);
}
void Overworld_ResetStateAfterDigEscRope(void)
{
player_avatar_init_params_reset();
- FlagClear(SYS_CYCLING_ROAD);
- FlagClear(SYS_CRUISE_MODE);
- FlagClear(SYS_SAFARI_MODE);
- FlagClear(SYS_USE_STRENGTH);
- FlagClear(SYS_USE_FLASH);
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
}
void Overworld_ResetStateAfterWhiteOut(void)
{
player_avatar_init_params_reset();
- FlagClear(SYS_CYCLING_ROAD);
- FlagClear(SYS_CRUISE_MODE);
- FlagClear(SYS_SAFARI_MODE);
- FlagClear(SYS_USE_STRENGTH);
- FlagClear(SYS_USE_FLASH);
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
}
void sub_805308C(void)
{
- FlagClear(SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
ChooseAmbientCrySpecies();
ResetCyclingRoadChallengeData();
UpdateLocationHistoryForRoamer();
@@ -602,7 +602,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
prev_quest_postbuffer_cursor_backup_reset();
sub_8082BD0(mapGroup, mapNum);
DoTimeBasedEvents();
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
SetDefaultFlashLevel();
Overworld_ClearSavedMusic();
@@ -638,10 +638,10 @@ void sub_8053994(u32 a1)
sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
if (a1 != 1)
DoTimeBasedEvents();
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
if (v2)
- FlagClear(SYS_USE_FLASH);
+ FlagClear(FLAG_SYS_USE_FLASH);
SetDefaultFlashLevel();
Overworld_ClearSavedMusic();
mapheader_run_script_with_tag_x3();
@@ -691,7 +691,7 @@ struct UnkPlayerStruct *sub_8053AA8(void)
u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
{
- if (a3 != 8 && FlagGet(SYS_CRUISE_MODE))
+ if (a3 != 8 && FlagGet(FLAG_SYS_CRUISE_MODE))
return 1;
if (a3 == 5)
return 16;
@@ -708,7 +708,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4)
{
- if (FlagGet(SYS_CRUISE_MODE) && a4 == 6)
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && a4 == 6)
return 4;
if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE)
return 2;
@@ -738,9 +738,9 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void)
bool32 Overworld_IsBikingAllowed(void)
{
// is player in cycling road entrance?
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE
- && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE
- || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)
+ && (gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)
+ || gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)))
return TRUE;
// is player indoor, in a secret base, or underwater?
@@ -752,11 +752,11 @@ bool32 Overworld_IsBikingAllowed(void)
return FALSE;
// Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon.
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9
- && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(SEAFLOOR_CAVERN_ROOM9)
+ && gSaveBlock1.location.mapNum == MAP_NUM(SEAFLOOR_CAVERN_ROOM9))
return FALSE;
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F
- && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(CAVE_OF_ORIGIN_B4F)
+ && gSaveBlock1.location.mapNum == MAP_NUM(CAVE_OF_ORIGIN_B4F))
return FALSE;
return TRUE;
@@ -766,7 +766,7 @@ void SetDefaultFlashLevel(void)
{
if (!gMapHeader.cave)
gSaveBlock1.flashLevel = 0;
- else if (FlagGet(SYS_USE_FLASH))
+ else if (FlagGet(FLAG_SYS_USE_FLASH))
gSaveBlock1.flashLevel = 1;
else
gSaveBlock1.flashLevel = gMaxFlashLevel;
@@ -792,22 +792,22 @@ void sub_8053D14(u16 mapDataId)
static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
{
- if (!FlagGet(SYS_WEATHER_CTRL))
+ if (!FlagGet(FLAG_SYS_WEATHER_CTRL))
return FALSE;
if (warp->mapGroup == 0)
{
switch (warp->mapNum)
{
- case MAP_ID_LILYCOVE_CITY:
- case MAP_ID_MOSSDEEP_CITY:
- case MAP_ID_SOOTOPOLIS_CITY:
- case MAP_ID_EVER_GRANDE_CITY:
+ case MAP_NUM(LILYCOVE_CITY):
+ case MAP_NUM(MOSSDEEP_CITY):
+ case MAP_NUM(SOOTOPOLIS_CITY):
+ case MAP_NUM(EVER_GRANDE_CITY):
return TRUE;
- case MAP_ID_ROUTE124:
- case MAP_ID_ROUTE125:
- case MAP_ID_ROUTE126:
- case MAP_ID_ROUTE127:
- case MAP_ID_ROUTE128:
+ case MAP_NUM(ROUTE124):
+ case MAP_NUM(ROUTE125):
+ case MAP_NUM(ROUTE126):
+ case MAP_NUM(ROUTE127):
+ case MAP_NUM(ROUTE128):
return TRUE;
}
}
@@ -818,10 +818,10 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp)
{
if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED))
return FALSE;
- if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F)
+ if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F))
return FALSE;
- if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F
- || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F)
+ if (warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_1F)
+ || warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_2F))
return TRUE;
return FALSE;
}
@@ -841,8 +841,8 @@ u16 GetCurrLocationDefaultMusic(void)
u16 music;
// Play the desert music only when the sandstorm is active on Route 111.
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111
- && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE111)
+ && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE111)
&& GetSav1Weather() == 8)
return BGM_ASHROAD;
@@ -869,8 +869,8 @@ u16 GetWarpDestinationMusic(void)
}
else
{
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY
- && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAUVILLE_CITY)
+ && gSaveBlock1.location.mapNum == MAP_NUM(MAUVILLE_CITY))
return BGM_DOORO_X1;
else
return BGM_GRANROAD;
@@ -912,7 +912,7 @@ void Overworld_ClearSavedMusic(void)
void sub_8053F0C(void)
{
- if (FlagGet(SPECIAL_FLAG_1) != TRUE)
+ if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE)
{
u16 newMusic = GetWarpDestinationMusic();
u16 currentMusic = GetCurrentMapMusic();
@@ -959,7 +959,7 @@ u8 GetMapMusicFadeoutSpeed(void)
void sub_8053FF8(void)
{
u16 music = GetWarpDestinationMusic();
- if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
+ if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
{
u8 speed = GetMapMusicFadeoutSpeed();
FadeOutMapMusic(speed);
@@ -1024,8 +1024,8 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter)
void ChooseAmbientCrySpecies(void)
{
- if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130
- && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130)
+ if ((gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE130)
+ && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE130))
&& !IsMirageIslandPresent())
{
// Only play water pokemon cries on this route
@@ -1737,7 +1737,7 @@ void sub_8054D4C(u32 a1)
sub_805C7C4(0);
FieldEffectActiveListClear();
InitFieldMessageBox();
- sub_807C828();
+ StartWeather();
sub_8080750();
if (!a1)
SetUpFieldTasks();
@@ -2648,14 +2648,14 @@ void CreateLinkPlayerSprite(u8 linkPlayerId)
mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0);
sprite = &gSprites[mapObj->spriteId];
sprite->coordOffsetEnabled = TRUE;
- sprite->data0 = linkPlayerId;
+ sprite->data[0] = linkPlayerId;
mapObj->mapobj_bit_2 = 0;
}
}
void SpriteCB_LinkPlayer(struct Sprite *sprite)
{
- struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data0];
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data[0]];
struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId];
sprite->pos1.x = mapObj->coords1.x;
sprite->pos1.y = mapObj->coords1.y;
@@ -2668,7 +2668,7 @@ void SpriteCB_LinkPlayer(struct Sprite *sprite)
sub_806487C(sprite, 0);
if (mapObj->mapobj_bit_2)
{
- sprite->invisible = ((sprite->data7 & 4) >> 2);
- sprite->data7++;
+ sprite->invisible = ((sprite->data[7] & 4) >> 2);
+ sprite->data[7]++;
}
}
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index 86ad9ecc9..089f93f9e 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -11,12 +11,12 @@
#include "item.h"
#include "item_use.h"
#include "item_menu.h"
-#include "items.h"
+#include "constants/items.h"
#include "mail_data.h"
#include "main.h"
#include "menu.h"
#include "menu_helpers.h"
-#include "moves.h"
+#include "constants/moves.h"
#include "palette.h"
#include "pokemon.h"
#include "pokemon_icon.h"
@@ -25,16 +25,17 @@
#include "pokemon_summary_screen.h"
#include "rom_8077ABC.h"
#include "rom_8094928.h"
-#include "script_pokemon_80F9.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
-#include "species.h"
+#include "constants/species.h"
#include "sprite.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "unknown_task.h"
#include "util.h"
+#include "script_pokemon_80F9.h"
+#include "ewram.h"
struct Coords8
{
@@ -460,7 +461,7 @@ static const u8 StatDataTypes[] = {
MON_DATA_DEF,
MON_DATA_SPATK,
MON_DATA_SPDEF,
- MON_DATA_SPD,
+ MON_DATA_SPEED,
};
struct Unk201C000
@@ -483,9 +484,6 @@ struct Unk201FE00
u8 unkE02;
};
-#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000))
-#define ewram1FE00 (*(struct Unk201FE00 *)(ewram + 0x1FE00))
-
extern u16 gBattleTypeFlags;
extern u8 gTileBuffer[];
extern u8 gUnknown_0202E8F4;
@@ -1111,7 +1109,7 @@ _0806B980:\n\
movs r3, 0x3\n\
bl sub_806BA94\n\
_0806B98C:\n\
- ldr r0, _0806B99C @ =0x0201b000\n\
+ ldr r0, _0806B99C @ =gSharedMem + 0x1B000\n\
ldr r1, _0806B9A0 @ =0x00000261\n\
adds r0, r1\n\
movs r1, 0x2\n\
@@ -1120,7 +1118,7 @@ _0806B98C:\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
-_0806B99C: .4byte 0x0201b000\n\
+_0806B99C: .4byte gSharedMem + 0x1B000\n\
_0806B9A0: .4byte 0x00000261\n\
.syntax divided\n");
}
@@ -1424,7 +1422,7 @@ u16 HandleDefaultPartyMenuInput(u8 taskId)
if (menuDirectionPressed == 0)
{
- if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data0 == 7)
+ if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data[0] == 7)
{
// Selected "CANCEL"
return B_BUTTON;
@@ -1597,7 +1595,7 @@ u16 HandleBattleTowerPartyMenuInput(u8 taskId)
{
if (gMain.newKeys & A_BUTTON)
{
- if (gSprites[sub_806CA00(taskId)].data0 == 7)
+ if (gSprites[sub_806CA00(taskId)].data[0] == 7)
{
return B_BUTTON;
}
@@ -1631,7 +1629,7 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed)
{
bool8 isLinkDoubleBattle;
u8 spriteId = sub_806CA00(taskId);
- u8 menuIndex = gSprites[spriteId].data0;
+ u8 menuIndex = gSprites[spriteId].data[0];
UpdateMonIconFrame_806DA44(taskId, menuIndex, 0);
@@ -1647,17 +1645,17 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed)
ChangeLinkDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed);
- if (gSprites[spriteId].data0 == 0 || gSprites[spriteId].data0 == 2 || gSprites[spriteId].data0 == 3)
- sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1);
- if (gSprites[spriteId].data0 == 1 || gSprites[spriteId].data0 == 4 || gSprites[spriteId].data0 == 5)
- sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 4, 1);
- if (gSprites[spriteId].data0 == 7)
+ if (gSprites[spriteId].data[0] == 0 || gSprites[spriteId].data[0] == 2 || gSprites[spriteId].data[0] == 3)
+ sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 3, 1);
+ if (gSprites[spriteId].data[0] == 1 || gSprites[spriteId].data[0] == 4 || gSprites[spriteId].data[0] == 5)
+ sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 4, 1);
+ if (gSprites[spriteId].data[0] == 7)
sub_806BBEC(2);
ewram1B000.unk261 = 2;
- gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].x;
- gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].y;
+ gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data[0]].x;
+ gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data[0]].y;
}
else
{
@@ -1681,9 +1679,9 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed)
ChangeDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed);
}
- if (gSprites[spriteId].data0 < PARTY_SIZE)
+ if (gSprites[spriteId].data[0] < PARTY_SIZE)
{
- sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1);
+ sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 3, 1);
}
else
{
@@ -1692,13 +1690,13 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed)
ewram1B000.unk261 = 2;
- gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].x;
- gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].y;
+ gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data[0]].x;
+ gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data[0]].y;
}
- UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data0, 1);
+ UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data[0], 1);
- if (menuIndex != gSprites[spriteId].data0)
+ if (menuIndex != gSprites[spriteId].data[0])
{
PlaySE(5);
}
@@ -1712,47 +1710,47 @@ void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPres
switch (menuMovement)
{
case 2: // no movement
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 1: // moving up
if (menuIndex == 0) {
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
} else if (menuIndex == 7) {
- gSprites[spriteId].data0 = gPlayerPartyCount - 1;
+ gSprites[spriteId].data[0] = gPlayerPartyCount - 1;
} else {
s8 diff = directionPressed;
- gSprites[spriteId].data0 += diff;
+ gSprites[spriteId].data[0] += diff;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 3: // moving down
if (menuIndex == gPlayerPartyCount - 1) {
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
} else if (menuIndex == 7) {
- gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].data[0] = 0;
} else {
s8 diff = directionPressed;
- gSprites[spriteId].data0 += diff;
+ gSprites[spriteId].data[0] += diff;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 4: // moving right
if (gPlayerPartyCount > 1 && menuIndex == 0)
{
- if (gSprites[spriteId].data1 == 0)
- gSprites[spriteId].data1 = 1;
+ if (gSprites[spriteId].data[1] == 0)
+ gSprites[spriteId].data[1] = 1;
- gSprites[spriteId].data0 = gSprites[spriteId].data1;
+ gSprites[spriteId].data[0] = gSprites[spriteId].data[1];
}
break;
case 0: // moving left
// Only move the selection to the left side if one of the mons in the right-hand column are currently selected
nextIndex = menuIndex - 1;
if (nextIndex <= 4) {
- gSprites[spriteId].data0 = 0;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = menuIndex;
}
break;
}
@@ -1766,62 +1764,62 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio
switch(menuMovement)
{
case 2: // no movement
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 3: // moving down
if (menuIndex == 7) {
- gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].data[0] = 0;
} else if (menuIndex == gPlayerPartyCount - 1) {
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
} else {
s8 diff = directionPressed;
- gSprites[spriteId].data0 += diff;
+ gSprites[spriteId].data[0] += diff;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 1: // moving up
if (menuIndex == 0) {
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
} else if (menuIndex == 7) {
- gSprites[spriteId].data0 = gPlayerPartyCount - 1;
+ gSprites[spriteId].data[0] = gPlayerPartyCount - 1;
} else {
s8 diff = directionPressed;
- gSprites[spriteId].data0 += diff;
+ gSprites[spriteId].data[0] += diff;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 4: // moving right
if (menuIndex == 0) {
if (gPlayerPartyCount > 2) {
- u16 var1 = gSprites[spriteId].data1 - 2;
+ u16 var1 = gSprites[spriteId].data[1] - 2;
if (var1 > 1)
- gSprites[spriteId].data0 = 2;
+ gSprites[spriteId].data[0] = 2;
else
- gSprites[spriteId].data0 = gSprites[spriteId].data1;
+ gSprites[spriteId].data[0] = gSprites[spriteId].data[1];
}
}
else if (menuIndex == 1) {
if (gPlayerPartyCount > 4) {
- u16 var1 = gSprites[spriteId].data1 - 4;
+ u16 var1 = gSprites[spriteId].data[1] - 4;
if (var1 <= 1)
- gSprites[spriteId].data0 = gSprites[spriteId].data1;
+ gSprites[spriteId].data[0] = gSprites[spriteId].data[1];
else
- gSprites[spriteId].data0 = 4;
+ gSprites[spriteId].data[0] = 4;
}
}
break;
case 0: // moving left
var1 = menuIndex - 2;
if (var1 <= 1) {
- gSprites[spriteId].data0 = 0;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = menuIndex;
} else {
u8 var2 = menuIndex - 4;
if (var2 <= 1) {
- gSprites[spriteId].data0 = 1;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 1;
+ gSprites[spriteId].data[1] = menuIndex;
}
}
break;
@@ -1839,62 +1837,62 @@ void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 dire
switch (menuMovement)
{
case 2: // no movement
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 3: // moving down
if (menuIndex == 7) {
- gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].data[0] = 0;
} else {
while (menuIndex != PARTY_SIZE - 1) {
menuIndex++;
if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES))
{
- gSprites[spriteId].data0 = menuIndex;
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[0] = menuIndex;
+ gSprites[spriteId].data[1] = 0;
return;
}
}
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 1: // moving up
while (menuIndex != 0) {
menuIndex--;
if (menuIndex != PARTY_SIZE && GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES))
{
- gSprites[spriteId].data0 = menuIndex;
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[0] = menuIndex;
+ gSprites[spriteId].data[1] = 0;
return;
}
}
- gSprites[spriteId].data0 = 7;
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[0] = 7;
+ gSprites[spriteId].data[1] = 0;
break;
case 4: // moving right
if (menuIndex == 0) {
- var1 = gSprites[spriteId].data1 - 2;
+ var1 = gSprites[spriteId].data[1] - 2;
if (var1 > 1) {
if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) {
- gSprites[spriteId].data0 = 2;
+ gSprites[spriteId].data[0] = 2;
} else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) {
- gSprites[spriteId].data0 = 3;
+ gSprites[spriteId].data[0] = 3;
}
} else {
- gSprites[spriteId].data0 = 1;
+ gSprites[spriteId].data[0] = 1;
}
} else if (menuIndex == 1) {
- var1 = gSprites[spriteId].data1 - 4;
+ var1 = gSprites[spriteId].data[1] - 4;
if (var1 <= 1) {
- gSprites[spriteId].data0 = gSprites[spriteId].data1;
+ gSprites[spriteId].data[0] = gSprites[spriteId].data[1];
} else {
if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) {
- gSprites[spriteId].data0 = 4;
+ gSprites[spriteId].data[0] = 4;
} else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) {
- gSprites[spriteId].data0 = 5;
+ gSprites[spriteId].data[0] = 5;
}
}
}
@@ -1902,13 +1900,13 @@ void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 dire
case 0: // moving left
var2 = menuIndex - 2;
if (var2 <= 1) {
- gSprites[spriteId].data0 = 0;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = menuIndex;
} else {
var2 = menuIndex - 4;
if (var2 <= 1) {
- gSprites[spriteId].data0 = 1;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 1;
+ gSprites[spriteId].data[1] = menuIndex;
}
}
@@ -2167,7 +2165,7 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed)
u8 newMenuIndex3;
s8 menuMovement;
u8 spriteId = sub_806CA00(taskId);
- u8 menuIndex = gSprites[spriteId].data0;
+ u8 menuIndex = gSprites[spriteId].data[0];
UpdateMonIconFrame_806DA44(taskId, menuIndex, 0);
@@ -2189,60 +2187,60 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed)
switch (menuMovement)
{
case 2: // no movement
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 1: // moving up
if (menuIndex == 0) {
- gSprites[spriteId].data0 = 7;
+ gSprites[spriteId].data[0] = 7;
} else if (menuIndex == PARTY_SIZE) {
- gSprites[spriteId].data0 = gPlayerPartyCount - 1;
+ gSprites[spriteId].data[0] = gPlayerPartyCount - 1;
} else {
- gSprites[spriteId].data0 += directionPressed;
+ gSprites[spriteId].data[0] += directionPressed;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 3: // moving down
if (menuIndex == gPlayerPartyCount - 1) {
- gSprites[spriteId].data0 = 6;
+ gSprites[spriteId].data[0] = 6;
} else if (menuIndex == 7) {
- gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].data[0] = 0;
} else {
- gSprites[spriteId].data0 += directionPressed;
+ gSprites[spriteId].data[0] += directionPressed;
}
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[1] = 0;
break;
case 4: // moving right
if (gPlayerPartyCount > 1 && menuIndex == 0)
{
- if (gSprites[spriteId].data1 == 0) {
- gSprites[spriteId].data1 = 1;
+ if (gSprites[spriteId].data[1] == 0) {
+ gSprites[spriteId].data[1] = 1;
}
- gSprites[spriteId].data0 = gSprites[spriteId].data1;
+ gSprites[spriteId].data[0] = gSprites[spriteId].data[1];
}
break;
case 0: // moving left
newMenuIndex3 = menuIndex - 1;
if (newMenuIndex3 <= 4)
{
- gSprites[spriteId].data0 = 0;
- gSprites[spriteId].data1 = menuIndex;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = menuIndex;
}
break;
}
- gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].x;
- gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].y;
+ gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data[0]].x;
+ gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data[0]].y;
- newMenuIndex = gSprites[spriteId].data0;
- if (gSprites[spriteId].data0 < PARTY_SIZE)
+ newMenuIndex = gSprites[spriteId].data[0];
+ if (gSprites[spriteId].data[0] < PARTY_SIZE)
{
- sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data0 * 2], newMenuIndex, 3, 1);
+ sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data[0] * 2], newMenuIndex, 3, 1);
}
- else if (gSprites[spriteId].data0 == PARTY_SIZE)
+ else if (gSprites[spriteId].data[0] == PARTY_SIZE)
{
sub_806BB9C(2);
}
@@ -2253,10 +2251,10 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed)
ewram1B000.unk261 = 2;
- newMenuIndex2 = gSprites[spriteId].data0;
+ newMenuIndex2 = gSprites[spriteId].data[0];
UpdateMonIconFrame_806DA44(taskId, newMenuIndex2, 1);
- if (menuIndex != gSprites[spriteId].data0)
+ if (menuIndex != gSprites[spriteId].data[0])
{
PlaySE(5);
}
@@ -2267,7 +2265,7 @@ void SelectBattleTowerOKButton(u8 taskId)
{
u8 spriteId = sub_806CA00(taskId);
- u8 menuIndex = gSprites[spriteId].data0;
+ u8 menuIndex = gSprites[spriteId].data[0];
if (menuIndex != 6)
{
UpdateMonIconFrame_806DA44(taskId, menuIndex, 0);
@@ -2281,8 +2279,8 @@ void SelectBattleTowerOKButton(u8 taskId)
sub_806BBEC(1);
}
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].data0 = 6;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[0] = 6;
gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].x;
gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].y;
@@ -2295,8 +2293,8 @@ void SelectBattleTowerOKButton(u8 taskId)
void sub_806C92C(u8 spriteId)
{
- u8 menuIndex1 = gSprites[spriteId].data0;
- u8 menuIndex2 = gSprites[spriteId].data1;
+ u8 menuIndex1 = gSprites[spriteId].data[0];
+ u8 menuIndex2 = gSprites[spriteId].data[1];
if (!IsDoubleBattle())
{
@@ -2321,14 +2319,14 @@ void sub_806C92C(u8 spriteId)
}
}
- gSprites[spriteId].data1 = menuIndex2;
+ gSprites[spriteId].data[1] = menuIndex2;
}
void sub_806C994(u8 taskId, u8 b)
{
u8 spriteId = sub_806CA00(taskId);
- gSprites[spriteId].data0 = b;
+ gSprites[spriteId].data[0] = b;
sub_806C92C(spriteId);
}
@@ -2338,7 +2336,7 @@ void sub_806C9C4(u8 taskId, u8 spriteId)
gSprites[spriteId].pos1.x = gSprites[spriteId2].pos1.x;
gSprites[spriteId].pos1.y = gSprites[spriteId2].pos1.y;
- gSprites[spriteId].data0 = gSprites[spriteId2].data0;
+ gSprites[spriteId].data[0] = gSprites[spriteId2].data[0];
}
u8 sub_806CA00(u8 taskId)
@@ -2355,7 +2353,7 @@ void sub_806CA18(u8 taskId, u8 b)
u8 sub_806CA38(u8 taskId)
{
u8 spriteId = sub_806CA00(taskId);
- return gSprites[spriteId].data0;
+ return gSprites[spriteId].data[0];
}
void SetupDefaultPartyMenuSwitchPokemon(u8 taskId)
@@ -2371,7 +2369,7 @@ void SetupDefaultPartyMenuSwitchPokemon(u8 taskId)
PrintPartyMenuPromptText(ewram1B000_alt.unk272, 0);
- sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 6, 0);
+ sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data[0] * 2], gSprites[ewram01000.unk1].data[0], 6, 0);
ewram1B000.unk261 = 2;
}
@@ -2383,13 +2381,13 @@ void ChangePartyMenuSwitchPokemonSelection(u8 taskId, s16 menuDirectionPressed)
ChangePartyMenuSelection(taskId, menuDirectionPressed);
- if (sprite1->data0 != sprite2->data0)
+ if (sprite1->data[0] != sprite2->data[0])
{
- sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 1);
+ sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 1);
}
else
{
- sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 0);
+ sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 0);
}
}
@@ -2436,15 +2434,15 @@ void sub_806CC2C(u8 taskId)
void sub_806CC74(u8 taskId)
{
- sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk2].data0 * 2], gSprites[ewram01000.unk2].data0, 3, 1);
- sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 3, 0);
+ sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk2].data[0] * 2], gSprites[ewram01000.unk2].data[0], 3, 1);
+ sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data[0] * 2], gSprites[ewram01000.unk1].data[0], 3, 0);
sub_806CC2C(taskId);
}
void sub_806CCE4()
{
- u8 monIndex1 = gSprites[ewram01000.unk1].data0;
- u8 monIndex2 = gSprites[ewram01000.unk2].data0;
+ u8 monIndex1 = gSprites[ewram01000.unk1].data[0];
+ u8 monIndex2 = gSprites[ewram01000.unk2].data[0];
if (monIndex1 <= 5)
{
@@ -2465,8 +2463,8 @@ void sub_806CD44(u8 taskId)
void sub_806CD5C(u8 taskId)
{
- u8 monIndex1 = gSprites[ewram01000.unk1].data0;
- u8 monIndex2 = gSprites[ewram01000.unk2].data0;
+ u8 monIndex1 = gSprites[ewram01000.unk1].data[0];
+ u8 monIndex2 = gSprites[ewram01000.unk2].data[0];
if (monIndex1 == monIndex2 || monIndex1 == 7 || monIndex2 == 7)
{
@@ -2496,8 +2494,8 @@ void sub_806CD5C(u8 taskId)
var1 = ewram01000.unk5;
if (!var1)
{
- gSprites[ewram01000.unk3].data0 = -8;
- gSprites[ewram01000.unk3].data2 = -0xA8;
+ gSprites[ewram01000.unk3].data[0] = -8;
+ gSprites[ewram01000.unk3].data[2] = -0xA8;
ewram01000.unk8 = var1;
ewram01000.unkA = 11;
@@ -2506,8 +2504,8 @@ void sub_806CD5C(u8 taskId)
}
else
{
- gSprites[ewram01000.unk3].data0 = 8;
- gSprites[ewram01000.unk3].data2 = 0xA8;
+ gSprites[ewram01000.unk3].data[0] = 8;
+ gSprites[ewram01000.unk3].data[2] = 0xA8;
ewram01000.unk8 = 11;
ewram01000.unkA = 11;
@@ -2517,8 +2515,8 @@ void sub_806CD5C(u8 taskId)
gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C;
- gSprites[ewram01000.unk4].data0 = 8;
- gSprites[ewram01000.unk4].data2 = 0xA8;
+ gSprites[ewram01000.unk4].data[0] = 8;
+ gSprites[ewram01000.unk4].data[2] = 0xA8;
gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C;
gSprites[ewram01000.unk3].callback(&gSprites[ewram01000.unk3]);
@@ -2539,7 +2537,7 @@ void sub_806CF04(void)
SwapValues_s16(&gSprites[ewram01000.unk3].pos1.x, &gSprites[ewram01000.unk4].pos1.x);
SwapValues_s16(&gSprites[ewram01000.unk3].pos1.y, &gSprites[ewram01000.unk4].pos1.y);
SwapValues_s16(&gSprites[ewram01000.unk3].pos2.x, &gSprites[ewram01000.unk4].pos2.x);
- SwapValues_s16(&gSprites[ewram01000.unk3].data0, &gSprites[ewram01000.unk4].data0);
+ SwapValues_s16(&gSprites[ewram01000.unk3].data[0], &gSprites[ewram01000.unk4].data[0]);
gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C;
gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C;
@@ -2550,7 +2548,7 @@ void sub_806CF04(void)
{
asm(".syntax unified\n\
push {r4,r5,lr}\n\
- ldr r4, _0806CF94 @ =0x02001000\n\
+ ldr r4, _0806CF94 @ =gSharedMem + 0x1000\n\
ldrb r1, [r4, 0x3]\n\
lsls r0, r1, 4\n\
adds r0, r1\n\
@@ -2618,7 +2616,7 @@ void sub_806CF04(void)
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
-_0806CF94: .4byte 0x02001000\n\
+_0806CF94: .4byte gSharedMem + 0x1000\n\
_0806CF98: .4byte gSprites + 0x20\n\
_0806CF9C: .4byte SpriteCB_sub_806D37C\n\
.syntax divided\n");
@@ -2731,7 +2729,7 @@ void sub_806D198(u8 taskId)
gSprites[ewram01000.unk4].pos2.y = 0;
gSprites[ewram01000.unk4].callback = UpdateMonIconFrame_806DA38;
- spriteId = GetMonIconSpriteId(ewram01000.unk0, gSprites[ewram01000.unk2].data0);
+ spriteId = GetMonIconSpriteId(ewram01000.unk0, gSprites[ewram01000.unk2].data[0]);
gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C;
SwapPokemon(&gPlayerParty[ewram01000.unk5], &gPlayerParty[ewram01000.unk6]);
@@ -2754,15 +2752,15 @@ void SpriteCB_sub_806D37C(struct Sprite *sprite)
{
UpdateMonIconFrame(sprite);
- if (sprite->pos2.x == sprite->data2)
+ if (sprite->pos2.x == sprite->data[2])
{
- sprite->data0 *= -1;
- sprite->data2 = 0;
+ sprite->data[0] *= -1;
+ sprite->data[2] = 0;
sprite->callback = UpdateMonIconFrame_806DA38;
}
else
{
- sprite->pos2.x += sprite->data0;
+ sprite->pos2.x += sprite->data[0];
}
}
@@ -2804,8 +2802,8 @@ void sub_806D4AC(u8 taskId, u16 species, u8 c)
u8 monIndex = c + 3;
u8 spriteId = GetMonIconSpriteId(taskId, monIndex);
- gSprites[spriteId].data0 = -8;
- gSprites[spriteId].data2 = gTasks[taskId].data[0] * -8;
+ gSprites[spriteId].data[0] = -8;
+ gSprites[spriteId].data[2] = gTasks[taskId].data[0] * -8;
gSprites[spriteId].callback = SpriteCB_sub_806D37C;
}
}
@@ -2855,7 +2853,7 @@ void sub_806D5B8(u8 monIndex)
ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom);
var1 = 0;
- CpuFastSet(&var1, (void *)(OBJ_VRAM1 + monIndex * 0x400), 0x1000100);
+ CpuFastSet(&var1, OBJ_VRAM1 + monIndex * 0x400, 0x1000100);
}
void sub_806D668(u8 monIndex)
@@ -2869,7 +2867,7 @@ void sub_806D668(u8 monIndex)
ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom);
var1 = 0;
- CpuFastSet(&var1, (void *)(OBJ_VRAM1 + 0x300 + monIndex * 0x400), 0x1000040);
+ CpuFastSet(&var1, OBJ_VRAM1 + 0x300 + monIndex * 0x400, 0x1000040);
}
bool8 LoadPartyMenuGraphics(u8 a)
@@ -3037,7 +3035,7 @@ void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c)
{
spriteId = GetMonIconSpriteId(taskId, monIndex);
gSprites[spriteId].pos2.y = 0;
- gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].data[0] = 0;
if (!c)
{
@@ -3059,7 +3057,7 @@ void LoadHeldItemIconGraphics(void)
void SpriteCB_HeldItemIcon(struct Sprite *sprite)
{
- u8 data7 = sprite->data7;
+ u8 data7 = sprite->data[7];
if (gSprites[data7].invisible)
{
sprite->invisible = 1;
@@ -3083,7 +3081,7 @@ void CreateHeldItemIcon(u8 a, u8 b)
gSprites[spriteId].pos2.x = 4;
gSprites[spriteId].pos2.y = 10;
gSprites[spriteId].callback = SpriteCB_HeldItemIcon;
- gSprites[spriteId].data7 = a;
+ gSprites[spriteId].data[7] = a;
StartSpriteAnim(&gSprites[spriteId], b);
gSprites[spriteId].callback(&gSprites[spriteId]);
@@ -3140,8 +3138,8 @@ void CreateHeldItemIcons_806DC34(u8 taskId)
gSprites[heldItemSpriteId].pos2.x = 4;
gSprites[heldItemSpriteId].pos2.y = 10;
- gSprites[heldItemSpriteId].data7 = monIconSpriteId;
- gSprites[monIconSpriteId].data7 = heldItemSpriteId;
+ gSprites[heldItemSpriteId].data[7] = monIconSpriteId;
+ gSprites[monIconSpriteId].data[7] = heldItemSpriteId;
SetHeldItemIconVisibility(taskId, i);
gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]);
@@ -3160,8 +3158,8 @@ void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item)
gSprites[heldItemSpriteId].pos2.x = 4;
gSprites[heldItemSpriteId].pos2.y = 10;
- gSprites[heldItemSpriteId].data7 = monIconSpriteId;
- gSprites[monIconSpriteId].data7 = heldItemSpriteId;
+ gSprites[heldItemSpriteId].data[7] = monIconSpriteId;
+ gSprites[monIconSpriteId].data[7] = heldItemSpriteId;
if (!item)
{
@@ -3276,7 +3274,7 @@ _0806DD78: .4byte gSprites\n\
void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite)
{
- u8 spriteId = sprite->data7;
+ u8 spriteId = sprite->data[7];
sprite->pos1.x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
sprite->pos1.y = gSprites[spriteId].pos1.y;
@@ -3336,7 +3334,7 @@ void SetMonIconSpriteId(u8 taskId, u8 monIndex, u8 spriteId)
u16 GetMonHeldItemIconSpriteId(u8 taskId, u8 monIndex)
{
u8 spriteId = GetMonIconSpriteId(taskId, monIndex);
- u8 retVal = gSprites[spriteId].data7;
+ u8 retVal = gSprites[spriteId].data[7];
return retVal;
}
@@ -3460,7 +3458,7 @@ void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer)
u32 var1 = 0;
CpuFastSet(&var1, gTileBuffer, 0x1000100);
sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gTileBuffer, nameBuffer);
- CpuFastSet(gTileBuffer, (void *)(OBJ_VRAM1 + (monIndex * 0x400)), 128);
+ CpuFastSet(gTileBuffer, OBJ_VRAM1 + (monIndex * 0x400), 128);
}
void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon)
@@ -3570,7 +3568,7 @@ void PartyMenuDoPrintLevel(u8 monIndex, u8 menuLayout, u8 level)
var1 = 0;
CpuFastSet(&var1, gUnknown_02039460, 0x1000020);
sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1);
- CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x200 + (monIndex * 0x400)), 32);
+ CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x200 + (monIndex * 0x400), 32);
}
void PartyMenuPrintLevel(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon)
@@ -3664,7 +3662,7 @@ void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP)
CpuFastSet(&var, gUnknown_02039460, 0x1000040);
sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1);
- CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64);
+ CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x300 + (monIndex * 0x400), 64);
}
void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon)
@@ -4294,7 +4292,7 @@ void sub_806F3FC(u8 taskId)
{
if (!gPaletteFade.active)
{
- sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8);
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8);
DestroyTask(taskId);
}
}
@@ -4316,7 +4314,7 @@ void TaughtMove(u8 taskId)
u16 r4;
gTasks[taskId].func = TaskDummy;
- sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508);
moveIndex = sub_809FA30();
r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex);
GetMonNickname(ewram1C000.pokemon, gStringVar1);
@@ -4342,7 +4340,7 @@ void StopTryingToTeachMove_806F588(u8 taskId)
if (!gPaletteFade.active)
{
gTasks[taskId].func = TaskDummy;
- sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508);
StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo);
sub_806E834(gStringVar4, 1);
@@ -4457,7 +4455,7 @@ void sub_806F8AC(u8 taskId)
ewram1B000.unk261 = 2;
sub_806E834(gStringVar4, 1);
sp14 += sp0.unk4;
- SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14);
+ SetMonData(ewram1C000.pokemon, MON_DATA_HP, &sp14);
RemoveBagItem(ewram1C000.unk6, 1);
sub_8032638();
gTasks[taskId].func = sub_806FB44;
@@ -4478,9 +4476,9 @@ void sub_806FA18(u8 taskId)
PlaySE(SE_KAIFUKU);
ewram1C000.unkC = 0;
gTasks[taskId].data[11] -= gTasks[taskId].data[12];
- SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]);
+ SetMonData(ewram1C000.pokemon, MON_DATA_HP, &gTasks[taskId].data[11]);
SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon);
- ewram1C000.unk5 = gSprites[ewram01000.unk2].data0;
+ ewram1C000.unk5 = gSprites[ewram01000.unk2].data[0];
ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5];
gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP);
gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP);
@@ -5035,7 +5033,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) {
movs r2, 0x13\n\
mov r8, r2\n\
_0807086C:\n\
- ldr r1, _08070930 @ =0x0201c000\n\
+ ldr r1, _08070930 @ =gSharedMem + 0x1C000\n\
ldr r0, [r1]\n\
ldr r1, _08070934 @ =StatDataTypes\n\
adds r1, r7, r1\n\
@@ -5043,7 +5041,7 @@ _0807086C:\n\
bl GetMonData\n\
adds r1, r7, 0x6\n\
lsls r1, 1\n\
- ldr r2, _08070938 @ =0x0201b264\n\
+ ldr r2, _08070938 @ =gSharedMem + 0x1B264\n\
adds r1, r2, r1\n\
strh r0, [r1]\n\
lsls r6, r7, 1\n\
@@ -5125,9 +5123,9 @@ _0807086C:\n\
bx r0\n\
.align 2, 0\n\
_0807092C: .4byte gStringVar1\n\
-_08070930: .4byte 0x0201c000\n\
+_08070930: .4byte gSharedMem + 0x1C000\n\
_08070934: .4byte StatDataTypes\n\
-_08070938: .4byte 0x0201b264\n\
+_08070938: .4byte gSharedMem + 0x1B264\n\
_0807093C: .4byte StatNames\n\
_08070940: .4byte gOtherText_TallPlusAndRightArrow\n\
.syntax divided\n");
@@ -5645,7 +5643,7 @@ _08070F8A:\n\
void unref_sub_8070F90(void)
{
- FlagSet(SYS_POKEDEX_GET);
- FlagSet(SYS_POKEMON_GET);
- FlagSet(SYS_POKENAV_GET);
+ FlagSet(FLAG_SYS_POKEDEX_GET);
+ FlagSet(FLAG_SYS_POKEMON_GET);
+ FlagSet(FLAG_SYS_POKENAV_GET);
}
diff --git a/src/field/pc_screen_effect.c b/src/field/pc_screen_effect.c
new file mode 100644
index 000000000..364fca0aa
--- /dev/null
+++ b/src/field/pc_screen_effect.c
@@ -0,0 +1,128 @@
+#include "global.h"
+#include "main.h"
+#include "palette.h"
+#include "sprite.h"
+
+struct UnkStruct
+{
+ /*0x00*/ u16 tileTag;
+ /*0x02*/ u16 paletteTag;
+ /*0x04*/ u16 unk04;
+ /*0x06*/ u16 unk06;
+ /*0x08*/ u16 unk08;
+ /*0x0A*/ u16 unk0A;
+ /*0x0C*/ s16 unk0C;
+ /*0x10*/ u32 selectedPalettes;
+};
+
+void sub_80C603C(void);
+void sub_80C6078(void);
+void sub_80C60CC(struct Sprite *);
+void sub_80C6130(struct Sprite *);
+void sub_80C61B0(IntrFunc);
+void ClearGpuRegBits(void);
+
+extern const struct OamData gOamData_83D18D8;
+
+extern const union AnimCmd *const gSpriteAnimTable_83D18E8[];
+
+extern const u16 gUnknownPal_083D18EC[16];
+
+extern const u8 gUnknownGfx_083D190C[128];
+
+extern struct UnkStruct *gUnknown_020387EC;
+
+const struct SpriteSheet gUnknown_083D1898 = { gUnknownGfx_083D190C, sizeof(gUnknownGfx_083D190C), 0 };
+
+const struct SpritePalette gUnknown_083D18A0 = { gUnknownPal_083D18EC, 0 };
+
+const struct SpriteTemplate gSpriteTemplate_83D18A8 =
+{
+ 0,
+ 0,
+ &gOamData_83D18D8,
+ gSpriteAnimTable_83D18E8,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_80C60CC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D18C0 =
+{
+ 0,
+ 0,
+ &gOamData_83D18D8,
+ gSpriteAnimTable_83D18E8,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_80C6130,
+};
+
+void sub_80C5CD4(struct UnkStruct *unkStruct)
+{
+ u16 i;
+
+ struct SpriteSheet sprSheet = gUnknown_083D1898;
+ struct SpritePalette sprPalette = gUnknown_083D18A0;
+ struct SpriteTemplate sprTemplate = gSpriteTemplate_83D18A8;
+
+ sprSheet.tag = unkStruct->tileTag;
+ sprTemplate.tileTag = unkStruct->tileTag;
+ sprPalette.tag = unkStruct->paletteTag;
+ sprTemplate.paletteTag = unkStruct->paletteTag;
+
+ LoadSpriteSheet(&sprSheet);
+ LoadSpritePalette(&sprPalette);
+
+ unkStruct->unk0C = 1;
+ unkStruct->unk0A = 0;
+ unkStruct->unk08 = 0;
+ unkStruct->selectedPalettes = ~(0x10000 << IndexOfSpritePaletteTag(unkStruct->paletteTag)) & 0xFFFF0000;
+
+ if (unkStruct->unk04 == 0)
+ unkStruct->unk04 = 16;
+
+ if (unkStruct->unk06 == 0)
+ unkStruct->unk06 = 20;
+
+ gUnknown_020387EC = unkStruct;
+
+ for (i = 0; i < 8; i++)
+ {
+ u8 spriteId = CreateSprite(&sprTemplate, 32 * i + 8, 80, 0);
+ if (spriteId == MAX_SPRITES)
+ break;
+ gSprites[spriteId].data[0] = (i < 4) ? -unkStruct->unk04 : unkStruct->unk04;
+ }
+
+ REG_BLDCNT = 191;
+ REG_BLDY = 16;
+}
+
+bool8 sub_80C5DCC(void)
+{
+ if (gUnknown_020387EC->unk08 == 0)
+ {
+ BlendPalettes(gUnknown_020387EC->selectedPalettes, 0x10, 0xFFFF);
+ sub_80C61B0(sub_80C603C);
+ gUnknown_020387EC->unk08++;
+ }
+
+ if (gUnknown_020387EC->unk0A < 8)
+ return FALSE;
+
+ gUnknown_020387EC->unk0C += gUnknown_020387EC->unk06;
+
+ if (gUnknown_020387EC->unk0C >= 80)
+ {
+ gUnknown_020387EC->unk0C = 80;
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+ ClearGpuRegBits();
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
diff --git a/src/field/player_pc.c b/src/field/player_pc.c
index 83e6dd221..d92d13ce4 100644
--- a/src/field/player_pc.c
+++ b/src/field/player_pc.c
@@ -5,7 +5,7 @@
#include "field_weather.h"
#include "item.h"
#include "item_menu.h"
-#include "items.h"
+#include "constants/items.h"
#include "main.h"
#include "menu.h"
#include "menu_helpers.h"
@@ -15,11 +15,12 @@
#include "string_util.h"
#include "strings.h"
#include "task.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "name_string_util.h"
#include "mail.h"
#include "overworld.h"
#include "player_pc.h"
+#include "ewram.h"
extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16);
extern void DoPlayerPCDecoration(u8);
@@ -32,7 +33,7 @@ extern u8 sub_807D770(void);
extern void sub_808B020(void);
extern void sub_80F944C(void);
-static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL;
+static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
static u8 gPcItemMenuOptionsNum;
@@ -211,14 +212,14 @@ void NewGameInitPCItems(void)
void BedroomPC(void)
{
- gPcItemMenuOptionOrder = (u8 *)gBedroomPC_OptionOrder;
+ gPcItemMenuOptionOrder = gBedroomPC_OptionOrder;
gPcItemMenuOptionsNum = 4;
DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0);
}
void PlayerPC(void)
{
- gPcItemMenuOptionOrder = (u8 *)gPlayerPC_OptionOrder;
+ gPcItemMenuOptionOrder = gPlayerPC_OptionOrder;
gPcItemMenuOptionsNum = 3;
DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0);
}
@@ -271,14 +272,14 @@ static void PlayerPC_ItemStorage(u8 taskId)
static void PlayerPC_Mailbox(u8 taskId)
{
MenuZeroFillWindowRect(0, 0, 10, 9);
- gMailboxInfo.count = GetMailboxMailCount();
+ eMailboxInfo.count = GetMailboxMailCount();
- if (gMailboxInfo.count == 0)
+ if (eMailboxInfo.count == 0)
DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0);
else
{
- gMailboxInfo.cursorPos = 0;
- gMailboxInfo.itemsAbove = 0;
+ eMailboxInfo.cursorPos = 0;
+ eMailboxInfo.itemsAbove = 0;
Mailbox_UpdateMailList();
ItemStorage_SetItemAndMailCount(taskId);
Mailbox_DrawMailboxMenu(taskId);
@@ -442,10 +443,10 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId)
else
NUM_PAGE_ITEMS = NUM_ITEMS + 1; // there are not enough items to fill a full page; take the # of items and add 1 for the cancel button.
- if (gMailboxInfo.count > 7)
- gMailboxInfo.pageItems = 8;
+ if (eMailboxInfo.count > 7)
+ eMailboxInfo.pageItems = 8;
else
- gMailboxInfo.pageItems = gMailboxInfo.count + 1;
+ eMailboxInfo.pageItems = eMailboxInfo.count + 1;
}
static void ItemStorage_ProcessInput(u8 taskId)
@@ -1048,8 +1049,8 @@ static void Mailbox_UpdateMailList(void)
static void Mailbox_DrawMailList(u8 taskId) // taskId is unused
{
u16 yCoord = 0;
- u16 i = gMailboxInfo.itemsAbove;
- register struct MailboxStruct *tempMailbox asm("r1") = &gMailboxInfo;
+ u16 i = eMailboxInfo.itemsAbove;
+ register struct MailboxStruct *tempMailbox asm("r1") = &eMailboxInfo;
register struct MailboxStruct *mailbox asm("r6");
if(i < i + tempMailbox->pageItems)
@@ -1064,7 +1065,7 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused
if(i != mailbox->count)
{
- StringCopy(gStringVar1, (u8 *)gSaveBlock1.mail[i + 6].playerName);
+ StringCopy(gStringVar1, gSaveBlock1.mail[i + 6].playerName);
SanitizeNameString(gStringVar1);
MenuPrint(gStringVar1, 0x15, yCoord + 2);
}
@@ -1076,10 +1077,10 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused
}
beforeLabel:
- if(i - gMailboxInfo.itemsAbove != 8)
+ if(i - eMailboxInfo.itemsAbove != 8)
MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12);
- switch(gMailboxInfo.itemsAbove)
+ switch(eMailboxInfo.itemsAbove)
{
default:
CreateVerticalScrollIndicators(0, 0xC8, 8);
@@ -1092,7 +1093,7 @@ weirdCase:
break;
}
- if(gMailboxInfo.itemsAbove + gMailboxInfo.pageItems <= gMailboxInfo.count)
+ if(eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count)
CreateVerticalScrollIndicators(1, 0xC8, 0x98);
else
DestroyVerticalScrollIndicator(1);
@@ -1107,7 +1108,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId)
MenuPrint(gPCText_Mailbox, 1, 1);
MenuDrawTextWindow(0x14, 0, 0x1D, 0x13);
Mailbox_DrawMailList(taskId);
- InitMenu(0, 0x15, 2, gMailboxInfo.pageItems, gMailboxInfo.cursorPos, 8);
+ InitMenu(0, 0x15, 2, eMailboxInfo.pageItems, eMailboxInfo.cursorPos, 8);
}
// Mailbox_ProcessInput
@@ -1117,29 +1118,29 @@ static void Mailbox_ProcessInput(u8 taskId)
{
if(gMain.newAndRepeatedKeys & DPAD_UP)
{
- if(gMailboxInfo.cursorPos != 0)
+ if(eMailboxInfo.cursorPos != 0)
{
PlaySE(SE_SELECT);
- gMailboxInfo.cursorPos = MoveMenuCursor(-1);
+ eMailboxInfo.cursorPos = MoveMenuCursor(-1);
}
- else if(gMailboxInfo.itemsAbove != 0)
+ else if(eMailboxInfo.itemsAbove != 0)
{
PlaySE(SE_SELECT);
- gMailboxInfo.itemsAbove--;
+ eMailboxInfo.itemsAbove--;
Mailbox_DrawMailList(taskId);
}
}
else if(gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if(gMailboxInfo.cursorPos != gMailboxInfo.pageItems - 1)
+ if(eMailboxInfo.cursorPos != eMailboxInfo.pageItems - 1)
{
PlaySE(SE_SELECT);
- gMailboxInfo.cursorPos = MoveMenuCursor(1);
+ eMailboxInfo.cursorPos = MoveMenuCursor(1);
}
- else if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos != gMailboxInfo.count)
+ else if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos != eMailboxInfo.count)
{
PlaySE(SE_SELECT);
- gMailboxInfo.itemsAbove++;
+ eMailboxInfo.itemsAbove++;
Mailbox_DrawMailList(taskId);
}
}
@@ -1148,7 +1149,7 @@ static void Mailbox_ProcessInput(u8 taskId)
HandleDestroyMenuCursors();
PlaySE(SE_SELECT);
- if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos == gMailboxInfo.count)
+ if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos == eMailboxInfo.count)
{
Mailbox_TurnOff(taskId);
}
@@ -1177,7 +1178,7 @@ static void Mailbox_CloseScrollIndicators(void)
static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
{
MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
- StringCopy(gStringVar1, gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos].playerName);
+ StringCopy(gStringVar1, gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos].playerName);
SanitizeNameString(gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_WhatWillYouDoMail);
DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions, 0);
@@ -1237,7 +1238,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId)
{
if(!gPaletteFade.active)
{
- HandleReadMail(&gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1);
+ HandleReadMail(&gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1);
DestroyTask(taskId);
}
}
@@ -1276,7 +1277,7 @@ static void Mailbox_DrawYesNoBeforeMove(u8 taskId)
static void Mailbox_DoMailMoveToBag(u8 taskId)
{
- struct MailStruct *mail = &gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos];
+ struct MailStruct *mail = &gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos];
MenuZeroFillWindowRect(0x14, 8, 0x1A, 0xD);
@@ -1290,10 +1291,10 @@ static void Mailbox_DoMailMoveToBag(u8 taskId)
ClearMailStruct(mail);
Mailbox_UpdateMailList();
- gMailboxInfo.count--;
+ eMailboxInfo.count--;
- if(gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0)
- gMailboxInfo.itemsAbove--;
+ if(eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0)
+ eMailboxInfo.itemsAbove--;
ItemStorage_SetItemAndMailCount(taskId);
}
@@ -1329,13 +1330,13 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu
static void Mailbox_UpdateMailListAfterDeposit(void)
{
u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
- u8 oldCount = gMailboxInfo.count;
+ u8 oldCount = eMailboxInfo.count;
- gMailboxInfo.count = GetMailboxMailCount();
+ eMailboxInfo.count = GetMailboxMailCount();
Mailbox_UpdateMailList();
- if(oldCount != gMailboxInfo.count && gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) // did the count update?
- gMailboxInfo.itemsAbove--;
+ if(oldCount != eMailboxInfo.count && eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) // did the count update?
+ eMailboxInfo.itemsAbove--;
ItemStorage_SetItemAndMailCount(taskId);
Mailbox_DrawMailboxMenu(taskId);
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c
index 34f4ffa35..4a904fbb1 100644
--- a/src/field/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -21,12 +21,13 @@
#include "item_menu.h"
#include "item_use.h"
#include "item.h"
-#include "items.h"
+#include "constants/items.h"
#include "sound.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "safari_zone.h"
#include "event_data.h"
#include "pokeblock.h"
+#include "ewram.h"
struct UnkPokeblockStruct
{
@@ -36,9 +37,6 @@ struct UnkPokeblockStruct
u8 unk3;
};
-extern u8 ewram[];
-
-
static EWRAM_DATA u8 gUnknown_02039244 = 0;
static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0};
static EWRAM_DATA u8 gUnknown_0203924C = 0;
@@ -301,7 +299,7 @@ static bool8 sub_810B6C0(void)
case 10:
if (MultistepInitMenuWindowContinue())
{
- ewram[0x1ffff] = 0;
+ ewram1FFFF = 0;
gMain.state++;
}
break;
@@ -319,7 +317,7 @@ static bool8 sub_810B6C0(void)
gMain.state++;
break;
case 13:
- ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0);
+ ewram1FFFE = sub_810BA50(0x38, 0x40, 0);
gMain.state++;
break;
case 14:
@@ -371,27 +369,27 @@ void sub_810B96C(void)
static bool8 sub_810B998(void)
{
- switch (ewram[0x1ffff])
+ switch (ewram1FFFF)
{
case 0:
- LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2));
- ewram[0x1ffff]++;
+ LZDecompressVram(gMenuPokeblock_Gfx, BG_CHAR_ADDR(2));
+ ewram1FFFF++;
break;
case 1:
LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]);
- ewram[0x1ffff]++;
+ ewram1FFFF++;
break;
case 2:
LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0);
- ewram[0x1ffff]++;
+ ewram1FFFF++;
break;
case 3:
LoadCompressedObjectPic(&gUnknown_083F7F74);
- ewram[0x1ffff]++;
+ ewram1FFFF++;
break;
case 4:
LoadCompressedObjectPalette(&gUnknown_083F7F7C);
- ewram[0x1ffff] = 0;
+ ewram1FFFF = 0;
return TRUE;
}
return FALSE;
@@ -613,7 +611,7 @@ static void sub_810BDAC(bool8 flag)
static void sub_810BF38(bool8 flag)
{
PlaySE(SE_SELECT);
- gSprites[ewram[0x1fffe]].callback = sub_810C8D4;
+ gSprites[ewram1FFFE].callback = sub_810C8D4;
sub_810BDAC(flag);
}
@@ -666,7 +664,7 @@ static void sub_810BF7C(u8 taskId)
PlaySE(SE_SELECT);
if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2)
{
- gScriptResult = 0xffff;
+ gSpecialVar_Result = 0xffff;
sub_810C31C(taskId);
}
else
@@ -677,7 +675,7 @@ static void sub_810BF7C(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- gScriptResult = 0xffff;
+ gSpecialVar_Result = 0xffff;
sub_810C31C(taskId);
}
}
@@ -802,7 +800,7 @@ static void sub_810C31C(u8 taskId)
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
if (gUnknown_02039244 > 1)
{
- gScriptItemId = ITEM_NONE;
+ gSpecialVar_ItemId = ITEM_NONE;
}
gTasks[taskId].func = sub_810C2C8;
}
@@ -818,7 +816,7 @@ static void sub_810C368(u8 taskId)
MenuDrawTextWindow(7, v0 + 4, 13, 11);
PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758);
InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5);
- gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1;
+ gSpecialVar_ItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1;
gTasks[taskId].func = sub_810C40C;
}
@@ -857,7 +855,7 @@ static void sub_810C4C4(u8 taskId)
if (!gPaletteFade.active)
{
sub_810C2B0();
- sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C);
+ sub_8136130(&gSaveBlock1.pokeblocks[gSpecialVar_ItemId], sub_810B96C);
DestroyTask(taskId);
}
}
@@ -941,21 +939,21 @@ static void sub_810C748(u8 taskId)
static void sub_810C788(u8 taskId)
{
- s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]);
- StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
- PokeblockClearIfExists(gScriptItemId);
- gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8;
+ s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gSpecialVar_ItemId]);
+ StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]);
+ PokeblockClearIfExists(gSpecialVar_ItemId);
+ gSpecialVar_ItemId = gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color << 8;
if (v0 == 0)
{
- gScriptItemId += 1;
+ gSpecialVar_ItemId += 1;
}
if (v0 > 0)
{
- gScriptItemId += 2;
+ gSpecialVar_ItemId += 2;
}
if (v0 < 0)
{
- gScriptItemId += 3;
+ gSpecialVar_ItemId += 3;
}
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_810C2C8;
@@ -963,35 +961,35 @@ static void sub_810C788(u8 taskId)
static void sub_810C854(u8 taskId)
{
- SafariZoneActivatePokeblockFeeder(gScriptItemId);
- StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
- gScriptResult = gScriptItemId;
- PokeblockClearIfExists(gScriptItemId);
+ SafariZoneActivatePokeblockFeeder(gSpecialVar_ItemId);
+ StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]);
+ gSpecialVar_Result = gSpecialVar_ItemId;
+ PokeblockClearIfExists(gSpecialVar_ItemId);
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_810C2C8;
}
static void sub_810C8D4(struct Sprite *sprite)
{
- if (sprite->data0 > 1)
+ if (sprite->data[0] > 1)
{
- sprite->data0 = 0;
+ sprite->data[0] = 0;
}
- switch (sprite->data0)
+ switch (sprite->data[0])
{
case 0:
sprite->oam.affineMode = 1;
sprite->affineAnims = gSpriteAffineAnimTable_83F7F70;
InitSpriteAffineAnim(sprite);
- sprite->data0 = 1;
- sprite->data1 = 0;
+ sprite->data[0] = 1;
+ sprite->data[1] = 0;
break;
case 1:
- if (++sprite->data1 > 11)
+ if (++sprite->data[1] > 11)
{
sprite->oam.affineMode = 0;
- sprite->data0 = 0;
- sprite->data1 = 0;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
FreeOamMatrix(sprite->oam.matrixNum);
sprite->callback = SpriteCallbackDummy;
}
diff --git a/src/field/pokenav.c b/src/field/pokenav.c
deleted file mode 100644
index 21d7bb4e3..000000000
--- a/src/field/pokenav.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "global.h"
-#include "main.h"
-#include "pokenav.h"
-#include "battle.h"
-#include "data2.h"
-#include "de_rom_8040FE0.h"
-#include "string_util.h"
-
-void sub_80F700C(u8 *arg0, u16 arg1) {
- struct Trainer *trainer;
- u8 *ptr;
-
-#if ENGLISH
- trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0];
-#elif GERMAN
- const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0;
- trainer = (struct Trainer *) &gTrainers[trainerIndex];
-#endif
-
- ptr = arg0;
- if (arg1 < gUnknown_083DFEC4->unkD158)
- {
-#if ENGLISH
- ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]);
-#elif GERMAN
- ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex));
-#endif
-
- ptr[0] = 0xFC;
- ptr[1] = 0x13;
- ptr[2] = 0x4B;
- ptr += 3;
- ptr = StringCopy(ptr, trainer->trainerName);
- }
-
- ptr[0] = 0xFC;
- ptr[1] = 0x13;
- ptr[2] = 0x80;
- ptr[3] = 0xFF;
-}
-
-IWRAM_DATA MainCallback gUnknown_03000744;
diff --git a/src/field/region_map.c b/src/field/region_map.c
index bfd2729c2..07e77e389 100644
--- a/src/field/region_map.c
+++ b/src/field/region_map.c
@@ -4,19 +4,20 @@
#include "field_specials.h"
#include "m4a.h"
#include "main.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "menu.h"
#include "palette.h"
#include "pokemon_menu.h"
#include "region_map.h"
#include "overworld.h"
#include "secret_base.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sprite.h"
#include "strings.h"
#include "string_util.h"
#include "text.h"
#include "trig.h"
+#include "ewram.h"
// Map Section IDs
#define MAPSEC_LITTLEROOT_TOWN 0
@@ -336,9 +337,9 @@ bool8 sub_80FA940(void)
InitializeCursorPosition();
gRegionMap->unk74 = gRegionMap->cursorPosX;
gRegionMap->unk76 = gRegionMap->cursorPosY;
- gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId);
- gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId);
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSectionId);
+ gRegionMap->mapSectionId = sub_80FB9C0(gRegionMap->mapSectionId);
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
break;
case 6:
if (gRegionMap->zoomed == FALSE)
@@ -433,7 +434,7 @@ static u8 sub_80FAB78(void)
static u8 _swiopen(void)
{
- u16 mapSecId;
+ u16 mapSectionId;
if (gRegionMap->unk7A != 0)
return INPUT_EVENT_2;
@@ -450,12 +451,12 @@ static u8 _swiopen(void)
if (gRegionMap->cursorDeltaY < 0)
gRegionMap->cursorPosY--;
- mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
- gRegionMap->unk16 = sub_80FB758(mapSecId);
- if (mapSecId != gRegionMap->mapSecId)
+ mapSectionId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
+ gRegionMap->unk16 = sub_80FB758(mapSectionId);
+ if (mapSectionId != gRegionMap->mapSectionId)
{
- gRegionMap->mapSecId = mapSecId;
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->mapSectionId = mapSectionId;
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
}
sub_80FBA18();
gRegionMap->inputCallback = sub_80FAB78;
@@ -515,16 +516,16 @@ static u8 sub_80FADE4(void)
if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66)
{
- u16 mapSecId;
+ u16 mapSectionId;
gRegionMap->unk64 = r3;
gRegionMap->unk66 = r1;
- mapSecId = GetRegionMapSectionAt(r3, r1);
- gRegionMap->unk16 = sub_80FB758(mapSecId);
- if (mapSecId != gRegionMap->mapSecId)
+ mapSectionId = GetRegionMapSectionAt(r3, r1);
+ gRegionMap->unk16 = sub_80FB758(mapSectionId);
+ if (mapSectionId != gRegionMap->mapSectionId)
{
- gRegionMap->mapSecId = mapSecId;
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->mapSectionId = mapSectionId;
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
}
sub_80FBA18();
}
@@ -706,9 +707,9 @@ static void InitializeCursorPosition(void)
u16 r9;
if (gSaveBlock1.location.mapGroup == 25
- && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR
- || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK
- || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS))
+ && (gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_CORRIDOR)
+ || gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_LOWER_DECK)
+ || gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_ROOMS)))
{
sub_80FB600();
return;
@@ -722,19 +723,19 @@ static void InitializeCursorPosition(void)
case 2:
case 4:
case 5:
- gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
+ gRegionMap->mapSectionId = gMapHeader.regionMapSectionId;
gRegionMap->playerIsInCave = FALSE;
mapWidth = gMapHeader.mapData->width;
mapHeight = gMapHeader.mapData->height;
x = gSaveBlock1.pos.x;
y = gSaveBlock1.pos.y;
- if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6)
+ if (gRegionMap->mapSectionId == MAPSEC_UNDERWATER6)
gRegionMap->playerIsInCave = TRUE;
break;
case 3:
case 6:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
mapHeight = mapHeader->mapData->height;
@@ -743,7 +744,7 @@ static void InitializeCursorPosition(void)
break;
case 8:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
mapHeight = mapHeader->mapData->height;
@@ -754,8 +755,8 @@ static void InitializeCursorPosition(void)
{
struct WarpData *r4;
- gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
- if (gRegionMap->mapSecId != MAPSEC_UNK_0x57)
+ gRegionMap->mapSectionId = gMapHeader.regionMapSectionId;
+ if (gRegionMap->mapSectionId != MAPSEC_UNK_0x57)
{
r4 = &gSaveBlock1.warp4;
mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
@@ -764,7 +765,7 @@ static void InitializeCursorPosition(void)
{
r4 = &gSaveBlock1.warp2;
mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
}
gRegionMap->playerIsInCave = FALSE;
mapWidth = mapHeader->mapData->width;
@@ -777,21 +778,21 @@ static void InitializeCursorPosition(void)
r9 = x;
- r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width;
+ r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x /= r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
- x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
+ x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height;
+ r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y /= r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
- y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
+ y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
- switch (gRegionMap->mapSecId)
+ switch (gRegionMap->mapSectionId)
{
case MAPSEC_ROUTE_114:
if (y != 0)
@@ -820,8 +821,8 @@ static void InitializeCursorPosition(void)
x++;
break;
}
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
static void sub_80FB600(void)
@@ -836,16 +837,16 @@ static void sub_80FB600(void)
switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4))
{
case 1:
- gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY;
+ gRegionMap->mapSectionId = MAPSEC_SLATEPORT_CITY;
break;
case 2:
- gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY;
+ gRegionMap->mapSectionId = MAPSEC_LILYCOVE_CITY;
break;
case 3:
- gRegionMap->mapSecId = MAPSEC_ROUTE_124;
+ gRegionMap->mapSectionId = MAPSEC_ROUTE_124;
break;
case 4:
- gRegionMap->mapSecId = MAPSEC_ROUTE_131;
+ gRegionMap->mapSectionId = MAPSEC_ROUTE_131;
break;
default:
case 0:
@@ -853,31 +854,31 @@ static void sub_80FB600(void)
struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
u16 r1;
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
- r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
+ r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x = sp2 / r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
- x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
+ x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height;
+ r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y = sp4 / r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
- y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
+ y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
}
break;
}
gRegionMap->playerIsInCave = FALSE;
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
-static u16 sub_80FB758(u16 mapSecId)
+static u16 sub_80FB758(u16 mapSectionId)
{
- switch (mapSecId)
+ switch (mapSectionId)
{
case MAPSEC_NONE:
return 0;
@@ -915,9 +916,9 @@ static u16 sub_80FB758(u16 mapSecId)
return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3;
case MAPSEC_BATTLE_TOWER:
- return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0;
+ return FlagGet(FLAG_LANDMARK_BATTLE_TOWER) ? 4 : 0;
case MAPSEC_SOUTHERN_ISLAND:
- return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0;
+ return FlagGet(FLAG_LANDMARK_SOUTHERN_ISLAND) ? 1 : 0;
default:
return 1;
}
@@ -928,21 +929,21 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y)
return GetRegionMapSectionAt(x, y);
}
-static u16 sub_80FB9C0(u16 mapSecId)
+static u16 sub_80FB9C0(u16 mapSectionId)
{
u16 i;
for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++)
{
- if (gUnknown_083E7684[i][0] == mapSecId)
+ if (gUnknown_083E7684[i][0] == mapSectionId)
return gUnknown_083E7684[i][1];
}
- return mapSecId;
+ return mapSectionId;
}
-u16 sub_80FBA04(u16 mapSecId)
+u16 sub_80FBA04(u16 mapSectionId)
{
- return sub_80FB9C0(mapSecId);
+ return sub_80FB9C0(mapSectionId);
}
static void sub_80FBA18(void)
@@ -951,7 +952,7 @@ static void sub_80FBA18(void)
u16 y;
u16 i;
- if (gRegionMap->mapSecId == MAPSEC_NONE)
+ if (gRegionMap->mapSectionId == MAPSEC_NONE)
{
gRegionMap->everGrandeCityArea = 0;
return;
@@ -986,7 +987,7 @@ static void sub_80FBA18(void)
else
{
x--;
- if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId)
i++;
}
}
@@ -1005,7 +1006,7 @@ static bool8 sub_80FBAA0(u16 a)
for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++)
{
- if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId)
return TRUE;
}
return FALSE;
@@ -1120,9 +1121,9 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag)
gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4;
gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4;
}
- gRegionMap->cursorSprite->data1 = 2;
- gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101;
- gRegionMap->cursorSprite->data3 = 1;
+ gRegionMap->cursorSprite->data[1] = 2;
+ gRegionMap->cursorSprite->data[2] = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101;
+ gRegionMap->cursorSprite->data[3] = 1;
}
}
@@ -1138,12 +1139,12 @@ static void sub_80FBCA0(void)
void unref_sub_80FBCD0(void)
{
- gRegionMap->cursorSprite->data3 = 1;
+ gRegionMap->cursorSprite->data[3] = 1;
}
void unref_sub_80FBCE0(void)
{
- gRegionMap->cursorSprite->data3 = 0;
+ gRegionMap->cursorSprite->data[3] = 0;
}
static const struct OamData sPlayerIconOamData =
@@ -1258,16 +1259,16 @@ static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite)
{
sprite->pos2.x = -(gRegionMap->scrollX * 2);
sprite->pos2.y = -(gRegionMap->scrollY * 2);
- sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
- sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
+ sprite->data[0] = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
+ sprite->data[1] = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
// Determine if sprite is on screen
- if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8)
- sprite->data2 = FALSE;
+ if (sprite->data[0] < -8 || sprite->data[0] > 0xA8 || sprite->data[1] < -8 || sprite->data[1] > 0xF8)
+ sprite->data[2] = FALSE;
else
- sprite->data2 = TRUE;
+ sprite->data[2] = TRUE;
- if (sprite->data2 == TRUE)
+ if (sprite->data[2] == TRUE)
UpdateIconBlink(sprite);
else
sprite->invisible = TRUE;
@@ -1283,10 +1284,10 @@ static void UpdateIconBlink(struct Sprite *sprite)
if (gRegionMap->blinkPlayerIcon)
{
// Toggle visibility every 16 frames
- sprite->data7++;
- if (sprite->data7 > 16)
+ sprite->data[7]++;
+ if (sprite->data[7] > 16)
{
- sprite->data7 = 0;
+ sprite->data[7] = 0;
sprite->invisible = !sprite->invisible;
}
}
@@ -1302,44 +1303,44 @@ void sub_80FBF94(void)
gRegionMap->blinkPlayerIcon = TRUE;
}
-const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length)
+const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length)
{
- if (mapSecId == MAPSEC_SECRET_BASE)
+ if (mapSectionId == MAPSEC_SECRET_BASE)
return GetSecretBaseMapName(dest);
- if (mapSecId < MAPSEC_NONE)
- return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId);
+ if (mapSectionId < MAPSEC_NONE)
+ return StringCopy(dest, gRegionMapLocations[mapSectionId].regionMapSectionId);
if (length == 0)
length = 18;
return StringFill(dest, CHAR_SPACE, length);
}
-const u8 *CopyMapName(u8 *dest, u16 mapSecId)
+const u8 *CopyMapName(u8 *dest, u16 mapSectionId)
{
- switch (mapSecId)
+ switch (mapSectionId)
{
case MAPSEC_UNK_0x57:
return StringCopy(dest, gOtherText_Ferry);
case MAPSEC_SECRET_BASE:
return StringCopy(dest, gOtherText_SecretBase);
default:
- return GetMapSectionName(dest, mapSecId, 0);
+ return GetMapSectionName(dest, mapSectionId, 0);
}
}
-const u8 *CopyLocationName(u8 *dest, u16 mapSecId)
+const u8 *CopyLocationName(u8 *dest, u16 mapSectionId)
{
- if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT)
+ if (mapSectionId == MAPSEC_EVIL_TEAM_HIDEOUT)
return StringCopy(dest, gOtherText_Hideout);
else
- return CopyMapName(dest, mapSecId);
+ return CopyMapName(dest, mapSectionId);
}
-static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height)
+static void GetRegionMapLocationPosition(u16 mapSectionId, u16 *x, u16 *y, u16 *width, u16 *height)
{
- *x = gRegionMapLocations[mapSecId].x;
- *y = gRegionMapLocations[mapSecId].y;
- *width = gRegionMapLocations[mapSecId].width;
- *height = gRegionMapLocations[mapSecId].height;
+ *x = gRegionMapLocations[mapSectionId].x;
+ *y = gRegionMapLocations[mapSectionId].y;
+ *width = gRegionMapLocations[mapSectionId].width;
+ *height = gRegionMapLocations[mapSectionId].height;
}
struct UnknownStruct3
@@ -1350,12 +1351,6 @@ struct UnknownStruct3
struct RegionMap regionMap;
};
-extern u8 ewram[];
-#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0))
-#define ewram888 (ewram + 0x888)
-#define ewramA6E (ewram[0xA6E])
-#define ewramBlankMapName (ewram + 0xA48)
-
static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal");
static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz");
static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz");
@@ -1419,7 +1414,7 @@ static const u8 sUnknown_083E7920[][3] =
struct UnknownStruct4
{
const u8 *const *unk0;
- u16 mapSecId;
+ u16 mapSectionId;
u16 flag;
};
@@ -1427,18 +1422,18 @@ static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, Other
static const struct UnknownStruct4 sUnknown_083E79C0[1] =
{
- {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY},
+ {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY},
};
// XXX: what is this?
-static u8 *const ewram_ = ewram;
+static u8 *const ewram_ = gSharedMem;
static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2};
// Fly targets that are not cities or towns
static const u16 sSpecialFlyAreas[][2] =
{
- // flag, mapSecId
+ // flag, mapSectionId
{0x848, MAPSEC_BATTLE_TOWER},
{0xFFFF, MAPSEC_NONE},
};
@@ -1552,10 +1547,10 @@ void CB2_InitFlyRegionMap(void)
MenuZeroFillScreen();
break;
case 3:
- InitRegionMap(&ewram0.regionMap, 0);
+ InitRegionMap(&ewram0_3.regionMap, 0);
CreateRegionMapCursor(0, 0);
CreateRegionMapPlayerIcon(1, 1);
- ewram0.unk6 = ewram0.regionMap.mapSecId;
+ ewram0_3.unk6 = ewram0_3.regionMap.mapSectionId;
StringFill(ewramBlankMapName, CHAR_SPACE, 12);
PrintFlyTargetName();
break;
@@ -1598,20 +1593,20 @@ static void VBlankCB_FlyRegionMap(void)
static void CB2_FlyRegionMap(void)
{
- ewram0.unk0();
+ ewram0_3.unk0();
AnimateSprites();
BuildOamBuffer();
}
static void sub_80FC244(void (*func)(void))
{
- ewram0.unk0 = func;
- ewram0.unk4 = 0;
+ ewram0_3.unk0 = func;
+ ewram0_3.unk4 = 0;
}
static void PrintFlyTargetName(void)
{
- if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4)
+ if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)
{
u16 i = 0;
int zero;
@@ -1620,13 +1615,13 @@ static void PrintFlyTargetName(void)
{
const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i];
- if (ewram0.regionMap.mapSecId == r4->mapSecId)
+ if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId)
{
if (FlagGet(r4->flag))
{
MenuDrawTextWindow(16, 14, 29, 19);
- MenuPrint(ewram0.regionMap.mapSecName, 17, 15);
- MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17);
+ MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 15);
+ MenuPrint_RightAligned(r4->unk0[ewram0_3.regionMap.everGrandeCityArea], 29, 17);
return;
}
break;
@@ -1637,7 +1632,7 @@ static void PrintFlyTargetName(void)
if (zero == 0)
{
MenuDrawTextWindow(16, 16, 29, 19);
- MenuPrint(ewram0.regionMap.mapSecName, 17, 17);
+ MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 17);
MenuZeroFillWindowRect(16, 14, 29, 15);
}
}
@@ -1696,7 +1691,7 @@ static void CreateCityTownFlyTargetIcons(void)
else
r7 += 3;
StartSpriteAnim(&gSprites[spriteId], r7);
- gSprites[spriteId].data0 = i;
+ gSprites[spriteId].data[0] = i;
}
canFlyFlag++;
}
@@ -1717,10 +1712,10 @@ static void CreateSpecialAreaFlyTargetIcons(void)
if (FlagGet(sSpecialFlyAreas[i][0]))
{
- u16 mapSecId = sSpecialFlyAreas[i][1];
+ u16 mapSectionId = sSpecialFlyAreas[i][1];
u8 spriteId;
- GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height);
+ GetRegionMapLocationPosition(mapSectionId, &x, &y, &width, &height);
x = (x + 1) * 8;
y = (y + 2) * 8;
spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10);
@@ -1729,7 +1724,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)
gSprites[spriteId].oam.size = 1;
gSprites[spriteId].callback = SpriteCB_FlyTargetIcons;
StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data0 = mapSecId;
+ gSprites[spriteId].data[0] = mapSectionId;
}
}
}
@@ -1737,31 +1732,31 @@ static void CreateSpecialAreaFlyTargetIcons(void)
static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)
{
- // Blink if our mapSecId is the one selected on the map
- if (ewram0.regionMap.mapSecId == sprite->data0)
+ // Blink if our mapSectionId is the one selected on the map
+ if (ewram0_3.regionMap.mapSectionId == sprite->data[0])
{
// Toggle visibility every 16 frames
- sprite->data1++;
- if (sprite->data1 > 16)
+ sprite->data[1]++;
+ if (sprite->data[1] > 16)
{
- sprite->data1 = 0;
+ sprite->data[1] = 0;
sprite->invisible = !sprite->invisible;
}
}
else
{
- sprite->data1 = 16;
+ sprite->data[1] = 16;
sprite->invisible = FALSE;
}
}
static void sub_80FC5B4(void)
{
- switch (ewram0.unk4)
+ switch (ewram0_3.unk4)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- ewram0.unk4++;
+ ewram0_3.unk4++;
break;
case 1:
if (UpdatePaletteFade() != 0)
@@ -1773,7 +1768,7 @@ static void sub_80FC5B4(void)
static void sub_80FC600(void)
{
- if (ewram0.unk4 == 0)
+ if (ewram0_3.unk4 == 0)
{
switch (sub_80FAB60())
{
@@ -1785,7 +1780,7 @@ static void sub_80FC600(void)
PrintFlyTargetName();
break;
case INPUT_EVENT_A_BUTTON:
- if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4)
+ if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)
{
m4aSongNumStart(SE_SELECT);
ewramA6E = 1;
@@ -1803,11 +1798,11 @@ static void sub_80FC600(void)
static void sub_80FC69C(void)
{
- switch (ewram0.unk4)
+ switch (ewram0_3.unk4)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- ewram0.unk4++;
+ ewram0_3.unk4++;
break;
case 1:
if (UpdatePaletteFade() != 0)
@@ -1815,7 +1810,7 @@ static void sub_80FC69C(void)
FreeRegionMapIconResources();
if (ewramA6E != 0)
{
- switch (ewram0.regionMap.mapSecId)
+ switch (ewram0_3.regionMap.mapSectionId)
{
case MAPSEC_SOUTHERN_ISLAND:
sub_8053538(22);
@@ -1827,13 +1822,13 @@ static void sub_80FC69C(void)
sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13);
break;
case MAPSEC_EVER_GRANDE_CITY:
- sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11);
+ sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11);
break;
default:
- if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0)
- sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]);
+ if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0)
+ sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2]);
else
- warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1);
+ warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][1], -1);
break;
}
sub_80865BC();
diff --git a/src/field/roamer.c b/src/field/roamer.c
index 948828d5e..2eb26ef9d 100644
--- a/src/field/roamer.c
+++ b/src/field/roamer.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "roamer.h"
#include "pokemon.h"
-#include "rng.h"
-#include "species.h"
+#include "random.h"
+#include "constants/species.h"
#ifdef SAPPHIRE
#define ROAMER_SPECIES SPECIES_LATIAS
@@ -173,13 +173,13 @@ void CreateRoamerMonInstance(void)
struct Pokemon *mon = &gEnemyParty[0];
struct Roamer *roamer = &gSaveBlock1.roamer;
CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality);
- SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status);
- SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp);
- SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool);
- SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty);
- SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute);
- SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart);
- SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough);
+ SetMonData(mon, MON_DATA_STATUS, &roamer->status);
+ SetMonData(mon, MON_DATA_HP, &roamer->hp);
+ SetMonData(mon, MON_DATA_COOL, &roamer->cool);
+ SetMonData(mon, MON_DATA_BEAUTY, &roamer->beauty);
+ SetMonData(mon, MON_DATA_CUTE, &roamer->cute);
+ SetMonData(mon, MON_DATA_SMART, &roamer->smart);
+ SetMonData(mon, MON_DATA_TOUGH, &roamer->tough);
}
bool8 TryStartRoamerEncounter(void)
diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c
index e8ab7e1bf..00008c69c 100644
--- a/src/field/rotating_gate.c
+++ b/src/field/rotating_gate.c
@@ -3,8 +3,8 @@
#include "event_data.h"
#include "field_map_obj.h"
#include "fieldmap.h"
-#include "map_constants.h"
-#include "songs.h"
+#include "constants/maps.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
@@ -622,14 +622,14 @@ static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0;
static int GetCurrentMapRotatingGatePuzzleType(void)
{
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_FORTREE_CITY_GYM &&
- gSaveBlock1.location.mapNum == MAP_ID_FORTREE_CITY_GYM)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(FORTREE_CITY_GYM) &&
+ gSaveBlock1.location.mapNum == MAP_NUM(FORTREE_CITY_GYM))
{
return PUZZLE_FORTREE_CITY_GYM;
}
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 &&
- gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE110_TRICK_HOUSE_PUZZLE6) &&
+ gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_TRICK_HOUSE_PUZZLE6))
{
return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6;
}
@@ -762,7 +762,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY)
y = gate->y + 7;
sprite = &gSprites[spriteId];
- sprite->data0 = gateId;
+ sprite->data[0] = gateId;
sprite->coordOffsetEnabled = 1;
sub_8060388(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y);
@@ -778,8 +778,8 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite)
u8 orientation;
u8 affineAnimation;
- rotationDirection = sprite->data1;
- orientation = sprite->data2;
+ rotationDirection = sprite->data[1];
+ orientation = sprite->data[2];
RotatingGate_HideGatesOutsideViewport(sprite);
@@ -804,7 +804,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, affineAnimation);
}
- sprite->data1 = ROTATE_NONE;
+ sprite->data[1] = ROTATE_NONE;
}
static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite)
@@ -1065,8 +1065,8 @@ static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirecti
if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES)
{
sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]];
- sprite->data1 = rotationDirection;
- sprite->data2 = RotatingGate_GetGateOrientation(gateId);
+ sprite->data[1] = rotationDirection;
+ sprite->data[2] = RotatingGate_GetGateOrientation(gateId);
}
}
diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c
index 14fd1ddc4..e9ca3a9f9 100644
--- a/src/field/safari_zone.c
+++ b/src/field/safari_zone.c
@@ -37,21 +37,21 @@ extern u8 gUnknown_081C3448;
extern u8 gUnknown_081C3459;
extern u8 *gPokeblockNames[];
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
bool32 GetSafariZoneFlag(void)
{
- return FlagGet(SYS_SAFARI_MODE);
+ return FlagGet(FLAG_SYS_SAFARI_MODE);
}
void SetSafariZoneFlag(void)
{
- FlagSet(SYS_SAFARI_MODE);
+ FlagSet(FLAG_SYS_SAFARI_MODE);
}
void ResetSafariZoneFlag(void)
{
- FlagClear(SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
}
void EnterSafariMode(void)
@@ -137,13 +137,13 @@ void SafariZoneGetPokeblockNameInFeeder(void)
&& gPokeblockFeeders[i].x == x
&& gPokeblockFeeders[i].y == y)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
StringCopy(gStringVar1, gPokeblockNames[gPokeblockFeeders[i].pokeblock.color]);
return;
}
}
- gScriptResult = -1;
+ gSpecialVar_Result = -1;
}
static void GetPokeblockFeederWithinRange(void)
@@ -166,23 +166,23 @@ static void GetPokeblockFeederWithinRange(void)
y *= -1;
if ((x + y) <= 5)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
return;
}
}
}
- gScriptResult = -1;
+ gSpecialVar_Result = -1;
}
struct Pokeblock *unref_sub_80C8418(void)
{
SafariZoneGetPokeblockNameInFeeder();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
return NULL;
else
- return &gPokeblockFeeders[gScriptResult].pokeblock;
+ return &gPokeblockFeeders[gSpecialVar_Result].pokeblock;
}
@@ -190,10 +190,10 @@ struct Pokeblock *SafariZoneGetActivePokeblock(void)
{
GetPokeblockFeederWithinRange();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
return NULL;
else
- return &gPokeblockFeeders[gScriptResult].pokeblock;
+ return &gPokeblockFeeders[gSpecialVar_Result].pokeblock;
}
@@ -240,13 +240,13 @@ bool8 unref_sub_80C853C(void)
{
SafariZoneGetPokeblockNameInFeeder();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
{
return FALSE;
}
ConvertIntToDecimalStringN(gStringVar2,
- gPokeblockFeeders[gScriptResult].stepCounter,
+ gPokeblockFeeders[gSpecialVar_Result].stepCounter,
STR_CONV_MODE_LEADING_ZEROS, 3);
return TRUE;
diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c
index 28584d4d0..d5fc56e8d 100644
--- a/src/field/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -30,7 +30,7 @@
#include "palette.h"
#include "party_menu.h"
#include "pokemon.h"
-#include "rng.h"
+#include "random.h"
#include "overworld.h"
#include "rtc.h"
#include "script.h"
@@ -61,9 +61,9 @@ extern u16 gSpecialVar_0x8001;
extern u16 gSpecialVar_0x8002;
extern u16 gSpecialVar_0x8004;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
-extern u16 gScriptContestCategory;
+extern u16 gSpecialVar_ContestCategory;
extern SpecialFunc gSpecials[];
extern u8 *gStdScripts[];
@@ -479,25 +479,25 @@ bool8 ScrCmd_random(struct ScriptContext *ctx)
{
u16 max = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = Random() % max;
+ gSpecialVar_Result = Random() % max;
return FALSE;
}
-bool8 ScrCmd_additem(struct ScriptContext *ctx)
+bool8 ScrCmd_giveitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = AddBagItem(itemId, (u8)quantity);
+ gSpecialVar_Result = AddBagItem(itemId, (u8)quantity);
return FALSE;
}
-bool8 ScrCmd_removeitem(struct ScriptContext *ctx)
+bool8 ScrCmd_takeitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = RemoveBagItem(itemId, (u8)quantity);
+ gSpecialVar_Result = RemoveBagItem(itemId, (u8)quantity);
return FALSE;
}
@@ -506,7 +506,7 @@ bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckBagHasSpace(itemId, (u8)quantity);
+ gSpecialVar_Result = CheckBagHasSpace(itemId, (u8)quantity);
return FALSE;
}
@@ -515,7 +515,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckBagHasItem(itemId, (u8)quantity);
+ gSpecialVar_Result = CheckBagHasItem(itemId, (u8)quantity);
return FALSE;
}
@@ -523,16 +523,16 @@ bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = GetPocketByItemId(itemId);
+ gSpecialVar_Result = GetPocketByItemId(itemId);
return FALSE;
}
-bool8 ScrCmd_addpcitem(struct ScriptContext *ctx)
+bool8 ScrCmd_givepcitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = AddPCItem(itemId, quantity);
+ gSpecialVar_Result = AddPCItem(itemId, quantity);
return FALSE;
}
@@ -541,39 +541,39 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckPCHasItem(itemId, quantity);
+ gSpecialVar_Result = CheckPCHasItem(itemId, quantity);
return FALSE;
}
-bool8 ScrCmd_adddecor(struct ScriptContext *ctx)
+bool8 ScrCmd_givedecoration(struct ScriptContext *ctx)
{
- u32 decorId = VarGet(ScriptReadHalfword(ctx));
+ u32 decoration = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = IsThereStorageSpaceForDecoration(decorId);
+ gSpecialVar_Result = IsThereStorageSpaceForDecoration(decoration);
return FALSE;
}
-bool8 ScrCmd_removedecor(struct ScriptContext *ctx)
+bool8 ScrCmd_takedecoration(struct ScriptContext *ctx)
{
- u32 decorId = VarGet(ScriptReadHalfword(ctx));
+ u32 decoration = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_81340A8(decorId);
+ gSpecialVar_Result = sub_81340A8(decoration);
return FALSE;
}
-bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_checkdecorspace(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_8134074(decorId);
+ gSpecialVar_Result = sub_8134074(decorId);
return FALSE;
}
-bool8 ScrCmd_hasdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_8133FE4(decorId);
+ gSpecialVar_Result = sub_8133FE4(decorId);
return FALSE;
}
@@ -601,14 +601,14 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx)
+bool8 ScrCmd_animateflash(struct ScriptContext *ctx)
{
sub_8081594(ScriptReadByte(ctx));
ScriptContext1_Stop();
return TRUE;
}
-bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx)
+bool8 ScrCmd_setflashradius(struct ScriptContext *ctx)
{
u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
@@ -631,7 +631,7 @@ bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
+bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx)
{
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
@@ -641,7 +641,7 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
return TRUE;
}
-bool8 s28_pause_asm()
+bool8 RunPauseTimer()
{
sPauseCounter--;
@@ -654,7 +654,7 @@ bool8 s28_pause_asm()
bool8 ScrCmd_delay(struct ScriptContext *ctx)
{
sPauseCounter = ScriptReadHalfword(ctx);
- SetupNativeScript(ctx, s28_pause_asm);
+ SetupNativeScript(ctx, RunPauseTimer);
return TRUE;
}
@@ -692,7 +692,7 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx)
bool8 ScrCmd_resetweather(struct ScriptContext *ctx)
{
- sub_80806E4();
+ SetSav1WeatherFromCurrMapHeader();
return FALSE;
}
@@ -702,7 +702,7 @@ bool8 ScrCmd_doweather(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_tileeffect(struct ScriptContext *ctx)
+bool8 ScrCmd_setstepcallback(struct ScriptContext *ctx)
{
ActivatePerStepCallback(ScriptReadByte(ctx));
return FALSE;
@@ -859,9 +859,9 @@ bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_countpokemon(struct ScriptContext *ctx)
+bool8 ScrCmd_getpartysize(struct ScriptContext *ctx)
{
- gScriptResult = CalculatePlayerPartyCount();
+ gSpecialVar_Result = CalculatePlayerPartyCount();
return FALSE;
}
@@ -871,7 +871,7 @@ bool8 ScrCmd_playse(struct ScriptContext *ctx)
return FALSE;
}
-static bool8 WaitForSoundEffectFinish()
+static bool8 WaitForSoundEffectFinish(void)
{
if (!IsSEPlaying())
return TRUE;
@@ -891,7 +891,7 @@ bool8 ScrCmd_playfanfare(struct ScriptContext *ctx)
return FALSE;
}
-static bool8 WaitForFanfareFinish()
+static bool8 WaitForFanfareFinish(void)
{
return IsFanfareTaskInactive();
}
@@ -1073,7 +1073,7 @@ bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_showobject(struct ScriptContext *ctx)
+bool8 ScrCmd_showobjectat(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
@@ -1083,7 +1083,7 @@ bool8 ScrCmd_showobject(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_hideobject(struct ScriptContext *ctx)
+bool8 ScrCmd_hideobjectat(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
@@ -1267,7 +1267,7 @@ static bool8 WaitForAorBPress(void)
return FALSE;
}
-bool8 ScrCmd_waitbutton(struct ScriptContext *ctx)
+bool8 ScrCmd_waitbuttonpress(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, WaitForAorBPress);
return TRUE;
@@ -1386,7 +1386,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_drawmonpic(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 x = ScriptReadByte(ctx);
@@ -1396,7 +1396,7 @@ bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_erasemonpic(struct ScriptContext *ctx)
{
bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
@@ -1441,7 +1441,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 species = VarGet(ScriptReadHalfword(ctx));
@@ -1450,7 +1450,7 @@ bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
@@ -1461,7 +1461,7 @@ bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
@@ -1471,7 +1471,7 @@ bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferitemname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 itemId = VarGet(ScriptReadHalfword(ctx));
@@ -1480,7 +1480,7 @@ bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferdecorationname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 decorId = VarGet(ScriptReadHalfword(ctx));
@@ -1489,7 +1489,7 @@ bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
+bool8 ScrCmd_buffermovename(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 moveId = VarGet(ScriptReadHalfword(ctx));
@@ -1498,7 +1498,7 @@ bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
+bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
@@ -1508,7 +1508,7 @@ bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
@@ -1517,7 +1517,7 @@ bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getstring(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u8 *text = (u8 *)ScriptReadWord(ctx);
@@ -1526,7 +1526,7 @@ bool8 ScrCmd_getstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
+bool8 ScrCmd_vloadptr(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0);
@@ -1534,7 +1534,7 @@ bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
+bool8 ScrCmd_vbufferstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u32 addr = ScriptReadWord(ctx);
@@ -1545,7 +1545,7 @@ bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
+bool8 ScrCmd_givemon(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 level = ScriptReadByte(ctx);
@@ -1554,7 +1554,7 @@ bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
u32 unkParam2 = ScriptReadWord(ctx);
u8 unkParam3 = ScriptReadByte(ctx);
- gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
+ gSpecialVar_Result = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
return FALSE;
}
@@ -1562,11 +1562,11 @@ bool8 ScrCmd_giveegg(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = ScriptGiveEgg(species);
+ gSpecialVar_Result = ScriptGiveEgg(species);
return FALSE;
}
-bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
+bool8 ScrCmd_setmonmove(struct ScriptContext *ctx)
{
u8 partyIndex = ScriptReadByte(ctx);
u8 slot = ScriptReadByte(ctx);
@@ -1576,13 +1576,13 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
+bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx)
{
u8 i;
u16 moveId = ScriptReadHalfword(ctx);
- gScriptResult = 6;
- for (i = 0; i < 6; i++)
+ gSpecialVar_Result = 6;
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
if (!species)
@@ -1590,7 +1590,7 @@ bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
// UB: GetMonData() arguments don't match function definition
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
gSpecialVar_0x8004 = species;
break;
}
@@ -1624,7 +1624,7 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx)
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount);
+ gSpecialVar_Result = IsEnoughMoney(gSaveBlock1.money, amount);
return FALSE;
}
@@ -1692,19 +1692,19 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_battlebegin(struct ScriptContext *ctx)
+bool8 ScrCmd_trainerbattlebegin(struct ScriptContext *ctx)
{
BattleSetup_StartTrainerBattle();
return TRUE;
}
-bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx)
+bool8 ScrCmd_gotopostbattlescript(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
return FALSE;
}
-bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx)
+bool8 ScrCmd_gotobeatenscript(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
return FALSE;
@@ -1760,7 +1760,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
@@ -1769,7 +1769,7 @@ bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx)
+bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
@@ -1787,7 +1787,7 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx)
+bool8 ScrCmd_setberrytree(struct ScriptContext *ctx)
{
u8 treeId = ScriptReadByte(ctx);
u8 berry = ScriptReadByte(ctx);
@@ -1804,11 +1804,11 @@ bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
{
u16 value = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = GetPriceReduction(value);
+ gSpecialVar_Result = GetPriceReduction(value);
return FALSE;
}
-bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx)
+bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
{
sub_80F99CC();
ScriptContext1_Stop();
@@ -1831,7 +1831,7 @@ bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx)
bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
{
- sub_80C4980(gScriptContestCategory);
+ sub_80C4980(gSpecialVar_ContestCategory);
ScriptContext1_Stop();
return TRUE;
}
@@ -1845,7 +1845,7 @@ bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx)
+bool8 ScrCmd_setfieldeffectargument(struct ScriptContext *ctx)
{
u8 argNum = ScriptReadByte(ctx);
@@ -1868,7 +1868,7 @@ bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
+bool8 ScrCmd_setrespawn(struct ScriptContext *ctx)
{
u16 healLocationId = VarGet(ScriptReadHalfword(ctx));
@@ -1878,11 +1878,11 @@ bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx)
{
- gScriptResult = gSaveBlock2.playerGender;
+ gSpecialVar_Result = gSaveBlock2.playerGender;
return FALSE;
}
-bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
+bool8 ScrCmd_playmoncry(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u16 mode = VarGet(ScriptReadHalfword(ctx));
@@ -1891,25 +1891,25 @@ bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx)
+bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, IsCryFinished);
return TRUE;
}
-bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
+bool8 ScrCmd_setmetatile(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- u16 tileId = VarGet(ScriptReadHalfword(ctx));
+ u16 metatileId = VarGet(ScriptReadHalfword(ctx));
u16 v8 = VarGet(ScriptReadHalfword(ctx));
x += 7;
y += 7;
if (!v8)
- MapGridSetMetatileIdAt(x, y, tileId);
+ MapGridSetMetatileIdAt(x, y, metatileId);
else
- MapGridSetMetatileIdAt(x, y, tileId | 0xC00);
+ MapGridSetMetatileIdAt(x, y, metatileId | 0xC00);
return FALSE;
}
@@ -2002,9 +2002,9 @@ bool8 ScrCmd_givecoins(struct ScriptContext *ctx)
u16 coins = VarGet(ScriptReadHalfword(ctx));
if (GiveCoins(coins) == TRUE)
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return FALSE;
}
@@ -2013,8 +2013,8 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
u16 coins = VarGet(ScriptReadHalfword(ctx));
if (TakeCoins(coins) == TRUE)
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return FALSE;
}
diff --git a/src/field/script_menu.c b/src/field/script_menu.c
index e25e74d8c..9f3ab75cc 100644
--- a/src/field/script_menu.c
+++ b/src/field/script_menu.c
@@ -6,7 +6,7 @@
#include "menu.h"
#include "palette.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "strings.h"
@@ -580,7 +580,7 @@ const u8 *const gUnknown_083CE048[] =
extern u8 gPCText_WhichPCShouldBeAccessed[];
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
static void Task_HandleMultichoiceInput(u8);
static void Task_HandleYesNoInput(u8);
@@ -599,7 +599,7 @@ bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, 0);
return TRUE;
}
@@ -613,7 +613,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ig
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, defaultChoice);
return TRUE;
}
@@ -698,11 +698,11 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (gTasks[taskId].tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gScriptResult = 127;
+ gSpecialVar_Result = 127;
}
else
{
- gScriptResult = selection;
+ gSpecialVar_Result = selection;
}
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
@@ -720,7 +720,7 @@ bool8 Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
sub_80B53B4(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress);
return TRUE;
}
@@ -760,7 +760,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DisplayYesNoMenu(left, top, 1);
taskId = CreateTask(Task_HandleYesNoInput, 0x50);
gTasks[taskId].tLeft = left;
@@ -772,7 +772,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
// unused
bool8 IsScriptActive(void)
{
- if (gScriptResult == 0xFF)
+ if (gSpecialVar_Result == 0xFF)
return FALSE;
else
return TRUE;
@@ -795,10 +795,10 @@ static void Task_HandleYesNoInput(u8 taskId)
case -1:
case 1:
PlaySE(SE_SELECT);
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case 0:
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
break;
}
@@ -823,7 +823,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr
u8 taskId;
u8 width;
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0);
@@ -860,11 +860,11 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
if (gTasks[taskId].tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gScriptResult = 127;
+ gSpecialVar_Result = 127;
}
else
{
- gScriptResult = selection;
+ gSpecialVar_Result = selection;
}
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
@@ -888,7 +888,7 @@ bool8 ScrSpecial_CreatePCMenu(void)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
ScriptMenu_CreatePCMenu();
return TRUE;
}
@@ -906,7 +906,7 @@ void ScriptMenu_CreatePCMenu(void)
else
width = 8;
- if (FlagGet(SYS_GAME_CLEAR)) // player has cleared game?
+ if (FlagGet(FLAG_SYS_GAME_CLEAR)) // player has cleared game?
{
numChoices = 4;
MenuDrawTextWindow(0, 0, width + 2, 9);
@@ -920,7 +920,7 @@ void ScriptMenu_CreatePCMenu(void)
MenuPrint(gPCText_LogOff, 1, 5);
}
- if (FlagGet(SYS_PC_LANETTE)) // player met lanette?
+ if (FlagGet(FLAG_SYS_PC_LANETTE)) // player met lanette?
MenuPrint(gPCText_LanettesPC, 1, 1);
else
MenuPrint(gPCText_SomeonesPC, 1, 1);
diff --git a/src/field/script_movement.c b/src/field/script_movement.c
index 30e10b451..c7ce55171 100644
--- a/src/field/script_movement.c
+++ b/src/field/script_movement.c
@@ -5,19 +5,19 @@
#include "task.h"
#include "util.h"
-static EWRAM_DATA u8 *gUnknown_020384F8[16] = {0};
+static EWRAM_DATA const u8 *gUnknown_020384F8[16] = {0};
static void sub_80A2198(u8);
static u8 sub_80A21E0(void);
-static bool8 sub_80A21F4(u8, u8, u8 *);
+static bool8 sub_80A21F4(u8, u8, const u8 *);
static u8 sub_80A2260(u8, u8);
static bool8 sub_80A2370(u8, u8);
-static void sub_80A23C8(u8, u8, u8, u8 *);
+static void sub_80A23C8(u8, u8, u8, const u8 *);
static void UnfreezeObjects(u8);
static void Task_80A244C(u8);
-static void sub_80A2490(u8, u8, u8, u8 *);
+static void sub_80A2490(u8, u8, u8, const u8 *);
-bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, u8 *movementScript)
+bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript)
{
u8 mapObjId;
@@ -70,7 +70,7 @@ static u8 sub_80A21E0(void)
return FindTaskIdByFunc(Task_80A244C);
}
-static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, u8 *movementScript)
+static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, const u8 *movementScript)
{
u8 r4;
@@ -160,17 +160,17 @@ static bool8 sub_80A2370(u8 taskId, u8 b)
return FALSE;
}
-static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *movementScript)
+static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript)
{
gUnknown_020384F8[a] = movementScript;
}
-static u8 *sub_80A23B8(u8 a)
+static const u8 *sub_80A23B8(u8 a)
{
return gUnknown_020384F8[a];
}
-static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, u8 *movementScript)
+static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, const u8 *movementScript)
{
sub_80A2318(taskId, b);
npc_obj_offscreen_culling_and_flag_update(b, movementScript);
@@ -203,7 +203,7 @@ static void Task_80A244C(u8 taskId)
}
}
-static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, u8 *d)
+static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, const u8 *d)
{
u8 var;
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index f221d7f16..7589ab1e3 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -1,51 +1,135 @@
#include "global.h"
+#include "constants/decorations.h"
#include "secret_base.h"
#include "decoration.h"
+#include "constants/species.h"
+#include "constants/items.h"
+#include "constants/moves.h"
#include "event_data.h"
#include "field_camera.h"
+#include "field_effect.h"
#include "field_fadetransition.h"
#include "field_player_avatar.h"
+#include "field_specials.h"
#include "field_weather.h"
#include "fieldmap.h"
+#include "fldeff_decoration.h"
+#include "link.h"
#include "main.h"
-#include "map_constants.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "constants/maps.h"
#include "map_name_popup.h"
#include "menu.h"
+#include "menu_helpers.h"
#include "metatile_behavior.h"
#include "palette.h"
#include "pokemon.h"
#include "overworld.h"
#include "script.h"
+#include "sound.h"
+#include "constants/species.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "text.h"
-#include "vars.h"
+#include "constants/vars.h"
+
+static void sub_80BC7D8(u8 taskId);
+static void sub_80BC824(u8 taskId);
+static u8 sub_80BC948(u8 a);
+static void sub_80BC980(u8 taskId);
+static void sub_80BC9E4(u8 taskId);
+static void sub_80BCA84(u8);
+static void sub_80BCAEC(u8 taskId);
+static void sub_80BCB90(u8);
+static void sub_80BCBC0(u8);
+static void sub_80BCBF8(u8 taskId);
+static void sub_80BCC54(u8 taskId);
+static void Task_SecretBasePC_Registry(u8 taskId);
+
+extern u8 gUnknown_0815F399[];
+extern u8 gUnknown_0815F49A[];
extern u8 gUnknown_020387DC;
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u16 gSpecialVar_0x8006;
-extern u16 gSpecialVar_0x8007;
-extern u16 gScriptResult;
-extern const struct
+
+const struct
{
u16 unk_083D1358_0;
u16 unk_083D1358_1;
-} gUnknown_083D1358[7];
-extern const u8 gUnknown_083D1374[4 * 16];
+} gUnknown_083D1358[] = {
+ {0x26, 0x36},
+ {0x27, 0x37},
+ {0x1a0, 0x1a1},
+ {0x1a8, 0x1a9},
+ {0x1b0, 0x1b1},
+ {0x208, 0x210},
+ {0x271, 0x278}
+};
+
+
+const u8 gUnknown_083D1374[] = {
+ MAP_NUM(SECRET_BASE_RED_CAVE1), 0, 1, 3,
+ MAP_NUM(SECRET_BASE_RED_CAVE2), 0, 5, 9,
+ MAP_NUM(SECRET_BASE_RED_CAVE3), 0, 1, 3,
+ MAP_NUM(SECRET_BASE_RED_CAVE4), 0, 7, 13,
+ MAP_NUM(SECRET_BASE_BROWN_CAVE1), 0, 2, 3,
+ MAP_NUM(SECRET_BASE_BROWN_CAVE2), 0, 9, 2,
+ MAP_NUM(SECRET_BASE_BROWN_CAVE3), 0, 13, 4,
+ MAP_NUM(SECRET_BASE_BROWN_CAVE4), 0, 1, 2,
+ MAP_NUM(SECRET_BASE_BLUE_CAVE1), 0, 1, 3,
+ MAP_NUM(SECRET_BASE_BLUE_CAVE2), 0, 1, 2,
+ MAP_NUM(SECRET_BASE_BLUE_CAVE3), 0, 3, 15,
+ MAP_NUM(SECRET_BASE_BLUE_CAVE4), 0, 3, 14,
+ MAP_NUM(SECRET_BASE_YELLOW_CAVE1), 0, 9, 3,
+ MAP_NUM(SECRET_BASE_YELLOW_CAVE2), 0, 8, 7,
+ MAP_NUM(SECRET_BASE_YELLOW_CAVE3), 0, 3, 6,
+ MAP_NUM(SECRET_BASE_YELLOW_CAVE4), 0, 5, 9,
+ MAP_NUM(SECRET_BASE_TREE1), 0, 2, 3,
+ MAP_NUM(SECRET_BASE_TREE2), 0, 5, 6,
+ MAP_NUM(SECRET_BASE_TREE3), 0, 15, 3,
+ MAP_NUM(SECRET_BASE_TREE4), 0, 4, 10,
+ MAP_NUM(SECRET_BASE_SHRUB1), 0, 3, 3,
+ MAP_NUM(SECRET_BASE_SHRUB2), 0, 1, 2,
+ MAP_NUM(SECRET_BASE_SHRUB3), 0, 7, 8,
+ MAP_NUM(SECRET_BASE_SHRUB4), 0, 9, 6
+};
+
+const struct MenuAction2 gUnknown_083D13D4[] = {
+ {SecretBaseText_DelRegist, sub_80BCA84},
+ {gUnknownText_Exit, sub_80BCBF8}
+};
+
+const struct YesNoFuncTable gUnknown_083D13E4 = {
+ sub_80BCB90,
+ sub_80BCBC0
+};
+
+const u8 gUnknown_083D13EC[] = {
+ 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0
+};
+
extern void *gUnknown_0300485C;
-extern const u8 gUnknown_083D13EC[12];
extern u8 gUnknown_081A2E14[];
+extern u8 UnknownString_81A1BB2[];
+extern u8 UnknownString_81A1F67[];
+extern u8 UnknownString_81A2254[];
+extern u8 UnknownString_81A25C3[];
+extern u8 UnknownString_81A2925[];
+extern u8 UnknownString_81A1D74[];
+extern u8 UnknownString_81A20C9[];
+extern u8 UnknownString_81A2439[];
+extern u8 UnknownString_81A2B2A[];
+extern u8 UnknownString_81A2754[];
-void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac
+void ClearSecretBase(struct SecretBaseRecord *record)
{
u16 i;
u16 j;
- record->sbr_field_0 = 0;
- for (i=0; i<7; i++)
- record->sbr_field_2[i] = 0xff;
+ record->secretBaseId = 0;
+ for (i=0; i<OT_NAME_LENGTH; i++)
+ record->playerName[i] = 0xff;
for (i=0; i<4; i++)
record->trainerId[i] = 0x00;
record->sbr_field_e = 0;
@@ -71,42 +155,42 @@ void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac
}
}
-void ResetSecretBase(u8 idx) // 80bb594
+void ResetSecretBase(u8 idx)
{
- sub_80BB4AC(&(gSaveBlock1.secretBases[idx]));
+ ClearSecretBase(&gSaveBlock1.secretBases[idx]);
}
-void ResetSecretBases(void) // 080bb5b4
+void ResetSecretBases(void)
{
u16 i;
- for (i=0; i<20; i++)
+ for (i = 0; i < MAX_SECRET_BASES; i++)
ResetSecretBase(i);
}
-void sub_80BB5D0(void) // 080bb5d0
+void sub_80BB5D0(void)
{
gUnknown_020387DC = gSpecialVar_0x8004;
}
-void sub_80BB5E4(void) // 80bb5e4
+void sub_80BB5E4(void)
{
- u16 idx;
- gScriptResult = 0;
- for (idx=0; idx<20; idx++) {
- if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
+ u16 i;
+ gSpecialVar_Result = 0;
+ for (i = 0; i < MAX_SECRET_BASES; i++) {
+ if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId)
continue;
- gScriptResult = 1;
- VarSet(VAR_0x4054, idx);
+ gSpecialVar_Result = 1;
+ VarSet(VAR_0x4054, i);
break;
}
}
void sub_80BB63C(void) // 80bb63c
{
- if (gSaveBlock1.secretBases[0].sbr_field_0)
- gScriptResult = 1;
+ if (gSaveBlock1.secretBases[0].secretBaseId)
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
u8 sub_80BB66C(void) // 80bb66c
@@ -196,14 +280,14 @@ void sub_80BB8CC(void)
{
u8 nameLength;
u16 idx;
- gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC;
+ gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC;
for (idx=0; idx<4; idx++) {
gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx];
}
VarSet(VAR_0x4054, 0);
nameLength = sub_80BB8A8(gSaveBlock2.playerName);
- memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7);
- StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength);
+ memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH);
+ StringCopyN(gSaveBlock1.secretBases[0].playerName, gSaveBlock2.playerName, nameLength);
gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender;
VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId);
}
@@ -214,8 +298,8 @@ void sub_80BB970(struct MapEvents *events)
s16 tile_id;
for (bgevidx=0; bgevidx<events->bgEventCount; bgevidx++) {
if (events->bgEvents[bgevidx].kind == 8) {
- for (jdx=0; jdx<20; jdx++) {
- if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) {
+ for (jdx=0; jdx<MAX_SECRET_BASES; jdx++) {
+ if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) {
tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7);
for (idx=0; idx<7; idx++) {
if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) {
@@ -233,7 +317,7 @@ void sub_80BB970(struct MapEvents *events)
void sub_80BBA14(void)
{
s8 idx = 4 * (gUnknown_020387DC / 10);
- warp1_set_2(MAP_GROUP_SECRET_BASE_RED_CAVE1, gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]);
+ warp1_set_2(MAP_GROUP(SECRET_BASE_RED_CAVE1), gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]);
}
void sub_80BBA48(u8 taskid)
@@ -251,7 +335,7 @@ void sub_80BBA48(u8 taskid)
case 2:
curbaseid = VarGet(VAR_0x4054);
if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff)
- gSaveBlock1.secretBases[curbaseid].sbr_field_10 ++;
+ gSaveBlock1.secretBases[curbaseid].sbr_field_10++;
sub_80BBA14();
warp_in();
gFieldCallback = sub_8080990;
@@ -318,12 +402,11 @@ void sub_80BBC78(void)
bool8 CurrentMapIsSecretBase(void)
{
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_SECRET_BASE_SHRUB4 && (u8)(gSaveBlock1.location.mapNum) <= MAP_ID_SECRET_BASE_SHRUB4)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(SECRET_BASE_SHRUB4) && (u8)(gSaveBlock1.location.mapNum) <= MAP_NUM(SECRET_BASE_SHRUB4))
return TRUE;
return FALSE;
}
-#ifdef NONMATCHING
void sub_80BBCCC(u8 flagIn)
{
u16 curBaseId;
@@ -331,8 +414,8 @@ void sub_80BBCCC(u8 flagIn)
if (CurrentMapIsSecretBase()) {
curBaseId = VarGet(VAR_0x4054);
for (x=0; x<16; x++) {
- if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) {
- sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[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]);
}
}
if (curBaseId != 0) {
@@ -349,10 +432,11 @@ void sub_80BBDD0(void)
{
u8 *roomdecor;
u8 *roomdecorpos;
- u8 ndecor;
u8 decidx;
u8 objid = 0;
u8 metatile;
+ u8 permission;
+ u8 ndecor;
u16 curBase = VarGet(VAR_0x4054);
if (!CurrentMapIsSecretBase()) {
roomdecor = gSaveBlock1.playerRoomDecor;
@@ -364,409 +448,52 @@ void sub_80BBDD0(void)
ndecor = 16;
}
for (decidx=0; decidx<ndecor; decidx++) {
- if (roomdecor[decidx] == 0)
- continue;
- if (gDecorations[roomdecor[decidx]].decor_field_11 != 4)
- continue;
- for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) {
- if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE)
- break;
- }
- if (objid != gMapHeader.events->mapObjectCount) {
- gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4;
- gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF;
- metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7);
- if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) {
- gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20;
- VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]);
- gScriptResult = gMapHeader.events->mapObjects[objid].localId;
- FlagClear(gSpecialVar_0x8004 + 0xAE);
- show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
- sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
- sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
- gSpecialVar_0x8004 ++;
+ if (roomdecor[decidx] != DECOR_NONE) {
+ permission = gDecorations[roomdecor[decidx]].permission;
+ if (permission == DECORPERM_SOLID_MAT)
+ {
+ for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) {
+ if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE)
+ break;
+ }
+ if (objid == gMapHeader.events->mapObjectCount)
+ continue;
+ gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4;
+ gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF;
+ metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7);
+ if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) {
+ gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20;
+ VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]);
+ gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId;
+ FlagClear(gSpecialVar_0x8004 + 0xAE);
+ show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
+ sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ gSpecialVar_0x8004 ++;
+ }
}
}
}
}
-#else
-__attribute__((naked))
-void sub_80BBCCC(u8 flagIn)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- bl CurrentMapIsSecretBase\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080BBDBC\n\
- ldr r0, _080BBD70 @ =0x00004054\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- movs r1, 0\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- ldr r6, _080BBD74 @ =gSaveBlock1\n\
- mov r4, sp\n\
- ldr r0, _080BBD78 @ =0x00001a2a\n\
- adds r7, r6, r0\n\
-_080BBCFC:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 5\n\
- ldrh r1, [r4]\n\
- adds r2, r0, r1\n\
- ldr r1, _080BBD7C @ =0x00001a1a\n\
- adds r0, r6, r1\n\
- adds r1, r2, r0\n\
- ldrb r0, [r1]\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x77\n\
- bhi _080BBD3A\n\
- ldr r0, _080BBD80 @ =gDecorations\n\
- ldrb r3, [r1]\n\
- lsls r1, r3, 5\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x11]\n\
- cmp r0, 0x4\n\
- beq _080BBD3A\n\
- adds r0, r2, r7\n\
- ldrb r2, [r0]\n\
- lsrs r0, r2, 4\n\
- adds r0, 0x7\n\
- movs r1, 0xF\n\
- ands r1, r2\n\
- adds r1, 0x7\n\
- adds r2, r3, 0\n\
- bl sub_80FF394\n\
-_080BBD3A:\n\
- ldrh r0, [r4]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- strh r0, [r4]\n\
- cmp r0, 0xF\n\
- bls _080BBCFC\n\
- cmp r5, 0\n\
- beq _080BBD88\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- movs r2, 0x88\n\
- lsls r2, 2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl sub_80BB764\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- adds r0, 0x7\n\
- ldrh r1, [r4]\n\
- adds r1, 0x7\n\
- ldr r2, _080BBD84 @ =0x00000e21\n\
- bl MapGridSetMetatileIdAt\n\
- b _080BBDBC\n\
- .align 2, 0\n\
-_080BBD70: .4byte 0x00004054\n\
-_080BBD74: .4byte gSaveBlock1\n\
-_080BBD78: .4byte 0x00001a2a\n\
-_080BBD7C: .4byte 0x00001a1a\n\
-_080BBD80: .4byte gDecorations\n\
-_080BBD84: .4byte 0x00000e21\n\
-_080BBD88:\n\
- mov r0, r8\n\
- cmp r0, 0x1\n\
- bne _080BBDBC\n\
- ldr r0, _080BBDC8 @ =0x00004089\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bne _080BBDBC\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- movs r2, 0x88\n\
- lsls r2, 2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl sub_80BB764\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- adds r0, 0x7\n\
- ldrh r1, [r4]\n\
- adds r1, 0x7\n\
- ldr r2, _080BBDCC @ =0x00000e0a\n\
- bl MapGridSetMetatileIdAt\n\
-_080BBDBC:\n\
- add sp, 0x4\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080BBDC8: .4byte 0x00004089\n\
-_080BBDCC: .4byte 0x00000e0a\n\
-.syntax divided\n");
-}
-
-__attribute__((naked))
-void sub_80BBDD0(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- ldr r0, _080BBE00 @ =0x00004054\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- bl CurrentMapIsSecretBase\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080BBE08\n\
- ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\
- str r0, [sp, 0x4]\n\
- adds r0, 0xC\n\
- str r0, [sp, 0x8]\n\
- movs r1, 0xC\n\
- str r1, [sp, 0xC]\n\
- b _080BBE1E\n\
- .align 2, 0\n\
-_080BBE00: .4byte 0x00004054\n\
-_080BBE04: .4byte gSaveBlock1 + 0x2688\n\
-_080BBE08:\n\
- lsls r1, r4, 2\n\
- adds r1, r4\n\
- lsls r1, 5\n\
- ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\
- adds r2, r1, r0\n\
- str r2, [sp, 0x4]\n\
- adds r0, 0x10\n\
- adds r1, r0\n\
- str r1, [sp, 0x8]\n\
- movs r3, 0x10\n\
- str r3, [sp, 0xC]\n\
-_080BBE1E:\n\
- movs r6, 0\n\
- ldr r4, [sp, 0xC]\n\
- cmp r6, r4\n\
- bcc _080BBE28\n\
- b _080BBF6C\n\
-_080BBE28:\n\
- ldr r5, _080BBF80 @ =gSaveBlock1\n\
- mov r10, r5\n\
-_080BBE2C:\n\
- ldr r1, [sp, 0x4]\n\
- adds r0, r1, r6\n\
- ldrb r1, [r0]\n\
- mov r9, r0\n\
- adds r2, r6, 0x1\n\
- str r2, [sp, 0x10]\n\
- cmp r1, 0\n\
- bne _080BBE3E\n\
- b _080BBF5E\n\
-_080BBE3E:\n\
- ldrb r0, [r0]\n\
- lsls r0, 5\n\
- ldr r3, _080BBF84 @ =gDecorations\n\
- adds r0, r3\n\
- ldrb r0, [r0, 0x11]\n\
- cmp r0, 0x4\n\
- beq _080BBE4E\n\
- b _080BBF5E\n\
-_080BBE4E:\n\
- movs r5, 0\n\
- ldr r0, _080BBF88 @ =gMapHeader\n\
- ldr r2, [r0, 0x4]\n\
- ldrb r3, [r2]\n\
- mov r8, r0\n\
- cmp r5, r3\n\
- bcs _080BBE8E\n\
- ldr r0, [r2, 0x4]\n\
- ldrh r1, [r0, 0x14]\n\
- ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\
- ldrh r0, [r4]\n\
- adds r0, 0xAE\n\
- adds r7, r4, 0\n\
- cmp r1, r0\n\
- beq _080BBE8E\n\
- adds r4, r2, 0\n\
- adds r2, r3, 0\n\
-_080BBE70:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, r2\n\
- bcs _080BBE8E\n\
- ldr r1, [r4, 0x4]\n\
- lsls r0, r5, 1\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrh r1, [r0, 0x14]\n\
- ldrh r0, [r7]\n\
- adds r0, 0xAE\n\
- cmp r1, r0\n\
- bne _080BBE70\n\
-_080BBE8E:\n\
- mov r1, r8\n\
- ldr r0, [r1, 0x4]\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- beq _080BBF5E\n\
- ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\
- ldr r2, [sp, 0x8]\n\
- adds r1, r2, r6\n\
- ldrb r0, [r1]\n\
- lsrs r0, 4\n\
- strh r0, [r7]\n\
- ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\
- ldrb r1, [r1]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- strh r0, [r6]\n\
- ldrh r0, [r7]\n\
- adds r0, 0x7\n\
- ldrh r1, [r6]\n\
- adds r1, 0x7\n\
- bl MapGridGetMetatileBehaviorAt\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- adds r0, r4, 0\n\
- bl sub_80572D8\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- beq _080BBEDA\n\
- adds r0, r4, 0\n\
- bl sub_80572EC\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080BBF5E\n\
-_080BBEDA:\n\
- mov r3, r8\n\
- ldr r0, [r3, 0x4]\n\
- ldr r1, [r0, 0x4]\n\
- lsls r4, r5, 1\n\
- adds r4, r5\n\
- lsls r4, 3\n\
- adds r1, r4, r1\n\
- ldr r5, _080BBF98 @ =0x00003f20\n\
- adds r0, r5, 0\n\
- ldrb r1, [r1, 0x1]\n\
- adds r0, r1\n\
- ldr r1, _080BBF9C @ =gScriptResult\n\
- strh r0, [r1]\n\
- ldrh r0, [r1]\n\
- mov r2, r9\n\
- ldrb r1, [r2]\n\
- lsls r1, 5\n\
- ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\
- adds r1, r3\n\
- ldr r1, [r1]\n\
- ldrh r1, [r1]\n\
- bl VarSet\n\
- mov r5, r8\n\
- ldr r0, [r5, 0x4]\n\
- ldr r0, [r0, 0x4]\n\
- adds r4, r0\n\
- ldrb r0, [r4]\n\
- ldr r1, _080BBF9C @ =gScriptResult\n\
- strh r0, [r1]\n\
- ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\
- ldrh r0, [r2]\n\
- adds r0, 0xAE\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl FlagClear\n\
- ldr r3, _080BBF9C @ =gScriptResult\n\
- ldrb r0, [r3]\n\
- mov r4, r10\n\
- ldrb r1, [r4, 0x5]\n\
- ldrb r2, [r4, 0x4]\n\
- bl show_sprite\n\
- ldr r5, _080BBF9C @ =gScriptResult\n\
- ldrb r0, [r5]\n\
- ldrb r1, [r4, 0x5]\n\
- ldrb r2, [r4, 0x4]\n\
- movs r4, 0\n\
- ldrsh r3, [r7, r4]\n\
- movs r5, 0\n\
- ldrsh r4, [r6, r5]\n\
- str r4, [sp]\n\
- bl sub_805C0F8\n\
- ldr r1, _080BBF9C @ =gScriptResult\n\
- ldrb r0, [r1]\n\
- mov r2, r10\n\
- ldrb r1, [r2, 0x5]\n\
- ldrb r2, [r2, 0x4]\n\
- bl sub_805C78C\n\
- ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\
- ldrh r0, [r3]\n\
- adds r0, 0x1\n\
- strh r0, [r3]\n\
-_080BBF5E:\n\
- ldr r4, [sp, 0x10]\n\
- lsls r0, r4, 24\n\
- lsrs r6, r0, 24\n\
- ldr r5, [sp, 0xC]\n\
- cmp r6, r5\n\
- bcs _080BBF6C\n\
- b _080BBE2C\n\
-_080BBF6C:\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\
-_080BBF80: .4byte gSaveBlock1\n\
-_080BBF84: .4byte gDecorations\n\
-_080BBF88: .4byte gMapHeader\n\
-_080BBF8C: .4byte gSpecialVar_0x8004\n\
-_080BBF90: .4byte gSpecialVar_0x8006\n\
-_080BBF94: .4byte gSpecialVar_0x8007\n\
-_080BBF98: .4byte 0x00003f20\n\
-_080BBF9C: .4byte gScriptResult\n\
-_080BBFA0: .4byte gDecorations + 0x1C\n\
-.syntax divided\n");
-}
-#endif
-
void sub_80BBFA4(void)
{
int curBase = VarGet(VAR_0x4054);
VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]);
}
-void sub_80BBFD8(s16 *position, struct MapEvents *events)
+void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events)
{
s16 bgevtidx;
for (bgevtidx=0; bgevtidx<events->bgEventCount; bgevtidx++) {
- if (events->bgEvents[bgevtidx].kind == 8 && position[0] == events->bgEvents[bgevtidx].x + 7 && position[1] == events->bgEvents[bgevtidx].y + 7) {
+ if (events->bgEvents[bgevtidx].kind == 8 && position->x == events->bgEvents[bgevtidx].x + 7 && position->y == events->bgEvents[bgevtidx].y + 7) {
gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId;
break;
}
}
}
-void sub_80BC038(s16 *position, struct MapEvents *events)
+void sub_80BC038(struct MapPosition *position, struct MapEvents *events)
{
sub_80BBFD8(position, events);
sub_80BB5E4();
@@ -777,7 +504,7 @@ bool8 sub_80BC050(void)
{
sub_80BB5D0();
sub_80BB5E4();
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
return FALSE;
return TRUE;
}
@@ -811,17 +538,17 @@ void sub_80BC0F8(void) {
}
void sub_80BC114(void) {
- if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC)
- gScriptResult = 1;
+ if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC)
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
u8 sub_80BC14C(u8 sbid)
{
s16 idx;
- for (idx=0; idx<20; idx++) {
- if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid)
+ for (idx=0; idx<MAX_SECRET_BASES; idx++) {
+ if (gSaveBlock1.secretBases[idx].secretBaseId == sbid)
return idx;
}
return 0;
@@ -831,9 +558,9 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190
u8 local1;
u8 *str;
- local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].sbr_field_2);
+ local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].playerName);
- str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1);
+ str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].playerName, local1);
str[0] = EOS;
#if ENGLISH
@@ -844,61 +571,60 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190
}
u8 *GetSecretBaseMapName(u8 *dest) {
- gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0;
+ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId;
return sub_80BC190(dest, VarGet(VAR_0x4054));
}
void sub_80BC224(void) {
- u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].sbr_field_2;
+ u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].playerName;
u8 *var1 = gStringVar1;
u8 var2 = sub_80BB8A8(var0);
u8 *var3 = StringCopyN(var1, var0, var2);
*var3 = EOS;
}
-u8 sub_80BC268(u8 foo) { // 80bc268
- if (gSaveBlock1.secretBases[foo].sbr_field_1_6)
- return 1;
- return 0;
+bool8 sub_80BC268(u8 i) { // 80bc268
+ if (gSaveBlock1.secretBases[i].sbr_field_1_6)
+ return TRUE;
+ return FALSE;
}
u8 sub_80BC298(struct Pokemon *mon) { // 80bc298
u16 evsum = GetMonData(mon, MON_DATA_HP_EV);
evsum += GetMonData(mon, MON_DATA_ATK_EV);
evsum += GetMonData(mon, MON_DATA_DEF_EV);
- evsum += GetMonData(mon, MON_DATA_SPD_EV);
+ evsum += GetMonData(mon, MON_DATA_SPEED_EV);
evsum += GetMonData(mon, MON_DATA_SPATK_EV);
evsum += GetMonData(mon, MON_DATA_SPDEF_EV);
return (u8)(evsum / 6);
}
#ifdef NONMATCHING
+// So much is wrong with this function.
+// The compiler likes to store pointers in temp variables. That's not what it's supposed to do.
void sub_80BC300(void)
{
+ u16 partyidx;
u16 moveidx;
u16 sbpartyidx = 0;
- int resetVal = 0;
- u16 partyidx = 0;
- while (partyidx < 6) {
- partyidx ++;
- for (moveidx=0; moveidx<4; moveidx++) {
- gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal;
- }
- gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal;
- if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) {
+ for (partyidx=0; partyidx<PARTY_SIZE; partyidx++)
+ {
+ for (moveidx=0; moveidx<4; moveidx++)
+ gSaveBlock1.secretBases[0].partyMoves[partyidx * 4 + moveidx] = MOVE_NONE;
+ gSaveBlock1.secretBases[0].partySpecies[partyidx] = SPECIES_NONE;
+ gSaveBlock1.secretBases[0].partyHeldItems[partyidx] = ITEM_NONE;
+ gSaveBlock1.secretBases[0].partyLevels[partyidx] = 0;
+ gSaveBlock1.secretBases[0].partyPersonality[partyidx] = 0;
+ gSaveBlock1.secretBases[0].partyEVs[partyidx] = 0;
+ if (GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&(gPlayerParty[partyidx]), MON_DATA_IS_EGG)) {
+ for (moveidx=0; moveidx<4; moveidx++)
+ gSaveBlock1.secretBases[0].partyMoves[sbpartyidx * 4 + moveidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_MOVE1 + moveidx);
+ gSaveBlock1.secretBases[0].partySpecies[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES);
+ gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_HELD_ITEM);
+ gSaveBlock1.secretBases[0].partyLevels[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_LEVEL);
+ gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_PERSONALITY);
+ gSaveBlock1.secretBases[0].partyEVs[sbpartyidx] = sub_80BC298(&(gPlayerParty[partyidx]));
sbpartyidx ++;
- for (moveidx=0; moveidx<4; moveidx++) {
- gSaveBlock1.secretBases[0].partyMoves[(sbpartyidx - 1) * 6 + moveidx] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_MOVE1 + moveidx);
- }
- gSaveBlock1.secretBases[0].partySpecies[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES);
- gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_HELD_ITEM);
- gSaveBlock1.secretBases[0].partyLevels[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_LEVEL);
- gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_PERSONALITY);
- gSaveBlock1.secretBases[0].partyEVs[sbpartyidx - 1] = sub_80BC298(&(gPlayerParty[partyidx - 1]));
}
}
}
@@ -1070,6 +796,913 @@ void sub_80BC440(void)
void SecretBasePC_PackUp(void)
{
- IncrementGameStat(20);
+ IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE);
sub_80BC440();
}
+
+void sub_80BC474(void)
+{
+ u16 eventId;
+ struct MapEvents *mapEvents = gMapHeader.events;
+ for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++)
+ {
+ if (mapEvents->bgEvents[eventId].kind == 8
+ && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId)
+ {
+ u16 i;
+ s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7);
+
+ for (i = 0; i < 7; i++)
+ {
+ if (gUnknown_083D1358[i].unk_083D1358_1 == tileId)
+ {
+ MapGridSetMetatileIdAt(
+ mapEvents->bgEvents[eventId].x + 7,
+ mapEvents->bgEvents[eventId].y + 7,
+ gUnknown_083D1358[i].unk_083D1358_0 | 0xc00);
+ break;
+ }
+ }
+
+ DrawWholeMapView();
+ break;
+ }
+ }
+}
+
+void sub_80BC50C(void)
+{
+ u16 backupValue;
+ sub_80BC474();
+ IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE);
+
+ backupValue = gSaveBlock1.secretBases[0].sbr_field_e;
+ ResetSecretBase(0);
+ gSaveBlock1.secretBases[0].sbr_field_e = backupValue;
+}
+
+u8 sub_80BC538(void)
+{
+ s16 secretBaseIndex;
+ u8 retVal = 0;
+
+ for (secretBaseIndex = 1; secretBaseIndex < MAX_SECRET_BASES; secretBaseIndex++)
+ {
+ if (sub_80BC268(secretBaseIndex) == TRUE)
+ {
+ retVal++;
+ }
+ }
+
+ return retVal;
+}
+
+void sub_80BC56C(void)
+{
+ u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC);
+ if (sub_80BC268(secretBaseIndex) == TRUE)
+ {
+ gSpecialVar_Result = 1;
+ }
+ else if (sub_80BC538() > 9)
+ {
+ gSpecialVar_Result = 2;
+ }
+ else
+ {
+ gSpecialVar_Result = 0;
+ }
+}
+
+void sub_80BC5BC(void)
+{
+ gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1;
+ FlagSet(FLAG_DECORATION_16);
+}
+
+void SecretBasePC_Decoration(void)
+{
+ CreateTask(Task_SecretBasePC_Decoration, 0);
+}
+
+void SecretBasePC_Registry(void)
+{
+ CreateTask(Task_SecretBasePC_Registry, 0);
+}
+
+void Task_SecretBasePC_Registry(u8 taskId)
+{
+ s16 *taskData;
+
+ ScriptContext2_Enable();
+ sub_80F944C();
+ LoadScrollIndicatorPalette();
+
+ taskData = gTasks[taskId].data;
+ taskData[0] = sub_80BC538();
+ if (taskData[0] != 0)
+ {
+ if (taskData[0] > 7) {
+ taskData[3] = 7;
+ }
+ else
+ {
+ taskData[3] = taskData[0];
+ }
+
+ taskData[1] = 0;
+ taskData[2] = 0;
+
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BC7D8(taskId);
+
+ gTasks[taskId].func = sub_80BC824;
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0);
+ }
+}
+
+void sub_80BC6B0(u8 taskId)
+{
+ u8 i;
+ s16 *taskData = gTasks[taskId].data;
+ u8 m = 0;
+ u8 n = 0;
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (m == taskData[2])
+ {
+ m = i;
+ break;
+ }
+
+ if (sub_80BC268(i) == TRUE)
+ m++;
+ }
+
+ for (i = m; i < MAX_SECRET_BASES; i++)
+ {
+ if (sub_80BC268(i) == TRUE)
+ {
+ sub_80BC190(gStringVar1, i);
+ MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3);
+ MenuPrint(gStringVar1, 18, 2 * n + 2);
+ if (++n == 8)
+ break;
+ }
+ }
+
+ if (n < 8)
+ {
+ MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3);
+ MenuPrint(gUnknownText_Exit, 18, 2 * n + 2);
+ DestroyVerticalScrollIndicator(1);
+ if (n != 7)
+ MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
+ }
+ else
+ CreateVerticalScrollIndicators(1, 0xbc, 0x98);
+
+ if (taskData[2] == 0)
+ DestroyVerticalScrollIndicator(0);
+ else
+ CreateVerticalScrollIndicators(0, 0xbc, 0x08);
+}
+
+void sub_80BC7D8(u8 taskId)
+{
+ u16 *taskData = gTasks[taskId].data;
+ MenuDrawTextWindow(17, 0, 29, 19);
+ InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
+
+ sub_80BC6B0(taskId);
+}
+
+void sub_80BC824(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (taskData[1])
+ {
+ PlaySE(5);
+ taskData[1] = MoveMenuCursor(-1);
+ }
+ else if (taskData[2])
+ {
+ PlaySE(5);
+ taskData[2]--;
+ sub_80BC6B0(taskId);
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (taskData[1] == taskData[3])
+ {
+ if (taskData[2] + taskData[1] != taskData[0])
+ {
+ PlaySE(5);
+ taskData[2]++;
+ sub_80BC6B0(taskId);
+ }
+ }
+ else
+ {
+ PlaySE(5);
+ taskData[1] = MoveMenuCursor(1);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(5);
+ if (taskData[1] + taskData[2] == taskData[0])
+ {
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BCC54(taskId);
+ }
+ else
+ {
+ HandleDestroyMenuCursors();
+ taskData[4] = sub_80BC948(taskData[1] + taskData[2]);
+ sub_80BC980(taskId);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(5);
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BCC54(taskId);
+ }
+}
+
+u8 sub_80BC948(u8 a)
+{
+ u8 secretBaseIndex;
+ u8 count = 0;
+
+ for (secretBaseIndex = 1; secretBaseIndex < MAX_SECRET_BASES; secretBaseIndex++)
+ {
+ if (sub_80BC268(secretBaseIndex) == TRUE)
+ {
+ if (a == count)
+ {
+ return secretBaseIndex;
+ }
+
+ count++;
+ }
+ }
+
+ return 0;
+}
+
+void sub_80BC980(u8 taskId)
+{
+ PauseVerticalScrollIndicator(0);
+ PauseVerticalScrollIndicator(1);
+ MenuDrawTextWindow(1, 0, 12, 5);
+ PrintMenuItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4);
+ InitMenu(0, 2, 1, 2, 0, 10);
+ gTasks[taskId].func = sub_80BC9E4;
+}
+
+void sub_80BC9E4(u8 taskId)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (GetMenuCursorPos())
+ {
+ PlaySE(5);
+ MoveMenuCursor(-1);
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (GetMenuCursorPos() != 1)
+ {
+ PlaySE(5);
+ MoveMenuCursor(1);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(5);
+ gUnknown_083D13D4[GetMenuCursorPos()].func(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(5);
+ sub_80BCBF8(taskId);
+ }
+}
+
+void sub_80BCA84(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+
+ sub_80BC190(gStringVar1, taskData[4]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0);
+}
+
+void sub_80BCAEC(u8 taskId)
+{
+ DisplayYesNoMenu(20, 8, 1);
+ DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4);
+}
+
+void sub_80BCB10(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+
+ gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0;
+ taskData[0]--;
+
+ if (taskData[2] > 0)
+ {
+ taskData[2]--;
+ }
+
+ if (taskData[0] < 8)
+ {
+ taskData[3]--;
+ }
+
+ sub_80BC7D8(taskId);
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCB90(u8 taskId)
+{
+ MenuZeroFillWindowRect(20, 8, 26, 13);
+ DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0);
+}
+
+void sub_80BCBC0(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+
+ sub_80BC7D8(taskId);
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCBF8(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+
+ InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
+ MenuZeroFillWindowRect(1, 0, 12, 5);
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCC54(u8 taskId)
+{
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+
+ BuyMenuFreeMemory();
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+
+ if (curBaseIndex == 0)
+ {
+ ScriptContext1_SetupScript(gUnknown_0815F399);
+ }
+ else
+ {
+ ScriptContext1_SetupScript(gUnknown_0815F49A);
+ }
+
+ DestroyTask(taskId);
+}
+
+u8 sub_80BCCA4(u8 secretBaseIndex)
+{
+ return (gSaveBlock1.secretBases[secretBaseIndex].playerName[OT_NAME_LENGTH] % 5)
+ + gSaveBlock1.secretBases[secretBaseIndex].gender * 5;
+}
+
+const u8 *sub_80BCCE8(void)
+{
+ u8 param = sub_80BCCA4(VarGet(VAR_0x4054));
+ if (param == 0) return UnknownString_81A1BB2;
+ if (param == 1) return UnknownString_81A1F67;
+ if (param == 2) return UnknownString_81A2254;
+ if (param == 3) return UnknownString_81A25C3;
+ if (param == 4) return UnknownString_81A2925;
+ if (param == 5) return UnknownString_81A1D74;
+ if (param == 6) return UnknownString_81A20C9;
+ if (param == 7) return UnknownString_81A2439;
+ if (param == 8) return UnknownString_81A2754;
+ return UnknownString_81A2B2A;
+}
+
+// Debugging function to test secret base battles.
+void unref_sub_80BCD7C(u8 secretBaseIndex)
+{
+ u16 i;
+ for (i = 0; i == 0; i++)
+ {
+ gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partySpecies[i] = SPECIES_TREECKO;
+ gSaveBlock1.secretBases[secretBaseIndex].partyHeldItems[i] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partyLevels[i] = i + 5;
+ gSaveBlock1.secretBases[secretBaseIndex].partyEVs[i] = i * 5;
+ }
+}
+
+void sub_80BCE1C(void)
+{
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+ sub_810FB10(1);
+
+ CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]);
+}
+
+void sub_80BCE4C()
+{
+ gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result;
+}
+
+void sub_80BCE90()
+{
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+
+ if (!FlagGet(FLAG_DAILY_UNKNOWN_8C2))
+ {
+ u8 i;
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ gSaveBlock1.secretBases[i].sbr_field_1_5 = 0;
+ }
+
+ FlagSet(FLAG_DAILY_UNKNOWN_8C2);
+ }
+
+ gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex);
+ gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5;
+}
+
+void sub_80BCF1C(u8 taskId)
+{
+ s16 x, y;
+ u32 behavior;
+ s16 *taskData = gTasks[taskId].data;
+
+ switch (taskData[1])
+ {
+ case 0:
+ PlayerGetDestCoords(&taskData[2], &taskData[3]);
+ taskData[1] = 1;
+ break;
+ case 1:
+ PlayerGetDestCoords(&x, &y);
+ if (x != taskData[2] || y != taskData[3])
+ {
+ taskData[2] = x;
+ taskData[3] = y;
+
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (sub_8057350(behavior) == TRUE)
+ {
+ DoYellowCave4Sparkle();
+ }
+ else if (sub_8057314(behavior) == TRUE)
+ {
+ sub_80C68A4(MapGridGetMetatileIdAt(x, y), x, y);
+ }
+ else if (sub_8057328(behavior) == TRUE)
+ {
+ sub_80C6A54(x, y);
+ }
+ else if (sub_805733C(behavior) == TRUE)
+ {
+ DoDecorationSoundEffect(MapGridGetMetatileIdAt(x, y));
+ }
+ }
+ break;
+ case 2:
+ if (!FieldEffectActiveListContains(taskData[4]))
+ {
+ taskData[1] = 1;
+ }
+ break;
+ }
+}
+
+void sub_80BD034(u8 i, struct SecretBaseRecord *secretBase)
+{
+ gSaveBlock1.secretBases[i] = *secretBase;
+ gSaveBlock1.secretBases[i].sbr_field_1_6 = 2;
+}
+
+bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (baseA->trainerId[i] != baseB->trainerId[i])
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80BD0A0(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ u8 i;
+
+ for (i = 0; i < OT_NAME_LENGTH && (baseA->playerName[i] != 0xFF || baseB->playerName[i] != 0xFF); i++)
+ {
+ if (baseA->playerName[i] != baseB->playerName[i])
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80BD0EC(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ if (baseA->gender == baseB->gender && sub_80BD070(baseA, baseB) && sub_80BD0A0(baseA, baseB))
+ {
+ return TRUE;
+ }
+
+
+ return FALSE;
+}
+
+s16 sub_80BD12C(u8 secretBaseId)
+{
+ s16 i;
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+u8 sub_80BD170(void)
+{
+ s16 i;
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (gSaveBlock1.secretBases[i].secretBaseId == 0)
+ {
+ return i;
+ }
+ }
+
+ return 0;
+}
+
+u8 sub_80BD1B0(void)
+{
+ s16 i;
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0)
+ {
+ return i;
+ }
+ }
+
+ return 0;
+}
+
+u8 sub_80BD1FC(struct SecretBaseRecord *secretBase)
+{
+ s16 secretBaseIndex;
+
+ if (secretBase->secretBaseId == 0)
+ {
+ return 0;
+ }
+
+ secretBaseIndex = sub_80BD12C(secretBase->secretBaseId);
+ if (secretBaseIndex != 0)
+ {
+ if (secretBaseIndex != -1)
+ {
+ if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1)
+ {
+ return 0;
+ }
+ if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2
+ || secretBase->sbr_field_1_0 == 1)
+ {
+ sub_80BD034(secretBaseIndex, secretBase);
+ return secretBaseIndex;
+ }
+ }
+ else
+ {
+ secretBaseIndex = sub_80BD170();
+ if (secretBaseIndex != 0)
+ {
+ sub_80BD034(secretBaseIndex, secretBase);
+ return secretBaseIndex;
+ }
+ secretBaseIndex = sub_80BD1B0();
+ if (secretBaseIndex)
+ {
+ sub_80BD034(secretBaseIndex, secretBase);
+ return secretBaseIndex;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void sub_80BD280(void)
+{
+ u8 i;
+ u8 j;
+ struct SecretBaseRecord temp;
+ struct SecretBaseRecord *secretBases = gSaveBlock1.secretBases;
+
+ for (i = 1; i < MAX_SECRET_BASES - 1; i++)
+ {
+ for (j = i + 1; j < MAX_SECRET_BASES; j++)
+ {
+ if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1)
+ || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2))
+ {
+ temp = secretBases[i];
+ secretBases[i] = secretBases[j];
+ secretBases[j] = temp;
+ }
+ }
+ }
+}
+
+void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b)
+{
+ u16 i;
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (secretBases[i].sbr_field_1_6 == b)
+ {
+ sub_80BD1FC(&secretBases[i]);
+ }
+ }
+}
+
+bool8 sub_80BD358(struct SecretBaseRecord *secretBase)
+{
+ u8 i;
+
+ if (!secretBase->secretBaseId)
+ return FALSE;
+
+ if (secretBase->secretBaseId && secretBase->gender != gSaveBlock2.playerGender)
+ return FALSE;
+
+ // Check if the player's trainer Id matches the secret base's id.
+ for (i = 0; i < 4; i++)
+ {
+ if (secretBase->trainerId[i] != gSaveBlock2.playerTrainerId[i])
+ return FALSE;
+ }
+
+ for (i = 0; i < OT_NAME_LENGTH && (secretBase->playerName[i] != 0xFF || gSaveBlock2.playerName[i] != 0xFF); i++)
+ {
+ if (secretBase->playerName[i] != gSaveBlock2.playerName[i])
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80BD3DC(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC)
+{
+ u8 i;
+ u8 var1 = 0;
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ if ((var1 & 1) == 0)
+ {
+ if (sub_80BD358(&basesA[i]) == TRUE)
+ {
+ ClearSecretBase(&basesA[i]);
+ var1 |= 1;
+ }
+ }
+
+ if ((var1 & 2) == 0)
+ {
+ if (sub_80BD358(&basesB[i]) == TRUE)
+ {
+ ClearSecretBase(&basesB[i]);
+ var1 |= 2;
+ }
+ }
+
+ if ((var1 & 4) == 0)
+ {
+ if (sub_80BD358(&basesC[i]) == TRUE)
+ {
+ ClearSecretBase(&basesC[i]);
+ var1 |= 4;
+ }
+ }
+
+ if (var1 == 7)
+ {
+ break;
+ }
+ }
+}
+
+bool8 sub_80BD494(struct SecretBaseRecord *base, struct SecretBaseRecord *secretBases, u8 c)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ if (secretBases[i].secretBaseId)
+ {
+ if (sub_80BD0EC(base, &secretBases[i]) == TRUE)
+ {
+ if (c == 0)
+ {
+ ClearSecretBase(&secretBases[i]);
+ return FALSE;
+ }
+
+ if (base->sbr_field_e > secretBases[i].sbr_field_e)
+ {
+ ClearSecretBase(&secretBases[i]);
+ return FALSE;
+ }
+
+ secretBases[i].sbr_field_1_0 = base->sbr_field_1_0;
+
+ ClearSecretBase(base);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC, struct SecretBaseRecord *basesD)
+{
+ u8 i;
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (basesA[i].secretBaseId)
+ {
+ if (basesA[i].sbr_field_1_6 == 1)
+ {
+ basesA[i].sbr_field_1_0 = 1;
+ }
+
+ if (!sub_80BD494(&basesA[i], basesB, i))
+ {
+ if (!sub_80BD494(&basesA[i], basesC, i))
+ {
+ sub_80BD494(&basesA[i], basesD, i);
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ if (basesB[i].secretBaseId)
+ {
+ basesB[i].sbr_field_1_5 = 0;
+
+ if (!sub_80BD494(&basesB[i], basesC, i))
+ {
+ sub_80BD494(&basesB[i], basesD, i);
+ }
+ }
+ }
+
+ for (i = 0; i < MAX_SECRET_BASES; i++)
+ {
+ if (basesC[i].secretBaseId)
+ {
+ basesC[i].sbr_field_1_5 = 0;
+ sub_80BD494(&basesC[i], basesD, i);
+ }
+
+ if (basesD[i].secretBaseId)
+ {
+ basesD[i].sbr_field_1_5 = 0;
+ }
+ }
+}
+
+void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC)
+{
+ sub_80BD3DC(basesA, basesB, basesC);
+ sub_80BD514(gSaveBlock1.secretBases, basesA, basesB, basesC);
+
+ sub_80BD1FC(basesA);
+ sub_80BD1FC(basesB);
+ sub_80BD1FC(basesC);
+
+ sub_80BD328(basesA, 1);
+ sub_80BD328(basesB, 1);
+ sub_80BD328(basesC, 1);
+
+ sub_80BD328(basesA, 0);
+ sub_80BD328(basesB, 0);
+ sub_80BD328(basesC, 0);
+}
+
+void sub_80BD674(void *playerRecords, u32 size, u8 c)
+{
+ if (FlagGet(FLAG_RECEIVED_SECRET_POWER))
+ {
+ u16 i;
+ u8 numLinkedPlayers = GetLinkPlayerCount();
+ switch (numLinkedPlayers)
+ {
+ case 2:
+ memset(playerRecords + size * 2, 0, size);
+ memset(playerRecords + size * 3, 0, size);
+ break;
+ case 3:
+ memset(playerRecords + size * 3, 0, size);
+ break;
+ }
+
+ switch (c)
+ {
+ case 0:
+ sub_80BD610(playerRecords + size, playerRecords + size * 2, playerRecords + size * 3);
+ break;
+ case 1:
+ sub_80BD610(playerRecords + size * 2, playerRecords + size * 3, playerRecords);
+ break;
+ case 2:
+ sub_80BD610(playerRecords + size * 3, playerRecords, playerRecords + size);
+ break;
+ case 3:
+ sub_80BD610(playerRecords, playerRecords + size, playerRecords + size * 2);
+ break;
+ }
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (gSaveBlock1.secretBases[i].sbr_field_1_0 == 1)
+ {
+ gSaveBlock1.secretBases[i].sbr_field_1_6 = 1;
+ gSaveBlock1.secretBases[i].sbr_field_1_0 = 0;
+ }
+ }
+
+ sub_80BD280();
+
+ for (i = 1; i < MAX_SECRET_BASES; i++)
+ {
+ if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2)
+ {
+ gSaveBlock1.secretBases[i].sbr_field_1_6 = 0;
+ }
+ }
+
+ if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF)
+ {
+ gSaveBlock1.secretBases[0].sbr_field_e++;
+ }
+ }
+}
diff --git a/src/field/shop.c b/src/field/shop.c
index 375205935..23d668fc7 100644
--- a/src/field/shop.c
+++ b/src/field/shop.c
@@ -21,18 +21,15 @@
#include "fieldmap.h"
#include "item.h"
#include "decoration.h"
-#include "items.h"
-#include "songs.h"
+#include "constants/items.h"
+#include "constants/songs.h"
#include "overworld.h"
#include "decoration_inventory.h"
#include "field_camera.h"
-
-#define ewram18000 ((u16 *)(ewram + 0x18000))
-#define ewram18300 ((u16 *)(ewram + 0x18300))
+#include "ewram.h"
extern bool8 sub_80A52C4(u8, u8);
-extern u8 ewram[];
extern u8 gBuyMenuFrame_Gfx[];
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
@@ -54,7 +51,7 @@ static struct MartInfo gMartInfo;
// ewram
EWRAM_DATA u32 gMartTotalCost = 0;
-EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; // game freak barely uses 2d arrays wtf?
+EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0};
EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static
EWRAM_DATA u8 gUnknown_02038730 = 0;
EWRAM_DATA u8 gUnknown_02038731 = 0;
@@ -282,7 +279,7 @@ void BuyMenuDrawGraphics(void)
register const u32 zero asm("r6") = 0;
DmaFill32(3, zero, addr, OAM_SIZE);
LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
- LZDecompressWram(gBuyMenuFrame_Tilemap, (void *)0x02018000);
+ LZDecompressWram(gBuyMenuFrame_Tilemap, ewram18000_2);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));
FreeAllSpritePalettes();
ResetPaletteFade();
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index e8e4f271b..89ec68b0a 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -3,6 +3,7 @@
#include "decompress.h"
#include "palette.h"
#include "task.h"
+#include "ewram.h"
struct UnkStruct2000000 {
/*0x00*/ u8 filler00[61];
@@ -15,8 +16,6 @@ struct UnkStruct1 {
/*0x02*/ s16 unk02;
};
-extern struct UnkStruct2000000 unk_2000000;
-
extern struct UnkStruct1 *gUnknown_083ED048[];
extern const u16 gPalette_83EDE24[];
@@ -40,7 +39,7 @@ void sub_8104CAC(u8 arg0) {
sub_8104DA4();
- task = &gTasks[unk_2000000.unk3D];
+ task = &gTasks[ewram0_8->unk3D];
task->data[1] = arg0;
i = 0;
@@ -71,9 +70,9 @@ void sub_8106448(void) {
u32 offsetRead, offsetWrite;
u32 size;
- LZDecompressWram(gSlotMachine_Gfx, (void *) 0x02010000);
+ LZDecompressWram(gSlotMachine_Gfx, ewram10000_2);
- offsetRead = 0x02010000;
+ offsetRead = (u32)ewram10000_2;
offsetWrite = BG_VRAM;
size = SLOTMACHINE_GFX_TILES * 32;
while (TRUE)
@@ -94,7 +93,7 @@ void sub_8106448(void) {
}
void sub_81064B8(void) {
- CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2);
+ CpuCopy16(gUnknown_08E95AB8, BG_SCREEN_ADDR(29), 20 * 32 * 2);
LoadSlotMachineWheelOverlay();
}
@@ -102,7 +101,7 @@ static void LoadSlotMachineWheelOverlay(void) {
s16 x, y, dx;
u16 *screen;
- screen = (u16 *) BG_SCREEN_ADDR(30);
+ screen = BG_SCREEN_ADDR(30);
for (x = 4; x < 18; x += 5)
{
@@ -125,7 +124,7 @@ static void LoadSlotMachineWheelOverlay(void) {
}
void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) {
- u16 *vram = (u16 *) BG_SCREEN_ADDR(29);
+ u16 *vram = BG_SCREEN_ADDR(29);
vram[15 * 32 + arg0] = arg1;
vram[15 * 32 + 1 + arg0] = arg2;
@@ -137,9 +136,9 @@ void sub_81065DC(void) {
s16 y, x;
u16 *screen;
- CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2);
+ CpuCopy16(gUnknown_08E95FB8, BG_SCREEN_ADDR(29), 20 * 32 * 2);
- screen = (u16 *) BG_SCREEN_ADDR(30);
+ screen = BG_SCREEN_ADDR(30);
for (y = 0; y < 20; y++)
{
for (x = 0; x < 30; x++)
diff --git a/src/field/start_menu.c b/src/field/start_menu.c
index 6e44090df..dccf1714e 100644
--- a/src/field/start_menu.c
+++ b/src/field/start_menu.c
@@ -20,7 +20,7 @@
#include "save.h"
#include "save_menu_util.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
@@ -50,7 +50,7 @@ static bool8 savingComplete;
extern bool8 gDifferentSaveFile;
extern u16 gSaveFileStatus;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 gUnknown_03004860;
@@ -154,12 +154,12 @@ static void AddStartMenuAction(u8 action)
static void BuildStartMenuActions_Normal(void)
{
- if (FlagGet(SYS_POKEDEX_GET) == TRUE)
+ if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
AddStartMenuAction(MENU_ACTION_POKEDEX);
- if (FlagGet(SYS_POKEMON_GET) == TRUE)
+ if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE)
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
- if (FlagGet(SYS_POKENAV_GET) == TRUE)
+ if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
AddStartMenuAction(MENU_ACTION_POKENAV);
AddStartMenuAction(MENU_ACTION_PLAYER);
AddStartMenuAction(MENU_ACTION_SAVE);
@@ -182,7 +182,7 @@ static void BuildStartMenuActions_Link(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
- if (FlagGet(SYS_POKENAV_GET) == TRUE)
+ if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
AddStartMenuAction(MENU_ACTION_POKENAV);
AddStartMenuAction(MENU_ACTION_PLAYER_LINK);
AddStartMenuAction(MENU_ACTION_OPTION);
@@ -528,10 +528,10 @@ static void Task_SaveDialog(u8 taskId)
{
case SAVE_CANCELED:
case SAVE_ERROR:
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case SAVE_SUCCESS:
- gScriptResult = status;
+ gSpecialVar_Result = status;
break;
case SAVE_IN_PROGRESS:
return;
diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c
index 2b28df4f0..701d4087a 100644
--- a/src/field/starter_choose.c
+++ b/src/field/starter_choose.c
@@ -6,9 +6,9 @@
#include "menu.h"
#include "palette.h"
#include "pokedex.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
-#include "species.h"
+#include "constants/species.h"
#include "sprite.h"
#include "string_util.h"
#include "strings.h"
@@ -16,7 +16,7 @@
#include "trig.h"
#include "unknown_task.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern struct SpriteTemplate gUnknown_02024E8C;
//--------------------------------------------------
@@ -324,24 +324,24 @@ void CB2_ChooseStarter(void)
//Create hand sprite
spriteId = CreateSprite(&gSpriteTemplate_83F77CC, 120, 56, 2);
- gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data[0] = taskId;
//Create three Pokeball sprites
spriteId = CreateSprite(
&gSpriteTemplate_83F77E4,
gStarterChoose_PokeballCoords[0][0], gStarterChoose_PokeballCoords[0][1], 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 0;
spriteId = CreateSprite(
&gSpriteTemplate_83F77E4,
gStarterChoose_PokeballCoords[1][0], gStarterChoose_PokeballCoords[1][1], 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = 1;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 1;
spriteId = CreateSprite(
&gSpriteTemplate_83F77E4,
gStarterChoose_PokeballCoords[2][0], gStarterChoose_PokeballCoords[2][1], 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = 2;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 2;
}
static void MainCallback2(void)
@@ -439,7 +439,7 @@ static void Task_StarterChoose5(u8 taskId)
{
case 0: // YES
//Return the starter choice and exit.
- gScriptResult = gTasks[taskId].tStarterSelection;
+ gSpecialVar_Result = gTasks[taskId].tStarterSelection;
SetMainCallback2(gMain.savedCallback);
break;
case 1: // NO
@@ -727,16 +727,16 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
//Sprite callback
static void sub_810A62C(struct Sprite *sprite)
{
- sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][0];
- sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][1];
- sprite->pos2.y = Sin(sprite->data1, 8);
- sprite->data1 = (u8)sprite->data1 + 4;
+ sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data[0]].tStarterSelection][0];
+ sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data[0]].tStarterSelection][1];
+ sprite->pos2.y = Sin(sprite->data[1], 8);
+ sprite->data[1] = (u8)sprite->data[1] + 4;
}
//Sprite callback
static void sub_810A68C(struct Sprite *sprite)
{
- if (gTasks[sprite->data0].tStarterSelection == sprite->data1)
+ if (gTasks[sprite->data[0]].tStarterSelection == sprite->data[1])
StartSpriteAnimIfDifferent(sprite, 1);
else
StartSpriteAnimIfDifferent(sprite, 0);
diff --git a/src/field/trader.c b/src/field/trader.c
index 61f48fad8..61cb0b4a2 100644
--- a/src/field/trader.c
+++ b/src/field/trader.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "constants/decorations.h"
#include "decoration.h"
#include "decoration_inventory.h"
#include "event_data.h"
@@ -7,7 +8,7 @@
#include "menu.h"
#include "menu_helpers.h"
#include "script.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
@@ -178,7 +179,7 @@ void Task_HandleGetDecorationMenuInput(u8 taskId)
void ScrSpecial_GetTraderTradedFlag(void)
{
struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
- gScriptResult = trader->alreadyTraded;
+ gSpecialVar_Result = trader->alreadyTraded;
}
void ScrSpecial_DoesPlayerHaveNoDecorations(void)
@@ -189,21 +190,21 @@ void ScrSpecial_DoesPlayerHaveNoDecorations(void)
{
if (sub_8134194(i))
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
return;
}
}
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
void ScrSpecial_IsDecorationFull(void)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category
&& sub_8133F9C(gDecorations[gSpecialVar_0x8004].category) == -1)
{
sub_80FE7D4(gStringVar2, gDecorations[gSpecialVar_0x8004].category);
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c
index 5a8ebbafc..38bc6971c 100644
--- a/src/field/trainer_see.c
+++ b/src/field/trainer_see.c
@@ -257,7 +257,7 @@ static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainer
{
u8 direction;
- FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldObjectGetLocalIdAndMap(trainerObj, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);
FieldObjectSetSpecialAnim(trainerObj, direction);
@@ -485,11 +485,11 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3)
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = 1;
- sprite->data0 = gFieldEffectArguments[0];
- sprite->data1 = gFieldEffectArguments[1];
- sprite->data2 = gFieldEffectArguments[2];
- sprite->data3 = -5;
- sprite->data7 = a2;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = -5;
+ sprite->data[7] = a2;
StartSpriteAnim(sprite, a3);
}
@@ -498,22 +498,22 @@ void objc_exclamation_mark_probably(struct Sprite *sprite)
{
u8 mapObjId;
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId)
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjId)
|| sprite->animEnded)
{
- FieldEffectStop(sprite, (u8)sprite->data7);
+ FieldEffectStop(sprite, (u8)sprite->data[7]);
}
else
{
struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId];
- sprite->data4 += sprite->data3;
+ sprite->data[4] += sprite->data[3];
sprite->pos1.x = mapObjSprite->pos1.x;
sprite->pos1.y = mapObjSprite->pos1.y - 16;
sprite->pos2.x = mapObjSprite->pos2.x;
- sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4;
- if (sprite->data4)
- sprite->data3++;
+ sprite->pos2.y = mapObjSprite->pos2.y + sprite->data[4];
+ if (sprite->data[4])
+ sprite->data[3]++;
else
- sprite->data3 = 0;
+ sprite->data[3] = 0;
}
}
diff --git a/src/field/tv.c b/src/field/tv.c
index e9b5e850d..1d5bf929c 100644
--- a/src/field/tv.c
+++ b/src/field/tv.c
@@ -8,36 +8,39 @@
#include "fieldmap.h"
#include "field_message_box.h"
#include "field_camera.h"
-#include "flags.h"
-#include "rng.h"
+#include "constants/flags.h"
+#include "random.h"
#include "string_util.h"
#include "text.h"
-#include "species.h"
+#include "constants/species.h"
#include "pokedex.h"
#include "naming_screen.h"
#include "overworld.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "strings.h"
#include "battle.h"
#include "link.h"
-#include "easy_chat.h"
+#include "constants/easy_chat.h"
#include "field_map_obj.h"
#include "field_specials.h"
#include "item.h"
-#include "items.h"
+#include "constants/items.h"
#include "link.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "naming_screen.h"
#include "pokedex.h"
#include "region_map.h"
-#include "rng.h"
+#include "random.h"
#include "overworld.h"
#include "rtc.h"
#include "script_menu.h"
-#include "species.h"
+#include "constants/species.h"
#include "string_util.h"
#include "strings.h"
#include "text.h"
+#include "ewram.h"
+#include "constants/moves.h"
+#include "region_map_sections.h"
struct UnkTvStruct
{
@@ -65,39 +68,15 @@ extern struct TVSaleItem gUnknown_02038724[3];
struct UnkTvStruct gUnknown_03005D38;
-extern u8 *gTVBravoTrainerTextGroup[];
-extern u8 *gTVBravoTrainerBattleTowerTextGroup[];
-extern u8 *gTVSmartShopperTextGroup[];
-extern u8 *gTVNameRaterTextGroup[];
-extern u8 *gTVPokemonTodayTextGroup[];
-extern u8 *gTVPokemonTodayFailedCaptureTextGroup[];
-extern u8 *gTVFanClubTextGroup[];
-extern u8 *gTVRecentHappeningsTextGroup[];
-extern u8 *gTVFanClubOpinionsTextGroup[];
-extern u8 *gTVPokemonOutbreakTextGroup[];
-extern u8 *gTVGabbyAndTyTextGroup[];
-extern u8 *gTVFishingGuruAdviceTextGroup[];
-extern u8 *gTVWorldOfMastersTextGroup[];
-extern struct OutbreakPokemon gPokeOutbreakSpeciesList[5];
-
-
-
-extern const u8 *gTVNewsTextGroup1[];
-extern const u8 *gTVNewsTextGroup2[];
-extern const u8 *gTVNewsTextGroup3[];
+extern u16 gSpecialVar_LastTalked;
-extern u16 gScriptLastTalked;
-
-extern u8 gScriptContestCategory;
-extern u8 gScriptContestRank;
+extern u8 gSpecialVar_ContestCategory;
+extern u8 gSpecialVar_ContestRank;
extern u8 gUnknown_03004316[11];
extern u8 gBattleOutcome;
extern u16 gLastUsedItem;
-extern u8 ewram[];
-#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000))
-
static EWRAM_DATA u16 gUnknown_020387E0 = 0;
static EWRAM_DATA u16 gUnknown_020387E2 = 0;
static EWRAM_DATA u8 gUnknown_020387E4 = 0;
@@ -107,6 +86,351 @@ static u8 gUnknown_03000720;
static u8 gUnknown_03000721;
static s8 gUnknown_03000722;
+const struct OutbreakPokemon gPokeOutbreakSpeciesList[5] =
+{
+ {
+ .species = SPECIES_SURSKIT,
+ .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
+ .level = 3,
+ .location = MAPSEC_Route102,
+ },
+ {
+ .species = SPECIES_SURSKIT,
+ .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
+ .level = 15,
+ .location = MAPSEC_Route114,
+ },
+ {
+ .species = SPECIES_SURSKIT,
+ .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
+ .level = 15,
+ .location = MAPSEC_Route117,
+ },
+ {
+ .species = SPECIES_SURSKIT,
+ .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
+ .level = 28,
+ .location = MAPSEC_Route120,
+ },
+ {
+ .species = SPECIES_SKITTY,
+ .moves = {MOVE_GROWL, MOVE_TACKLE, MOVE_NONE, MOVE_NONE},
+ .level = 15,
+ .location = MAPSEC_Route116,
+ },
+};
+
+extern const u8 gTVNewsText_EnergyGuru1[];
+extern const u8 gTVNewsText_GameCorner1[];
+extern const u8 gTVNewsText_LilycoveDepartment1[];
+extern const u8 gTVNewsText_EnergyGuru2[];
+extern const u8 gTVNewsText_GameCorner2[];
+extern const u8 gTVNewsText_LilycoveDepartment2[];
+extern const u8 gTVNewsText_EnergyGuru3[];
+extern const u8 gTVNewsText_GameCorner3[];
+extern const u8 gTVNewsText_LilycoveDepartment3[];
+extern const u8 gTVFanClubText1[];
+extern const u8 gTVFanClubText2[];
+extern const u8 gTVFanClubText3[];
+extern const u8 gTVFanClubText4[];
+extern const u8 gTVFanClubText5[];
+extern const u8 gTVFanClubText6[];
+extern const u8 gTVFanClubText7[];
+extern const u8 gTVFanClubText8[];
+extern const u8 gTVRecentHappeningsText1[];
+extern const u8 gTVRecentHappeningsText2[];
+extern const u8 gTVRecentHappeningsText3[];
+extern const u8 gTVRecentHappeningsText4[];
+extern const u8 gTVRecentHappeningsText5[];
+extern const u8 gTVRecentHappeningsText6[];
+extern const u8 gTVFanClubOpinionsText1[];
+extern const u8 gTVFanClubOpinionsText2[];
+extern const u8 gTVFanClubOpinionsText3[];
+extern const u8 gTVFanClubOpinionsText4[];
+extern const u8 gTVFanClubOpinionsText5[];
+extern const u8 gTVPokemonOutbreakText[];
+extern const u8 gTVPokemonTodayText1[];
+extern const u8 gTVPokemonTodayText2[];
+extern const u8 gTVPokemonTodayText3[];
+extern const u8 gTVPokemonTodayText4[];
+extern const u8 gTVPokemonTodayText5[];
+extern const u8 gTVPokemonTodayText6[];
+extern const u8 gTVPokemonTodayText7[];
+extern const u8 gTVPokemonTodayText8[];
+extern const u8 gTVPokemonTodayText9[];
+extern const u8 gTVPokemonTodayText10[];
+extern const u8 gTVPokemonTodayText11[];
+extern const u8 gTVPokemonTodayText12[];
+extern const u8 gTVSmartShopperText1[];
+extern const u8 gTVSmartShopperText2[];
+extern const u8 gTVSmartShopperText3[];
+extern const u8 gTVSmartShopperText4[];
+extern const u8 gTVSmartShopperText5[];
+extern const u8 gTVSmartShopperText6[];
+extern const u8 gTVSmartShopperText7[];
+extern const u8 gTVSmartShopperText8[];
+extern const u8 gTVSmartShopperText9[];
+extern const u8 gTVSmartShopperText10[];
+extern const u8 gTVSmartShopperText11[];
+extern const u8 gTVSmartShopperText12[];
+extern const u8 gTVSmartShopperText13[];
+extern const u8 gTVBravoTrainerText1[];
+extern const u8 gTVBravoTrainerText2[];
+extern const u8 gTVBravoTrainerText3[];
+extern const u8 gTVBravoTrainerText4[];
+extern const u8 gTVBravoTrainerText5[];
+extern const u8 gTVBravoTrainerText6[];
+extern const u8 gTVBravoTrainerText7[];
+extern const u8 gTVBravoTrainerText8[];
+extern const u8 gTVBravoTrainerText9[];
+extern const u8 gTVBravoTrainerBattleTowerText1[];
+extern const u8 gTVBravoTrainerBattleTowerText2[];
+extern const u8 gTVBravoTrainerBattleTowerText3[];
+extern const u8 gTVBravoTrainerBattleTowerText4[];
+extern const u8 gTVBravoTrainerBattleTowerText5[];
+extern const u8 gTVBravoTrainerBattleTowerText6[];
+extern const u8 gTVBravoTrainerBattleTowerText7[];
+extern const u8 gTVBravoTrainerBattleTowerText8[];
+extern const u8 gTVBravoTrainerBattleTowerText9[];
+extern const u8 gTVBravoTrainerBattleTowerText10[];
+extern const u8 gTVBravoTrainerBattleTowerText11[];
+extern const u8 gTVBravoTrainerBattleTowerText12[];
+extern const u8 gTVBravoTrainerBattleTowerText13[];
+extern const u8 gTVBravoTrainerBattleTowerText14[];
+extern const u8 gTVBravoTrainerBattleTowerText15[];
+extern const u8 gTVNameRaterText1[];
+extern const u8 gTVNameRaterText2[];
+extern const u8 gTVNameRaterText3[];
+extern const u8 gTVNameRaterText4[];
+extern const u8 gTVNameRaterText5[];
+extern const u8 gTVNameRaterText6[];
+extern const u8 gTVNameRaterText7[];
+extern const u8 gTVNameRaterText8[];
+extern const u8 gTVNameRaterText9[];
+extern const u8 gTVNameRaterText10[];
+extern const u8 gTVNameRaterText11[];
+extern const u8 gTVNameRaterText12[];
+extern const u8 gTVNameRaterText13[];
+extern const u8 gTVNameRaterText14[];
+extern const u8 gTVNameRaterText15[];
+extern const u8 gTVNameRaterText16[];
+extern const u8 gTVNameRaterText17[];
+extern const u8 gTVNameRaterText18[];
+extern const u8 gTVNameRaterText19[];
+extern const u8 gTVPokemonTodayFailedCaptureText1[];
+extern const u8 gTVPokemonTodayFailedCaptureText2[];
+extern const u8 gTVPokemonTodayFailedCaptureText3[];
+extern const u8 gTVPokemonTodayFailedCaptureText4[];
+extern const u8 gTVPokemonTodayFailedCaptureText5[];
+extern const u8 gTVPokemonTodayFailedCaptureText6[];
+extern const u8 gTVPokemonTodayFailedCaptureText7[];
+extern const u8 gTVFishingGuruAdviceText1[];
+extern const u8 gTVFishingGuruAdviceText2[];
+extern const u8 gTVWorldOfMastersText1[];
+extern const u8 gTVWorldOfMastersText2[];
+extern const u8 gTVWorldOfMastersText3[];
+extern const u8 gTVGabbyAndTyText1[];
+extern const u8 gTVGabbyAndTyText2[];
+extern const u8 gTVGabbyAndTyText3[];
+extern const u8 gTVGabbyAndTyText4[];
+extern const u8 gTVGabbyAndTyText5[];
+extern const u8 gTVGabbyAndTyText6[];
+extern const u8 gTVGabbyAndTyText7[];
+extern const u8 gTVGabbyAndTyText8[];
+extern const u8 gTVGabbyAndTyText9[];
+
+const u8 *const gTVNewsTextGroup1[] =
+{
+ NULL,
+ gTVNewsText_EnergyGuru1,
+ gTVNewsText_GameCorner1,
+ gTVNewsText_LilycoveDepartment1,
+};
+
+const u8 *const gTVNewsTextGroup2[] =
+{
+ NULL,
+ gTVNewsText_EnergyGuru2,
+ gTVNewsText_GameCorner2,
+ gTVNewsText_LilycoveDepartment2,
+};
+
+const u8 *const gTVNewsTextGroup3[] =
+{
+ NULL,
+ gTVNewsText_EnergyGuru3,
+ gTVNewsText_GameCorner3,
+ gTVNewsText_LilycoveDepartment3,
+};
+
+u8 *const gUnknown_083D1464[] =
+{
+ gStringVar1,
+ gStringVar2,
+ gStringVar3,
+};
+
+const u8 *const gTVFanClubTextGroup[] =
+{
+ gTVFanClubText1,
+ gTVFanClubText2,
+ gTVFanClubText3,
+ gTVFanClubText4,
+ gTVFanClubText5,
+ gTVFanClubText6,
+ gTVFanClubText7,
+ gTVFanClubText8,
+};
+
+const u8 *const gTVRecentHappeningsTextGroup[] =
+{
+ gTVRecentHappeningsText1,
+ gTVRecentHappeningsText2,
+ gTVRecentHappeningsText3,
+ gTVRecentHappeningsText4,
+ gTVRecentHappeningsText5,
+ gTVRecentHappeningsText6,
+};
+
+const u8 *const gTVFanClubOpinionsTextGroup[] =
+{
+ gTVFanClubOpinionsText1,
+ gTVFanClubOpinionsText2,
+ gTVFanClubOpinionsText3,
+ gTVFanClubOpinionsText4,
+ gTVFanClubOpinionsText5,
+};
+
+const u8 *const gTVPokemonOutbreakTextGroup[] =
+{
+ gTVPokemonOutbreakText,
+};
+
+const u8 *const gTVPokemonTodayTextGroup[] =
+{
+ gTVPokemonTodayText1,
+ gTVPokemonTodayText2,
+ gTVPokemonTodayText3,
+ gTVPokemonTodayText4,
+ gTVPokemonTodayText5,
+ gTVPokemonTodayText6,
+ gTVPokemonTodayText7,
+ gTVPokemonTodayText8,
+ gTVPokemonTodayText9,
+ gTVPokemonTodayText10,
+ gTVPokemonTodayText11,
+ gTVPokemonTodayText12,
+};
+
+const u8 *const gTVSmartShopperTextGroup[] =
+{
+ gTVSmartShopperText1,
+ gTVSmartShopperText2,
+ gTVSmartShopperText3,
+ gTVSmartShopperText4,
+ gTVSmartShopperText5,
+ gTVSmartShopperText6,
+ gTVSmartShopperText7,
+ gTVSmartShopperText8,
+ gTVSmartShopperText9,
+ gTVSmartShopperText10,
+ gTVSmartShopperText11,
+ gTVSmartShopperText12,
+ gTVSmartShopperText13,
+};
+
+const u8 *const gTVBravoTrainerTextGroup[] =
+{
+ gTVBravoTrainerText1,
+ gTVBravoTrainerText2,
+ gTVBravoTrainerText3,
+ gTVBravoTrainerText4,
+ gTVBravoTrainerText5,
+ gTVBravoTrainerText6,
+ gTVBravoTrainerText7,
+ gTVBravoTrainerText8,
+ gTVBravoTrainerText9,
+};
+
+const u8 *const gTVBravoTrainerBattleTowerTextGroup[] =
+{
+ gTVBravoTrainerBattleTowerText1,
+ gTVBravoTrainerBattleTowerText2,
+ gTVBravoTrainerBattleTowerText3,
+ gTVBravoTrainerBattleTowerText4,
+ gTVBravoTrainerBattleTowerText5,
+ gTVBravoTrainerBattleTowerText6,
+ gTVBravoTrainerBattleTowerText7,
+ gTVBravoTrainerBattleTowerText8,
+ gTVBravoTrainerBattleTowerText9,
+ gTVBravoTrainerBattleTowerText10,
+ gTVBravoTrainerBattleTowerText11,
+ gTVBravoTrainerBattleTowerText12,
+ gTVBravoTrainerBattleTowerText13,
+ gTVBravoTrainerBattleTowerText14,
+ gTVBravoTrainerBattleTowerText15,
+};
+
+const u8 *const gTVNameRaterTextGroup[] =
+{
+ gTVNameRaterText1,
+ gTVNameRaterText2,
+ gTVNameRaterText3,
+ gTVNameRaterText4,
+ gTVNameRaterText5,
+ gTVNameRaterText6,
+ gTVNameRaterText7,
+ gTVNameRaterText8,
+ gTVNameRaterText9,
+ gTVNameRaterText10,
+ gTVNameRaterText11,
+ gTVNameRaterText12,
+ gTVNameRaterText13,
+ gTVNameRaterText14,
+ gTVNameRaterText15,
+ gTVNameRaterText16,
+ gTVNameRaterText17,
+ gTVNameRaterText18,
+ gTVNameRaterText19,
+};
+
+const u8 *const gTVPokemonTodayFailedCaptureTextGroup[] =
+{
+ gTVPokemonTodayFailedCaptureText1,
+ gTVPokemonTodayFailedCaptureText2,
+ gTVPokemonTodayFailedCaptureText3,
+ gTVPokemonTodayFailedCaptureText4,
+ gTVPokemonTodayFailedCaptureText5,
+ gTVPokemonTodayFailedCaptureText6,
+ gTVPokemonTodayFailedCaptureText7,
+};
+
+const u8 *const gTVFishingGuruAdviceTextGroup[] =
+{
+ gTVFishingGuruAdviceText1,
+ gTVFishingGuruAdviceText2,
+};
+
+const u8 *const gTVWorldOfMastersTextGroup[] =
+{
+ gTVWorldOfMastersText1,
+ gTVWorldOfMastersText2,
+ gTVWorldOfMastersText3,
+};
+
+const u8 *const gTVGabbyAndTyTextGroup[] =
+{
+ gTVGabbyAndTyText1,
+ gTVGabbyAndTyText2,
+ gTVGabbyAndTyText3,
+ gTVGabbyAndTyText4,
+ gTVGabbyAndTyText5,
+ gTVGabbyAndTyText6,
+ gTVGabbyAndTyText7,
+ gTVGabbyAndTyText8,
+ gTVGabbyAndTyText9,
+};
+
void ClearTVShowData(void)
{
u8 showidx;
@@ -123,9 +447,8 @@ void ClearTVShowData(void)
bool8 sub_80BF1B4(u8);
void sub_80BF20C(void);
-extern u16 sub_8135D3C(u8);
-extern u8 gScriptContestCategory;
-extern u8 gScriptContestRank;
+extern u8 gSpecialVar_ContestCategory;
+extern u8 gSpecialVar_ContestRank;
extern u8 gUnknown_03004316[11];
extern u8 gBattleOutcome;
@@ -219,7 +542,7 @@ bool8 IsTVShowInSearchOfTrainersAiring(void);
void UpdateTVScreensOnMap(int width, int height)
{
- FlagSet(SYS_TV_WATCH);
+ FlagSet(FLAG_SYS_TV_WATCH);
switch (CheckForBigMovieOrEmergencyNewsOnTV())
{
case 1:
@@ -228,14 +551,14 @@ void UpdateTVScreensOnMap(int width, int height)
case 2:
break;
default:
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F
- && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_1F)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F)
+ && gSaveBlock1.location.mapNum == MAP_NUM(LILYCOVE_CITY_COVE_LILY_MOTEL_1F))
{
SetTVMetatilesOnMap(width, height, 0x3);
}
- else if (FlagGet(SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring()))
+ else if (FlagGet(FLAG_SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring()))
{
- FlagClear(SYS_TV_WATCH);
+ FlagClear(FLAG_SYS_TV_WATCH);
SetTVMetatilesOnMap(width, height, 0x3);
}
break;
@@ -351,7 +674,7 @@ void GabbyAndTyBeforeInterview(void)
TakeTVShowInSearchOfTrainersOffTheAir();
if (gSaveBlock1.gabbyAndTyData.lastMove == 0)
- FlagSet(1);
+ FlagSet(FLAG_TEMP_1);
}
void sub_80BDC14(void)
@@ -660,8 +983,8 @@ void sub_80BE284(u8 a0)
if (gUnknown_03005D38.var0 != -1)
{
bravoTrainer->contestResult = a0;
- bravoTrainer->contestCategory = gScriptContestCategory;
- bravoTrainer->contestRank = gScriptContestRank;
+ bravoTrainer->contestCategory = gSpecialVar_ContestCategory;
+ bravoTrainer->contestRank = gSpecialVar_ContestRank;
bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL);
GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname);
}
@@ -674,12 +997,12 @@ void sub_80BE320(void)
bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE;
bravoTrainerTower->var01 = 1;
StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName);
- StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC);
- bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480;
- bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482;
- bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0);
- bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD;
- if (gSaveBlock2.filler_A8.var_4D0 == 0)
+ StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName);
+ bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies;
+ bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies;
+ bravoTrainerTower->var16 = GetCurrentBattleTowerWinStreak(gSaveBlock2.battleTower.lastStreakLevelType);
+ bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome;
+ if (gSaveBlock2.battleTower.lastStreakLevelType == 0)
bravoTrainerTower->btLevel = 50;
else
bravoTrainerTower->btLevel = 100;
@@ -724,7 +1047,7 @@ void sub_80BE3BC(void)
void sub_80BE478(void)
{
sub_80BF478();
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
return;
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
@@ -815,7 +1138,7 @@ void nullsub_21(void)
void sub_80BE778(void)
{
- if (FlagGet(SYS_GAME_CLEAR))
+ if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
u8 i;
@@ -1008,7 +1331,7 @@ void sub_80BEB20(void)
{
u16 rval;
- if (FlagGet(SYS_GAME_CLEAR) != 0)
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) != 0)
{
gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.unknown_2ABC);
if (gUnknown_03005D38.var0 != -1 && sub_80BF77C(0x28f) != 1)
@@ -1091,7 +1414,7 @@ void sub_80BECE8(void)
arg0 = sub_80BECA0();
if (arg0 == 0xff)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0)
@@ -1110,7 +1433,7 @@ void sub_80BECE8(void)
gSaveBlock1.unknown_2ABC[arg0].val1 = 0;
ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]);
}
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
bool8 GetPriceReduction(u8 arg0)
@@ -1137,16 +1460,16 @@ bool8 IsPriceDiscounted(u8 arg0)
switch (arg0)
{
case 1:
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_SLATEPORT_CITY
- && gSaveBlock1.location.mapNum == MAP_ID_SLATEPORT_CITY
- && gScriptLastTalked == 0x1a)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(SLATEPORT_CITY)
+ && gSaveBlock1.location.mapNum == MAP_NUM(SLATEPORT_CITY)
+ && gSpecialVar_LastTalked == 0x1a)
return TRUE;
else
return FALSE;
break;
case 3:
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP
- && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)
+ && gSaveBlock1.location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP))
return TRUE;
else
return FALSE;
@@ -1184,7 +1507,7 @@ void sub_80BEE84(u16 var0)
}
else
{
- if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(SYS_GAME_CLEAR) == 1)
+ if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(FLAG_SYS_GAME_CLEAR) == 1)
gSaveBlock1.unknown_2ABC[i].val1 = 1;
gSaveBlock1.unknown_2ABC[i].val2 -= var0;
}
@@ -1337,7 +1660,7 @@ void sub_80BF25C(u8 showType)
{
if(gSaveBlock1.tvShows[i].common.var01 == 1)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
else
{
@@ -1353,7 +1676,7 @@ void sub_80BF25C(u8 showType)
void sub_80BF2C4(void)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
switch (gSpecialVar_0x8005)
{
case TVSHOW_FAN_CLUB_LETTER:
@@ -1385,7 +1708,7 @@ void sub_80BF334(void)
struct TVShowFanClubLetter *fanclubLetter;
sub_80BF25C(TVSHOW_FAN_CLUB_LETTER);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]);
fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter;
@@ -1398,7 +1721,7 @@ void sub_80BF3A4(void)
struct TVShowRecentHappenings *recentHappenings;
sub_80BF25C(TVSHOW_RECENT_HAPPENINGS);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings;
sub_80EB6FC(recentHappenings->var04, 6);
@@ -1410,7 +1733,7 @@ void sub_80BF3DC(void)
struct TVShowFanclubOpinions *fanclubOpinions;
sub_80BF25C(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]);
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2);
@@ -1422,7 +1745,7 @@ void sub_80BF3DC(void)
void sub_80BF46C(void)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
void sub_80BF478(void)
@@ -1435,7 +1758,7 @@ void sub_80BF484(void)
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer;
sub_80BF25C(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
bravoTrainer = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer;
sub_80EB6FC(bravoTrainer->var04, 2);
@@ -1447,7 +1770,7 @@ void sub_80BF4BC(void)
struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower;
sub_80BF25C(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower;
sub_80EB6FC(bravoTrainerTower->var18, 1); // wrong struct ident, fix later
@@ -1575,9 +1898,9 @@ void sub_80BF6D8(void)
gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows);
gSpecialVar_0x8006 = gUnknown_03005D38.var0;
if (gUnknown_03005D38.var0 == -1)
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
s8 sub_80BF720(TVShow tvShow[])
@@ -1772,9 +2095,9 @@ void sub_80BFAE0(void)
void sub_80BFB10(void)
{
if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0))
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
u8 sub_80BFB54(u8 arg0)
@@ -1798,32 +2121,32 @@ u32 GetPlayerTrainerId(void)
u8 CheckForBigMovieOrEmergencyNewsOnTV(void)
{
- if (gSaveBlock1.location.mapGroup != MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)
+ if (gSaveBlock1.location.mapGroup != MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
return 0;
if (gSaveBlock2.playerGender == MALE)
{
- if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)
+ if (gSaveBlock1.location.mapNum != MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
return 0;
}
else
{
- if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F)
+ if (gSaveBlock1.location.mapNum != MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F))
return 0;
}
- if (FlagGet(SYS_TV_LATI) == 1)
+ if (FlagGet(FLAG_SYS_TV_LATI) == 1)
return 1;
- if (FlagGet(SYS_TV_HOME) == 1)
+ if (FlagGet(FLAG_SYS_TV_HOME) == 1)
return 2;
return 1;
}
void GetMomOrDadStringForTVMessage(void)
{
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
{
if (gSaveBlock2.playerGender == MALE)
{
- if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)
+ if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
{
StringCopy(gStringVar1, gOtherText_Mom);
VarSet(VAR_0x4003, 1);
@@ -1831,7 +2154,7 @@ void GetMomOrDadStringForTVMessage(void)
}
else
{
- if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F)
+ if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F))
{
StringCopy(gStringVar1, gOtherText_Mom);
VarSet(VAR_0x4003, 1);
@@ -2327,7 +2650,7 @@ void sub_80C0408(void)
{
u16 i;
- if (FlagGet(SYS_GAME_CLEAR) == TRUE)
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
return;
for (i = 0; i < 24; i++)
{
@@ -2478,7 +2801,7 @@ void sub_80C0788(void)
{
u8 i;
- if (FlagGet(SYS_GAME_CLEAR) != 1)
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) != 1)
{
for (i = 0; i < 16; i++)
gSaveBlock1.unknown_2ABC[i].val1 = 0;
@@ -2546,7 +2869,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -2617,7 +2940,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void)
struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainerTower;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -2706,7 +3029,7 @@ void DoTVShowTodaysSmartShopper(void)
struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gSpecialVar_0x8004].smartshopperShow;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -2794,7 +3117,7 @@ void DoTVShowTheNameRaterShow(void)
struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004].nameRaterShow;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -2890,7 +3213,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
struct TVShowPokemonToday *pokemonToday = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonToday;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -2959,7 +3282,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonTodayFailed;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3004,7 +3327,7 @@ void DoTVShowPokemonFanClubLetter(void)
u8 state;
u16 rval;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3056,7 +3379,7 @@ void DoTVShowRecentHappenings(void)
struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gSpecialVar_0x8004].recentHappenings;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3090,7 +3413,7 @@ void DoTVShowPokemonFanClubOpinions(void)
struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubOpinions;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3136,7 +3459,7 @@ void DoTVShowInSearchOfTrainers(void)
{
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3178,7 +3501,7 @@ void DoTVShowInSearchOfTrainers(void)
EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]);
StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]);
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_020387E8 = 0;;
TakeTVShowInSearchOfTrainersOffTheAir();
break;
@@ -3191,7 +3514,7 @@ void DoTVShowPokemonAngler(void)
struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonAngler;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (pokemonAngler->var02 < pokemonAngler->var03)
gUnknown_020387E8 = 0;
else
@@ -3220,7 +3543,7 @@ void DoTVShowTheWorldOfMasters(void)
struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[gSpecialVar_0x8004].worldOfMasters;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3248,7 +3571,7 @@ void DoTVShowTheWorldOfMasters(void)
void TVShowDone(void)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_020387E8 = 0;
gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0;
}
diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c
index e946a9cfc..7253ac901 100644
--- a/src/field/use_pokeblock.c
+++ b/src/field/use_pokeblock.c
@@ -15,17 +15,17 @@
#include "text.h"
#include "menu.h"
#include "sound.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "pokeblock.h"
#define GFX_TAG_CONDITIONUPDOWN 0
#ifdef GERMAN
extern const u16 ConditionUpDownPalette[16];
-extern const u32 ConditionUpDownTiles[0x80];
+extern const u8 ConditionUpDownTiles[0x200];
#else
const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal");
-const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp");
+const u8 ConditionUpDownTiles[] = INCBIN_U8("graphics/misc/condition_up_down.4bpp");
#endif
static const u32 sContestStatsMonData[] = {
@@ -49,7 +49,7 @@ static const u8 *const sContextStatNames[] = {
};
static const struct SpriteSheet gSpriteSheet_ConditionUpDown = {
- (u8 *)ConditionUpDownTiles,
+ ConditionUpDownTiles,
sizeof ConditionUpDownTiles,
GFX_TAG_CONDITIONUPDOWN
};
@@ -105,7 +105,7 @@ EWRAM_DATA u8 gPokeblockMonID = 0;
EWRAM_DATA s16 gPokeblockGain = 0;
extern u16 gKeyRepeatStartDelay;
-extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock
+extern u16 gSpecialVar_ItemId; // FIXME: remove after merge of #349 Pokeblock
static void launch_c3_walk_stairs_and_run_once(void (*const)(void));
static void sub_81361E4(void);
@@ -244,7 +244,7 @@ static void sub_8136294(void)
case 6:
gUnknown_083DFEC4->unk76AA = 0;
gUnknown_083DFEC4->unk87E0 = NULL;
- gUnknown_083DFEC4->unk030C = 0x20;
+ gUnknown_083DFEC4->unk030C.val = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
@@ -574,7 +574,7 @@ static void sub_81369CC(void)
case 5:
if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00())
{
- PokeblockClearIfExists((u8)gScriptItemId);
+ PokeblockClearIfExists((u8)gSpecialVar_ItemId);
launch_c3_walk_stairs_and_run_once(sub_8136B44);
}
break;
@@ -893,11 +893,11 @@ static void sub_8137138(void)
static void sub_81371DC(struct Sprite *sprite)
{
- if (sprite->data0 <= 5)
+ if (sprite->data[0] <= 5)
sprite->pos2.y -= 2;
- else if (sprite->data0 <= 11)
+ else if (sprite->data[0] <= 11)
sprite->pos2.y += 2;
- if ((++sprite->data0) > 60)
+ if ((++sprite->data[0]) > 60)
{
DestroySprite(sprite);
gUnknown_02039304->unk54--;
diff --git a/src/field/wallclock.c b/src/field/wallclock.c
index 8db13dc2d..2892d09f9 100644
--- a/src/field/wallclock.c
+++ b/src/field/wallclock.c
@@ -5,7 +5,7 @@
#include "menu.h"
#include "palette.h"
#include "rtc.h"
-#include "songs.h"
+#include "constants/songs.h"
#include "sound.h"
#include "strings2.h"
#include "task.h"
@@ -288,22 +288,22 @@ void CB2_StartWallClock(void)
gTasks[taskId].tHourHandAngle = 300;
spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1);
- gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 0;
spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0);
- gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 1;
spriteId = CreateSprite(&gSpriteTemplate_83F7B28, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = 45;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 45;
spriteId = CreateSprite(&gSpriteTemplate_83F7B40, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = 90;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 90;
WallClockInit();
}
@@ -333,22 +333,22 @@ void CB2_ViewWallClock(void)
}
spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, 120, 80, 1);
- gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 0;
spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, 120, 80, 0);
- gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 1;
spriteId = CreateSprite(&gSpriteTemplate_83F7B28, 120, 80, 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = angle1;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = angle1;
spriteId = CreateSprite(&gSpriteTemplate_83F7B40, 120, 80, 2);
- gSprites[spriteId].data0 = taskId;
- gSprites[spriteId].data1 = angle2;
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = angle2;
WallClockInit();
}
@@ -968,7 +968,7 @@ static void sub_810B05C(struct Sprite *sprite)
u16 x;
u16 y;
- angle = gTasks[sprite->data0].tMinuteHandAngle;
+ angle = gTasks[sprite->data[0]].tMinuteHandAngle;
sin = Sin2(angle) / 16;
cos = Cos2(angle) / 16;
SetOamMatrix(0, cos, sin, -sin, cos);
@@ -993,7 +993,7 @@ static void sub_810B0F4(struct Sprite *sprite)
u16 x;
u16 y;
- angle = gTasks[sprite->data0].tHourHandAngle;
+ angle = gTasks[sprite->data[0]].tHourHandAngle;
sin = Sin2(angle) / 16;
cos = Cos2(angle) / 16;
SetOamMatrix(1, cos, sin, -sin, cos);
@@ -1015,23 +1015,23 @@ static void sub_810B18C(struct Sprite *sprite)
s16 sin;
s16 cos;
- if (gTasks[sprite->data0].tPeriod != PERIOD_AM)
+ if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM)
{
- if (sprite->data1 >= 60 && sprite->data1 < 90)
- sprite->data1 += 5;
- if (sprite->data1 < 60)
- sprite->data1++;
+ if (sprite->data[1] >= 60 && sprite->data[1] < 90)
+ sprite->data[1] += 5;
+ if (sprite->data[1] < 60)
+ sprite->data[1]++;
}
else
{
- if (sprite->data1 > 45 && sprite->data1 <= 75)
- sprite->data1 -= 5;
- if (sprite->data1 > 75)
- sprite->data1--;
+ if (sprite->data[1] > 45 && sprite->data[1] <= 75)
+ sprite->data[1] -= 5;
+ if (sprite->data[1] > 75)
+ sprite->data[1]--;
}
- cos = Cos2((u16)sprite->data1);
+ cos = Cos2((u16)sprite->data[1]);
sprite->pos2.x = cos * 30 / 4096;
- sin = Sin2((u16)sprite->data1);
+ sin = Sin2((u16)sprite->data[1]);
sprite->pos2.y = sin * 30 / 4096;
}
@@ -1040,22 +1040,22 @@ static void sub_810B230(struct Sprite *sprite)
s16 sin;
s16 cos;
- if (gTasks[sprite->data0].tPeriod != PERIOD_AM)
+ if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM)
{
- if (sprite->data1 >= 105 && sprite->data1 < 135)
- sprite->data1 += 5;
- if (sprite->data1 < 105)
- sprite->data1++;
+ if (sprite->data[1] >= 105 && sprite->data[1] < 135)
+ sprite->data[1] += 5;
+ if (sprite->data[1] < 105)
+ sprite->data[1]++;
}
else
{
- if (sprite->data1 > 90 && sprite->data1 <= 120)
- sprite->data1 -= 5;
- if (sprite->data1 > 120)
- sprite->data1--;
+ if (sprite->data[1] > 90 && sprite->data[1] <= 120)
+ sprite->data[1] -= 5;
+ if (sprite->data[1] > 120)
+ sprite->data[1]--;
}
- cos = Cos2((u16)sprite->data1);
+ cos = Cos2((u16)sprite->data[1]);
sprite->pos2.x = cos * 30 / 4096;
- sin = Sin2((u16)sprite->data1);
+ sin = Sin2((u16)sprite->data[1]);
sprite->pos2.y = sin * 30 / 4096;
}
diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c
index 390898917..4bf83cad8 100644
--- a/src/field/wild_encounter.c
+++ b/src/field/wild_encounter.c
@@ -1,19 +1,19 @@
#include "global.h"
#include "wild_encounter.h"
-#include "abilities.h"
+#include "constants/abilities.h"
#include "battle_setup.h"
#include "event_data.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
-#include "map_constants.h"
+#include "constants/maps.h"
#include "metatile_behavior.h"
#include "pokeblock.h"
-#include "rng.h"
+#include "random.h"
#include "roamer.h"
#include "overworld.h"
#include "safari_zone.h"
#include "script.h"
-#include "species.h"
+#include "constants/species.h"
#include "tv.h"
const struct WildPokemon PetalburgCity_WaterMons [] =
@@ -2898,10 +2898,804 @@ const struct WildPokemon Underwater2_WaterMons [] =
};
const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMons};
+const struct WildPokemonHeader gWildMonHeaders[] =
+{
+ {
+ .mapGroup = MAP_GROUP(PETALBURG_CITY),
+ .mapNum = MAP_NUM(PETALBURG_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &PetalburgCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &PetalburgCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SLATEPORT_CITY),
+ .mapNum = MAP_NUM(SLATEPORT_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &SlateportCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SlateportCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(LILYCOVE_CITY),
+ .mapNum = MAP_NUM(LILYCOVE_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &LilycoveCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &LilycoveCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(MOSSDEEP_CITY),
+ .mapNum = MAP_NUM(MOSSDEEP_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &MossdeepCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &MossdeepCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY),
+ .mapNum = MAP_NUM(SOOTOPOLIS_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &SootopolisCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SootopolisCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(EVER_GRANDE_CITY),
+ .mapNum = MAP_NUM(EVER_GRANDE_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &EverGrandeCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &EverGrandeCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R),
+ .mapNum = MAP_NUM(METEOR_FALLS_1F_1R),
+ .landMonsInfo = &MeteorFalls_1F_1R_LandMonsInfo,
+ .waterMonsInfo = &MeteorFalls_1F_1R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &MeteorFalls_1F_1R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R),
+ .mapNum = MAP_NUM(METEOR_FALLS_1F_2R),
+ .landMonsInfo = &MeteorFalls_1F_2R_LandMonsInfo,
+ .waterMonsInfo = &MeteorFalls_1F_2R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &MeteorFalls_1F_2R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R),
+ .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R),
+ .landMonsInfo = &MeteorFalls_B1F_1R_LandMonsInfo,
+ .waterMonsInfo = &MeteorFalls_B1F_1R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &MeteorFalls_B1F_1R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R),
+ .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R),
+ .landMonsInfo = &MeteorFalls_B1F_2R_LandMonsInfo,
+ .waterMonsInfo = &MeteorFalls_B1F_2R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &MeteorFalls_B1F_2R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(RUSTURF_TUNNEL),
+ .mapNum = MAP_NUM(RUSTURF_TUNNEL),
+ .landMonsInfo = &RusturfTunnel_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_1F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_1F),
+ .landMonsInfo = &GraniteCave_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_B1F),
+ .landMonsInfo = &GraniteCave_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_B2F),
+ .landMonsInfo = &GraniteCave_B2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &GraniteCave_B2F_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM),
+ .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM),
+ .landMonsInfo = &GraniteCave_StevensRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(PETALBURG_WOODS),
+ .mapNum = MAP_NUM(PETALBURG_WOODS),
+ .landMonsInfo = &PetalburgWoods_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(JAGGED_PASS),
+ .mapNum = MAP_NUM(JAGGED_PASS),
+ .landMonsInfo = &JaggedPass_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(FIERY_PATH),
+ .mapNum = MAP_NUM(FIERY_PATH),
+ .landMonsInfo = &FieryPath_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_1F),
+ .mapNum = MAP_NUM(MT_PYRE_1F),
+ .landMonsInfo = &MtPyre_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_2F),
+ .mapNum = MAP_NUM(MT_PYRE_2F),
+ .landMonsInfo = &MtPyre_2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_3F),
+ .mapNum = MAP_NUM(MT_PYRE_3F),
+ .landMonsInfo = &MtPyre_3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_4F),
+ .mapNum = MAP_NUM(MT_PYRE_4F),
+ .landMonsInfo = &MtPyre_4F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_5F),
+ .mapNum = MAP_NUM(MT_PYRE_5F),
+ .landMonsInfo = &MtPyre_5F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_6F),
+ .mapNum = MAP_NUM(MT_PYRE_6F),
+ .landMonsInfo = &MtPyre_6F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR),
+ .mapNum = MAP_NUM(MT_PYRE_EXTERIOR),
+ .landMonsInfo = &MtPyre_Exterior_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT),
+ .mapNum = MAP_NUM(MT_PYRE_SUMMIT),
+ .landMonsInfo = &MtPyre_Summit_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &SeafloorCavern_Entrance_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SeafloorCavern_Entrance_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1),
+ .landMonsInfo = &SeafloorCavern_Room1_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2),
+ .landMonsInfo = &SeafloorCavern_Room2_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3),
+ .landMonsInfo = &SeafloorCavern_Room3_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4),
+ .landMonsInfo = &SeafloorCavern_Room4_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5),
+ .landMonsInfo = &SeafloorCavern_Room5_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6),
+ .landMonsInfo = &SeafloorCavern_Room6_LandMonsInfo,
+ .waterMonsInfo = &SeafloorCavern_Room6_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SeafloorCavern_Room6_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7),
+ .landMonsInfo = &SeafloorCavern_Room7_LandMonsInfo,
+ .waterMonsInfo = &SeafloorCavern_Room7_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SeafloorCavern_Room7_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8),
+ .landMonsInfo = &SeafloorCavern_Room8_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE),
+ .landMonsInfo = &CaveOfOrigin_Entrance_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F),
+ .landMonsInfo = &CaveOfOrigin_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B1F),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B1F),
+ .landMonsInfo = &CaveOfOrigin_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B2F),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B2F),
+ .landMonsInfo = &CaveOfOrigin_B2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B3F),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B3F),
+ .landMonsInfo = &CaveOfOrigin_B3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_1F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_1F),
+ .landMonsInfo = &VictoryRoad_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_B1F),
+ .landMonsInfo = &VictoryRoad_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &VictoryRoad_B1F_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_B2F),
+ .landMonsInfo = &VictoryRoad_B2F_LandMonsInfo,
+ .waterMonsInfo = &VictoryRoad_B2F_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &VictoryRoad_B2F_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
+ .landMonsInfo = &ShoalCave_LowTideEntranceRoom_LandMonsInfo,
+ .waterMonsInfo = &ShoalCave_LowTideEntranceRoom_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &ShoalCave_LowTideEntranceRoom_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
+ .landMonsInfo = &ShoalCave_LowTideInnerRoom_LandMonsInfo,
+ .waterMonsInfo = &ShoalCave_LowTideInnerRoom_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &ShoalCave_LowTideInnerRoom_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
+ .landMonsInfo = &ShoalCave_LowTideStairsRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
+ .landMonsInfo = &ShoalCave_LowTideLowerRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
+ .landMonsInfo = &ShoalCave_LowTideIceRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE),
+ .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE),
+ .landMonsInfo = &NewMauville_Entrance_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE),
+ .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE),
+ .landMonsInfo = &NewMauville_Inside_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F),
+ .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &AbandonedShip_Rooms_B1F_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &AbandonedShip_Rooms_B1F_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
+ .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &AbandonedShip_HiddenFloorCorridors_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &AbandonedShip_HiddenFloorCorridors_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_1F),
+ .mapNum = MAP_NUM(SKY_PILLAR_1F),
+ .landMonsInfo = &SkyPillar_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_3F),
+ .mapNum = MAP_NUM(SKY_PILLAR_3F),
+ .landMonsInfo = &SkyPillar_3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_5F),
+ .mapNum = MAP_NUM(SKY_PILLAR_5F),
+ .landMonsInfo = &SkyPillar_5F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE101),
+ .mapNum = MAP_NUM(ROUTE101),
+ .landMonsInfo = &Route101_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE102),
+ .mapNum = MAP_NUM(ROUTE102),
+ .landMonsInfo = &Route102_LandMonsInfo,
+ .waterMonsInfo = &Route102_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route102_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE103),
+ .mapNum = MAP_NUM(ROUTE103),
+ .landMonsInfo = &Route103_LandMonsInfo,
+ .waterMonsInfo = &Route103_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route103_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE104),
+ .mapNum = MAP_NUM(ROUTE104),
+ .landMonsInfo = &Route104_LandMonsInfo,
+ .waterMonsInfo = &Route104_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route104_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE105),
+ .mapNum = MAP_NUM(ROUTE105),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route105_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route105_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE106),
+ .mapNum = MAP_NUM(ROUTE106),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route106_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route106_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE107),
+ .mapNum = MAP_NUM(ROUTE107),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route107_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route107_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE108),
+ .mapNum = MAP_NUM(ROUTE108),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route108_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route108_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE109),
+ .mapNum = MAP_NUM(ROUTE109),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route109_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route109_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE110),
+ .mapNum = MAP_NUM(ROUTE110),
+ .landMonsInfo = &Route110_LandMonsInfo,
+ .waterMonsInfo = &Route110_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route110_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE111),
+ .mapNum = MAP_NUM(ROUTE111),
+ .landMonsInfo = &Route111_LandMonsInfo,
+ .waterMonsInfo = &Route111_WaterMonsInfo,
+ .rockSmashMonsInfo = &Route111_RockSmashMonsInfo,
+ .fishingMonsInfo = &Route111_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE112),
+ .mapNum = MAP_NUM(ROUTE112),
+ .landMonsInfo = &Route112_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE113),
+ .mapNum = MAP_NUM(ROUTE113),
+ .landMonsInfo = &Route113_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE114),
+ .mapNum = MAP_NUM(ROUTE114),
+ .landMonsInfo = &Route114_LandMonsInfo,
+ .waterMonsInfo = &Route114_WaterMonsInfo,
+ .rockSmashMonsInfo = &Route114_RockSmashMonsInfo,
+ .fishingMonsInfo = &Route114_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE115),
+ .mapNum = MAP_NUM(ROUTE115),
+ .landMonsInfo = &Route115_LandMonsInfo,
+ .waterMonsInfo = &Route115_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route115_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE116),
+ .mapNum = MAP_NUM(ROUTE116),
+ .landMonsInfo = &Route116_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE117),
+ .mapNum = MAP_NUM(ROUTE117),
+ .landMonsInfo = &Route117_LandMonsInfo,
+ .waterMonsInfo = &Route117_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route117_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE118),
+ .mapNum = MAP_NUM(ROUTE118),
+ .landMonsInfo = &Route118_LandMonsInfo,
+ .waterMonsInfo = &Route118_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route118_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE119),
+ .mapNum = MAP_NUM(ROUTE119),
+ .landMonsInfo = &Route119_LandMonsInfo,
+ .waterMonsInfo = &Route119_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route119_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE120),
+ .mapNum = MAP_NUM(ROUTE120),
+ .landMonsInfo = &Route120_LandMonsInfo,
+ .waterMonsInfo = &Route120_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route120_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE121),
+ .mapNum = MAP_NUM(ROUTE121),
+ .landMonsInfo = &Route121_LandMonsInfo,
+ .waterMonsInfo = &Route121_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route121_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE122),
+ .mapNum = MAP_NUM(ROUTE122),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route122_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route122_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE123),
+ .mapNum = MAP_NUM(ROUTE123),
+ .landMonsInfo = &Route123_LandMonsInfo,
+ .waterMonsInfo = &Route123_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route123_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE124),
+ .mapNum = MAP_NUM(ROUTE124),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route124_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route124_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE125),
+ .mapNum = MAP_NUM(ROUTE125),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route125_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route125_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE126),
+ .mapNum = MAP_NUM(ROUTE126),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route126_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route126_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE127),
+ .mapNum = MAP_NUM(ROUTE127),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route127_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route127_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE128),
+ .mapNum = MAP_NUM(ROUTE128),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route128_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route128_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE129),
+ .mapNum = MAP_NUM(ROUTE129),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route129_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route129_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE130),
+ .mapNum = MAP_NUM(ROUTE130),
+ .landMonsInfo = &Route130_LandMonsInfo,
+ .waterMonsInfo = &Route130_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route130_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE131),
+ .mapNum = MAP_NUM(ROUTE131),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route131_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route131_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE132),
+ .mapNum = MAP_NUM(ROUTE132),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route132_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route132_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE133),
+ .mapNum = MAP_NUM(ROUTE133),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route133_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route133_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE134),
+ .mapNum = MAP_NUM(ROUTE134),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Route134_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &Route134_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST),
+ .landMonsInfo = &SafariZone_Northwest_LandMonsInfo,
+ .waterMonsInfo = &SafariZone_Northwest_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SafariZone_Northwest_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST),
+ .landMonsInfo = &SafariZone_Northeast_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &SafariZone_Northeast_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST),
+ .landMonsInfo = &SafariZone_Southwest_LandMonsInfo,
+ .waterMonsInfo = &SafariZone_Southwest_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &SafariZone_Southwest_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST),
+ .landMonsInfo = &SafariZone_Southeast_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(DEWFORD_TOWN),
+ .mapNum = MAP_NUM(DEWFORD_TOWN),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &DewfordTown_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &DewfordTown_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN),
+ .mapNum = MAP_NUM(PACIFIDLOG_TOWN),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &PacifidlogTown_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &PacifidlogTown_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDERWATER1),
+ .mapNum = MAP_NUM(UNDERWATER1),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Underwater1_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDERWATER2),
+ .mapNum = MAP_NUM(UNDERWATER2),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &Underwater2_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDEFINED),
+ .mapNum = MAP_NUM(UNDEFINED),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+};
+
+const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS};
+
+const u16 gRoute119WaterTileData[] =
+{
+ 0, 0x2D, 0,
+ 0x2E, 0x5B, 0x83,
+ 0x5C, 0x8B, 0x12A,
+};
-extern u16 gRoute119WaterTileData[];
-extern u16 gScriptResult;
-extern struct WildPokemon gWildFeebasRoute119Data;
+extern u16 gSpecialVar_Result;
extern u8 S_RepelWoreOff[];
EWRAM_DATA static u8 sWildEncountersDisabled = 0;
@@ -2953,8 +3747,8 @@ static bool8 CheckFeebas(void)
u8 route119section = 0;
u16 waterTileNum;
- if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE119
- && gSaveBlock1.location.mapNum == MAP_ID_ROUTE119)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE119)
+ && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE119))
{
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
x -= 7;
@@ -2967,7 +3761,7 @@ static bool8 CheckFeebas(void)
route119section = 2;
#else
{
- register u16 *arr asm("r0");
+ register const u16 *arr asm("r0");
if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1])
route119section = 1;
if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1])
@@ -3177,7 +3971,7 @@ static void CreateWildMon(u16 species, u8 b)
CreateMonWithNature(&gEnemyParty[0], species, b, 0x20, PickWildMonNature());
}
-static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel)
+static bool8 GenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel)
{
u8 wildMonIndex = 0;
u8 level;
@@ -3204,7 +3998,7 @@ static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8
}
}
-static u16 GenerateFishingWildMon(struct WildPokemonInfo *wildMonInfo, u8 rod)
+static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 rod)
{
u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod);
u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
@@ -3369,22 +4163,22 @@ void ScrSpecial_RockSmashWildEncounter(void)
if (headerNum != 0xFFFF)
{
- struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo;
+ const struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo;
if (wildPokemonInfo == NULL)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE
&& GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE)
{
BattleSetup_StartWildBattle();
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return;
}
}
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
@@ -3393,7 +4187,7 @@ bool8 SweetScentWildEncounter(void)
s16 x;
s16 y;
u16 headerNum;
- struct WildPokemonInfo *wildPokemonInfo;
+ const struct WildPokemonInfo *wildPokemonInfo;
PlayerGetDestCoords(&x, &y);
if ((headerNum = GetCurrentMapWildMonHeader()) != 0xFFFF)
@@ -3468,8 +4262,8 @@ void FishingWildEncounter(u8 rod)
u16 GetLocalWildMon(bool8 *isWaterMon)
{
u16 headerNum;
- struct WildPokemonInfo *landMonsInfo;
- struct WildPokemonInfo *waterMonsInfo;
+ const struct WildPokemonInfo *landMonsInfo;
+ const struct WildPokemonInfo *waterMonsInfo;
*isWaterMon = FALSE;
headerNum = GetCurrentMapWildMonHeader();
@@ -3505,7 +4299,7 @@ u16 GetLocalWaterMon(void)
if (headerNum != 0xFFFF)
{
- struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo;
+ const struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo;
if (waterMonsInfo)
return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species;
@@ -3559,9 +4353,9 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel)
static void ApplyFluteEncounterRateMod(u32 *encRate)
{
- if (FlagGet(SYS_ENC_UP_ITEM) == TRUE)
+ if (FlagGet(FLAG_SYS_ENC_UP_ITEM) == TRUE)
*encRate += *encRate / 2;
- else if (FlagGet(SYS_ENC_DOWN_ITEM) == TRUE)
+ else if (FlagGet(FLAG_SYS_ENC_DOWN_ITEM) == TRUE)
*encRate = *encRate / 2;
}