summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/apprentice.c2
-rw-r--r--src/battle_arena.c2
-rw-r--r--src/battle_controller_link_opponent.c2
-rw-r--r--src/battle_controller_link_partner.c2
-rw-r--r--src/battle_controller_opponent.c2
-rw-r--r--src/battle_controller_player.c2
-rw-r--r--src/battle_controller_player_partner.c2
-rw-r--r--src/battle_controller_recorded_opponent.c2
-rw-r--r--src/battle_controller_recorded_player.c2
-rw-r--r--src/battle_controller_wally.c2
-rw-r--r--src/battle_dome.c2
-rw-r--r--src/battle_factory.c2
-rw-r--r--src/battle_interface.c2
-rw-r--r--src/battle_message.c24
-rw-r--r--src/battle_palace.c2
-rw-r--r--src/battle_pyramid.c1
-rw-r--r--src/battle_setup.c5
-rw-r--r--src/battle_tent.c6
-rw-r--r--src/battle_tower.c6
-rw-r--r--src/braille_puzzles.c1
-rw-r--r--src/cable_car.c6
-rw-r--r--src/cable_club.c2
-rw-r--r--src/contest.c2
-rw-r--r--src/contest_util.c4
-rw-r--r--src/data/lilycove_lady.h50
-rw-r--r--src/daycare.c4
-rw-r--r--src/decoration.c14
-rw-r--r--src/easy_chat.c4
-rw-r--r--src/event_object_movement.c154
-rw-r--r--src/evolution_scene.c8
-rwxr-xr-xsrc/faraway_island.c1
-rw-r--r--src/field_control_avatar.c9
-rw-r--r--src/field_door.c1
-rw-r--r--src/field_player_avatar.c1
-rw-r--r--src/field_poison.c2
-rw-r--r--src/field_screen_effect.c21
-rw-r--r--src/field_special_scene.c4
-rw-r--r--src/field_specials.c76
-rw-r--r--src/field_tasks.c933
-rw-r--r--src/field_weather_effect.c18
-rw-r--r--src/frontier_pass.c1
-rw-r--r--src/heal_location.c1
-rw-r--r--src/lilycove_lady.c12
-rw-r--r--src/link.c5
-rw-r--r--src/lottery_corner.c2
-rw-r--r--src/mail_data.c3
-rw-r--r--src/match_call.c1
-rw-r--r--src/menu_helpers.c1
-rw-r--r--src/menu_specialized.c2
-rw-r--r--src/metatile_behavior.c32
-rw-r--r--src/mirage_tower.c1
-rw-r--r--src/move_relearner.c2
-rw-r--r--src/mystery_event_menu.c18
-rw-r--r--src/mystery_event_script.c87
-rw-r--r--src/naming_screen.c4
-rw-r--r--src/new_game.c3
-rw-r--r--src/overworld.c67
-rwxr-xr-xsrc/party_menu.c13
-rw-r--r--src/pokeball.c2
-rwxr-xr-xsrc/pokedex_area_screen.c1
-rw-r--r--src/pokemon.c2
-rw-r--r--src/pokemon_storage_system.c5
-rw-r--r--src/pokenav_conditions.c2
-rw-r--r--src/pokenav_conditions_search_results.c2
-rw-r--r--src/pokenav_ribbons_list.c2
-rw-r--r--src/pokenav_ribbons_summary.c2
-rw-r--r--src/region_map.c103
-rw-r--r--src/roamer.c1
-rw-r--r--src/rotating_gate.c1
-rw-r--r--src/save_location.c1
-rw-r--r--src/scrcmd.c157
-rw-r--r--src/script.c10
-rw-r--r--src/script_menu.c3
-rwxr-xr-xsrc/script_pokemon_util.c5
-rw-r--r--src/secret_base.c188
-rwxr-xr-xsrc/shop.c8
-rw-r--r--src/slot_machine.c124
-rw-r--r--src/trade.c14
-rw-r--r--src/trainer_hill.c1
-rw-r--r--src/tv.c347
-rw-r--r--src/union_room.c9
-rw-r--r--src/union_room_player_avatar.c24
-rw-r--r--src/use_pokeblock.c2
-rw-r--r--src/wild_encounter.c1
84 files changed, 1459 insertions, 1198 deletions
diff --git a/src/apprentice.c b/src/apprentice.c
index 6255b9215..2ab2f0e5a 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -127,7 +127,7 @@ void BufferApprenticeChallengeText(u8 saveApprenticeId)
for (i = 0; num != 0 && i < APPRENTICE_COUNT; num /= 10, i++)
;
- StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].playerName);
+ StringCopy_PlayerName(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].playerName);
ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].language);
ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i);
challengeText = sApprenticeChallengeTexts[gSaveBlock2Ptr->apprentices[saveApprenticeId].id];
diff --git a/src/battle_arena.c b/src/battle_arena.c
index 8a993f770..f744a3b2b 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -798,7 +798,7 @@ static void InitArenaChallenge(void)
if (!isCurrent)
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 2ec2e61dc..668dd01b4 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -602,7 +602,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID);
GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 0fa156a43..14d806576 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -489,7 +489,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 8e1a8327a..c3830780b 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -602,7 +602,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID);
GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index ff5591e55..2133d5b6f 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -1647,7 +1647,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 2c9098271..c2ff08a23 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -673,7 +673,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 54156da35..4a35ef723 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -585,7 +585,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID);
GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index a28e87a42..e25482fb5 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -564,7 +564,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index f7c331257..c4c0c11a9 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -491,7 +491,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
- StringCopy10(battleMon.nickname, nickname);
+ StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 1b067924f..293662985 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -2099,7 +2099,7 @@ static void InitDomeChallenge(void)
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 8f1001e9c..23fa664f3 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -217,7 +217,7 @@ static void InitFactoryChallenge(void)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
gFrontierTempParty[i] = 0xFFFF;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 96bab7f90..26209fe2d 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1893,7 +1893,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
StringCopy(gDisplayedStringBattle, gText_HealthboxNickname);
GetMonData(mon, MON_DATA_NICKNAME, nickname);
- StringGetEnd10(nickname);
+ StringGet_Nickname(nickname);
ptr = StringAppend(gDisplayedStringBattle, nickname);
gender = GetMonGender(mon);
diff --git a/src/battle_message.c b/src/battle_message.c
index b88eedfb3..1df935694 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -2400,7 +2400,7 @@ static const u8* TryGetStatusString(u8 *src)
{ \
GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
} \
- StringGetEnd10(text); \
+ StringGet_Nickname(text); \
toCpy = text;
u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
@@ -2466,49 +2466,49 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_PLAYER_MON1_NAME: // first player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_OPPONENT_MON1_NAME: // first enemy poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_PLAYER_MON2_NAME: // second player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_OPPONENT_MON2_NAME: // second enemy poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 1]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 2]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 3]],
MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1
@@ -2521,7 +2521,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
else
GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text);
- StringGetEnd10(text);
+ StringGet_Nickname(text);
toCpy = text;
break;
case B_TXT_ATK_NAME_WITH_PREFIX: // attacker name with prefix
@@ -2903,7 +2903,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
- StringGetEnd10(text);
+ StringGet_Nickname(text);
StringAppend(dst, text);
srcID += 3;
break;
@@ -2920,7 +2920,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
else
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
- StringGetEnd10(dst);
+ StringGet_Nickname(dst);
srcID += 3;
break;
case B_BUFF_NEGATIVE_FLAVOR: // flavor table
diff --git a/src/battle_palace.c b/src/battle_palace.c
index c4e48a4b2..0fa65200a 100644
--- a/src/battle_palace.c
+++ b/src/battle_palace.c
@@ -93,7 +93,7 @@ static void InitPalaceChallenge(void)
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
gTrainerBattleOpponent_A = 0;
}
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index 48155c833..b10690ce4 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -34,7 +34,6 @@
#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/layouts.h"
-#include "constants/maps.h"
#include "constants/metatile_labels.h"
#include "constants/moves.h"
#include "constants/trainers.h"
diff --git a/src/battle_setup.c b/src/battle_setup.c
index a9d4eeddf..f928cf3f9 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -43,7 +43,6 @@
#include "constants/items.h"
#include "constants/songs.h"
#include "constants/map_types.h"
-#include "constants/maps.h"
#include "constants/trainers.h"
#include "constants/trainer_hill.h"
#include "constants/weather.h"
@@ -687,7 +686,7 @@ u8 BattleSetup_GetTerrainId(void)
}
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE113) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE113))
return BATTLE_TERRAIN_SAND;
- if (GetSav1Weather() == WEATHER_SANDSTORM)
+ if (GetSavedWeather() == WEATHER_SANDSTORM)
return BATTLE_TERRAIN_SAND;
return BATTLE_TERRAIN_PLAIN;
@@ -700,7 +699,7 @@ static u8 GetBattleTransitionTypeByMap(void)
PlayerGetDestCoords(&x, &y);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- if (Overworld_GetFlashLevel())
+ if (GetFlashLevel())
return TRANSITION_TYPE_FLASH;
if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
{
diff --git a/src/battle_tent.c b/src/battle_tent.c
index 26b2e8bb1..53c91c871 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -114,7 +114,7 @@ static void InitVerdanturfTentChallenge(void)
gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
}
static void GetVerdanturfTentPrize(void)
@@ -176,7 +176,7 @@ static void InitFallarborTentChallenge(void)
gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
}
static void GetFallarborTentPrize(void)
@@ -231,7 +231,7 @@ static void InitSlateportTentChallenge(void)
gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
}
static void GetSlateportTentPrize(void)
diff --git a/src/battle_tower.c b/src/battle_tower.c
index d9bd18bf7..7ed15d1e6 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -918,7 +918,7 @@ static void InitTowerChallenge(void)
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
ValidateBattleTowerRecordChecksums();
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
gTrainerBattleOpponent_A = 0;
}
@@ -2160,7 +2160,7 @@ static void SaveBattleTowerRecord(void)
playerRecord->lvlMode = lvlMode;
playerRecord->facilityClass = class;
CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId);
- StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName);
+ StringCopy_PlayerName(playerRecord->name, gSaveBlock2Ptr->playerName);
playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
@@ -2831,7 +2831,7 @@ static void FillEReaderTrainerWithPlayerData(void)
}
CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId);
- StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName);
+ StringCopy_PlayerName(ereaderTrainer->name, gSaveBlock2Ptr->playerName);
ereaderTrainer->winStreak = 1;
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index 61fab39e2..26caa830d 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -6,7 +6,6 @@
#include "sound.h"
#include "task.h"
#include "constants/field_effects.h"
-#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/metatile_labels.h"
#include "fieldmap.h"
diff --git a/src/cable_car.c b/src/cable_car.c
index c3e6564f8..c81764728 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -826,7 +826,7 @@ static void CreateCableCarSprites(void)
case FALSE:
default:
// Create player sprite
- spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 200, 73, 102);
+ spriteId = CreateObjectGraphicsSprite(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 200, 73, 102);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
@@ -854,7 +854,7 @@ static void CreateCableCarSprites(void)
case TRUE:
CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->groundTilemap + 0x24, 24, 26, 12, 3, 17);
// Create player sprite
- spriteId = AddPseudoObjectEvent(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 128, 39, 102);
+ spriteId = CreateObjectGraphicsSprite(playerGraphicsIds[gSaveBlock2Ptr->playerGender], SpriteCB_Player, 128, 39, 102);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
@@ -891,7 +891,7 @@ static void CreateCableCarSprites(void)
if ((rval % 64) == 0)
{
// Unclear if this was intentional, but the - 1 in the below ARRAY_COUNT means the Zigzagoon is never used
- spriteId = AddPseudoObjectEvent(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106);
+ spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 2;
diff --git a/src/cable_club.c b/src/cable_club.c
index 1f943b03a..4ee2797f4 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -1031,7 +1031,7 @@ void CleanupLinkRoomState(void)
LoadPlayerParty();
SavePlayerBag();
}
- SetWarpDestinationToDynamicWarp(0x7F);
+ SetWarpDestinationToDynamicWarp(WARP_ID_DYNAMIC);
}
void ExitLinkRoom(void)
diff --git a/src/contest.c b/src/contest.c
index b5a035ff8..ced9f90cd 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2794,7 +2794,7 @@ void CreateContestMonFromParty(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].highestRank = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
- StringGetEnd10(name);
+ StringGet_Nickname(name);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
StripMonNameForLinkContest(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
diff --git a/src/contest_util.c b/src/contest_util.c
index 6fd74a68a..1ca217526 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -2253,10 +2253,10 @@ void Task_LinkContest_FinalizeConnection(u8 taskId)
{
// Succesfully connected
for (i = 0; i < CONTESTANT_COUNT; i++)
- StringGetEnd10(gContestMons[i].nickname);
+ StringGet_Nickname(gContestMons[i].nickname);
DestroyTask(taskId);
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
ScriptContext2_Disable();
EnableBothScriptContexts();
}
diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h
index 1f1caa35f..dd0885ff8 100644
--- a/src/data/lilycove_lady.h
+++ b/src/data/lilycove_lady.h
@@ -5,11 +5,11 @@
static const u16 sContestLadyMonGfxId[] =
{
- OBJ_EVENT_GFX_ZIGZAGOON_1,
- OBJ_EVENT_GFX_SKITTY,
- OBJ_EVENT_GFX_POOCHYENA,
- OBJ_EVENT_GFX_KECLEON,
- OBJ_EVENT_GFX_PIKACHU
+ [CONTEST_CATEGORY_COOL] = OBJ_EVENT_GFX_ZIGZAGOON_1,
+ [CONTEST_CATEGORY_BEAUTY] = OBJ_EVENT_GFX_SKITTY,
+ [CONTEST_CATEGORY_CUTE] = OBJ_EVENT_GFX_POOCHYENA,
+ [CONTEST_CATEGORY_SMART] = OBJ_EVENT_GFX_KECLEON,
+ [CONTEST_CATEGORY_TOUGH] = OBJ_EVENT_GFX_PIKACHU
};
static const u16 sLilycoveLadyGfxId[] =
@@ -434,36 +434,36 @@ static const u16 sFavorLadyPrizes[] =
static const u8 *const sContestLadyMonNames[] =
{
- gText_ContestLady_Handsome,
- gText_ContestLady_Vinny,
- gText_ContestLady_Moreme,
- gText_ContestLady_Ironhard,
- gText_ContestLady_Muscle
+ [CONTEST_CATEGORY_COOL] = gText_ContestLady_Handsome,
+ [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Vinny,
+ [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Moreme,
+ [CONTEST_CATEGORY_SMART] = gText_ContestLady_Ironhard,
+ [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Muscle
};
static const u8 *const sContestLadyCategoryNames[] =
{
- gText_ContestLady_Coolness,
- gText_ContestLady_Beauty,
- gText_ContestLady_Cuteness,
- gText_ContestLady_Smartness,
- gText_ContestLady_Toughness
+ [CONTEST_CATEGORY_COOL] = gText_ContestLady_Coolness,
+ [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Beauty,
+ [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Cuteness,
+ [CONTEST_CATEGORY_SMART] = gText_ContestLady_Smartness,
+ [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Toughness
};
static const u8 *const sContestNames[] =
{
- gText_CoolnessContest,
- gText_BeautyContest,
- gText_CutenessContest,
- gText_SmartnessContest,
- gText_ToughnessContest
+ [CONTEST_CATEGORY_COOL] = gText_CoolnessContest,
+ [CONTEST_CATEGORY_BEAUTY] = gText_BeautyContest,
+ [CONTEST_CATEGORY_CUTE] = gText_CutenessContest,
+ [CONTEST_CATEGORY_SMART] = gText_SmartnessContest,
+ [CONTEST_CATEGORY_TOUGH] = gText_ToughnessContest
};
static const u16 sContestLadyMonSpecies[] =
{
- SPECIES_ZIGZAGOON,
- SPECIES_SKITTY,
- SPECIES_POOCHYENA,
- SPECIES_KECLEON,
- SPECIES_PIKACHU
+ [CONTEST_CATEGORY_COOL] = SPECIES_ZIGZAGOON,
+ [CONTEST_CATEGORY_BEAUTY] = SPECIES_SKITTY,
+ [CONTEST_CATEGORY_CUTE] = SPECIES_POOCHYENA,
+ [CONTEST_CATEGORY_SMART] = SPECIES_KECLEON,
+ [CONTEST_CATEGORY_TOUGH] = SPECIES_PIKACHU
};
diff --git a/src/daycare.c b/src/daycare.c
index c900e3493..ebbab762a 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -96,7 +96,7 @@ u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest)
u8 nickname[POKEMON_NAME_LENGTH * 2];
GetMonData(mon, MON_DATA_NICKNAME, nickname);
- return StringCopy10(dest, nickname);
+ return StringCopy_Nickname(dest, nickname);
}
u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
@@ -104,7 +104,7 @@ u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
u8 nickname[POKEMON_NAME_LENGTH * 2];
GetBoxMonData(mon, MON_DATA_NICKNAME, nickname);
- return StringCopy10(dest, nickname);
+ return StringCopy_Nickname(dest, nickname);
}
u8 CountPokemonInDaycare(struct DayCare *daycare)
diff --git a/src/decoration.c b/src/decoration.c
index bb2dea7f9..118b4918e 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1175,7 +1175,7 @@ static void SetInitialPositions(u8 taskId)
static void WarpToInitialPosition(u8 taskId)
{
DrawWholeMapView();
- SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gTasks[taskId].tInitialX, gTasks[taskId].tInitialY);
+ SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, gTasks[taskId].tInitialX, gTasks[taskId].tInitialY);
WarpIntoMap();
}
@@ -1395,9 +1395,9 @@ static void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecoration
x -= 8;
if (gSaveBlock2Ptr->playerGender == MALE)
- sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, x, 72, 0);
+ sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, x, 72, 0);
else
- sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, x, 72, 0);
+ sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, x, 72, 0);
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
@@ -2027,7 +2027,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics
ClearPlaceDecorationGraphicsDataBuffer(data);
data->decoration = &gDecorations[decor];
if (data->decoration->permission == DECORPERM_SPRITE)
- return AddPseudoObjectEvent(data->decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1);
+ return CreateObjectGraphicsSprite(data->decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1);
FreeSpritePaletteByTag(PLACE_DECORATION_SELECTOR_TAG);
SetDecorSelectionMetatiles(data);
@@ -2106,7 +2106,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u
}
else
{
- spriteId = AddPseudoObjectEvent(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1);
+ spriteId = CreateObjectGraphicsSprite(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1);
}
return spriteId;
}
@@ -2285,9 +2285,9 @@ static void SetUpPuttingAwayDecorationPlayerAvatar(void)
LoadPlayerSpritePalette();
gFieldCamera.spriteId = CreateSprite(&sPuttingAwayCursorSpriteTemplate, 120, 80, 0);
if (gSaveBlock2Ptr->playerGender == MALE)
- sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, 136, 72, 0);
+ sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_BRENDAN_DECORATING, SpriteCallbackDummy, 136, 72, 0);
else
- sDecor_CameraSpriteObjectIdx2 = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, 136, 72, 0);
+ sDecor_CameraSpriteObjectIdx2 = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAY_DECORATING, SpriteCallbackDummy, 136, 72, 0);
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 1b992caf2..f9ba44ba7 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -5011,7 +5011,7 @@ static void TryAddInterviewObjectEvents(void)
return;
// Add object for reporter/interviewing fan (facing left)
- spriteId = AddPseudoObjectEvent(graphicsId, SpriteCallbackDummy, 76, 40, 0);
+ spriteId = CreateObjectGraphicsSprite(graphicsId, SpriteCallbackDummy, 76, 40, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.priority = 0;
@@ -5019,7 +5019,7 @@ static void TryAddInterviewObjectEvents(void)
}
// Add object for player (facing right)
- spriteId = AddPseudoObjectEvent(
+ spriteId = CreateObjectGraphicsSprite(
gSaveBlock2Ptr->playerGender == MALE ? OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL : OBJ_EVENT_GFX_RIVAL_MAY_NORMAL,
SpriteCallbackDummy,
52,
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 107ee47ab..d92569d32 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -26,7 +26,6 @@
#include "constants/event_objects.h"
#include "constants/field_effects.h"
#include "constants/items.h"
-#include "constants/maps.h"
#include "constants/mauville_old_man.h"
#include "constants/trainer_types.h"
#include "constants/union_room.h"
@@ -115,7 +114,7 @@ static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
-static void UpdateObjectEventSpritePosition(struct Sprite*);
+static void VirtualObject_UpdateAnim(struct Sprite*);
static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *);
@@ -127,7 +126,7 @@ static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *);
static void RemoveObjectEventInternal(struct ObjectEvent *);
static u16 GetObjectEventFlagIdByObjectEventId(u8);
static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *);
-static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
+static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
static void GetObjectEventMovingCameraOffset(s16 *, s16 *);
static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8);
static void LoadObjectEventPalette(u16);
@@ -149,7 +148,7 @@ static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *,
static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8);
static void InitSpriteForFigure8Anim(struct Sprite *sprite);
static bool8 AnimateSpriteInFigure8(struct Sprite *sprite);
-static void UpdateObjectEventSprite(struct Sprite *);
+static void SpriteCB_VirtualObject(struct Sprite *);
static void DoShadowFieldEffect(struct ObjectEvent *);
static void SetJumpSpriteData(struct Sprite *, u8, u8, u8);
static void SetWalkSlowSpriteData(struct Sprite *sprite, u8 direction);
@@ -1141,7 +1140,7 @@ static const u8 sPlayerDirectionToCopyDirection[][4] = {
static void ClearObjectEvent(struct ObjectEvent *objectEvent)
{
*objectEvent = (struct ObjectEvent){};
- objectEvent->localId = 0xFF;
+ objectEvent->localId = OBJ_EVENT_ID_PLAYER;
objectEvent->mapNum = MAP_NUM(UNDEFINED);
objectEvent->mapGroup = MAP_GROUP(UNDEFINED);
objectEvent->movementActionId = MOVEMENT_ACTION_NONE;
@@ -1443,7 +1442,7 @@ static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTem
const struct SubspriteTable *subspriteTables = NULL;
graphicsInfo = GetObjectEventGraphicsInfo(objectEventTemplate->graphicsId);
- MakeObjectTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables);
+ MakeSpriteTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables);
spriteFrameImage.size = graphicsInfo->size;
spriteTemplate.images = &spriteFrameImage;
objectEventId = TrySetupObjectEventSprite(objectEventTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY);
@@ -1499,7 +1498,7 @@ u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup)
return TrySpawnObjectEventTemplate(objectEventTemplate, mapNum, mapGroup, cameraX, cameraY);
}
-static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+static void CopyObjectGraphicsInfoToSpriteTemplate(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
{
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
@@ -1513,17 +1512,18 @@ static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (
*subspriteTables = graphicsInfo->subspriteTables;
}
-static void MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
{
- MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, sMovementTypeCallbacks[callbackIndex], spriteTemplate, subspriteTables);
+ CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables);
}
-static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
{
- MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables);
+ CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables);
}
-u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
+// Used to create a sprite using a graphicsId associated with object events.
+u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
struct SpriteTemplate *spriteTemplate;
const struct SubspriteTable *subspriteTables;
@@ -1531,7 +1531,7 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
u8 spriteId;
spriteTemplate = malloc(sizeof(struct SpriteTemplate));
- MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, callback, spriteTemplate, &subspriteTables);
+ CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables);
if (spriteTemplate->paletteTag != TAG_NONE)
LoadObjectEventPalette(spriteTemplate->paletteTag);
@@ -1547,9 +1547,15 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
return spriteId;
}
-// Used to create sprite object events instead of a full object event
-// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room
-u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 direction)
+#define sVirtualObjId data[0]
+#define sVirtualObjElev data[1]
+
+// "Virtual Objects" are a class of sprites used instead of a full object event.
+// Used when more objects are needed than the object event limit (for Contest / Battle Dome audiences and group members in Union Room).
+// A unique id is given as an argument and stored in the sprite data to allow referring back to the same virtual object.
+// They can be turned (and, in the case of the Union Room, animated teleporting in and out) but do not have movement types
+// or any of the other data normally associated with object events.
+u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1558,7 +1564,7 @@ u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 di
const struct ObjectEventGraphicsInfo *graphicsInfo;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
- MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
+ CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables);
*(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
x += MAP_OFFSET;
y += MAP_OFFSET;
@@ -1575,8 +1581,8 @@ u8 CreateObjectSprite(u8 graphicsId, u8 objectEventId, s16 x, s16 y, u8 z, u8 di
sprite->oam.paletteNum -= 16;
sprite->coordOffsetEnabled = TRUE;
- sprite->sObjEventId = objectEventId;
- sprite->data[1] = z;
+ sprite->sVirtualObjId = virtualObjId;
+ sprite->sVirtualObjElev = z;
if (graphicsInfo->paletteSlot == 10)
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
else if (graphicsInfo->paletteSlot >= 16)
@@ -1698,7 +1704,7 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y)
subspriteTables = NULL;
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
spriteFrameImage.size = graphicsInfo->size;
- MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
+ CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
spriteTemplate.images = &spriteFrameImage;
*(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
@@ -1916,7 +1922,7 @@ void AllowObjectAtPosTriggerGroundEffects(s16 x, s16 y)
}
}
-void SetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority)
+void SetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority)
{
u8 objectEventId;
struct ObjectEvent *objectEvent;
@@ -1931,7 +1937,7 @@ void SetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority)
}
}
-void ResetObjectPriority(u8 localId, u8 mapNum, u8 mapGroup)
+void ResetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 objectEventId;
struct ObjectEvent *objectEvent;
@@ -8511,50 +8517,50 @@ void UpdateObjectEventSpriteInvisibility(struct Sprite *sprite, bool8 invisible)
#define sAnimNum data[3]
#define sAnimState data[4]
-static void UpdateObjectEventSprite(struct Sprite *sprite)
+static void SpriteCB_VirtualObject(struct Sprite *sprite)
{
- UpdateObjectEventSpritePosition(sprite);
- SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
+ VirtualObject_UpdateAnim(sprite);
+ SetObjectSubpriorityByZCoord(sprite->sVirtualObjElev, sprite, 1);
UpdateObjectEventSpriteInvisibility(sprite, sprite->sInvisible);
}
// Unused
-static void DestroyObjectEventSprites(void)
+static void DestroyVirtualObjects(void)
{
int i;
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
- if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
+ if(sprite->inUse && sprite->callback == SpriteCB_VirtualObject)
DestroySprite(sprite);
}
}
-static int GetObjectEventSpriteId(u8 objectEventId) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
+static int GetVirtualObjectSpriteId(u8 virtualObjId)
{
int i;
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
- if (sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->sObjEventId == objectEventId)
+ if (sprite->inUse && sprite->callback == SpriteCB_VirtualObject && (u8)sprite->sVirtualObjId == virtualObjId)
return i;
}
return MAX_SPRITES;
}
-void TurnObjectEventSprite(u8 objectEventId, u8 direction)
+void TurnVirtualObject(u8 virtualObjId, u8 direction)
{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ u8 spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId != MAX_SPRITES)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
}
-void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
+void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId)
{
- int spriteId = GetObjectEventSpriteId(objectEventId);
+ int spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId != MAX_SPRITES)
{
@@ -8582,9 +8588,9 @@ void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
}
}
-void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
+void SetVirtualObjectInvisibility(u8 virtualObjId, bool32 invisible)
{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ u8 spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId == MAX_SPRITES)
return;
@@ -8595,9 +8601,9 @@ void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
gSprites[spriteId].sInvisible = FALSE;
}
-bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
+bool32 IsVirtualObjectInvisible(u8 virtualObjId)
{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ u8 spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId == MAX_SPRITES)
return FALSE;
@@ -8605,9 +8611,9 @@ bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
return (gSprites[spriteId].sInvisible == TRUE);
}
-void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum)
+void SetVirtualObjectSpriteAnim(u8 virtualObjId, u8 animNum)
{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ u8 spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId != MAX_SPRITES)
{
@@ -8620,18 +8626,18 @@ static void MoveUnionRoomObjectUp(struct Sprite *sprite)
{
switch(sprite->sAnimState)
{
- case 0:
+ case 0:
+ sprite->y2 = 0;
+ sprite->sAnimState++;
+ case 1:
+ sprite->y2 -= 8;
+ if (sprite->y2 == -DISPLAY_HEIGHT)
+ {
sprite->y2 = 0;
- sprite->sAnimState++;
- case 1:
- sprite->y2 -= 8;
- if (sprite->y2 == -DISPLAY_HEIGHT)
- {
- sprite->y2 = 0;
- sprite->sInvisible = TRUE;
- sprite->sAnimNum = 0;
- sprite->sAnimState = 0;
- }
+ sprite->sInvisible = TRUE;
+ sprite->sAnimNum = 0;
+ sprite->sAnimState = 0;
+ }
}
}
@@ -8639,40 +8645,40 @@ static void MoveUnionRoomObjectDown(struct Sprite *sprite)
{
switch(sprite->sAnimState)
{
- case 0:
- sprite->y2 = -DISPLAY_HEIGHT;
- sprite->sAnimState++;
- case 1:
- sprite->y2 += 8;
- if(sprite->y2 == 0)
- {
- sprite->sAnimNum = 0;
- sprite->sAnimState = 0;
- }
+ case 0:
+ sprite->y2 = -DISPLAY_HEIGHT;
+ sprite->sAnimState++;
+ case 1:
+ sprite->y2 += 8;
+ if(sprite->y2 == 0)
+ {
+ sprite->sAnimNum = 0;
+ sprite->sAnimState = 0;
+ }
}
}
-static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
+static void VirtualObject_UpdateAnim(struct Sprite *sprite)
{
switch(sprite->sAnimNum)
{
- case UNION_ROOM_SPAWN_IN:
- MoveUnionRoomObjectDown(sprite);
- break;
- case UNION_ROOM_SPAWN_OUT:
- MoveUnionRoomObjectUp(sprite);
- break;
- case 0:
- break;
- default:
- sprite->sAnimNum = 0;
- break;
+ case UNION_ROOM_SPAWN_IN:
+ MoveUnionRoomObjectDown(sprite);
+ break;
+ case UNION_ROOM_SPAWN_OUT:
+ MoveUnionRoomObjectUp(sprite);
+ break;
+ case 0:
+ break;
+ default:
+ sprite->sAnimNum = 0;
+ break;
}
}
-bool32 IsObjectEventSpriteAnimating(u8 objectEventId)
+bool32 IsVirtualObjectAnimating(u8 virtualObjId)
{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ u8 spriteId = GetVirtualObjectSpriteId(virtualObjId);
if (spriteId == MAX_SPRITES)
return FALSE;
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 99ff26821..327e48d19 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -252,7 +252,7 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u
AllocateMonSpritesGfx();
GetMonData(mon, MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar1, name);
+ StringCopy_Nickname(gStringVar1, name);
StringCopy(gStringVar2, gSpeciesNames[postEvoSpecies]);
// preEvo sprite
@@ -474,7 +474,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSprit
u8 ID;
GetMonData(mon, MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar1, name);
+ StringCopy_Nickname(gStringVar1, name);
StringCopy(gStringVar2, gSpeciesNames[postEvoSpecies]);
gAffineAnimsDisabled = TRUE;
@@ -787,7 +787,7 @@ static void Task_EvolutionScene(u8 taskId)
gTasks[taskId].tLearnsFirstMove = FALSE;
gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1;
GetMonData(mon, MON_DATA_NICKNAME, text);
- StringCopy10(gBattleTextBuff1, text);
+ StringCopy_Nickname(gBattleTextBuff1, text);
if (var == MON_HAS_MAX_MOVES)
gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE;
@@ -1202,7 +1202,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
gTasks[taskId].tLearnsFirstMove = FALSE;
gTasks[taskId].tLearnMoveState = 0;
GetMonData(mon, MON_DATA_NICKNAME, text);
- StringCopy10(gBattleTextBuff1, text);
+ StringCopy_Nickname(gBattleTextBuff1, text);
if (var == MON_HAS_MAX_MOVES)
gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE;
diff --git a/src/faraway_island.c b/src/faraway_island.c
index 3927d9ad5..9ddb66de5 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -7,7 +7,6 @@
#include "sprite.h"
#include "constants/event_objects.h"
#include "constants/field_effects.h"
-#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
static u8 GetValidMewMoveDirection(u8);
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 6d338c06d..8d6b564d2 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -32,7 +32,6 @@
#include "constants/event_objects.h"
#include "constants/field_poison.h"
#include "constants/map_types.h"
-#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/trainer_hill.h"
@@ -691,7 +690,7 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8
{
s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
- if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != -1)
+ if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != WARP_ID_NONE)
{
StoreInitialPlayerAvatarState();
SetupWarp(&gMapHeader, warpEventId, position);
@@ -705,7 +704,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
{
s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
- if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
+ if (warpEventId != WARP_ID_NONE && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
{
StoreInitialPlayerAvatarState();
SetupWarp(&gMapHeader, warpEventId, position);
@@ -847,7 +846,7 @@ static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8
if (MetatileBehavior_IsWarpDoor(metatileBehavior) == TRUE)
{
warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
- if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
+ if (warpEventId != WARP_ID_NONE && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
{
StoreInitialPlayerAvatarState();
SetupWarp(&gMapHeader, warpEventId, position);
@@ -873,7 +872,7 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e
return i;
}
}
- return -1;
+ return WARP_ID_NONE;
}
static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent)
diff --git a/src/field_door.c b/src/field_door.c
index f53e83d7a..988ea615d 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -5,7 +5,6 @@
#include "fieldmap.h"
#include "metatile_behavior.h"
#include "task.h"
-#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/metatile_labels.h"
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 9e54823a6..6cf468b3e 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -26,7 +26,6 @@
#include "constants/event_object_movement.h"
#include "constants/field_effects.h"
#include "constants/items.h"
-#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/trainer_types.h"
diff --git a/src/field_poison.c b/src/field_poison.c
index 132ce571e..90013243c 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -50,7 +50,7 @@ static void FaintFromFieldPoison(u8 partyIdx)
AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN);
SetMonData(pokemon, MON_DATA_STATUS, &status);
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
- StringGetEnd10(gStringVar1);
+ StringGet_Nickname(gStringVar1);
}
static bool32 MonFaintedFromPoison(u8 partyIdx)
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 0cf5e4145..eda146725 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -35,7 +35,6 @@
#include "trainer_hill.h"
#include "fldeff.h"
-// This file's functions.
static void Task_ExitNonAnimDoor(u8);
static void Task_ExitNonDoor(u8);
static void Task_DoContestHallWarp(u8);
@@ -50,9 +49,9 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId);
// data[0] is used universally by tasks in this file as a state for switches
#define tState data[0]
-// const
-static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
-const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1;
+// Smaller flash level -> larger flash radius
+static const u16 sFlashLevelToRadius[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
+const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelToRadius) - 1;
const struct ScanlineEffectParams sFlashEffectParams =
{
@@ -503,7 +502,7 @@ void DoDiveWarp(void)
CreateTask(Task_WarpAndLoadMap, 10);
}
-void DoSootopolisLegendWarp(void)
+void DoWhiteFadeWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
@@ -971,14 +970,14 @@ static u8 StartUpdateOrbFlashEffect(s32 centerX, s32 centerY, s32 initialFlashRa
#undef tFlashRadiusDelta
#undef tClearScanlineEffect
-// A higher flashLevel value is a smaller flash radius (more darkness). 0 is full brightness
-void AnimateFlash(u8 flashLevel)
+// A higher flash level is a smaller flash radius (more darkness). 0 is full brightness
+void AnimateFlash(u8 newFlashLevel)
{
- u8 curFlashLevel = Overworld_GetFlashLevel();
+ u8 curFlashLevel = GetFlashLevel();
bool8 fullBrightness = FALSE;
- if (!flashLevel)
+ if (newFlashLevel == 0)
fullBrightness = TRUE;
- StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], fullBrightness, 1);
+ StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelToRadius[curFlashLevel], sFlashLevelToRadius[newFlashLevel], fullBrightness, 1);
StartWaitForFlashUpdate();
ScriptContext2_Enable();
}
@@ -987,7 +986,7 @@ void WriteFlashScanlineEffectBuffer(u8 flashLevel)
{
if (flashLevel)
{
- SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[flashLevel]);
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelToRadius[flashLevel]);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
}
}
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 39e5d6698..d8b9eb05d 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -325,7 +325,7 @@ void Task_HandlePorthole(u8 taskId)
static void ShowSSTidalWhileSailing(void)
{
- u8 spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0);
+ u8 spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0);
gSprites[spriteId].coordOffsetEnabled = FALSE;
@@ -349,7 +349,7 @@ void LookThroughPorthole(void)
FlagSet(FLAG_SYS_CRUISE_MODE);
FlagSet(FLAG_DONT_TRANSITION_MUSIC);
FlagSet(FLAG_HIDE_MAP_NAME_POPUP);
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
TrySetPortholeWarpDestination();
DoPortholeWarp();
}
diff --git a/src/field_specials.c b/src/field_specials.c
index ef569ca00..96eb949e5 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -55,7 +55,6 @@
#include "constants/items.h"
#include "constants/heal_locations.h"
#include "constants/map_types.h"
-#include "constants/maps.h"
#include "constants/mystery_gift.h"
#include "constants/script_menu.h"
#include "constants/slot_machine.h"
@@ -960,13 +959,9 @@ u8 GetBattleOutcome(void)
void CableCarWarp(void)
{
if (gSpecialVar_0x8004 != 0)
- {
- SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4);
- }
+ SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), WARP_ID_NONE, 6, 4);
else
- {
- SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4);
- }
+ SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), WARP_ID_NONE, 6, 4);
}
void SetHiddenItemFlag(void)
@@ -1335,15 +1330,40 @@ void BufferEReaderTrainerName(void)
u16 GetSlotMachineId(void)
{
- static const u8 sSlotMachineRandomSeeds[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
- static const u8 sSlotMachineIds[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5};
- static const u8 sSlotMachineServiceDayIds[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5};
+ static const u8 sSlotMachineRandomSeeds[SLOT_MACHINE_COUNT] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
+ static const u8 sSlotMachineIds[SLOT_MACHINE_COUNT] = {
+ SLOT_MACHINE_UNLUCKIEST,
+ SLOT_MACHINE_UNLUCKIER,
+ SLOT_MACHINE_UNLUCKIER,
+ SLOT_MACHINE_UNLUCKY,
+ SLOT_MACHINE_UNLUCKY,
+ SLOT_MACHINE_UNLUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIEST
+ };
+ static const u8 sSlotMachineServiceDayIds[SLOT_MACHINE_COUNT] = {
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKY,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIER,
+ SLOT_MACHINE_LUCKIEST,
+ SLOT_MACHINE_LUCKIEST
+ };
u32 rnd = gSaveBlock1Ptr->dewfordTrends[0].trendiness + gSaveBlock1Ptr->dewfordTrends[0].rand + sSlotMachineRandomSeeds[gSpecialVar_0x8004];
- if (GetPriceReduction(POKENEWS_GAME_CORNER))
- {
+ if (IsPokeNewsActive(POKENEWS_GAME_CORNER))
return sSlotMachineServiceDayIds[rnd % SLOT_MACHINE_COUNT];
- }
+
return sSlotMachineIds[rnd % SLOT_MACHINE_COUNT];
}
@@ -1550,17 +1570,13 @@ bool8 FoundBlackGlasses(void)
void SetRoute119Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
- {
- SetSav1Weather(WEATHER_ROUTE119_CYCLE);
- }
+ SetSavedWeather(WEATHER_ROUTE119_CYCLE);
}
void SetRoute123Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
- {
- SetSav1Weather(WEATHER_ROUTE123_CYCLE);
- }
+ SetSavedWeather(WEATHER_ROUTE123_CYCLE);
}
u8 GetLeadMonIndex(void)
@@ -3029,6 +3045,8 @@ void CloseFrontierExchangeCornerItemIconWindow(void)
RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId);
}
+#define TAG_ITEM_ICON 5500
+
static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
{
#include "data/battle_frontier/battle_frontier_exchange_corner.h"
@@ -3046,9 +3064,9 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
}
else
{
- FreeSpriteTilesByTag(5500);
- FreeSpritePaletteByTag(5500);
- sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, 5500, 5500);
+ FreeSpriteTilesByTag(TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, TAG_ITEM_ICON, TAG_ITEM_ICON);
}
break;
case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
@@ -3059,9 +3077,9 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
}
else
{
- FreeSpriteTilesByTag(5500);
- FreeSpritePaletteByTag(5500);
- sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, 5500, 5500);
+ FreeSpriteTilesByTag(TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, TAG_ITEM_ICON, TAG_ITEM_ICON);
}
break;
case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
@@ -3078,9 +3096,9 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
static void ShowFrontierExchangeCornerItemIcon(u16 item)
{
- FreeSpriteTilesByTag(5500);
- FreeSpritePaletteByTag(5500);
- sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(5500, 5500, item);
+ FreeSpriteTilesByTag(TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON);
+ sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(TAG_ITEM_ICON, TAG_ITEM_ICON, item);
if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES)
{
@@ -3416,7 +3434,7 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
gFieldEffectArguments[5] = 5;
FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK);
- Overworld_SetObjEventTemplateCoords(1, sDeoxysRockCoords[rockLevel][0], sDeoxysRockCoords[rockLevel][1]);
+ SetObjEventTemplateCoords(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, sDeoxysRockCoords[rockLevel][0], sDeoxysRockCoords[rockLevel][1]);
}
static void WaitForDeoxysRockMovement(u8 taskId)
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 187270f7a..760d85369 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -21,20 +21,40 @@
#include "constants/songs.h"
#include "constants/metatile_labels.h"
+/* This file handles some persistent tasks that run in the overworld.
+ * - Task_RunTimeBasedEvents: Periodically updates local time and RTC events. Also triggers ambient cries.
+ * - Task_MuddySlope: Handles the metatile animation when the player steps on muddy slopes.
+ * - Task_RunPerStepCallback: Calls one of the functions in sPerStepCallbacks, listed below...
+ * . DummyPerStepCallback: Default, does nothing
+ * . AshGrassPerStepCallback: Removes the ash from ash-covered grass that the player steps on.
+ * . FortreeBridgePerStepCallback: Depresses Fortree log bridges that the player steps on.
+ * . PacifidlogBridgePerStepCallback: Submerges Pacifidlog log bridges that the player steps on.
+ * . SootopolisGymIcePerStepCallback: Cracks/breaks ice in Sootopolis Gym that the player steps on.
+ * . EndTruckSequence: Sets the moving truck boxes to their final position when the truck sequence ends.
+ * . SecretBasePerStepCallback: Records the decorations in a friend's secret base that the player steps on.
+ * . CrackedFloorPerStepCallback: Breaks cracked floors that the player steps on.
+ *
+ * NOTE: "PerStep" is perhaps misleading. One function in sPerStepCallbacks is called
+ * every frame while in the overworld by Task_RunPerStepCallback regardless of
+ * whether or not steps are being taken. However, nearly all of the functions in
+ * the table check if the player has moved from their previous position before
+ * doing anything else.
+ */
+
struct PacifidlogMetatileOffsets
{
s8 x;
s8 y;
- u16 tileId;
+ u16 metatileId;
};
-static void DummyPerStepCallback(u8 taskId);
-static void AshGrassPerStepCallback(u8 taskId);
-static void FortreeBridgePerStepCallback(u8 taskId);
-static void PacifidlogBridgePerStepCallback(u8 taskId);
-static void SootopolisGymIcePerStepCallback(u8 taskId);
-static void CrackedFloorPerStepCallback(u8 taskId);
-static void Task_MuddySlope(u8 taskId);
+static void DummyPerStepCallback(u8);
+static void AshGrassPerStepCallback(u8);
+static void FortreeBridgePerStepCallback(u8);
+static void PacifidlogBridgePerStepCallback(u8);
+static void SootopolisGymIcePerStepCallback(u8);
+static void CrackedFloorPerStepCallback(u8);
+static void Task_MuddySlope(u8);
static const TaskFunc sPerStepCallbacks[] =
{
@@ -48,29 +68,35 @@ static const TaskFunc sPerStepCallbacks[] =
[STEP_CB_CRACKED_FLOOR] = CrackedFloorPerStepCallback
};
-// they are in pairs but declared as 1D array
+// Each array has 4 pairs of data, each pair representing two metatiles of a log and their relative position.
+// The 4 pairs are for:
+// 0: If the player is standing on the top of a vertical log
+// 1: If the player is standing on the bottom of a vertical log
+// 2: If the player is standing on the left of a horizontal log
+// 3: If the player is standing on the right of a horizontal log
+// i.e. the element with an offset of 0,0 is the one the player is standing on.
static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
- { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
- { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1},
- {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1}
+ { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom},
+ { 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom},
+ { 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight},
+ {-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight}
};
static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
- { 0, -1, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
- { 0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1},
- {-1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1}
+ { 0, 0, METATILE_Pacifidlog_SubmergedLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_VerticalBottom},
+ { 0, -1, METATILE_Pacifidlog_SubmergedLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_VerticalBottom},
+ { 0, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalRight},
+ {-1, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_HorizontalRight}
};
static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] =
{
- { 0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_FloatingLogs_Vertical1},
- { 0, -1, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical1},
- { 0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1},
- {-1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1}
+ { 0, 0, METATILE_Pacifidlog_FloatingLogs_VerticalTop}, {0, 1, METATILE_Pacifidlog_FloatingLogs_VerticalBottom},
+ { 0, -1, METATILE_Pacifidlog_FloatingLogs_VerticalTop}, {0, 0, METATILE_Pacifidlog_FloatingLogs_VerticalBottom},
+ { 0, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalLeft}, {1, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalRight},
+ {-1, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalLeft}, {0, 0, METATILE_Pacifidlog_FloatingLogs_HorizontalRight}
};
// Each element corresponds to a y coordinate row in the sootopolis gym 1F map.
@@ -104,16 +130,11 @@ static const u16 sSootopolisGymIceRowVars[] =
0
};
-static const u16 sMuddySlopeMetatiles[] = {
- METATILE_General_MuddySlope_Frame0,
- METATILE_General_MuddySlope_Frame3,
- METATILE_General_MuddySlope_Frame2,
- METATILE_General_MuddySlope_Frame1
-};
+#define tCallbackId data[0]
static void Task_RunPerStepCallback(u8 taskId)
{
- int idx = gTasks[taskId].data[0];
+ int idx = gTasks[taskId].tCallbackId;
sPerStepCallbacks[idx](taskId);
}
@@ -121,23 +142,23 @@ static void Task_RunPerStepCallback(u8 taskId)
#define tAmbientCryState data[1]
#define tAmbientCryDelay data[2]
+#define TIME_UPDATE_INTERVAL (1 << 12)
+
static void RunTimeBasedEvents(s16 *data)
{
switch (tState)
{
- case 0:
- if (gMain.vblankCounter1 & 0x1000)
- {
- DoTimeBasedEvents();
- tState++;
- }
- break;
- case 1:
- if (!(gMain.vblankCounter1 & 0x1000))
- {
- tState--;
- }
- break;
+ case 0:
+ if (gMain.vblankCounter1 & TIME_UPDATE_INTERVAL)
+ {
+ DoTimeBasedEvents();
+ tState++;
+ }
+ break;
+ case 1:
+ if (!(gMain.vblankCounter1 & TIME_UPDATE_INTERVAL))
+ tState--;
+ break;
}
}
@@ -153,22 +174,20 @@ static void Task_RunTimeBasedEvents(u8 taskId)
}
#undef tState
-#undef tAmbientCryState
-#undef tAmbientCryDelay
void SetUpFieldTasks(void)
{
if (!FuncIsActiveTask(Task_RunPerStepCallback))
{
- u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50);
- gTasks[taskId].data[0] = 0;
+ u8 taskId = CreateTask(Task_RunPerStepCallback, 80);
+ gTasks[taskId].tCallbackId = STEP_CB_DUMMY;
}
if (!FuncIsActiveTask(Task_MuddySlope))
- CreateTask(Task_MuddySlope, 0x50);
+ CreateTask(Task_MuddySlope, 80);
if (!FuncIsActiveTask(Task_RunTimeBasedEvents))
- CreateTask(Task_RunTimeBasedEvents, 0x50);
+ CreateTask(Task_RunTimeBasedEvents, 80);
}
void ActivatePerStepCallback(u8 callbackId)
@@ -179,17 +198,13 @@ void ActivatePerStepCallback(u8 callbackId)
s32 i;
s16 *data = gTasks[taskId].data;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < NUM_TASK_DATA; i++)
data[i] = 0;
if (callbackId >= ARRAY_COUNT(sPerStepCallbacks))
- {
- data[0] = 0;
- }
+ tCallbackId = STEP_CB_DUMMY;
else
- {
- data[0] = callbackId;
- }
+ tCallbackId = callbackId;
}
}
@@ -200,18 +215,20 @@ void ResetFieldTasksArgs(void)
taskId = FindTaskIdByFunc(Task_RunPerStepCallback);
if (taskId != TASK_NONE)
- {
data = gTasks[taskId].data;
- }
+
taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents);
if (taskId != TASK_NONE)
{
data = gTasks[taskId].data;
- data[1] = 0;
- data[2] = 0;
+ tAmbientCryState = 0;
+ tAmbientCryDelay = 0;
}
}
+#undef tAmbientCryState
+#undef tAmbientCryDelay
+
static void DummyPerStepCallback(u8 taskId)
{
@@ -219,282 +236,377 @@ static void DummyPerStepCallback(u8 taskId)
static const struct PacifidlogMetatileOffsets *GetPacifidlogBridgeMetatileOffsets(const struct PacifidlogMetatileOffsets *offsets, u16 metatileBehavior)
{
- if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior))
+ if (MetatileBehavior_IsPacifidlogVerticalLogTop(metatileBehavior))
return &offsets[0 * 2];
- else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(metatileBehavior))
return &offsets[1 * 2];
- else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(metatileBehavior))
return &offsets[2 * 2];
- else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(metatileBehavior))
return &offsets[3 * 2];
else
return NULL;
}
-static void SetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap)
+static void TrySetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap)
{
offsets = GetPacifidlogBridgeMetatileOffsets(offsets, MapGridGetMetatileBehaviorAt(x, y));
+
+ // If offsets is NULL, position is not a log (don't set it)
if (offsets)
{
- MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].tileId);
+ // Set both metatiles of the log
+ MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].metatileId);
if (redrawMap)
CurrentMapDrawMetatileAt(x + offsets[0].x, y + offsets[0].y);
- MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].tileId);
+ MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].metatileId);
if (redrawMap)
CurrentMapDrawMetatileAt(x + offsets[1].x, y + offsets[1].y);
}
}
-static void UpdateHalfSubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
+static void TrySetLogBridgeHalfSubmerged(s16 x, s16 y, bool32 redrawMap)
{
- SetPacifidlogBridgeMetatiles(sHalfSubmergedBridgeMetatileOffsets, x, y, redrawMap);
+ TrySetPacifidlogBridgeMetatiles(sHalfSubmergedBridgeMetatileOffsets, x, y, redrawMap);
}
-static void UpdateFullySubmergedBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
+static void TrySetLogBridgeFullySubmerged(s16 x, s16 y, bool32 redrawMap)
{
- SetPacifidlogBridgeMetatiles(sFullySubmergedBridgeMetatileOffsets, x, y, redrawMap);
+ TrySetPacifidlogBridgeMetatiles(sFullySubmergedBridgeMetatileOffsets, x, y, redrawMap);
}
-static void UpdateFloatingBridgeMetatiles(s16 x, s16 y, bool32 redrawMap)
+static void TrySetLogBridgeFloating(s16 x, s16 y, bool32 redrawMap)
{
- SetPacifidlogBridgeMetatiles(sFloatingBridgeMetatileOffsets, x, y, redrawMap);
+ TrySetPacifidlogBridgeMetatiles(sFloatingBridgeMetatileOffsets, x, y, redrawMap);
}
-static bool32 StandingOnNewPacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2)
+// Returns FALSE if player has moved from one end of a log to the other (log should remain submerged).
+// Otherwise it returns TRUE.
+static bool32 ShouldRaisePacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY)
{
- u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2);
+ u16 oldBehavior = MapGridGetMetatileBehaviorAt(oldX, oldY);
- if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior))
+ if (MetatileBehavior_IsPacifidlogVerticalLogTop(oldBehavior))
{
- if (y1 > y2)
+ // Still on same one if moved from top to bottom
+ if (newY > oldY)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(oldBehavior))
{
- if (y1 < y2)
+ // Still on same one if moved from bottom to top
+ if (newY < oldY)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(oldBehavior))
{
- if (x1 > x2)
+ // Still on same one if moved from left to right
+ if (newX > oldX)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(oldBehavior))
{
- if (x1 < x2)
+ // Still on same one if moved from right to left
+ if (newX < oldX)
return FALSE;
}
+
+ // Player is either on a different log or no log at all
return TRUE;
}
-static bool32 StandingOnSamePacifidlogBridge(s16 x1, s16 y1, s16 x2, s16 y2)
+// Returns FALSE if player has moved from one end of a log to the other (log should remain submerged).
+// Otherwise it returns TRUE.
+// This is the effectively the same as ShouldRaisePacifidlogLogs, as it swaps both the conditions and which position's behavior to check.
+// In effect the previous function asks "was the player's previous position not the other end of a log they're standing on?"
+// while this function asks "is the player's current position not the other end of a log they were previously standing on?"
+// and with the same positions both questions always have the same answer.
+static bool32 ShouldSinkPacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY)
{
- u16 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1);
+ u16 newBehavior = MapGridGetMetatileBehaviorAt(newX, newY);
- if (MetatileBehavior_IsPacifidlogVerticalLog1(metatileBehavior))
+ if (MetatileBehavior_IsPacifidlogVerticalLogTop(newBehavior))
{
- if (y1 < y2)
+ // Still on same one if moved from bottom to top
+ if (newY < oldY)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogVerticalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogVerticalLogBottom(newBehavior))
{
- if (y1 > y2)
+ // Still on same one if moved from top to bottom
+ if (newY > oldY)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogHorizontalLog1(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(newBehavior))
{
- if (x1 < x2)
+ // Still on same one if moved from right to left
+ if (newX < oldX)
return FALSE;
}
- else if (MetatileBehavior_IsPacifidlogHorizontalLog2(metatileBehavior))
+ else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(newBehavior))
{
- if (x1 > x2)
+ // Still on same one if moved from left to right
+ if (newX > oldX)
return FALSE;
}
return TRUE;
}
+#define tState data[1]
+#define tPrevX data[2]
+#define tPrevY data[3]
+#define tToRaiseX data[4]
+#define tToRaiseY data[5]
+#define tDelay data[6]
+
static void PacifidlogBridgePerStepCallback(u8 taskId)
{
s16 *data;
s16 x, y;
data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
- switch (data[1])
+ switch (tState)
{
- case 0:
- data[2] = x;
- data[3] = y;
- UpdateFullySubmergedBridgeMetatiles(x, y, TRUE);
- data[1] = 1;
- break;
- case 1:
- if (x != data[2] || y != data[3])
- {
- if (StandingOnNewPacifidlogBridge(x, y, data[2], data[3]))
- {
- UpdateHalfSubmergedBridgeMetatiles(data[2], data[3], TRUE);
- UpdateFloatingBridgeMetatiles(data[2], data[3], FALSE);
- data[4] = data[2];
- data[5] = data[3];
- data[1] = 2;
- data[6] = 8;
- }
- else
- {
- data[4] = -1;
- data[5] = -1;
- }
+ case 0:
+ tPrevX = x;
+ tPrevY = y;
+
+ // If player is already standing on a log when the callback
+ // is set then immediately set it to submerged
+ TrySetLogBridgeFullySubmerged(x, y, TRUE);
+ tState = 1;
+ break;
+ case 1:
+ // Skip if player hasn't moved
+ if (x == tPrevX && y == tPrevY)
+ return;
+
+ if (ShouldRaisePacifidlogLogs(x, y, tPrevX, tPrevY))
+ {
+ // Player's previous position is not the other end of a log
+ // they're standing on, try and set it half-submerged (rising to surface).
+ // The floating metatile is queued up by setting it but not drawing it,
+ // but this is pointless as state 2 will handle it in full anyway.
+ TrySetLogBridgeHalfSubmerged(tPrevX, tPrevY, TRUE);
+ TrySetLogBridgeFloating(tPrevX, tPrevY, FALSE);
+ tToRaiseX = tPrevX;
+ tToRaiseY = tPrevY;
+ tState = 2;
+ tDelay = 8;
+ }
+ else
+ {
+ // Player has moved but is still on the same log bridge section.
+ // Keep it submerged.
+ tToRaiseX = -1;
+ tToRaiseY = -1;
+ }
- if (StandingOnSamePacifidlogBridge(x, y, data[2], data[3]))
- {
- UpdateHalfSubmergedBridgeMetatiles(x, y, TRUE);
- data[1] = 2;
- data[6] = 8;
- }
+ if (ShouldSinkPacifidlogLogs(x, y, tPrevX, tPrevY))
+ {
+ // Player's current position is not the other end of a log
+ // they were previously standing on, try and set it half-submerged (sinking)
+ TrySetLogBridgeHalfSubmerged(x, y, TRUE);
+ tState = 2;
+ tDelay = 8;
+ }
- data[2] = x;
- data[3] = y;
- if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y)))
- PlaySE(SE_PUDDLE);
- }
- break;
- case 2:
- if ((--data[6]) == 0)
- {
- UpdateFullySubmergedBridgeMetatiles(x, y, TRUE);
- if (data[4] != -1 && data[5] != -1)
- UpdateFloatingBridgeMetatiles(data[4], data[5], TRUE);
+ tPrevX = x;
+ tPrevY = y;
- data[1] = 1;
- }
- break;
+ // If player's new position is a log play the puddle SE
+ if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y)))
+ PlaySE(SE_PUDDLE);
+ break;
+ case 2:
+ if (--tDelay == 0)
+ {
+ // If player's current position is a log submerge it fully.
+ TrySetLogBridgeFullySubmerged(x, y, TRUE);
+
+ // Player's previous position is not the other end of a log
+ // they're standing on, try to raise their previous position.
+ if (tToRaiseX != -1 && tToRaiseY != -1)
+ TrySetLogBridgeFloating(tToRaiseX, tToRaiseY, TRUE);
+
+ tState = 1;
+ }
+ break;
}
}
-static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y)
+#undef tState
+#undef tPrevX
+#undef tPrevY
+#undef tToRaiseX
+#undef tToRaiseY
+#undef tDelay
+
+static void TryLowerFortreeBridge(s16 x, s16 y)
{
u8 z = PlayerGetZCoord();
if (!(z & 1))
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_Fortree_BridgeOverGrass_Raised:
- MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered);
- break;
- case METATILE_Fortree_BridgeOverTrees_Raised:
- MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered);
- break;
+ case METATILE_Fortree_BridgeOverGrass_Raised:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered);
+ break;
+ case METATILE_Fortree_BridgeOverTrees_Raised:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered);
+ break;
}
}
}
-static void SetNormalFortreeBridgeMetatile(s16 x, s16 y)
+static void TryRaiseFortreeBridge(s16 x, s16 y)
{
u8 z = PlayerGetZCoord();
if (!(z & 1))
{
switch (MapGridGetMetatileIdAt(x, y))
{
- case METATILE_Fortree_BridgeOverGrass_Lowered:
- MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised);
- break;
- case METATILE_Fortree_BridgeOverTrees_Lowered:
- MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised);
- break;
+ case METATILE_Fortree_BridgeOverGrass_Lowered:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised);
+ break;
+ case METATILE_Fortree_BridgeOverTrees_Lowered:
+ MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised);
+ break;
}
}
}
+#define tState data[1]
+#define tPrevX data[2]
+#define tPrevY data[3]
+#define tOldBridgeX data[4]
+#define tOldBridgeY data[5]
+#define tBounceTime data[6]
+
static void FortreeBridgePerStepCallback(u8 taskId)
{
bool8 isFortreeBridgeCur;
bool8 isFortreeBridgePrev;
- u8 z, flag;
- s16 x, y, x2, y2;
+ u8 z, onBridgeElevation;
+ s16 x, y, prevX, prevY;
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
- switch (data[1])
+ switch (tState)
{
- default:
- break;
- case 0:
- data[2] = x;
- data[3] = y;
- if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)))
- {
- SetLoweredForetreeBridgeMetatile(x, y);
- CurrentMapDrawMetatileAt(x, y);
- }
- data[1] = 1;
+ default:
+ break;
+ case 0:
+ tPrevX = x;
+ tPrevY = y;
+
+ // If player is already on bridge when callback is set then lower it immediately.
+ if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)))
+ {
+ TryLowerFortreeBridge(x, y);
+ CurrentMapDrawMetatileAt(x, y);
+ }
+ tState = 1;
+ break;
+ case 1:
+ prevX = tPrevX;
+ prevY = tPrevY;
+
+ // Skip if player hasn't moved
+ if (x == prevX && y == prevY)
break;
- case 1:
- x2 = data[2];
- y2 = data[3];
- if (x == x2 && y == y2)
- break;
-
- isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y));
- isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2));
- z = PlayerGetZCoord();
- flag = 0;
- if ((u8)(z & 1) == 0)
- flag = 1;
-
- if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1))
- PlaySE(SE_BRIDGE_WALK);
-
- if (isFortreeBridgePrev)
- {
- SetNormalFortreeBridgeMetatile(x2, y2);
- CurrentMapDrawMetatileAt(x2, y2);
- SetLoweredForetreeBridgeMetatile(x, y);
- CurrentMapDrawMetatileAt(x, y);
- }
- data[4] = x2;
- data[5] = y2;
- data[2] = x;
- data[3] = y;
- if (!isFortreeBridgePrev)
- break;
+ isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y));
+ isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(prevX, prevY));
+
+ // Make sure player isn't below bridge
+ z = PlayerGetZCoord();
+ onBridgeElevation = FALSE;
+ if ((u8)(z & 1) == 0)
+ onBridgeElevation = TRUE;
+
+ if (onBridgeElevation && (isFortreeBridgeCur == TRUE || isFortreeBridgePrev == TRUE))
+ PlaySE(SE_BRIDGE_WALK);
+
+ // Because this doesn't check for isFortreeBridgeCur, bridge sections aren't
+ // lowered when first stepping onto them from anything other than another bridge.
+ #ifdef BUGFIX
+ if (isFortreeBridgePrev || isFortreeBridgeCur)
+ #else
+ if (isFortreeBridgePrev)
+ #endif
+ {
+ // Raise old bridge
+ TryRaiseFortreeBridge(prevX, prevY);
+ CurrentMapDrawMetatileAt(prevX, prevY);
+
+ // Lower new bridge
+ TryLowerFortreeBridge(x, y);
+ CurrentMapDrawMetatileAt(x, y);
+ }
+
+ // These should really be set below the !isFortreeBridgePrev conditional,
+ // but it doesn't matter because it's not read until case 2 anyway.
+ tOldBridgeX = prevX;
+ tOldBridgeY = prevY;
+
+ tPrevX = x;
+ tPrevY = y;
+ if (!isFortreeBridgePrev)
+ break;
- data[6] = 16;
- data[1] = 2;
- // fallthrough
+ tBounceTime = 16;
+ tState = 2;
+ // fallthrough
+ case 2:
+ tBounceTime--;
+ prevX = tOldBridgeX;
+ prevY = tOldBridgeY;
+ switch (tBounceTime % 7)
+ {
+ case 0:
+ CurrentMapDrawMetatileAt(prevX, prevY);
+ case 1:
case 2:
- data[6]--;
- x2 = data[4];
- y2 = data[5];
- switch (data[6] % 7)
- {
- case 0:
- CurrentMapDrawMetatileAt(x2, y2);
- case 1:
- case 2:
- case 3:
- break;
- case 4:
- SetLoweredForetreeBridgeMetatile(x2, y2);
- CurrentMapDrawMetatileAt(x2, y2);
- SetNormalFortreeBridgeMetatile(x2, y2);
- case 5:
- case 6:
- case 7:
- break;
- }
- if (data[6] == 0)
- {
- data[1] = 1;
- }
+ case 3:
break;
+ case 4:
+ // Bounce bridge section that player has stepped off of
+ TryLowerFortreeBridge(prevX, prevY);
+ CurrentMapDrawMetatileAt(prevX, prevY);
+ TryRaiseFortreeBridge(prevX, prevY);
+ case 5:
+ case 6:
+ case 7: // Not possible with % 7
+ break;
+ }
+ if (tBounceTime == 0)
+ tState = 1;
+ break;
}
}
+#undef tState
+#undef tPrevX
+#undef tPrevY
+#undef tOldBridgeX
+#undef tOldBridgeY
+#undef tBounceTime
+
+// Boundaries of the ice puzzle in Sootopolis Gym
+#define ICE_PUZZLE_L 3
+#define ICE_PUZZLE_R 13
+#define ICE_PUZZLE_T 6
+#define ICE_PUZZLE_B 19
+
+#define ICE_PUZZLE_WIDTH (ICE_PUZZLE_R - ICE_PUZZLE_L + 1)
+#define ICE_PUZZLE_HEIGHT (ICE_PUZZLE_B - ICE_PUZZLE_T + 1)
+
static bool32 CoordInIcePuzzleRegion(s16 x, s16 y)
{
- if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && sSootopolisGymIceRowVars[y])
+ if ((u16)(x - ICE_PUZZLE_L) < ICE_PUZZLE_WIDTH
+ && (u16)(y - ICE_PUZZLE_T) < ICE_PUZZLE_HEIGHT
+ && sSootopolisGymIceRowVars[y])
return TRUE;
else
return FALSE;
@@ -503,17 +615,17 @@ static bool32 CoordInIcePuzzleRegion(s16 x, s16 y)
static void MarkIcePuzzleCoordVisited(s16 x, s16 y)
{
if (CoordInIcePuzzleRegion(x, y))
- *GetVarPointer(sSootopolisGymIceRowVars[y]) |= (1 << (x - 3));
+ *GetVarPointer(sSootopolisGymIceRowVars[y]) |= (1 << (x - ICE_PUZZLE_L));
}
static bool32 IsIcePuzzleCoordVisited(s16 x, s16 y)
{
- u32 var;
+ u16 var;
if (!CoordInIcePuzzleRegion(x, y))
return FALSE;
- var = VarGet(sSootopolisGymIceRowVars[y]) << 16;
- if ((0x10000 << (x - 3)) & var) // TODO: fix that if
+ var = VarGet(sSootopolisGymIceRowVars[y]);
+ if (var &= (1 << (x - ICE_PUZZLE_L)))
return TRUE;
else
return FALSE;
@@ -534,116 +646,155 @@ void SetSootopolisGymCrackedIceMetatiles(void)
}
}
+#define tState data[1]
+#define tPrevX data[2]
+#define tPrevY data[3]
+#define tIceX data[4]
+#define tIceY data[5]
+#define tDelay data[6]
+
static void SootopolisGymIcePerStepCallback(u8 taskId)
{
s16 x, y;
u16 tileBehavior;
u16 *iceStepCount;
s16 *data = gTasks[taskId].data;
- switch (data[1])
+ switch (tState)
{
- case 0:
- PlayerGetDestCoords(&x, &y);
- data[2] = x;
- data[3] = y;
- data[1] = 1;
- break;
- case 1:
- PlayerGetDestCoords(&x, &y);
- if (x != data[2] || y != data[3])
- {
- data[2] = x;
- data[3] = y;
- tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- iceStepCount = GetVarPointer(VAR_ICE_STEP_COUNT);
- if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE)
- {
- (*iceStepCount)++;
- data[6] = 4;
- data[1] = 2;
- data[4] = x;
- data[5] = y;
- }
- else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE)
- {
- *iceStepCount = 0;
- data[6] = 4;
- data[1] = 3;
- data[4] = x;
- data[5] = y;
- }
- }
- break;
- case 2:
- if (data[6] != 0)
- {
- data[6]--;
- }
- else
- {
- x = data[4];
- y = data[5];
- PlaySE(SE_ICE_CRACK);
- MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked);
- CurrentMapDrawMetatileAt(x, y);
- MarkIcePuzzleCoordVisited(x - MAP_OFFSET, y - MAP_OFFSET);
- data[1] = 1;
- }
- break;
- case 3:
- if (data[6] != 0)
- {
- data[6]--;
- }
- else
- {
- x = data[4];
- y = data[5];
- PlaySE(SE_ICE_BREAK);
- MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken);
- CurrentMapDrawMetatileAt(x, y);
- data[1] = 1;
- }
- break;
+ case 0:
+ PlayerGetDestCoords(&x, &y);
+ tPrevX = x;
+ tPrevY = y;
+ tState = 1;
+ break;
+ case 1:
+ PlayerGetDestCoords(&x, &y);
+ // End if player hasn't moved
+ if (x == tPrevX && y == tPrevY)
+ return;
+
+ tPrevX = x;
+ tPrevY = y;
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ iceStepCount = GetVarPointer(VAR_ICE_STEP_COUNT);
+ if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE)
+ {
+ // Thin ice, set it to cracked ice
+ (*iceStepCount)++;
+ tDelay = 4;
+ tState = 2;
+ tIceX = x;
+ tIceY = y;
+ }
+ else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE)
+ {
+ // Cracked ice, set it to broken ice
+ *iceStepCount = 0;
+ tDelay = 4;
+ tState = 3;
+ tIceX = x;
+ tIceY = y;
+ }
+ break;
+ case 2:
+ if (tDelay != 0)
+ {
+ tDelay--;
+ }
+ else
+ {
+ // Crack ice
+ x = tIceX;
+ y = tIceY;
+ PlaySE(SE_ICE_CRACK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked);
+ CurrentMapDrawMetatileAt(x, y);
+ MarkIcePuzzleCoordVisited(x - MAP_OFFSET, y - MAP_OFFSET);
+ tState = 1;
+ }
+ break;
+ case 3:
+ if (tDelay != 0)
+ {
+ tDelay--;
+ }
+ else
+ {
+ // Break ice
+ x = tIceX;
+ y = tIceY;
+ PlaySE(SE_ICE_BREAK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken);
+ CurrentMapDrawMetatileAt(x, y);
+ tState = 1;
+ }
+ break;
}
}
+#undef tState
+#undef tPrevX
+#undef tPrevY
+#undef tIceX
+#undef tIceY
+#undef tDelay
+
+#define tPrevX data[1]
+#define tPrevY data[2]
+
static void AshGrassPerStepCallback(u8 taskId)
{
s16 x, y;
u16 *ashGatherCount;
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
- if (x != data[1] || y != data[2])
+
+ // End if player hasn't moved
+ if (x == tPrevX && y == tPrevY)
+ return;
+
+ tPrevX = x;
+ tPrevY = y;
+ if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{
- data[1] = x;
- data[2] = y;
- if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
- {
- if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass)
- StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4);
- else
- StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4);
+ // Remove ash from grass
+ if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass)
+ StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4);
+ else
+ StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4);
- if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
- {
- ashGatherCount = GetVarPointer(VAR_ASH_GATHER_COUNT);
- if (*ashGatherCount < 9999)
- (*ashGatherCount)++;
- }
+ // Try to gather ash
+ if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
+ {
+ ashGatherCount = GetVarPointer(VAR_ASH_GATHER_COUNT);
+ if (*ashGatherCount < 9999)
+ (*ashGatherCount)++;
}
}
}
+#undef tPrevX
+#undef tPrevY
+
// This function uses the constants for gTileset_Cave's metatile labels, but other tilesets with
// the CrackedFloorPerStepCallback callback use the same metatile numbers for the cracked floor
// and hole metatiles, such as gTileset_MirageTower.
static void SetCrackedFloorHoleMetatile(s16 x, s16 y)
{
- MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == METATILE_Cave_CrackedFloor ? METATILE_Cave_CrackedFloor_Hole : METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole);
+ u16 metatileId = MapGridGetMetatileIdAt(x, y) == METATILE_Cave_CrackedFloor ? METATILE_Cave_CrackedFloor_Hole : METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole;
+ MapGridSetMetatileIdAt(x, y, metatileId);
CurrentMapDrawMetatileAt(x, y);
}
+#define tPrevX data[2]
+#define tPrevY data[3]
+#define tFloor1Delay data[4]
+#define tFloor1X data[5]
+#define tFloor1Y data[6]
+#define tFloor2Delay data[7]
+#define tFloor2X data[8]
+#define tFloor2Y data[9]
+
static void CrackedFloorPerStepCallback(u8 taskId)
{
s16 x, y;
@@ -651,113 +802,153 @@ static void CrackedFloorPerStepCallback(u8 taskId)
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
- if (data[4] != 0 && (--data[4]) == 0)
- SetCrackedFloorHoleMetatile(data[5], data[6]);
- if (data[7] != 0 && (--data[7]) == 0)
- SetCrackedFloorHoleMetatile(data[8], data[9]);
+ // Update up to 2 previous cracked floor spaces
+ if (tFloor1Delay != 0 && (--tFloor1Delay) == 0)
+ SetCrackedFloorHoleMetatile(tFloor1X, tFloor1Y);
+ if (tFloor2Delay != 0 && (--tFloor2Delay) == 0)
+ SetCrackedFloorHoleMetatile(tFloor2X, tFloor2Y);
if (MetatileBehavior_IsCrackedFloorHole(behavior))
VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
- if ((x != data[2] || y != data[3]))
+ // End if player hasn't moved
+ if (x == tPrevX && y == tPrevY)
+ return;
+
+ tPrevX = x;
+ tPrevY = y;
+ if (MetatileBehavior_IsCrackedFloor(behavior))
{
- data[2] = x;
- data[3] = y;
- if (MetatileBehavior_IsCrackedFloor(behavior))
- {
- if (GetPlayerSpeed() != 4)
- VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
+ if (GetPlayerSpeed() != BIKE_SPEED_FASTEST)
+ VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty
- if (data[4] == 0)
- {
- data[4] = 3;
- data[5] = x;
- data[6] = y;
- }
- else if (data[7] == 0)
- {
- data[7] = 3;
- data[8] = x;
- data[9] = y;
- }
+ if (tFloor1Delay == 0)
+ {
+ tFloor1Delay = 3;
+ tFloor1X = x;
+ tFloor1Y = y;
+ }
+ else if (tFloor2Delay == 0)
+ {
+ tFloor2Delay = 3;
+ tFloor2X = x;
+ tFloor2Y = y;
}
}
}
+#undef tPrevX
+#undef tPrevY
+#undef tFloor1Delay
+#undef tFloor1X
+#undef tFloor1Y
+#undef tFloor2Delay
+#undef tFloor2X
+#undef tFloor2Y
+
+#define tMapId data[0]
+#define tState data[1]
+#define tPrevX data[2]
+#define tPrevY data[3]
+// data[4] - data[15] are data about up to 4 individual animating muddy slope metatiles
+// They're divided into groups of 3, i.e data[4]-[6] track one metatile, data[7]-[9] another, and so on.
+// For each data triplet, the 1sst is the animation time, and the 2nd/3rd are the x/y coordinates.
+#define SLOPE_DATA_START 4
+#define SLOPE_DATA_END (3 * SLOPE_DATA_SIZE + SLOPE_DATA_START) // 13, which is the last slope data start point
+enum {
+ SLOPE_TIME,
+ SLOPE_X,
+ SLOPE_Y,
+ SLOPE_DATA_SIZE
+};
+#define tSlopeAnimTime(i) data[(i) * SLOPE_DATA_SIZE + SLOPE_DATA_START + SLOPE_TIME]
+
+static const u16 sMuddySlopeMetatiles[] = {
+ METATILE_General_MuddySlope_Frame0,
+ METATILE_General_MuddySlope_Frame3,
+ METATILE_General_MuddySlope_Frame2,
+ METATILE_General_MuddySlope_Frame1
+};
+
+#define SLOPE_ANIM_TIME 32
+#define SLOPE_ANIM_STEP_TIME (SLOPE_ANIM_TIME / (int)ARRAY_COUNT(sMuddySlopeMetatiles))
+
static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y)
{
- u16 tile;
- if ((--data[0]) == 0)
- tile = METATILE_General_MuddySlope_Frame0;
+ u16 metatileId;
+ if ((--data[SLOPE_TIME]) == 0)
+ metatileId = METATILE_General_MuddySlope_Frame0;
else
- tile = sMuddySlopeMetatiles[data[0] / 8];
+ metatileId = sMuddySlopeMetatiles[data[SLOPE_TIME] / SLOPE_ANIM_STEP_TIME];
- MapGridSetMetatileIdAt(x, y, tile);
+ MapGridSetMetatileIdAt(x, y, metatileId);
CurrentMapDrawMetatileAt(x, y);
MapGridSetMetatileIdAt(x, y, METATILE_General_MuddySlope_Frame0);
}
static void Task_MuddySlope(u8 taskId)
{
- s16 x, y, x2, y2;
+ s16 x, y, cameraOffsetX, cameraOffsetY;
int i;
u16 mapId;
s16 *data = gTasks[taskId].data;
PlayerGetDestCoords(&x, &y);
mapId = (gSaveBlock1Ptr->location.mapGroup << 8) | gSaveBlock1Ptr->location.mapNum;
- switch (data[1])
+ switch (tState)
{
- case 0:
- data[0] = mapId;
- data[2] = x;
- data[3] = y;
- data[1] = 1;
- data[4] = 0;
- data[7] = 0;
- data[10] = 0;
- data[13] = 0;
+ case 0:
+ tMapId = mapId;
+ tPrevX = x;
+ tPrevY = y;
+ tState = 1;
+ tSlopeAnimTime(0) = 0;
+ tSlopeAnimTime(1) = 0;
+ tSlopeAnimTime(2) = 0;
+ tSlopeAnimTime(3) = 0;
+ break;
+ case 1:
+ // Skip if player hasn't moved
+ if (tPrevX == x && tPrevY == y)
break;
- case 1:
- if (data[2] != x || data[3] != y)
+
+ tPrevX = x;
+ tPrevY = y;
+ if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y)))
+ {
+ for (i = SLOPE_DATA_START; i <= SLOPE_DATA_END; i += SLOPE_DATA_SIZE)
{
- data[2] = x;
- data[3] = y;
- if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y)))
+ if (data[i] == 0)
{
- for (i = 4; i < 14; i += 3)
- {
- if (data[i] == 0)
- {
- data[i] = 32;
- data[i + 1] = x;
- data[i + 2] = y;
- break;
- }
- }
+ data[i + SLOPE_TIME] = SLOPE_ANIM_TIME;
+ data[i + SLOPE_X] = x;
+ data[i + SLOPE_Y] = y;
+ break;
}
}
- break;
+ }
+ break;
}
- if (gCamera.active && mapId != data[0])
+
+ if (gCamera.active && mapId != tMapId)
{
- data[0] = mapId;
- x2 = gCamera.x;
- y2 = gCamera.y;
+ tMapId = mapId;
+ cameraOffsetX = gCamera.x;
+ cameraOffsetY = gCamera.y;
}
else
{
- x2 = 0;
- y2 = 0;
+ cameraOffsetX = 0;
+ cameraOffsetY = 0;
}
- for (i = 4; i < 14; i += 3)
+ for (i = SLOPE_DATA_START; i <= SLOPE_DATA_END; i += SLOPE_DATA_SIZE)
{
- if (data[i])
+ if (data[i + SLOPE_TIME])
{
- data[i + 1] -= x2;
- data[i + 2] -= y2;
- SetMuddySlopeMetatile(&data[i], data[i + 1], data[i + 2]);
+ data[i + SLOPE_X] -= cameraOffsetX;
+ data[i + SLOPE_Y] -= cameraOffsetY;
+ SetMuddySlopeMetatile(&data[i + SLOPE_TIME], data[i + SLOPE_X], data[i + SLOPE_Y]);
}
}
}
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 5720363c2..2b87557c2 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -2487,19 +2487,19 @@ static void CreateAbnormalWeatherTask(void)
static u8 TranslateWeatherNum(u8);
static void UpdateRainCounter(u8, u8);
-void SetSav1Weather(u32 weather)
+void SetSavedWeather(u32 weather)
{
u8 oldWeather = gSaveBlock1Ptr->weather;
gSaveBlock1Ptr->weather = TranslateWeatherNum(weather);
UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
}
-u8 GetSav1Weather(void)
+u8 GetSavedWeather(void)
{
return gSaveBlock1Ptr->weather;
}
-void SetSav1WeatherFromCurrMapHeader(void)
+void SetSavedWeatherFromCurrMapHeader(void)
{
u8 oldWeather = gSaveBlock1Ptr->weather;
gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather);
@@ -2508,19 +2508,19 @@ void SetSav1WeatherFromCurrMapHeader(void)
void SetWeather(u32 weather)
{
- SetSav1Weather(weather);
- SetNextWeather(GetSav1Weather());
+ SetSavedWeather(weather);
+ SetNextWeather(GetSavedWeather());
}
void SetWeather_Unused(u32 weather)
{
- SetSav1Weather(weather);
- SetCurrentAndNextWeather(GetSav1Weather());
+ SetSavedWeather(weather);
+ SetCurrentAndNextWeather(GetSavedWeather());
}
void DoCurrentWeather(void)
{
- u8 weather = GetSav1Weather();
+ u8 weather = GetSavedWeather();
if (weather == WEATHER_ABNORMAL)
{
@@ -2539,7 +2539,7 @@ void DoCurrentWeather(void)
void ResumePausedWeather(void)
{
- u8 weather = GetSav1Weather();
+ u8 weather = GetSavedWeather();
if (weather == WEATHER_ABNORMAL)
{
diff --git a/src/frontier_pass.c b/src/frontier_pass.c
index 8ce1e14dc..07dd8f228 100644
--- a/src/frontier_pass.c
+++ b/src/frontier_pass.c
@@ -26,7 +26,6 @@
#include "overworld.h"
#include "math_util.h"
#include "constants/battle_frontier.h"
-#include "constants/maps.h"
#include "constants/rgb.h"
#include "constants/region_map_sections.h"
#include "constants/songs.h"
diff --git a/src/heal_location.c b/src/heal_location.c
index 5eda24d67..ab8dc5265 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -1,6 +1,5 @@
#include "global.h"
#include "heal_location.h"
-#include "constants/maps.h"
#include "constants/heal_locations.h"
#include "data/heal_locations.h"
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 0b2be39b5..85340ed96 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -183,7 +183,7 @@ bool8 HasAnotherPlayerGivenFavorLadyItem(void)
sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
if (sFavorLadyPtr->playerName[0] != EOS)
{
- StringCopy7(gStringVar3, sFavorLadyPtr->playerName);
+ StringCopy_PlayerName(gStringVar3, sFavorLadyPtr->playerName);
ConvertInternationalString(gStringVar3, sFavorLadyPtr->language);
return TRUE;
}
@@ -204,7 +204,7 @@ void BufferFavorLadyItemName(void)
static void SetFavorLadyPlayerName(const u8 *src, u8 *dest)
{
memset(dest, EOS, PLAYER_NAME_LENGTH + 1);
- StringCopy7(dest, src);
+ StringCopy_PlayerName(dest, src);
}
void BufferFavorLadyPlayerName(void)
@@ -396,12 +396,12 @@ static u8 BufferQuizAuthorName(void)
sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
if (sQuizLadyPtr->playerName[0] == EOS)
{
- StringCopy7(gStringVar1, gText_QuizLady_Lady);
+ StringCopy_PlayerName(gStringVar1, gText_QuizLady_Lady);
authorNameId = QUIZ_AUTHOR_NAME_LADY;
}
else
{
- StringCopy7(gStringVar1, sQuizLadyPtr->playerName);
+ StringCopy_PlayerName(gStringVar1, sQuizLadyPtr->playerName);
ConvertInternationalString(gStringVar1, sQuizLadyPtr->language);
nameLen = GetPlayerNameLength(sQuizLadyPtr->playerName);
if (nameLen == GetPlayerNameLength(gSaveBlock2Ptr->playerName))
@@ -552,7 +552,7 @@ void QuizLadyRecordCustomQuizData(void)
sQuizLadyPtr->prize = gSpecialVar_ItemId;
for (i = 0; i < TRAINER_ID_LENGTH; i++)
sQuizLadyPtr->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
- StringCopy7(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName);
+ StringCopy_PlayerName(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName);
sQuizLadyPtr->language = gGameLanguage;
}
@@ -696,7 +696,7 @@ static void BufferContestLadyCategoryAndMonName(u8 *category, u8 *nickname)
{
sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
StringCopy(category, sContestLadyCategoryNames[sContestLadyPtr->category]);
- StringCopy10(nickname, sContestLadyMonNames[sContestLadyPtr->category]);
+ StringCopy_Nickname(nickname, sContestLadyMonNames[sContestLadyPtr->category]);
}
void BufferContestLadyMonName(u8 *category, u8 *nickname)
diff --git a/src/link.c b/src/link.c
index 01cc06e7c..1084d4a6d 100644
--- a/src/link.c
+++ b/src/link.c
@@ -292,10 +292,9 @@ static void LinkTestScreen(void)
gLinkType = LINKTYPE_TRADE;
OpenLink();
SeedRng(gMain.vblankCounter2);
- for (i = 0; i < MAX_LINK_PLAYERS; i++)
- {
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256;
- }
+
InitLinkTestBG(0, 2, 4, 0, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
CreateTask(Task_DestroySelf, 0);
diff --git a/src/lottery_corner.c b/src/lottery_corner.c
index 2cbf0a808..f19e9f7b7 100644
--- a/src/lottery_corner.c
+++ b/src/lottery_corner.c
@@ -113,7 +113,7 @@ void PickLotteryCornerTicket(void)
gSpecialVar_0x8006 = 1;
GetBoxMonData(&gPokemonStoragePtr->boxes[box][slot], MON_DATA_NICKNAME, gStringVar1);
}
- StringGetEnd10(gStringVar1);
+ StringGet_Nickname(gStringVar1);
}
}
diff --git a/src/mail_data.c b/src/mail_data.c
index 683bd854e..ca50a687e 100644
--- a/src/mail_data.c
+++ b/src/mail_data.c
@@ -157,7 +157,7 @@ void ClearMailItemId(u8 mailId)
gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE;
}
-u8 TakeMailFromMon2(struct Pokemon *mon)
+u8 TakeMailFromMonAndSave(struct Pokemon *mon)
{
u8 i;
u8 newHeldItem[2];
@@ -179,6 +179,7 @@ u8 TakeMailFromMon2(struct Pokemon *mon)
}
}
+ // No space to save mail
return MAIL_NONE;
}
diff --git a/src/match_call.c b/src/match_call.c
index 85df5822d..de7f13416 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -29,7 +29,6 @@
#include "constants/abilities.h"
#include "constants/battle_frontier.h"
#include "constants/event_objects.h"
-#include "constants/maps.h"
#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/trainers.h"
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 5bc197010..d5cf83bd2 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -16,7 +16,6 @@
#include "decompress.h"
#include "constants/songs.h"
#include "constants/items.h"
-#include "constants/maps.h"
#define TAG_SWAP_LINE 109
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index 20d67ca7f..cd77f4a59 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -919,7 +919,7 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId)
if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL))
return StringCopyPadded(dst, gText_EggNickname, 0, 12);
GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst);
- StringGetEnd10(dst);
+ StringGet_Nickname(dst);
species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL);
if (box == TOTAL_BOXES_COUNT) // Party mon.
{
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index ad5eb42cc..6b58e3f05 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -126,10 +126,10 @@ static const u8 sTileBitAttributes[] =
[MB_BRIDGE_OVER_POND_LOW] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_BRIDGE_OVER_POND_MED] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_BRIDGE_OVER_POND_HIGH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_PACIFIDLOG_VERTICAL_LOG_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_PACIFIDLOG_VERTICAL_LOG_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_PACIFIDLOG_HORIZONTAL_LOG_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_PACIFIDLOG_HORIZONTAL_LOG_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_PACIFIDLOG_VERTICAL_LOG_TOP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_FORTREE_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_UNUSED_79] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_BRIDGE_OVER_POND_MED_EDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
@@ -1131,33 +1131,33 @@ bool8 MetatileBehavior_IsFortreeBridge(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsPacifidlogVerticalLog1(u8 metatileBehavior)
+bool8 MetatileBehavior_IsPacifidlogVerticalLogTop(u8 metatileBehavior)
{
- if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_1)
+ if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_TOP)
return TRUE;
else
return FALSE;
}
-bool8 MetatileBehavior_IsPacifidlogVerticalLog2(u8 metatileBehavior)
+bool8 MetatileBehavior_IsPacifidlogVerticalLogBottom(u8 metatileBehavior)
{
- if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_2)
+ if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM)
return TRUE;
else
return FALSE;
}
-bool8 MetatileBehavior_IsPacifidlogHorizontalLog1(u8 metatileBehavior)
+bool8 MetatileBehavior_IsPacifidlogHorizontalLogLeft(u8 metatileBehavior)
{
- if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_1)
+ if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT)
return TRUE;
else
return FALSE;
}
-bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8 metatileBehavior)
+bool8 MetatileBehavior_IsPacifidlogHorizontalLogRight(u8 metatileBehavior)
{
- if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_2)
+ if (metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT)
return TRUE;
else
return FALSE;
@@ -1165,10 +1165,10 @@ bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8 metatileBehavior)
bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior)
{
- if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_1
- || metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_2
- || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_1
- || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_2)
+ if (metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_TOP
+ || metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM
+ || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT
+ || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT)
return TRUE;
else
return FALSE;
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index 9473b0f82..730026298 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -15,7 +15,6 @@
#include "task.h"
#include "window.h"
#include "constants/event_objects.h"
-#include "constants/maps.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/metatile_labels.h"
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 92d230616..2b925135f 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -912,7 +912,7 @@ static void CreateLearnableMovesList(void)
}
GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_NICKNAME, nickname);
- StringCopy10(gStringVar1, nickname);
+ StringCopy_Nickname(gStringVar1, nickname);
sMoveRelearnerStruct->menuItems[sMoveRelearnerStruct->numMenuChoices].name = gText_Cancel;
sMoveRelearnerStruct->menuItems[sMoveRelearnerStruct->numMenuChoices].id = LIST_CANCEL;
sMoveRelearnerStruct->numMenuChoices++;
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 717931268..0007664ba 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -111,16 +111,16 @@ static bool8 GetEventLoadMessage(u8 *dest, u32 status)
{
bool8 retVal = TRUE;
- if (status == 0)
+ if (status == MEVENT_STATUS_LOAD_OK)
{
StringCopy(dest, gText_EventSafelyLoaded);
retVal = FALSE;
}
- if (status == 2)
+ if (status == MEVENT_STATUS_SUCCESS)
retVal = FALSE;
- if (status == 1)
+ if (status == MEVENT_STATUS_LOAD_ERROR)
StringCopy(dest, gText_LoadErrorEndingSession);
return retVal;
@@ -193,7 +193,7 @@ static void CB2_MysteryEventMenu(void)
}
else
{
- GetEventLoadMessage(gStringVar4, 1);
+ GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
}
@@ -206,7 +206,7 @@ static void CB2_MysteryEventMenu(void)
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{
SetCloseLinkCallback();
- GetEventLoadMessage(gStringVar4, 1);
+ GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
}
@@ -218,7 +218,7 @@ static void CB2_MysteryEventMenu(void)
else
{
CloseLink();
- GetEventLoadMessage(gStringVar4, 1);
+ GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
}
@@ -252,9 +252,9 @@ static void CB2_MysteryEventMenu(void)
case 11:
if (gReceivedRemoteLinkPlayers == 0)
{
- u16 unkVal = RunMysteryEventScript(gDecompressionBuffer);
+ u16 status = RunMysteryEventScript(gDecompressionBuffer);
CpuFill32(0, gDecompressionBuffer, 0x7D4);
- if (!GetEventLoadMessage(gStringVar4, unkVal))
+ if (!GetEventLoadMessage(gStringVar4, status))
TrySavingData(SAVE_NORMAL);
gMain.state++;
}
@@ -290,7 +290,7 @@ static void CB2_MysteryEventMenu(void)
if (gLinkStatus & 0x40 && !IsLinkMaster())
{
CloseLink();
- GetEventLoadMessage(gStringVar4, 1);
+ GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
}
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
index 18a1a0d07..5f08c6294 100644
--- a/src/mystery_event_script.c
+++ b/src/mystery_event_script.c
@@ -22,6 +22,11 @@ extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
#define LANGUAGE_MASK 0x1
#define VERSION_MASK 0x200
+#define mScriptBase data[0]
+#define mOffset data[1]
+#define mStatus data[2]
+#define mValid data[3]
+
EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0};
static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4)
@@ -44,22 +49,22 @@ static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4)
static void SetIncompatible(void)
{
StringExpandPlaceholders(gStringVar4, gText_MysteryEventCantBeUsed);
- SetMysteryEventScriptStatus(3);
+ SetMysteryEventScriptStatus(MEVENT_STATUS_FAILURE);
}
static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script)
{
InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd);
SetupBytecodeScript(ctx, script);
- ctx->data[0] = (u32)script;
- ctx->data[1] = 0;
- ctx->data[2] = 0;
- ctx->data[3] = 0;
+ ctx->mScriptBase = (u32)script;
+ ctx->mOffset = 0;
+ ctx->mStatus = MEVENT_STATUS_LOAD_OK;
+ ctx->mValid = FALSE;
}
static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx)
{
- if (RunScriptCommand(ctx) && ctx->data[3])
+ if (RunScriptCommand(ctx) && ctx->mValid)
return TRUE;
else
return FALSE;
@@ -70,10 +75,10 @@ void InitMysteryEventScriptContext(u8 *script)
InitMysteryEventScript(&sMysteryEventScriptContext, script);
}
-bool32 RunMysteryEventScriptContextCommand(u32 *script)
+bool32 RunMysteryEventScriptContextCommand(u32 *status)
{
bool32 ret = RunMysteryEventScriptCommand(&sMysteryEventScriptContext);
- *script = sMysteryEventScriptContext.data[2];
+ *status = sMysteryEventScriptContext.mStatus;
return ret;
}
@@ -84,12 +89,12 @@ u32 RunMysteryEventScript(u8 *script)
InitMysteryEventScript(ctx, script);
while (RunMysteryEventScriptCommand(ctx));
- return ctx->data[2];
+ return ctx->mStatus;
}
-void SetMysteryEventScriptStatus(u32 val)
+void SetMysteryEventScriptStatus(u32 status)
{
- sMysteryEventScriptContext.data[2] = val;
+ sMysteryEventScriptContext.mStatus = status;
}
static int CalcRecordMixingGiftChecksum(void)
@@ -174,14 +179,14 @@ bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx)
u16 v3;
u32 v4;
- ctx->data[1] = ScriptReadWord(ctx);
+ ctx->mOffset = ScriptReadWord(ctx);
v1 = ScriptReadHalfword(ctx);
v2 = ScriptReadWord(ctx);
v3 = ScriptReadHalfword(ctx);
v4 = ScriptReadWord(ctx);
if (CheckCompatibility(v1, v2, v3, v4) == TRUE)
- ctx->data[3] = 1;
+ ctx->mValid = TRUE;
else
SetIncompatible();
@@ -195,23 +200,23 @@ bool8 MEScrCmd_nop(struct ScriptContext *ctx)
bool8 MEScrCmd_setstatus(struct ScriptContext *ctx)
{
- u8 value = ScriptReadByte(ctx);
- ctx->data[2] = value;
+ u8 status = ScriptReadByte(ctx);
+ ctx->mStatus = status;
return FALSE;
}
bool8 MEScrCmd_setmsg(struct ScriptContext *ctx)
{
- u8 value = ScriptReadByte(ctx);
- u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- if (value == 0xFF || value == ctx->data[2])
+ u8 status = ScriptReadByte(ctx);
+ u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
+ if (status == MEVENT_STATUS_FF || status == ctx->mStatus)
StringExpandPlaceholders(gStringVar4, str);
return FALSE;
}
bool8 MEScrCmd_runscript(struct ScriptContext *ctx)
{
- u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
ScriptContext2_RunNewScript(script);
return FALSE;
}
@@ -221,7 +226,7 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx)
u8 *str;
const u8 *message;
bool32 haveBerry = IsEnigmaBerryValid();
- u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
SetEnigmaBerry(berry);
StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
@@ -244,12 +249,12 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx)
StringExpandPlaceholders(str, message);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
if (IsEnigmaBerryValid() == TRUE)
VarSet(VAR_ENIGMA_BERRY_AVAILABLE, 1);
else
- ctx->data[2] = 1;
+ ctx->mStatus = MEVENT_STATUS_LOAD_ERROR;
return FALSE;
}
@@ -260,7 +265,7 @@ bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx)
u8 ribbonId = ScriptReadByte(ctx);
GiveGiftRibbonToParty(index, ribbonId);
StringExpandPlaceholders(gStringVar4, gText_MysteryEventSpecialRibbon);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
return FALSE;
}
@@ -269,8 +274,8 @@ bool8 MEScrCmd_initramscript(struct ScriptContext *ctx)
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
u8 objectId = ScriptReadByte(ctx);
- u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
+ u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId);
return FALSE;
}
@@ -279,7 +284,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx)
{
EnableNationalPokedex();
StringExpandPlaceholders(gStringVar4, gText_MysteryEventNationalDex);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
return FALSE;
}
@@ -287,7 +292,7 @@ bool8 MEScrCmd_addrareword(struct ScriptContext *ctx)
{
UnlockAdditionalPhrase(ScriptReadByte(ctx));
StringExpandPlaceholders(gStringVar4, gText_MysteryEventRareWord);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
return FALSE;
}
@@ -306,7 +311,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
struct Pokemon pokemon;
u16 species;
u16 heldItem;
- u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
+ u32 data = ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase;
void *pokemonPtr = (void *)data;
void *mailPtr = (void *)(data + sizeof(struct Pokemon));
@@ -321,7 +326,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
if (gPlayerPartyCount == PARTY_SIZE)
{
StringExpandPlaceholders(gStringVar4, gText_MysteryEventFullParty);
- ctx->data[2] = 3;
+ ctx->mStatus = MEVENT_STATUS_FAILURE;
}
else
{
@@ -341,7 +346,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
CompactPartySlots();
CalculatePlayerPartyCount();
StringExpandPlaceholders(gStringVar4, gText_MysteryEventSentOver);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
}
return FALSE;
@@ -349,11 +354,11 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx)
{
- u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
+ u32 data = ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase;
memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, (void *)data, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer));
ValidateEReaderTrainer();
StringExpandPlaceholders(gStringVar4, gText_MysteryEventNewTrainer);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
return FALSE;
}
@@ -361,19 +366,19 @@ bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx)
{
EnableResetRTC();
StringExpandPlaceholders(gStringVar4, gText_InGameClockUsable);
- ctx->data[2] = 2;
+ ctx->mStatus = MEVENT_STATUS_SUCCESS;
return FALSE;
}
bool8 MEScrCmd_checksum(struct ScriptContext *ctx)
{
int checksum = ScriptReadWord(ctx);
- u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
+ u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
if (checksum != CalcByteArraySum(data, dataEnd - data))
{
- ctx->data[3] = 0;
- ctx->data[2] = 1;
+ ctx->mValid = FALSE;
+ ctx->mStatus = MEVENT_STATUS_LOAD_ERROR;
}
return TRUE;
}
@@ -381,12 +386,12 @@ bool8 MEScrCmd_checksum(struct ScriptContext *ctx)
bool8 MEScrCmd_crc(struct ScriptContext *ctx)
{
int crc = ScriptReadWord(ctx);
- u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
+ u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
if (crc != CalcCRC16(data, dataEnd - data))
{
- ctx->data[3] = 0;
- ctx->data[2] = 1;
+ ctx->mValid = FALSE;
+ ctx->mStatus = MEVENT_STATUS_LOAD_ERROR;
}
return TRUE;
}
diff --git a/src/naming_screen.c b/src/naming_screen.c
index dcd60259b..5aef44f14 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1409,7 +1409,7 @@ static void NamingScreen_CreatePlayerIcon(void)
u8 spriteId;
rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreen->monSpecies);
- spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 56, 37, 0);
+ spriteId = CreateObjectGraphicsSprite(rivalGfxId, SpriteCallbackDummy, 56, 37, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
}
@@ -1436,7 +1436,7 @@ static void NamingScreen_CreateWaldaDadIcon(void)
{
u8 spriteId;
- spriteId = AddPseudoObjectEvent(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0);
+ spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MAN_1, SpriteCallbackDummy, 56, 37, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
}
diff --git a/src/new_game.c b/src/new_game.c
index 4bd3d3704..077b86775 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -29,7 +29,6 @@
#include "pokedex.h"
#include "apprentice.h"
#include "frontier_util.h"
-#include "constants/maps.h"
#include "pokedex.h"
#include "save.h"
#include "link_rfu.h"
@@ -126,7 +125,7 @@ static void ClearFrontierRecord(void)
static void WarpToTruck(void)
{
- SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), -1, -1, -1);
+ SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), WARP_ID_NONE, -1, -1);
WarpIntoMap();
}
diff --git a/src/overworld.c b/src/overworld.c
index 518771875..4aa579fdd 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -62,7 +62,6 @@
#include "constants/abilities.h"
#include "constants/layouts.h"
#include "constants/map_types.h"
-#include "constants/maps.h"
#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/trainer_hill.h"
@@ -175,7 +174,6 @@ static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *, u
static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *, u8, u16, u8);
static u16 GetCenterScreenMetatileBehavior(void);
-// IWRAM bss vars
static void *sUnusedOverworldCallback;
static u8 sPlayerLinkStates[MAX_LINK_PLAYERS];
// This callback is called with a player's key code. It then returns an
@@ -185,7 +183,6 @@ static u16 (*sPlayerKeyInterceptCallback)(u32);
static bool8 sReceivingFromLink;
static u8 sRfuKeepAliveTimer;
-// IWRAM common
u16 *gBGTilemapBuffers1;
u16 *gBGTilemapBuffers2;
u16 *gBGTilemapBuffers3;
@@ -195,7 +192,6 @@ bool8 (*gFieldCallback2)(void);
u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode.
u8 gFieldLinkPlayerCount;
-// EWRAM vars
EWRAM_DATA static u8 sObjectEventLoadFlag = 0;
EWRAM_DATA struct WarpData gLastUsedWarp = {0};
EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position
@@ -207,12 +203,11 @@ EWRAM_DATA static u16 sAmbientCrySpecies = 0;
EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0};
-// const rom data
static const struct WarpData sDummyWarpData =
{
- .mapGroup = -1,
- .mapNum = -1,
- .warpId = -1,
+ .mapGroup = MAP_GROUP(UNDEFINED),
+ .mapNum = MAP_NUM(UNDEFINED),
+ .warpId = WARP_ID_NONE,
.x = -1,
.y = -1,
};
@@ -495,7 +490,7 @@ void LoadSaveblockObjEventScripts(void)
savObjTemplates[i].script = mapHeaderObjTemplates[i].script;
}
-void Overworld_SetObjEventTemplateCoords(u8 localId, s16 x, s16 y)
+void SetObjEventTemplateCoords(u8 localId, s16 x, s16 y)
{
s32 i;
struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
@@ -512,7 +507,7 @@ void Overworld_SetObjEventTemplateCoords(u8 localId, s16 x, s16 y)
}
}
-void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
+void SetObjEventTemplateMovementType(u8 localId, u8 movementType)
{
s32 i;
@@ -570,11 +565,11 @@ static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId
static bool32 IsDummyWarp(struct WarpData *warp)
{
- if (warp->mapGroup != -1)
+ if (warp->mapGroup != (s8)MAP_GROUP(UNDEFINED))
return FALSE;
- else if (warp->mapNum != -1)
+ else if (warp->mapNum != (s8)MAP_NUM(UNDEFINED))
return FALSE;
- else if (warp->warpId != -1)
+ else if (warp->warpId != WARP_ID_NONE)
return FALSE;
else if (warp->x != -1)
return FALSE;
@@ -612,16 +607,20 @@ static void SetPlayerCoordsFromWarp(void)
{
if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount)
{
+ // warpId is a valid warp for this map, use the coords of that warp.
gSaveBlock1Ptr->pos.x = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].x;
gSaveBlock1Ptr->pos.y = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].y;
}
else if (gSaveBlock1Ptr->location.x >= 0 && gSaveBlock1Ptr->location.y >= 0)
{
+ // Invalid warpId given. The given coords are valid, use those instead.
+ // WARP_ID_NONE is used to reach this intentionally.
gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->location.x;
gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->location.y;
}
else
{
+ // Invalid warpId and coords given. Put player in center of map.
gSaveBlock1Ptr->pos.x = gMapHeader.mapLayout->width / 2;
gSaveBlock1Ptr->pos.y = gMapHeader.mapLayout->height / 2;
}
@@ -663,7 +662,7 @@ void SetWarpDestinationToHealLocation(u8 healLocationId)
{
const struct HealLocation *warp = GetHealLocation(healLocationId);
if (warp)
- SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
+ SetWarpDestination(warp->group, warp->map, WARP_ID_NONE, warp->x, warp->y);
}
void SetWarpDestinationToLastHealLocation(void)
@@ -675,7 +674,7 @@ void SetLastHealLocationWarp(u8 healLocationId)
{
const struct HealLocation *healLocation = GetHealLocation(healLocationId);
if (healLocation)
- SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
+ SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, WARP_ID_NONE, healLocation->x, healLocation->y);
}
void UpdateEscapeWarp(s16 x, s16 y)
@@ -683,7 +682,7 @@ void UpdateEscapeWarp(s16 x, s16 y)
u8 currMapType = GetCurrentMapType();
u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
if (IsMapTypeOutdoors(currMapType) && IsMapTypeOutdoors(destMapType) != TRUE)
- SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x - MAP_OFFSET, y - MAP_OFFSET + 1);
+ SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x - MAP_OFFSET, y - MAP_OFFSET + 1);
}
void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
@@ -716,7 +715,7 @@ void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
if (IsDummyWarp(&sFixedHoleWarp) == TRUE)
sWarpDestination = gLastUsedWarp;
else
- SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y);
+ SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, WARP_ID_NONE, x, y);
}
static void SetWarpDestinationToContinueGameWarp(void)
@@ -733,7 +732,7 @@ void SetContinueGameWarpToHealLocation(u8 healLocationId)
{
const struct HealLocation *warp = GetHealLocation(healLocationId);
if (warp)
- SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, -1, warp->x, warp->y);
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, WARP_ID_NONE, warp->x, warp->y);
}
void SetContinueGameWarpToDynamicWarp(int unused)
@@ -763,7 +762,7 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
if (connection != NULL)
{
- SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
+ SetWarpDestination(connection->mapGroup, connection->mapNum, WARP_ID_NONE, x, y);
}
else
{
@@ -789,7 +788,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
{
s32 paletteIndex;
- SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
+ SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, -1, -1);
// Dont transition map music between BF Outside West/East
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER)
@@ -804,7 +803,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
RestartWildEncounterImmunitySteps();
TryUpdateRandomTrainerRematches(mapGroup, mapNum);
DoTimeBasedEvents();
- SetSav1WeatherFromCurrMapHeader();
+ SetSavedWeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
SetDefaultFlashLevel();
Overworld_ClearSavedMusic();
@@ -855,7 +854,7 @@ static void LoadMapFromWarp(bool32 a1)
TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
if (a1 != TRUE)
DoTimeBasedEvents();
- SetSav1WeatherFromCurrMapHeader();
+ SetSavedWeatherFromCurrMapHeader();
ChooseAmbientCrySpecies();
if (isOutdoors)
FlagClear(FLAG_SYS_USE_FLASH);
@@ -968,6 +967,10 @@ bool32 Overworld_IsBikingAllowed(void)
return TRUE;
}
+// Flash level of 0 is fully bright
+// Flash level of 1 is the largest flash radius
+// Flash level of 7 is the smallest flash radius
+// Flash level of 8 is fully black
void SetDefaultFlashLevel(void)
{
if (!gMapHeader.cave)
@@ -978,14 +981,14 @@ void SetDefaultFlashLevel(void)
gSaveBlock1Ptr->flashLevel = gMaxFlashLevel - 1;
}
-void Overworld_SetFlashLevel(s32 flashLevel)
+void SetFlashLevel(s32 flashLevel)
{
if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
flashLevel = 0;
gSaveBlock1Ptr->flashLevel = flashLevel;
}
-u8 Overworld_GetFlashLevel(void)
+u8 GetFlashLevel(void)
{
return gSaveBlock1Ptr->flashLevel;
}
@@ -1100,7 +1103,7 @@ u16 GetCurrLocationDefaultMusic(void)
// Play the desert music only when the sandstorm is active on Route 111.
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111)
- && GetSav1Weather() == WEATHER_SANDSTORM)
+ && GetSavedWeather() == WEATHER_SANDSTORM)
return MUS_ROUTE111;
music = GetLocationMusic(&gSaveBlock1Ptr->location);
@@ -1790,7 +1793,7 @@ static void InitCurrentFlashLevelScanlineEffect(void)
WriteBattlePyramidViewScanlineEffectBuffer();
ScanlineEffect_SetParams(sFlashEffectParams);
}
- else if ((flashLevel = Overworld_GetFlashLevel()))
+ else if ((flashLevel = GetFlashLevel()))
{
WriteFlashScanlineEffectBuffer(flashLevel);
ScanlineEffect_SetParams(sFlashEffectParams);
@@ -3147,17 +3150,17 @@ static u8 FlipVerticalAndClearForced(u8 newFacing, u8 oldFacing)
return oldFacing;
}
-static u8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 a2, s16 x, s16 y)
+static bool8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 direction, s16 x, s16 y)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
if (i != selfObjEventId)
{
if ((gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y)
|| (gObjectEvents[i].previousCoords.x == x && gObjectEvents[i].previousCoords.y == y))
{
- return 1;
+ return TRUE;
}
}
}
@@ -3177,14 +3180,14 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
{
case VERSION_FIRE_RED:
case VERSION_LEAF_GREEN:
- objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
+ objEvent->spriteId = CreateObjectGraphicsSprite(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
break;
case VERSION_RUBY:
case VERSION_SAPPHIRE:
- objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
+ objEvent->spriteId = CreateObjectGraphicsSprite(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
break;
case VERSION_EMERALD:
- objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
+ objEvent->spriteId = CreateObjectGraphicsSprite(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
break;
}
diff --git a/src/party_menu.c b/src/party_menu.c
index 43f522034..34aff619f 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -69,7 +69,6 @@
#include "constants/field_effects.h"
#include "constants/item_effects.h"
#include "constants/items.h"
-#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/party_menu.h"
#include "constants/rgb.h"
@@ -954,7 +953,7 @@ static void DisplayPartyPokemonDataForMultiBattle(u8 slot)
{
menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE);
StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname);
- StringGetEnd10(gStringVar1);
+ StringGet_Nickname(gStringVar1);
ConvertInternationalPlayerName(gStringVar1);
DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions);
DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox);
@@ -1622,7 +1621,7 @@ static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
u8* GetMonNickname(struct Pokemon *mon, u8 *dest)
{
GetMonData(mon, MON_DATA_NICKNAME, dest);
- return StringGetEnd10(dest);
+ return StringGet_Nickname(dest);
}
#define tKeepOpen data[0]
@@ -3343,7 +3342,7 @@ static void Task_HandleSendMailToPCYesNoInput(u8 taskId)
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0: // Yes, send to PC
- if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF)
+ if (TakeMailFromMonAndSave(&gPlayerParty[gPartyMenu.slotId]) != MAIL_NONE)
{
DisplayPartyMenuMessage(gText_MailSentToPC, FALSE);
gTasks[taskId].func = Task_UpdateHeldItemSprite;
@@ -6133,7 +6132,7 @@ static void BufferMonSelection(void)
{
gSpecialVar_0x8004 = GetCursorSelectionMonId();
if (gSpecialVar_0x8004 >= PARTY_SIZE)
- gSpecialVar_0x8004 = 0xFF;
+ gSpecialVar_0x8004 = PARTY_NOTHING_CHOSEN;
gFieldCallback2 = CB2_FadeFromPartyMenu;
SetMainCallback2(CB2_ReturnToField);
}
@@ -6176,7 +6175,7 @@ static void CB2_ChooseContestMon(void)
{
gContestMonPartyIndex = GetCursorSelectionMonId();
if (gContestMonPartyIndex >= PARTY_SIZE)
- gContestMonPartyIndex = 0xFF;
+ gContestMonPartyIndex = PARTY_NOTHING_CHOSEN;
gSpecialVar_0x8004 = gContestMonPartyIndex;
gFieldCallback2 = CB2_FadeFromPartyMenu;
SetMainCallback2(CB2_ReturnToField);
@@ -6221,7 +6220,7 @@ static void CB2_ChooseMonForMoveRelearner(void)
{
gSpecialVar_0x8004 = GetCursorSelectionMonId();
if (gSpecialVar_0x8004 >= PARTY_SIZE)
- gSpecialVar_0x8004 = 0xFF;
+ gSpecialVar_0x8004 = PARTY_NOTHING_CHOSEN;
else
gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[gSpecialVar_0x8004]);
gFieldCallback2 = CB2_FadeFromPartyMenu;
diff --git a/src/pokeball.c b/src/pokeball.c
index 501d86ca3..cb68d6883 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -1138,7 +1138,7 @@ static void SpriteCB_TradePokeball(struct Sprite *sprite)
sprite->callback = SpriteCB_TradePokeballSendOff;
#ifdef BUGFIX
// FIX: If this is used on a sprite that has previously had an affine animation, it will not
- // play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`.
+ // play the shrink anim properly due to being paused. Works together with the fix to ResetSpriteAfterAnim.
gSprites[monSpriteId].affineAnimPaused = FALSE;
#endif // BUGFIX
StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_RETURN);
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index e2973dcab..141041f4f 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -16,7 +16,6 @@
#include "trig.h"
#include "pokedex_area_region_map.h"
#include "wild_encounter.h"
-#include "constants/maps.h"
#include "constants/region_map_sections.h"
#include "constants/rgb.h"
#include "constants/songs.h"
diff --git a/src/pokemon.c b/src/pokemon.c
index 1607e1a40..939c2429d 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -4647,7 +4647,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
- StringCopy10(gBattleMons[battlerId].nickname, nickname);
+ StringCopy_Nickname(gBattleMons[battlerId].nickname, nickname);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName);
hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)];
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index f18dc68d1..755cc7de0 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -37,7 +37,6 @@
#include "walda_phrase.h"
#include "window.h"
#include "constants/items.h"
-#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -6889,7 +6888,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode)
sStorage->displayMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG);
GetMonData(mon, MON_DATA_NICKNAME, sStorage->displayMonName);
- StringGetEnd10(sStorage->displayMonName);
+ StringGet_Nickname(sStorage->displayMonName);
sStorage->displayMonLevel = GetMonData(mon, MON_DATA_LEVEL);
sStorage->displayMonMarkings = GetMonData(mon, MON_DATA_MARKINGS);
sStorage->displayMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
@@ -6914,7 +6913,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode)
GetBoxMonData(boxMon, MON_DATA_NICKNAME, sStorage->displayMonName);
- StringGetEnd10(sStorage->displayMonName);
+ StringGet_Nickname(sStorage->displayMonName);
sStorage->displayMonLevel = GetLevelFromBoxMonExp(boxMon);
sStorage->displayMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS);
sStorage->displayMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY);
diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c
index e61b11568..94ed4e8d8 100644
--- a/src/pokenav_conditions.c
+++ b/src/pokenav_conditions.c
@@ -351,7 +351,7 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 arg3)
return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12);
GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str);
- StringGetEnd10(str);
+ StringGet_Nickname(str);
species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
if (boxId == TOTAL_BOXES_COUNT)
{
diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c
index c8790e359..bbc07df2c 100644
--- a/src/pokenav_conditions_search_results.c
+++ b/src/pokenav_conditions_search_results.c
@@ -711,7 +711,7 @@ static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 * dest)
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
- StringGetEnd10(gStringVar3);
+ StringGet_Nickname(gStringVar3);
dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60);
switch (gender)
{
diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c
index 1d72f6a98..724ced507 100644
--- a/src/pokenav_ribbons_list.c
+++ b/src/pokenav_ribbons_list.c
@@ -721,7 +721,7 @@ static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 * dest
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
- StringGetEnd10(gStringVar3);
+ StringGet_Nickname(gStringVar3);
dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60);
switch (gender)
{
diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c
index 81d5b900b..581228ff4 100644
--- a/src/pokenav_ribbons_summary.c
+++ b/src/pokenav_ribbons_summary.c
@@ -397,7 +397,7 @@ static void GetMonNicknameLevelGender(u8 *nick, u8 *level, u8 *gender)
*level = GetLevelFromBoxMonExp(boxMon);
GetBoxMonData(boxMon, MON_DATA_NICKNAME, nick);
}
- StringGetEnd10(nick);
+ StringGet_Nickname(nick);
}
static void GetMonSpeciesPersonalityOtId(u16 *species, u32 *personality, u32 *otId)
diff --git a/src/region_map.c b/src/region_map.c
index 759a26e84..0dc902674 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -7,7 +7,6 @@
#include "palette.h"
#include "party_menu.h"
#include "trig.h"
-#include "constants/maps.h"
#include "overworld.h"
#include "event_data.h"
#include "secret_base.h"
@@ -290,56 +289,56 @@ static const u32 sFlyTargetIcons_Gfx[] = INCBIN_U32("graphics/pokenav/region_map
static const u8 sMapHealLocations[][3] =
{
- {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F},
- {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), HEAL_LOCATION_OLDALE_TOWN},
- {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), HEAL_LOCATION_DEWFORD_TOWN},
- {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), HEAL_LOCATION_LAVARIDGE_TOWN},
- {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), HEAL_LOCATION_FALLARBOR_TOWN},
- {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), HEAL_LOCATION_VERDANTURF_TOWN},
- {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), HEAL_LOCATION_PACIFIDLOG_TOWN},
- {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), HEAL_LOCATION_PETALBURG_CITY},
- {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), HEAL_LOCATION_SLATEPORT_CITY},
- {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), HEAL_LOCATION_MAUVILLE_CITY},
- {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), HEAL_LOCATION_RUSTBORO_CITY},
- {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), HEAL_LOCATION_FORTREE_CITY},
- {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY},
- {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY},
- {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY},
- {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY},
- {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0},
- {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0},
- {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0},
- {MAP_GROUP(ROUTE104), MAP_NUM(ROUTE104), 0},
- {MAP_GROUP(ROUTE105), MAP_NUM(ROUTE105), 0},
- {MAP_GROUP(ROUTE106), MAP_NUM(ROUTE106), 0},
- {MAP_GROUP(ROUTE107), MAP_NUM(ROUTE107), 0},
- {MAP_GROUP(ROUTE108), MAP_NUM(ROUTE108), 0},
- {MAP_GROUP(ROUTE109), MAP_NUM(ROUTE109), 0},
- {MAP_GROUP(ROUTE110), MAP_NUM(ROUTE110), 0},
- {MAP_GROUP(ROUTE111), MAP_NUM(ROUTE111), 0},
- {MAP_GROUP(ROUTE112), MAP_NUM(ROUTE112), 0},
- {MAP_GROUP(ROUTE113), MAP_NUM(ROUTE113), 0},
- {MAP_GROUP(ROUTE114), MAP_NUM(ROUTE114), 0},
- {MAP_GROUP(ROUTE115), MAP_NUM(ROUTE115), 0},
- {MAP_GROUP(ROUTE116), MAP_NUM(ROUTE116), 0},
- {MAP_GROUP(ROUTE117), MAP_NUM(ROUTE117), 0},
- {MAP_GROUP(ROUTE118), MAP_NUM(ROUTE118), 0},
- {MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119), 0},
- {MAP_GROUP(ROUTE120), MAP_NUM(ROUTE120), 0},
- {MAP_GROUP(ROUTE121), MAP_NUM(ROUTE121), 0},
- {MAP_GROUP(ROUTE122), MAP_NUM(ROUTE122), 0},
- {MAP_GROUP(ROUTE123), MAP_NUM(ROUTE123), 0},
- {MAP_GROUP(ROUTE124), MAP_NUM(ROUTE124), 0},
- {MAP_GROUP(ROUTE125), MAP_NUM(ROUTE125), 0},
- {MAP_GROUP(ROUTE126), MAP_NUM(ROUTE126), 0},
- {MAP_GROUP(ROUTE127), MAP_NUM(ROUTE127), 0},
- {MAP_GROUP(ROUTE128), MAP_NUM(ROUTE128), 0},
- {MAP_GROUP(ROUTE129), MAP_NUM(ROUTE129), 0},
- {MAP_GROUP(ROUTE130), MAP_NUM(ROUTE130), 0},
- {MAP_GROUP(ROUTE131), MAP_NUM(ROUTE131), 0},
- {MAP_GROUP(ROUTE132), MAP_NUM(ROUTE132), 0},
- {MAP_GROUP(ROUTE133), MAP_NUM(ROUTE133), 0},
- {MAP_GROUP(ROUTE134), MAP_NUM(ROUTE134), 0}
+ [MAPSEC_LITTLEROOT_TOWN] = {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F},
+ [MAPSEC_OLDALE_TOWN] = {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), HEAL_LOCATION_OLDALE_TOWN},
+ [MAPSEC_DEWFORD_TOWN] = {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), HEAL_LOCATION_DEWFORD_TOWN},
+ [MAPSEC_LAVARIDGE_TOWN] = {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), HEAL_LOCATION_LAVARIDGE_TOWN},
+ [MAPSEC_FALLARBOR_TOWN] = {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), HEAL_LOCATION_FALLARBOR_TOWN},
+ [MAPSEC_VERDANTURF_TOWN] = {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), HEAL_LOCATION_VERDANTURF_TOWN},
+ [MAPSEC_PACIFIDLOG_TOWN] = {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), HEAL_LOCATION_PACIFIDLOG_TOWN},
+ [MAPSEC_PETALBURG_CITY] = {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), HEAL_LOCATION_PETALBURG_CITY},
+ [MAPSEC_SLATEPORT_CITY] = {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), HEAL_LOCATION_SLATEPORT_CITY},
+ [MAPSEC_MAUVILLE_CITY] = {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), HEAL_LOCATION_MAUVILLE_CITY},
+ [MAPSEC_RUSTBORO_CITY] = {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), HEAL_LOCATION_RUSTBORO_CITY},
+ [MAPSEC_FORTREE_CITY] = {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), HEAL_LOCATION_FORTREE_CITY},
+ [MAPSEC_LILYCOVE_CITY] = {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY},
+ [MAPSEC_MOSSDEEP_CITY] = {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY},
+ [MAPSEC_SOOTOPOLIS_CITY] = {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY},
+ [MAPSEC_EVER_GRANDE_CITY] = {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY},
+ [MAPSEC_ROUTE_101] = {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0},
+ [MAPSEC_ROUTE_102] = {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0},
+ [MAPSEC_ROUTE_103] = {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0},
+ [MAPSEC_ROUTE_104] = {MAP_GROUP(ROUTE104), MAP_NUM(ROUTE104), 0},
+ [MAPSEC_ROUTE_105] = {MAP_GROUP(ROUTE105), MAP_NUM(ROUTE105), 0},
+ [MAPSEC_ROUTE_106] = {MAP_GROUP(ROUTE106), MAP_NUM(ROUTE106), 0},
+ [MAPSEC_ROUTE_107] = {MAP_GROUP(ROUTE107), MAP_NUM(ROUTE107), 0},
+ [MAPSEC_ROUTE_108] = {MAP_GROUP(ROUTE108), MAP_NUM(ROUTE108), 0},
+ [MAPSEC_ROUTE_109] = {MAP_GROUP(ROUTE109), MAP_NUM(ROUTE109), 0},
+ [MAPSEC_ROUTE_110] = {MAP_GROUP(ROUTE110), MAP_NUM(ROUTE110), 0},
+ [MAPSEC_ROUTE_111] = {MAP_GROUP(ROUTE111), MAP_NUM(ROUTE111), 0},
+ [MAPSEC_ROUTE_112] = {MAP_GROUP(ROUTE112), MAP_NUM(ROUTE112), 0},
+ [MAPSEC_ROUTE_113] = {MAP_GROUP(ROUTE113), MAP_NUM(ROUTE113), 0},
+ [MAPSEC_ROUTE_114] = {MAP_GROUP(ROUTE114), MAP_NUM(ROUTE114), 0},
+ [MAPSEC_ROUTE_115] = {MAP_GROUP(ROUTE115), MAP_NUM(ROUTE115), 0},
+ [MAPSEC_ROUTE_116] = {MAP_GROUP(ROUTE116), MAP_NUM(ROUTE116), 0},
+ [MAPSEC_ROUTE_117] = {MAP_GROUP(ROUTE117), MAP_NUM(ROUTE117), 0},
+ [MAPSEC_ROUTE_118] = {MAP_GROUP(ROUTE118), MAP_NUM(ROUTE118), 0},
+ [MAPSEC_ROUTE_119] = {MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119), 0},
+ [MAPSEC_ROUTE_120] = {MAP_GROUP(ROUTE120), MAP_NUM(ROUTE120), 0},
+ [MAPSEC_ROUTE_121] = {MAP_GROUP(ROUTE121), MAP_NUM(ROUTE121), 0},
+ [MAPSEC_ROUTE_122] = {MAP_GROUP(ROUTE122), MAP_NUM(ROUTE122), 0},
+ [MAPSEC_ROUTE_123] = {MAP_GROUP(ROUTE123), MAP_NUM(ROUTE123), 0},
+ [MAPSEC_ROUTE_124] = {MAP_GROUP(ROUTE124), MAP_NUM(ROUTE124), 0},
+ [MAPSEC_ROUTE_125] = {MAP_GROUP(ROUTE125), MAP_NUM(ROUTE125), 0},
+ [MAPSEC_ROUTE_126] = {MAP_GROUP(ROUTE126), MAP_NUM(ROUTE126), 0},
+ [MAPSEC_ROUTE_127] = {MAP_GROUP(ROUTE127), MAP_NUM(ROUTE127), 0},
+ [MAPSEC_ROUTE_128] = {MAP_GROUP(ROUTE128), MAP_NUM(ROUTE128), 0},
+ [MAPSEC_ROUTE_129] = {MAP_GROUP(ROUTE129), MAP_NUM(ROUTE129), 0},
+ [MAPSEC_ROUTE_130] = {MAP_GROUP(ROUTE130), MAP_NUM(ROUTE130), 0},
+ [MAPSEC_ROUTE_131] = {MAP_GROUP(ROUTE131), MAP_NUM(ROUTE131), 0},
+ [MAPSEC_ROUTE_132] = {MAP_GROUP(ROUTE132), MAP_NUM(ROUTE132), 0},
+ [MAPSEC_ROUTE_133] = {MAP_GROUP(ROUTE133), MAP_NUM(ROUTE133), 0},
+ [MAPSEC_ROUTE_134] = {MAP_GROUP(ROUTE134), MAP_NUM(ROUTE134), 0}
};
static const u8 *const sEverGrandeCityNames[] =
@@ -2013,7 +2012,7 @@ static void CB_ExitFlyMap(void)
if (sMapHealLocations[sFlyMap->regionMap.mapSecId][2] != 0)
SetWarpDestinationToHealLocation(sMapHealLocations[sFlyMap->regionMap.mapSecId][2]);
else
- SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], -1);
+ SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], WARP_ID_NONE);
break;
}
ReturnToFieldFromFlyMapSelect();
diff --git a/src/roamer.c b/src/roamer.c
index b8d100967..4811ac3b2 100644
--- a/src/roamer.c
+++ b/src/roamer.c
@@ -3,7 +3,6 @@
#include "pokemon.h"
#include "random.h"
#include "roamer.h"
-#include "constants/maps.h"
// Despite having a variable to track it, the roamer is
// hard-coded to only ever be in map group 0
diff --git a/src/rotating_gate.c b/src/rotating_gate.c
index ea2eec126..23fbb3e1d 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -5,7 +5,6 @@
#include "fieldmap.h"
#include "sound.h"
#include "sprite.h"
-#include "constants/maps.h"
#include "constants/songs.h"
#define ROTATING_GATE_TILE_TAG 0x1300
diff --git a/src/save_location.c b/src/save_location.c
index b201ca1c0..74d2f2c44 100644
--- a/src/save_location.c
+++ b/src/save_location.c
@@ -1,6 +1,5 @@
#include "global.h"
#include "save_location.h"
-#include "constants/maps.h"
#define LIST_END 0xFFFF
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 6007fb493..2c18cb565 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -49,7 +49,6 @@
#include "tv.h"
#include "window.h"
#include "constants/event_objects.h"
-#include "constants/maps.h"
typedef u16 (*SpecialFunc)(void);
typedef void (*NativeFunc)(void);
@@ -58,11 +57,11 @@ EWRAM_DATA const u8 *gRamScriptRetAddr = NULL;
static EWRAM_DATA u32 sAddressOffset = 0; // For relative addressing in vgoto etc., used by saved scripts (e.g. Mystery Event)
static EWRAM_DATA u16 sPauseCounter = 0;
static EWRAM_DATA u16 sMovingNpcId = 0;
-static EWRAM_DATA u16 sMovingNpcMapBank = 0;
-static EWRAM_DATA u16 sMovingNpcMapId = 0;
+static EWRAM_DATA u16 sMovingNpcMapGroup = 0;
+static EWRAM_DATA u16 sMovingNpcMapNum = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
-static u8 gBrailleWindowId;
+static u8 sBrailleWindowId;
extern const SpecialFunc gSpecials[];
extern const u8 *gStdScripts[];
@@ -287,7 +286,7 @@ bool8 ScrCmd_returnram(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_killscript(struct ScriptContext *ctx)
+bool8 ScrCmd_endram(struct ScriptContext *ctx)
{
ClearRamScript();
StopScript(ctx);
@@ -296,9 +295,9 @@ bool8 ScrCmd_killscript(struct ScriptContext *ctx)
bool8 ScrCmd_setmysteryeventstatus(struct ScriptContext *ctx)
{
- u8 value = ScriptReadByte(ctx);
+ u8 status = ScriptReadByte(ctx);
- SetMysteryEventScriptStatus(value);
+ SetMysteryEventScriptStatus(status);
return FALSE;
}
@@ -310,7 +309,7 @@ bool8 ScrCmd_loadword(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx)
+bool8 ScrCmd_loadbytefromptr(struct ScriptContext *ctx)
{
u8 index = ScriptReadByte(ctx);
@@ -318,7 +317,7 @@ bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_writebytetoaddr(struct ScriptContext *ctx)
+bool8 ScrCmd_setptr(struct ScriptContext *ctx)
{
u8 value = ScriptReadByte(ctx);
@@ -406,7 +405,7 @@ bool8 ScrCmd_compare_local_to_value(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_local_to_ptr(struct ScriptContext *ctx)
{
const u8 value1 = ctx->data[ScriptReadByte(ctx)];
const u8 value2 = *(const u8 *)ScriptReadWord(ctx);
@@ -415,7 +414,7 @@ bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_ptr_to_local(struct ScriptContext *ctx)
{
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
const u8 value2 = ctx->data[ScriptReadByte(ctx)];
@@ -424,7 +423,7 @@ bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_ptr_to_value(struct ScriptContext *ctx)
{
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
const u8 value2 = ScriptReadByte(ctx);
@@ -433,7 +432,7 @@ bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx)
+bool8 ScrCmd_compare_ptr_to_ptr(struct ScriptContext *ctx)
{
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
const u8 value2 = *(const u8 *)ScriptReadWord(ctx);
@@ -610,11 +609,9 @@ bool8 ScrCmd_animateflash(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_setflashradius(struct ScriptContext *ctx)
+bool8 ScrCmd_setflashlevel(struct ScriptContext *ctx)
{
- u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
-
- Overworld_SetFlashLevel(flashLevel);
+ SetFlashLevel(VarGet(ScriptReadHalfword(ctx)));
return FALSE;
}
@@ -649,17 +646,17 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
switch (mode)
{
- case FADE_TO_BLACK:
- case FADE_TO_WHITE:
- default:
- CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE);
- FadeScreen(mode, 0);
- break;
- case FADE_FROM_BLACK:
- case FADE_FROM_WHITE:
- CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE);
- FadeScreen(mode, 0);
- break;
+ case FADE_TO_BLACK:
+ case FADE_TO_WHITE:
+ default:
+ CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE);
+ FadeScreen(mode, 0);
+ break;
+ case FADE_FROM_BLACK:
+ case FADE_FROM_WHITE:
+ CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE);
+ FadeScreen(mode, 0);
+ break;
}
SetupNativeScript(ctx, IsPaletteNotActive);
@@ -668,9 +665,7 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
static bool8 RunPauseTimer(void)
{
- sPauseCounter--;
-
- if (sPauseCounter == 0)
+ if (--sPauseCounter == 0)
return TRUE;
else
return FALSE;
@@ -711,13 +706,13 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx)
{
u16 weather = VarGet(ScriptReadHalfword(ctx));
- SetSav1Weather(weather);
+ SetSavedWeather(weather);
return FALSE;
}
bool8 ScrCmd_resetweather(struct ScriptContext *ctx)
{
- SetSav1WeatherFromCurrMapHeader();
+ SetSavedWeatherFromCurrMapHeader();
return FALSE;
}
@@ -794,7 +789,7 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx)
if (mapGroup == MAP_GROUP(UNDEFINED) && mapNum == MAP_NUM(UNDEFINED))
SetWarpDestinationToFixedHoleWarp(x - MAP_OFFSET, y - MAP_OFFSET);
else
- SetWarpDestination(mapGroup, mapNum, -1, x - MAP_OFFSET, y - MAP_OFFSET);
+ SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x - MAP_OFFSET, y - MAP_OFFSET);
DoFallWarp();
ResetInitialPlayerAvatarState();
return TRUE;
@@ -945,9 +940,9 @@ bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx)
bool8 ScrCmd_playbgm(struct ScriptContext *ctx)
{
u16 songId = ScriptReadHalfword(ctx);
- bool8 val = ScriptReadByte(ctx);
+ bool8 save = ScriptReadByte(ctx);
- if (val == TRUE)
+ if (save == TRUE)
Overworld_SetSavedMusic(songId);
PlayNewMapMusic(songId);
return FALSE;
@@ -1018,7 +1013,7 @@ bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx)
static bool8 WaitForMovementFinish(void)
{
- return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank);
+ return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup);
}
bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
@@ -1027,8 +1022,8 @@ bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
if (localId != 0)
sMovingNpcId = localId;
- sMovingNpcMapBank = gSaveBlock1Ptr->location.mapGroup;
- sMovingNpcMapId = gSaveBlock1Ptr->location.mapNum;
+ sMovingNpcMapGroup = gSaveBlock1Ptr->location.mapGroup;
+ sMovingNpcMapNum = gSaveBlock1Ptr->location.mapNum;
SetupNativeScript(ctx, WaitForMovementFinish);
return TRUE;
}
@@ -1036,15 +1031,15 @@ bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
bool8 ScrCmd_waitmovement_at(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
- u8 mapBank;
- u8 mapId;
+ u8 mapGroup;
+ u8 mapNum;
if (localId != 0)
sMovingNpcId = localId;
- mapBank = ScriptReadByte(ctx);
- mapId = ScriptReadByte(ctx);
- sMovingNpcMapBank = mapBank;
- sMovingNpcMapId = mapId;
+ mapGroup = ScriptReadByte(ctx);
+ mapNum = ScriptReadByte(ctx);
+ sMovingNpcMapGroup = mapGroup;
+ sMovingNpcMapNum = mapNum;
SetupNativeScript(ctx, WaitForMovementFinish);
return TRUE;
}
@@ -1101,7 +1096,7 @@ bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx)
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- Overworld_SetObjEventTemplateCoords(localId, x, y);
+ SetObjEventTemplateCoords(localId, x, y);
return FALSE;
}
@@ -1133,24 +1128,24 @@ bool8 ScrCmd_hideobject_at(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setobjectpriority(struct ScriptContext *ctx)
+bool8 ScrCmd_setobjectsubpriority(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
u8 priority = ScriptReadByte(ctx);
- SetObjectPriority(localId, mapNum, mapGroup, priority + 83);
+ SetObjectSubpriority(localId, mapNum, mapGroup, priority + 83);
return FALSE;
}
-bool8 ScrCmd_resetobjectpriority(struct ScriptContext *ctx)
+bool8 ScrCmd_resetobjectsubpriority(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
- ResetObjectPriority(localId, mapNum, mapGroup);
+ ResetObjectSubpriority(localId, mapNum, mapGroup);
return FALSE;
}
@@ -1178,29 +1173,29 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 movementType = ScriptReadByte(ctx);
- Overworld_SetObjEventTemplateMovementType(localId, movementType);
+ SetObjEventTemplateMovementType(localId, movementType);
return FALSE;
}
bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{
u8 graphicsId = ScriptReadByte(ctx);
- u8 objectEventId = ScriptReadByte(ctx);
+ u8 virtualObjId = ScriptReadByte(ctx);
u16 x = VarGet(ScriptReadHalfword(ctx));
u32 y = VarGet(ScriptReadHalfword(ctx));
u8 elevation = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
- CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction);
+ CreateVirtualObject(graphicsId, virtualObjId, x, y, elevation, direction);
return FALSE;
}
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
{
- u8 objectEventId = ScriptReadByte(ctx);
+ u8 virtualObjId = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
- TurnObjectEventSprite(objectEventId, direction);
+ TurnVirtualObject(virtualObjId, direction);
return FALSE;
}
@@ -1311,7 +1306,7 @@ bool8 ScrCmd_messageinstant(struct ScriptContext *ctx)
msg = (const u8 *)ctx->data[0];
LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
- AddTextPrinterParameterized(0, FONT_NORMAL, msg, 0, 1, 0, 0);
+ AddTextPrinterParameterized(0, FONT_NORMAL, msg, 0, 1, 0, NULL);
return FALSE;
}
@@ -1463,7 +1458,9 @@ bool8 ScrCmd_showmonpic(struct ScriptContext *ctx)
bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx)
{
- bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
+ // The hide function returns a pointer to a function
+ // that returns true once the pic is hidden
+ bool8 (*func)(void) = ScriptMenu_HidePokemonPic();
if (func == NULL)
return FALSE;
@@ -1528,13 +1525,13 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
yText = (yText - yWindow - 1) * 8;
winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1);
- gBrailleWindowId = AddWindow(&winTemplate);
- LoadUserWindowBorderGfx(gBrailleWindowId, 0x214, 0xE0);
- DrawStdWindowFrame(gBrailleWindowId, 0);
- PutWindowTilemap(gBrailleWindowId);
- FillWindowPixelBuffer(gBrailleWindowId, PIXEL_FILL(1));
- AddTextPrinterParameterized(gBrailleWindowId, FONT_BRAILLE, gStringVar4, xText, yText, TEXT_SKIP_DRAW, NULL);
- CopyWindowToVram(gBrailleWindowId, COPYWIN_FULL);
+ sBrailleWindowId = AddWindow(&winTemplate);
+ LoadUserWindowBorderGfx(sBrailleWindowId, 0x214, 0xE0);
+ DrawStdWindowFrame(sBrailleWindowId, 0);
+ PutWindowTilemap(sBrailleWindowId);
+ FillWindowPixelBuffer(sBrailleWindowId, PIXEL_FILL(1));
+ AddTextPrinterParameterized(sBrailleWindowId, FONT_BRAILLE, gStringVar4, xText, yText, TEXT_SKIP_DRAW, NULL);
+ CopyWindowToVram(sBrailleWindowId, COPYWIN_FULL);
return FALSE;
}
@@ -1578,7 +1575,7 @@ bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx)
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]);
- StringGetEnd10(sScriptStringVars[stringVarIndex]);
+ StringGet_Nickname(sScriptStringVars[stringVarIndex]);
return FALSE;
}
@@ -1638,12 +1635,12 @@ bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_buffercontesttype(struct ScriptContext *ctx)
+bool8 ScrCmd_buffercontestname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
- u16 index = VarGet(ScriptReadHalfword(ctx));
+ u16 category = VarGet(ScriptReadHalfword(ctx));
- BufferContestName(sScriptStringVars[stringVarIndex], index);
+ BufferContestName(sScriptStringVars[stringVarIndex], category);
return FALSE;
}
@@ -1656,7 +1653,7 @@ bool8 ScrCmd_bufferstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
+bool8 ScrCmd_vbuffermessage(struct ScriptContext *ctx)
{
const u8 *ptr = (u8 *)(ScriptReadWord(ctx) - sAddressOffset);
@@ -1933,17 +1930,17 @@ bool8 ScrCmd_setberrytree(struct ScriptContext *ctx)
u8 growthStage = ScriptReadByte(ctx);
if (berry == 0)
- PlantBerryTree(treeId, 0, growthStage, FALSE);
+ PlantBerryTree(treeId, berry, growthStage, FALSE);
else
PlantBerryTree(treeId, berry, growthStage, FALSE);
return FALSE;
}
-bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
+bool8 ScrCmd_getpokenewsactive(struct ScriptContext *ctx)
{
u16 newsKind = VarGet(ScriptReadHalfword(ctx));
- gSpecialVar_Result = GetPriceReduction(newsKind);
+ gSpecialVar_Result = IsPokeNewsActive(newsKind);
return FALSE;
}
@@ -1985,7 +1982,7 @@ bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setfieldeffectarg(struct ScriptContext *ctx)
+bool8 ScrCmd_setfieldeffectargument(struct ScriptContext *ctx)
{
u8 argNum = ScriptReadByte(ctx);
@@ -2230,9 +2227,7 @@ bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx)
return FALSE;
}
-// TODO: Should be renamed. Name implies general usage, but its specifically for Wonder Card
-// See GetSavedRamScriptIfValid, which is NULL if ValidateSavedWonderCard returns FALSE
-bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
+bool8 ScrCmd_trywondercardscript(struct ScriptContext *ctx)
{
const u8* script = GetSavedRamScriptIfValid();
@@ -2244,7 +2239,7 @@ bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
return FALSE;
}
-// Unused
+// This warp is only used by the Union Room.
// For the warp used by the Aqua Hideout, see DoTeleportTileWarp
bool8 ScrCmd_warpspinenter(struct ScriptContext *ctx)
{
@@ -2273,8 +2268,8 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx)
static void CloseBrailleWindow(void)
{
- ClearStdWindowAndFrame(gBrailleWindowId, 1);
- RemoveWindow(gBrailleWindowId);
+ ClearStdWindowAndFrame(sBrailleWindowId, 1);
+ RemoveWindow(sBrailleWindowId);
}
bool8 ScrCmd_buffertrainerclassname(struct ScriptContext *ctx)
@@ -2300,7 +2295,7 @@ void SetMovingNpcId(u16 npcId)
sMovingNpcId = npcId;
}
-bool8 ScrCmd_warpsootopolislegend(struct ScriptContext *ctx)
+bool8 ScrCmd_warpwhitefade(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
@@ -2309,7 +2304,7 @@ bool8 ScrCmd_warpsootopolislegend(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- DoSootopolisLegendWarp();
+ DoWhiteFadeWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
diff --git a/src/script.c b/src/script.c
index b10e0db49..4728e739c 100644
--- a/src/script.c
+++ b/src/script.c
@@ -3,7 +3,7 @@
#include "event_data.h"
#include "mystery_gift.h"
#include "util.h"
-#include "constants/maps.h"
+#include "constants/event_objects.h"
#include "constants/map_scripts.h"
#define RAM_SCRIPT_MAGIC 51
@@ -399,6 +399,8 @@ const u8 *GetRamScript(u8 objectId, const u8 *script)
}
}
+#define NO_OBJECT OBJ_EVENT_ID_PLAYER
+
bool32 ValidateSavedRamScript(void)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
@@ -408,7 +410,7 @@ bool32 ValidateSavedRamScript(void)
return FALSE;
if (scriptData->mapNum != MAP_NUM(UNDEFINED))
return FALSE;
- if (scriptData->objectId != 0xFF)
+ if (scriptData->objectId != NO_OBJECT)
return FALSE;
if (CalculateRamScriptChecksum() != gSaveBlock1Ptr->ramScript.checksum)
return FALSE;
@@ -426,7 +428,7 @@ u8 *GetSavedRamScriptIfValid(void)
return NULL;
if (scriptData->mapNum != MAP_NUM(UNDEFINED))
return NULL;
- if (scriptData->objectId != 0xFF)
+ if (scriptData->objectId != NO_OBJECT)
return NULL;
if (CalculateRamScriptChecksum() != gSaveBlock1Ptr->ramScript.checksum)
{
@@ -443,5 +445,5 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize)
{
if (scriptSize > sizeof(gSaveBlock1Ptr->ramScript.data.script))
scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script);
- InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), 0xFF);
+ InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), NO_OBJECT);
}
diff --git a/src/script_menu.c b/src/script_menu.c
index ae0fe91e6..1680758f2 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -563,6 +563,7 @@ static void Task_PokemonPicWindow(u8 taskId)
task->tState++;
break;
case 1:
+ // Wait until state is advanced by ScriptMenu_HidePokemonPic
break;
case 2:
FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId], task->tMonSpriteId);
@@ -600,7 +601,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
}
}
-bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void)
+bool8 (*ScriptMenu_HidePokemonPic(void))(void)
{
u8 taskId = FindTaskIdByFunc(Task_PokemonPicWindow);
diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c
index 07e86656e..ae7aa92dc 100755
--- a/src/script_pokemon_util.c
+++ b/src/script_pokemon_util.c
@@ -150,7 +150,12 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
{
+// Allows monIndex to go out of bounds of gPlayerParty. Doesn't occur in vanilla
+#ifdef BUGFIX
+ if (monIndex >= PARTY_SIZE)
+#else
if (monIndex > PARTY_SIZE)
+#endif
monIndex = gPlayerPartyCount - 1;
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
diff --git a/src/secret_base.c b/src/secret_base.c
index 72560ee23..8fc97141f 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -39,7 +39,6 @@
#include "constants/event_objects.h"
#include "constants/field_specials.h"
#include "constants/items.h"
-#include "constants/maps.h"
#include "constants/map_types.h"
#include "constants/metatile_behaviors.h"
#include "constants/metatile_labels.h"
@@ -446,7 +445,7 @@ void EnterSecretBase(void)
{
CreateTask(Task_EnterSecretBase, 0);
FadeScreen(FADE_TO_BLACK, 0);
- SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
+ SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
}
bool8 SecretBaseMapPopupEnabled(void)
@@ -490,7 +489,7 @@ static void Task_EnterNewlyCreatedSecretBase(u8 taskId)
SetWarpDestination(
gSaveBlock1Ptr->location.mapGroup,
gSaveBlock1Ptr->location.mapNum,
- -1,
+ WARP_ID_NONE,
GET_BASE_COMPUTER_X(secretBaseGroup),
GET_BASE_COMPUTER_Y(secretBaseGroup));
WarpIntoMap();
@@ -700,7 +699,7 @@ static void Task_WarpOutOfSecretBase(u8 taskId)
gTasks[taskId].data[0] = 2;
break;
case 2:
- SetWarpDestinationToDynamicWarp(0x7e);
+ SetWarpDestinationToDynamicWarp(WARP_ID_SECRET_BASE);
WarpIntoMap();
gFieldCallback = FieldCB_DefaultWarpExit;
SetMainCallback2(CB2_LoadMap);
@@ -1215,108 +1214,107 @@ void SecretBasePerStepCallback(u8 taskId)
tState = 1;
break;
case 1:
+ // End if player hasn't moved
PlayerGetDestCoords(&x, &y);
- if (x != tPlayerX || y != tPlayerY)
+ if (x == tPlayerX && y == tPlayerY)
+ return;
+
+ tPlayerX = x;
+ tPlayerY = y;
+ VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ tileId = MapGridGetMetatileIdAt(x, y);
+ if (tileId == METATILE_SecretBase_SolidBoard_Top || tileId == METATILE_SecretBase_SolidBoard_Bottom)
{
- tPlayerX = x;
- tPlayerY = y;
- VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1);
- behavior = MapGridGetMetatileBehaviorAt(x, y);
- tileId = MapGridGetMetatileIdAt(x, y);
- if (tileId == METATILE_SecretBase_SolidBoard_Top || tileId == METATILE_SecretBase_SolidBoard_Bottom)
- {
- if (sInFriendSecretBase == TRUE)
- {
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD);
- }
- }
- else if (tileId == METATILE_SecretBase_SmallChair
- || tileId == METATILE_SecretBase_PokemonChair
- || tileId == METATILE_SecretBase_HeavyChair
- || tileId == METATILE_SecretBase_PrettyChair
- || tileId == METATILE_SecretBase_ComfortChair
- || tileId == METATILE_SecretBase_RaggedChair
- || tileId == METATILE_SecretBase_BrickChair
- || tileId == METATILE_SecretBase_CampChair
- || tileId == METATILE_SecretBase_HardChair)
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR);
- }
- else if (tileId == METATILE_SecretBase_RedTent_DoorTop
- || tileId == METATILE_SecretBase_RedTent_Door
- || tileId == METATILE_SecretBase_BlueTent_DoorTop
- || tileId == METATILE_SecretBase_BlueTent_Door)
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT);
- }
- else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_CornerRight)
- || (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_CornerLeft))
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND);
- }
- else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_StairLanding)
- {
- if (sInFriendSecretBase == TRUE)
- {
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE);
- }
- }
- else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide_SlideTop)
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD);
+ }
+ else if (tileId == METATILE_SecretBase_SmallChair
+ || tileId == METATILE_SecretBase_PokemonChair
+ || tileId == METATILE_SecretBase_HeavyChair
+ || tileId == METATILE_SecretBase_PrettyChair
+ || tileId == METATILE_SecretBase_ComfortChair
+ || tileId == METATILE_SecretBase_RaggedChair
+ || tileId == METATILE_SecretBase_BrickChair
+ || tileId == METATILE_SecretBase_CampChair
+ || tileId == METATILE_SecretBase_HardChair)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR);
+ }
+ else if (tileId == METATILE_SecretBase_RedTent_DoorTop
+ || tileId == METATILE_SecretBase_RedTent_Door
+ || tileId == METATILE_SecretBase_BlueTent_DoorTop
+ || tileId == METATILE_SecretBase_BlueTent_Door)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT);
+ }
+ else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_CornerRight)
+ || (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_CornerLeft))
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND);
+ }
+ else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_StairLanding)
+ {
+ if (sInFriendSecretBase == TRUE)
{
- if (sInFriendSecretBase == TRUE)
- {
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE);
- }
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE);
}
- else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE)
+ }
+ else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide_SlideTop)
+ {
+ if (sInFriendSecretBase == TRUE)
{
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE);
}
- else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
+ }
+ else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT);
+ }
+ else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
+ {
+ PopSecretBaseBalloon(MapGridGetMetatileIdAt(x, y), x, y);
+ if (sInFriendSecretBase == TRUE)
{
- PopSecretBaseBalloon(MapGridGetMetatileIdAt(x, y), x, y);
- if (sInFriendSecretBase == TRUE)
+ switch ((int)MapGridGetMetatileIdAt(x, y))
{
- switch ((int)MapGridGetMetatileIdAt(x, y))
- {
- case METATILE_SecretBase_RedBalloon:
- case METATILE_SecretBase_BlueBalloon:
- case METATILE_SecretBase_YellowBalloon:
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON);
- break;
- case METATILE_SecretBase_MudBall:
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL);
- break;
- }
+ case METATILE_SecretBase_RedBalloon:
+ case METATILE_SecretBase_BlueBalloon:
+ case METATILE_SecretBase_YellowBalloon:
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON);
+ break;
+ case METATILE_SecretBase_MudBall:
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL);
+ break;
}
}
- else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE)
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR);
+ }
+ else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR);
- ShatterSecretBaseBreakableDoor(x, y);
- }
- else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT);
- }
- else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE)
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT);
- }
- else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE)
- {
- if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT);
- }
+ ShatterSecretBaseBreakableDoor(x, y);
+ }
+ else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT);
+ }
+ else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT);
+ }
+ else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE)
+ {
+ if (sInFriendSecretBase == TRUE)
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT);
}
break;
case 2:
diff --git a/src/shop.c b/src/shop.c
index fa4a73bbb..f41ae315f 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -562,7 +562,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y)
{
ConvertIntToDecimalStringN(
gStringVar1,
- ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT),
+ ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT),
STR_CONV_MODE_LEFT_ALIGN,
5);
}
@@ -847,7 +847,7 @@ static void BuyMenuDrawObjectEvents(void)
graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[sShopData->viewportObjects[i][OBJ_EVENT_ID]].graphicsId);
- spriteId = AddPseudoObjectEvent(
+ spriteId = CreateObjectGraphicsSprite(
gObjectEvents[sShopData->viewportObjects[i][OBJ_EVENT_ID]].graphicsId,
SpriteCallbackDummy,
(u16)sShopData->viewportObjects[i][X_COORD] * 16 + 8,
@@ -934,7 +934,7 @@ static void Task_BuyMenu(u8 taskId)
if (sMartInfo.martType == MART_TYPE_NORMAL)
{
- sShopData->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT));
+ sShopData->totalCost = (ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT));
}
else
{
@@ -1014,7 +1014,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
if (AdjustQuantityAccordingToDPadInput(&tItemCount, sShopData->maxQuantity) == TRUE)
{
- sShopData->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(POKENEWS_SLATEPORT)) * tItemCount;
+ sShopData->totalCost = (ItemId_GetPrice(tItemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT)) * tItemCount;
BuyMenuPrintItemQuantityAndPrice(taskId);
}
else
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 1c21f230d..6cbcd76fd 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -557,10 +557,10 @@ static struct SpriteFrameImage *sImageTables_DigitalDisplay[NUM_DIG_DISPLAY_SPRI
// Const rom data.
static const struct DigitalDisplaySprite *const sDigitalDisplayScenes[];
static const u16 sUnkPalette[];
-static const u8 sLuckyRoundProbabilities[][3];
+static const u8 sLuckyRoundProbabilities[NUM_SLOT_MACHINE_IDS][MAX_BET];
static const u8 sBiasTags[];
-static const u16 sLuckyFlagSettings_Top3[];
-static const u16 sLuckyFlagSettings_NotTop3[];
+static const u16 sLuckyFlagSettings_Top3[3];
+static const u16 sLuckyFlagSettings_NotTop3[5];
static const s16 sDigitalDisplay_SpriteCoords[][2];
static const SpriteCallback sDigitalDisplay_SpriteCallbacks[];
static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES];
@@ -582,8 +582,8 @@ static const struct SpriteSheet sSlotMachineSpriteSheets[22];
static const struct SpritePalette sSlotMachineSpritePalettes[];
static const u16 *const sDigitalDisplay_Pal;
static const s16 sInitialReelPositions[NUM_REELS][2];
-static const u8 sLuckyFlagProbabilities_Top3[][6];
-static const u8 sLuckyFlagProbabilities_NotTop3[][6];
+static const u8 sLuckyFlagProbabilities_Top3[][NUM_SLOT_MACHINE_IDS];
+static const u8 sLuckyFlagProbabilities_NotTop3[][NUM_SLOT_MACHINE_IDS];
static const u8 sReeltimeProbabilities_UnluckyGame[][17];
static const u8 sReelTimeProbabilities_LuckyGame[][17];
static const u8 sSymToMatch[];
@@ -1651,22 +1651,18 @@ static void DrawLuckyFlags(void)
if (IsThisRoundLucky())
{
attempts = AttemptsAtLuckyFlags_Top3();
- if (attempts != 3) // if you found a lucky number
+ if (attempts != ARRAY_COUNT(sLuckyFlagSettings_Top3)) // if you found a lucky number
{
// attempts == 1: reelTime flag set
sSlotMachine->luckyFlags |= sLuckyFlagSettings_Top3[attempts];
if (attempts != 1)
- {
return;
- }
}
}
// if it's not a lucky round or you got reel time, roll for the lower lucky flags
attempts = AttemptsAtLuckyFlags_NotTop3();
- if (attempts != 5) // if you found a lucky number
- {
+ if (attempts != ARRAY_COUNT(sLuckyFlagSettings_NotTop3)) // if you found a lucky number
sSlotMachine->luckyFlags |= sLuckyFlagSettings_NotTop3[attempts];
- }
}
}
}
@@ -1704,7 +1700,7 @@ static u8 AttemptsAtLuckyFlags_Top3(void)
{
s16 count;
- for (count = 0; count < 3; count++)
+ for (count = 0; count < (int)ARRAY_COUNT(sLuckyFlagSettings_Top3); count++)
{
s16 rval = Random() & 0xff;
s16 value = sLuckyFlagProbabilities_Top3[count][sSlotMachine->machineId];
@@ -1718,7 +1714,7 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void)
{
s16 count;
- for (count = 0; count < 5; count++)
+ for (count = 0; count < (int)ARRAY_COUNT(sLuckyFlagSettings_NotTop3); count++)
{
s16 rval = Random() & 0xff; // random byte
s16 value = sLuckyFlagProbabilities_NotTop3[count][sSlotMachine->machineId];
@@ -4807,27 +4803,83 @@ static const s16 sInitialReelPositions[NUM_REELS][2] = {
[RIGHT_REEL] = {0, 2}
};
-static const u8 sLuckyRoundProbabilities[][3] = {
- {1, 1, 12},
- {1, 1, 14},
- {2, 2, 14},
- {2, 2, 14},
- {2, 3, 16},
- {3, 3, 16}
+static const u8 sLuckyRoundProbabilities[NUM_SLOT_MACHINE_IDS][MAX_BET] = {
+ [SLOT_MACHINE_UNLUCKIEST] = {1, 1, 12},
+ [SLOT_MACHINE_UNLUCKIER] = {1, 1, 14},
+ [SLOT_MACHINE_UNLUCKY] = {2, 2, 14},
+ [SLOT_MACHINE_LUCKY] = {2, 2, 14},
+ [SLOT_MACHINE_LUCKIER] = {2, 3, 16},
+ [SLOT_MACHINE_LUCKIEST] = {3, 3, 16}
};
-static const u8 sLuckyFlagProbabilities_Top3[][6] = {
- {25, 25, 30, 40, 40, 50},
- {25, 25, 30, 30, 35, 35},
- {25, 25, 30, 25, 25, 30}
-};
-
-static const u8 sLuckyFlagProbabilities_NotTop3[][6] = {
- {20, 25, 25, 20, 25, 25},
- {12, 15, 15, 18, 19, 22},
- {25, 25, 25, 30, 30, 40},
- {25, 25, 20, 20, 15, 15},
- {40, 40, 35, 35, 40, 40}
+static const u8 sLuckyFlagProbabilities_Top3[][NUM_SLOT_MACHINE_IDS] = {
+ { // Probabilities for LUCKY_BIAS_777
+ [SLOT_MACHINE_UNLUCKIEST] = 25,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 30,
+ [SLOT_MACHINE_LUCKY] = 40,
+ [SLOT_MACHINE_LUCKIER] = 40,
+ [SLOT_MACHINE_LUCKIEST] = 50
+ },
+ { // Probabilities for LUCKY_BIAS_REELTIME
+ [SLOT_MACHINE_UNLUCKIEST] = 25,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 30,
+ [SLOT_MACHINE_LUCKY] = 30,
+ [SLOT_MACHINE_LUCKIER] = 35,
+ [SLOT_MACHINE_LUCKIEST] = 35
+ },
+ { // Probabilities for LUCKY_BIAS_MIXED_777
+ [SLOT_MACHINE_UNLUCKIEST] = 25,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 30,
+ [SLOT_MACHINE_LUCKY] = 25,
+ [SLOT_MACHINE_LUCKIER] = 25,
+ [SLOT_MACHINE_LUCKIEST] = 30
+ }
+};
+
+static const u8 sLuckyFlagProbabilities_NotTop3[][NUM_SLOT_MACHINE_IDS] = {
+ { // Probabilities for LUCKY_BIAS_POWER
+ [SLOT_MACHINE_UNLUCKIEST] = 20,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 25,
+ [SLOT_MACHINE_LUCKY] = 20,
+ [SLOT_MACHINE_LUCKIER] = 25,
+ [SLOT_MACHINE_LUCKIEST] = 25
+ },
+ { // Probabilities for LUCKY_BIAS_AZURILL
+ [SLOT_MACHINE_UNLUCKIEST] = 12,
+ [SLOT_MACHINE_UNLUCKIER] = 15,
+ [SLOT_MACHINE_UNLUCKY] = 15,
+ [SLOT_MACHINE_LUCKY] = 18,
+ [SLOT_MACHINE_LUCKIER] = 19,
+ [SLOT_MACHINE_LUCKIEST] = 22
+ },
+ { // Probabilities for LUCKY_BIAS_LOTAD
+ [SLOT_MACHINE_UNLUCKIEST] = 25,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 25,
+ [SLOT_MACHINE_LUCKY] = 30,
+ [SLOT_MACHINE_LUCKIER] = 30,
+ [SLOT_MACHINE_LUCKIEST] = 40
+ },
+ { // Probabilities for LUCKY_BIAS_CHERRY
+ [SLOT_MACHINE_UNLUCKIEST] = 25,
+ [SLOT_MACHINE_UNLUCKIER] = 25,
+ [SLOT_MACHINE_UNLUCKY] = 20,
+ [SLOT_MACHINE_LUCKY] = 20,
+ [SLOT_MACHINE_LUCKIER] = 15,
+ [SLOT_MACHINE_LUCKIEST] = 15
+ },
+ { // Probabilities for LUCKY_BIAS_REPLAY
+ [SLOT_MACHINE_UNLUCKIEST] = 40,
+ [SLOT_MACHINE_UNLUCKIER] = 40,
+ [SLOT_MACHINE_UNLUCKY] = 35,
+ [SLOT_MACHINE_LUCKY] = 35,
+ [SLOT_MACHINE_LUCKIER] = 40,
+ [SLOT_MACHINE_LUCKIEST] = 40
+ }
};
static const u8 sReeltimeProbabilities_UnluckyGame[][17] = {
@@ -5708,7 +5760,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Insert =
static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Stop =
{
- .tileTag = 18,
+ .tileTag = GFXTAG_STOP,
.paletteTag = PALTAG_DIG_DISPLAY,
.oam = &sOam_8x8,
.anims = sAnims_SingleFrame,
@@ -5741,7 +5793,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Lose =
static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus =
{
- .tileTag = 19,
+ .tileTag = GFXTAG_BONUS,
.paletteTag = PALTAG_DIG_DISPLAY,
.oam = &sOam_8x8,
.anims = sAnims_SingleFrame,
@@ -5752,7 +5804,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Bonus =
static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big =
{
- .tileTag = 20,
+ .tileTag = GFXTAG_BIG,
.paletteTag = PALTAG_DIG_DISPLAY,
.oam = &sOam_8x8,
.anims = sAnims_SingleFrame,
@@ -5763,7 +5815,7 @@ static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Big =
static const struct SpriteTemplate sSpriteTemplate_DigitalDisplay_Reg =
{
- .tileTag = 21,
+ .tileTag = GFXTAG_REG,
.paletteTag = PALTAG_DIG_DISPLAY,
.oam = &sOam_8x8,
.anims = sAnims_SingleFrame,
diff --git a/src/trade.c b/src/trade.c
index a1e4f7094..3e9f033b5 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -1880,7 +1880,7 @@ static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx)
else
GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname);
- StringCopy10(str, nickname);
+ StringCopy_Nickname(str, nickname);
return GetStringWidth(FONT_SMALL, str, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING));
}
@@ -1942,7 +1942,7 @@ static void PrintPartyNicknamesForTradeMenu(u8 whichParty)
for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
{
GetMonData(&party[i], MON_DATA_NICKNAME, nickname);
- StringCopy10(str, nickname);
+ StringCopy_Nickname(str, nickname);
PrintMonNicknameForTradeMenu(whichParty, i, str);
}
}
@@ -3266,17 +3266,17 @@ static void BufferTradeSceneStrings(void)
mpId = GetMultiplayerId();
StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name);
GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar3, name);
+ StringCopy_Nickname(gStringVar3, name);
GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar2, name);
+ StringCopy_Nickname(gStringVar2, name);
}
else
{
ingameTrade = &sIngameTrades[gSpecialVar_0x8004];
StringCopy(gStringVar1, ingameTrade->otName);
- StringCopy10(gStringVar3, ingameTrade->nickname);
+ StringCopy_Nickname(gStringVar3, ingameTrade->nickname);
GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar2, name);
+ StringCopy_Nickname(gStringVar2, name);
}
}
@@ -4479,7 +4479,7 @@ static void BufferInGameTradeMonName(void)
u8 nickname[32];
const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004];
GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname);
- StringCopy10(gStringVar1, nickname);
+ StringCopy_Nickname(gStringVar1, nickname);
StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
}
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 2c34f196e..04312a2dd 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -28,7 +28,6 @@
#include "constants/items.h"
#include "constants/layouts.h"
#include "constants/moves.h"
-#include "constants/maps.h"
#include "constants/trainers.h"
#include "constants/easy_chat.h"
#include "constants/trainer_hill.h"
diff --git a/src/tv.c b/src/tv.c
index 310163e94..710b98968 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -36,11 +36,11 @@
#include "data.h"
#include "constants/battle_frontier.h"
#include "constants/contest.h"
+#include "constants/decorations.h"
#include "constants/event_objects.h"
#include "constants/items.h"
#include "constants/layouts.h"
#include "constants/lilycove_lady.h"
-#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
#include "constants/metatile_labels.h"
#include "constants/moves.h"
@@ -140,13 +140,13 @@ static void TryPutRandomPokeNewsOnAir(void);
static void SortPurchasesByQuantity(void);
static void UpdateMassOutbreakTimeLeft(u16);
static void TryEndMassOutbreak(u16);
-static void UpdatePokeNewsTimeLeft(u16);
+static void UpdatePokeNewsCountdown(u16);
static void ResolveWorldOfMastersShow(u16);
static void ResolveNumberOneShow(u16);
static void TryPutFishingAdviceOnAir(void);
static u8 MonDataIdxToRibbon(u8);
static void TryPutNumberOneOnAir(u8);
-static bool8 IsPriceDiscounted(u8);
+static bool8 ShouldApplyPokeNewsEffect(u8);
static void TryPutWorldOfMastersOnAir(void);
static void InterviewBefore_FanClubLetter(void);
static void InterviewBefore_RecentHappenings(void);
@@ -228,24 +228,24 @@ static const struct {
}
};
-static const u16 sGoldSymbolFlags[] = {
- FLAG_SYS_TOWER_GOLD,
- FLAG_SYS_DOME_GOLD,
- FLAG_SYS_PALACE_GOLD,
- FLAG_SYS_ARENA_GOLD,
- FLAG_SYS_FACTORY_GOLD,
- FLAG_SYS_PIKE_GOLD,
- FLAG_SYS_PYRAMID_GOLD
+static const u16 sGoldSymbolFlags[NUM_FRONTIER_FACILITIES] = {
+ [FRONTIER_FACILITY_TOWER] = FLAG_SYS_TOWER_GOLD,
+ [FRONTIER_FACILITY_DOME] = FLAG_SYS_DOME_GOLD,
+ [FRONTIER_FACILITY_PALACE] = FLAG_SYS_PALACE_GOLD,
+ [FRONTIER_FACILITY_ARENA] = FLAG_SYS_ARENA_GOLD,
+ [FRONTIER_FACILITY_FACTORY] = FLAG_SYS_FACTORY_GOLD,
+ [FRONTIER_FACILITY_PIKE] = FLAG_SYS_PIKE_GOLD,
+ [FRONTIER_FACILITY_PYRAMID] = FLAG_SYS_PYRAMID_GOLD
};
-static const u16 sSilverSymbolFlags[] = {
- FLAG_SYS_TOWER_SILVER,
- FLAG_SYS_DOME_SILVER,
- FLAG_SYS_PALACE_SILVER,
- FLAG_SYS_ARENA_SILVER,
- FLAG_SYS_FACTORY_SILVER,
- FLAG_SYS_PIKE_SILVER,
- FLAG_SYS_PYRAMID_SILVER
+static const u16 sSilverSymbolFlags[NUM_FRONTIER_FACILITIES] = {
+ [FRONTIER_FACILITY_TOWER] = FLAG_SYS_TOWER_SILVER,
+ [FRONTIER_FACILITY_DOME] = FLAG_SYS_DOME_SILVER,
+ [FRONTIER_FACILITY_PALACE] = FLAG_SYS_PALACE_SILVER,
+ [FRONTIER_FACILITY_ARENA] = FLAG_SYS_ARENA_SILVER,
+ [FRONTIER_FACILITY_FACTORY] = FLAG_SYS_FACTORY_SILVER,
+ [FRONTIER_FACILITY_PIKE] = FLAG_SYS_PIKE_SILVER,
+ [FRONTIER_FACILITY_PYRAMID] = FLAG_SYS_PYRAMID_SILVER
};
static const u16 sNumberOneVarsAndThresholds[][2] = {
@@ -258,28 +258,28 @@ static const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_BP, 30}
};
-static const u8 *const sPokeNewsTextGroup_Upcoming[] = {
- NULL,
- gPokeNewsTextSlateport_Upcoming,
- gPokeNewsTextGameCorner_Upcoming,
- gPokeNewsTextLilycove_Upcoming,
- gPokeNewsTextBlendMaster_Upcoming
+static const u8 *const sPokeNewsTextGroup_Upcoming[NUM_POKENEWS_TYPES + 1] = {
+ [POKENEWS_NONE] = NULL,
+ [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Upcoming,
+ [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Upcoming,
+ [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Upcoming,
+ [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Upcoming
};
-static const u8 *const sPokeNewsTextGroup_Ongoing[] = {
- NULL,
- gPokeNewsTextSlateport_Ongoing,
- gPokeNewsTextGameCorner_Ongoing,
- gPokeNewsTextLilycove_Ongoing,
- gPokeNewsTextBlendMaster_Ongoing
+static const u8 *const sPokeNewsTextGroup_Ongoing[NUM_POKENEWS_TYPES + 1] = {
+ [POKENEWS_NONE] = NULL,
+ [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Ongoing,
+ [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Ongoing,
+ [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Ongoing,
+ [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Ongoing
};
-static const u8 *const sPokeNewsTextGroup_Ending[] = {
- NULL,
- gPokeNewsTextSlateport_Ending,
- gPokeNewsTextGameCorner_Ending,
- gPokeNewsTextLilycove_Ending,
- gPokeNewsTextBlendMaster_Ending
+static const u8 *const sPokeNewsTextGroup_Ending[NUM_POKENEWS_TYPES + 1] = {
+ [POKENEWS_NONE] = NULL,
+ [POKENEWS_SLATEPORT] = gPokeNewsTextSlateport_Ending,
+ [POKENEWS_GAME_CORNER] = gPokeNewsTextGameCorner_Ending,
+ [POKENEWS_LILYCOVE] = gPokeNewsTextLilycove_Ending,
+ [POKENEWS_BLENDMASTER] = gPokeNewsTextBlendMaster_Ending
};
u8 *const gTVStringVarPtrs[] = {
@@ -1526,7 +1526,7 @@ void TryPutSmartShopperOnAir(void)
show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId;
show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity;
}
- show->smartshopperShow.priceReduced = GetPriceReduction(POKENEWS_SLATEPORT);
+ show->smartshopperShow.priceReduced = IsPokeNewsActive(POKENEWS_SLATEPORT);
StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName);
StorePlayerIdInRecordMixShow(show);
show->smartshopperShow.language = gGameLanguage;
@@ -1569,13 +1569,13 @@ void StartMassOutbreak(void)
gSaveBlock1Ptr->outbreakLocationMapNum = show->massOutbreak.locationMapNum;
gSaveBlock1Ptr->outbreakLocationMapGroup = show->massOutbreak.locationMapGroup;
gSaveBlock1Ptr->outbreakPokemonLevel = show->massOutbreak.level;
- gSaveBlock1Ptr->outbreakUnk1 = show->massOutbreak.var02;
- gSaveBlock1Ptr->outbreakUnk2 = show->massOutbreak.var0E;
+ gSaveBlock1Ptr->outbreakUnused1 = show->massOutbreak.unused1;
+ gSaveBlock1Ptr->outbreakUnused2 = show->massOutbreak.unused2;
gSaveBlock1Ptr->outbreakPokemonMoves[0] = show->massOutbreak.moves[0];
gSaveBlock1Ptr->outbreakPokemonMoves[1] = show->massOutbreak.moves[1];
gSaveBlock1Ptr->outbreakPokemonMoves[2] = show->massOutbreak.moves[2];
gSaveBlock1Ptr->outbreakPokemonMoves[3] = show->massOutbreak.moves[3];
- gSaveBlock1Ptr->outbreakUnk4 = show->massOutbreak.var03;
+ gSaveBlock1Ptr->outbreakUnused3 = show->massOutbreak.unused3;
gSaveBlock1Ptr->outbreakPokemonProbability = show->massOutbreak.probability;
gSaveBlock1Ptr->outbreakDaysLeft = 2;
}
@@ -1668,19 +1668,19 @@ static void TryStartRandomMassOutbreak(void)
show->massOutbreak.kind = TVSHOW_MASS_OUTBREAK;
show->massOutbreak.active = TRUE;
show->massOutbreak.level = sPokeOutbreakSpeciesList[outbreakIdx].level;
- show->massOutbreak.var02 = 0;
- show->massOutbreak.var03 = 0;
+ show->massOutbreak.unused1 = 0;
+ show->massOutbreak.unused3 = 0;
show->massOutbreak.species = sPokeOutbreakSpeciesList[outbreakIdx].species;
- show->massOutbreak.var0E = 0;
+ show->massOutbreak.unused2 = 0;
show->massOutbreak.moves[0] = sPokeOutbreakSpeciesList[outbreakIdx].moves[0];
show->massOutbreak.moves[1] = sPokeOutbreakSpeciesList[outbreakIdx].moves[1];
show->massOutbreak.moves[2] = sPokeOutbreakSpeciesList[outbreakIdx].moves[2];
show->massOutbreak.moves[3] = sPokeOutbreakSpeciesList[outbreakIdx].moves[3];
show->massOutbreak.locationMapNum = sPokeOutbreakSpeciesList[outbreakIdx].location;
show->massOutbreak.locationMapGroup = 0;
- show->massOutbreak.var12 = 0;
+ show->massOutbreak.unused4 = 0;
show->massOutbreak.probability = 50;
- show->massOutbreak.var15 = 0;
+ show->massOutbreak.unused5 = 0;
show->massOutbreak.daysLeft = 1;
StorePlayerIdInNormalShow(show);
show->massOutbreak.language = gGameLanguage;
@@ -1695,13 +1695,13 @@ void EndMassOutbreak(void)
gSaveBlock1Ptr->outbreakLocationMapNum = 0;
gSaveBlock1Ptr->outbreakLocationMapGroup = 0;
gSaveBlock1Ptr->outbreakPokemonLevel = 0;
- gSaveBlock1Ptr->outbreakUnk1 = 0;
- gSaveBlock1Ptr->outbreakUnk2 = 0;
+ gSaveBlock1Ptr->outbreakUnused1 = 0;
+ gSaveBlock1Ptr->outbreakUnused2 = 0;
gSaveBlock1Ptr->outbreakPokemonMoves[0] = MOVE_NONE;
gSaveBlock1Ptr->outbreakPokemonMoves[1] = MOVE_NONE;
gSaveBlock1Ptr->outbreakPokemonMoves[2] = MOVE_NONE;
gSaveBlock1Ptr->outbreakPokemonMoves[3] = MOVE_NONE;
- gSaveBlock1Ptr->outbreakUnk4 = 0;
+ gSaveBlock1Ptr->outbreakUnused3 = 0;
gSaveBlock1Ptr->outbreakPokemonProbability = 0;
gSaveBlock1Ptr->outbreakDaysLeft = 0;
}
@@ -1710,7 +1710,7 @@ void UpdateTVShowsPerDay(u16 days)
{
UpdateMassOutbreakTimeLeft(days);
TryEndMassOutbreak(days);
- UpdatePokeNewsTimeLeft(days);
+ UpdatePokeNewsCountdown(days);
ResolveWorldOfMastersShow(days);
ResolveNumberOneShow(days);
}
@@ -1798,9 +1798,7 @@ void SetPokemonAnglerSpecies(u16 species)
// Either way the temporary version of the show in the last slot is deleted.
static void ResolveWorldOfMastersShow(u16 days)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
if (show->worldOfMasters.kind == TVSHOW_WORLD_OF_MASTERS)
{
if (show->worldOfMasters.numPokeCaught >= 20)
@@ -1864,7 +1862,7 @@ void TryPutTodaysRivalTrainerOnAir(void)
show->rivalTrainer.mapLayoutId = gMapHeader.mapLayoutId;
show->rivalTrainer.nSilverSymbols = 0;
show->rivalTrainer.nGoldSymbols = 0;
- for (i = 0; i < 7; i++)
+ for (i = 0; i < NUM_FRONTIER_FACILITIES; i++)
{
if (FlagGet(sSilverSymbolFlags[i]) == TRUE)
show->rivalTrainer.nSilverSymbols++;
@@ -1990,33 +1988,39 @@ static void SecretBaseVisit_CalculateDecorationData(TVShow *show)
u8 decoration;
for (i = 0; i < DECOR_MAX_SECRET_BASE; i++)
- sTV_DecorationsBuffer[i] = 0;
+ sTV_DecorationsBuffer[i] = DECOR_NONE;
+ // Count (and save) the unique decorations in the base
for (i = 0, n = 0; i < DECOR_MAX_SECRET_BASE; i++)
{
decoration = gSaveBlock1Ptr->secretBases[0].decorations[i];
- if (decoration)
+ if (decoration != DECOR_NONE)
{
+ // Search for an empty spot to save decoration
for (j = 0; j < DECOR_MAX_SECRET_BASE; j++)
{
- if (sTV_DecorationsBuffer[j] == 0)
+ if (sTV_DecorationsBuffer[j] == DECOR_NONE)
{
+ // Save and count new unique decoration
sTV_DecorationsBuffer[j] = decoration;
n++;
break;
}
+
+ // Decoration has already been saved, skip and move on to the next base decoration
if (sTV_DecorationsBuffer[j] == decoration)
break;
}
}
}
- if (n > 4)
- show->secretBaseVisit.nDecorations = 4;
+ // Cap the number of unique decorations to the number the TV show will talk about
+ if (n > ARRAY_COUNT(show->secretBaseVisit.decorations))
+ show->secretBaseVisit.numDecorations = ARRAY_COUNT(show->secretBaseVisit.decorations);
else
- show->secretBaseVisit.nDecorations = n;
+ show->secretBaseVisit.numDecorations = n;
- switch (show->secretBaseVisit.nDecorations)
+ switch (show->secretBaseVisit.numDecorations)
{
case 0:
break;
@@ -2024,16 +2028,16 @@ static void SecretBaseVisit_CalculateDecorationData(TVShow *show)
show->secretBaseVisit.decorations[0] = sTV_DecorationsBuffer[0];
break;
default:
+ // More than 1 decoration, randomize the full list
for (k = 0; k < n * n; k++)
{
decoration = Random() % n;
j = Random() % n;
- i = sTV_DecorationsBuffer[decoration];
- sTV_DecorationsBuffer[decoration] = sTV_DecorationsBuffer[j];
- sTV_DecorationsBuffer[j] = i;
+ SWAP(sTV_DecorationsBuffer[decoration], sTV_DecorationsBuffer[j], i);
}
- for (i = 0; i < show->secretBaseVisit.nDecorations; i++)
+ // Pick the first decorations in the randomized list to talk about on the show
+ for (i = 0; i < show->secretBaseVisit.numDecorations; i++)
show->secretBaseVisit.decorations[i] = sTV_DecorationsBuffer[i];
break;
}
@@ -2044,50 +2048,55 @@ static void SecretBaseVisit_CalculatePartyData(TVShow *show)
u8 i;
u16 move;
u16 j;
- u8 nMoves;
- u8 nPokemon;
+ u8 numMoves;
+ u8 numPokemon;
u16 sum;
- for (i = 0, nPokemon = 0; i < PARTY_SIZE; i++)
+ for (i = 0, numPokemon = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
- sTV_SecretBaseVisitMonsTemp[nPokemon].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
- sTV_SecretBaseVisitMonsTemp[nPokemon].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
- nMoves = 0;
+ sTV_SecretBaseVisitMonsTemp[numPokemon].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ sTV_SecretBaseVisitMonsTemp[numPokemon].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
+
+ // Check all the Pokémon's moves, then randomly select one to save
+ numMoves = 0;
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1);
if (move != MOVE_NONE)
{
- sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves++;
+ sTV_SecretBaseVisitMovesTemp[numMoves] = move;
+ numMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE2);
if (move != MOVE_NONE)
{
- sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves++;
+ sTV_SecretBaseVisitMovesTemp[numMoves] = move;
+ numMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE3);
if (move != MOVE_NONE)
{
- sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves++;
+ sTV_SecretBaseVisitMovesTemp[numMoves] = move;
+ numMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE4);
if (move != MOVE_NONE)
{
- sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves++;
+ sTV_SecretBaseVisitMovesTemp[numMoves] = move;
+ numMoves++;
}
- sTV_SecretBaseVisitMonsTemp[nPokemon].move = sTV_SecretBaseVisitMovesTemp[Random() % nMoves];
- nPokemon++;
+ sTV_SecretBaseVisitMonsTemp[numPokemon].move = sTV_SecretBaseVisitMovesTemp[Random() % numMoves];
+ numPokemon++;
}
}
- for (i = 0, sum = 0; i < nPokemon; i++)
+
+ for (i = 0, sum = 0; i < numPokemon; i++)
sum += sTV_SecretBaseVisitMonsTemp[i].level;
- show->secretBaseVisit.avgLevel = sum / nPokemon;
- j = Random() % nPokemon;
+ // Using the data calculated above, save the data to talk about on the show
+ // (average level, and one randomly selected species / move)
+ show->secretBaseVisit.avgLevel = sum / numPokemon;
+ j = Random() % numPokemon;
show->secretBaseVisit.species = sTV_SecretBaseVisitMonsTemp[j].species;
show->secretBaseVisit.move = sTV_SecretBaseVisitMonsTemp[j].move;
}
@@ -2225,7 +2234,7 @@ void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16
}
}
-void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed)
+void TryPutSafariFanClubOnAir(u8 monsCaught, u8 pokeblocksUsed)
{
TVShow *show;
@@ -2236,8 +2245,8 @@ void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed)
show->safariFanClub.kind = TVSHOW_SAFARI_FAN_CLUB;
show->safariFanClub.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->safariFanClub.playerName, gSaveBlock2Ptr->playerName);
- show->safariFanClub.nMonsCaught = nMonsCaught;
- show->safariFanClub.nPkblkUsed = nPkblkUsed;
+ show->safariFanClub.monsCaught = monsCaught;
+ show->safariFanClub.pokeblocksUsed = pokeblocksUsed;
StorePlayerIdInRecordMixShow(show);
show->safariFanClub.language = gGameLanguage;
}
@@ -2537,12 +2546,12 @@ static void TryPutRandomPokeNewsOnAir(void)
sCurTVShowSlot = GetFirstEmptyPokeNewsSlot(gSaveBlock1Ptr->pokeNews);
if (sCurTVShowSlot != -1 && rbernoulli(1, 100) != TRUE)
{
- u8 newsKind = (Random() % NUM_POKENEWS_TYPES) + POKENEWS_SLATEPORT;
+ u8 newsKind = (Random() % NUM_POKENEWS_TYPES) + 1; // +1 to skip over POKENEWS_NONE
if (IsAddingPokeNewsDisallowed(newsKind) != TRUE)
{
gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].kind = newsKind;
- gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].days = 4;
- gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = 1;
+ gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].dayCountdown = POKENEWS_COUNTDOWN;
+ gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = POKENEWS_STATE_UPCOMING;
}
}
}
@@ -2571,8 +2580,8 @@ static void ClearPokeNews(void)
static void ClearPokeNewsBySlot(u8 i)
{
gSaveBlock1Ptr->pokeNews[i].kind = POKENEWS_NONE;
- gSaveBlock1Ptr->pokeNews[i].state = FALSE;
- gSaveBlock1Ptr->pokeNews[i].days = 0;
+ gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE;
+ gSaveBlock1Ptr->pokeNews[i].dayCountdown = 0;
}
static void CompactPokeNews(void)
@@ -2604,8 +2613,8 @@ static u8 FindAnyPokeNewsOnTheAir(void)
for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE
- && gSaveBlock1Ptr->pokeNews[i].state == 1
- && gSaveBlock1Ptr->pokeNews[i].days < 3)
+ && gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_UPCOMING
+ && gSaveBlock1Ptr->pokeNews[i].dayCountdown < POKENEWS_COUNTDOWN - 1)
return i;
}
return 0xFF;
@@ -2613,19 +2622,17 @@ static u8 FindAnyPokeNewsOnTheAir(void)
void DoPokeNews(void)
{
- u8 i;
- u16 n;
-
- i = FindAnyPokeNewsOnTheAir();
+ u8 i = FindAnyPokeNewsOnTheAir();
if (i == 0xFF)
{
gSpecialVar_Result = FALSE;
}
else
{
- if (gSaveBlock1Ptr->pokeNews[i].days == 0)
+ if (gSaveBlock1Ptr->pokeNews[i].dayCountdown == 0)
{
- gSaveBlock1Ptr->pokeNews[i].state = 2;
+ // News event is occurring, make comment depending on how much time is left
+ gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_ACTIVE;
if (gLocalTime.hours < 20)
ShowFieldMessage(sPokeNewsTextGroup_Ongoing[gSaveBlock1Ptr->pokeNews[i].kind]);
else
@@ -2633,16 +2640,20 @@ void DoPokeNews(void)
}
else
{
- n = gSaveBlock1Ptr->pokeNews[i].days;
- ConvertIntToDecimalStringN(gStringVar1, n, STR_CONV_MODE_LEFT_ALIGN, 1);
- gSaveBlock1Ptr->pokeNews[i].state = 0;
+ // News event is upcoming, make comment about countdown to event
+ u16 dayCountdown = gSaveBlock1Ptr->pokeNews[i].dayCountdown;
+ ConvertIntToDecimalStringN(gStringVar1, dayCountdown, STR_CONV_MODE_LEFT_ALIGN, 1);
+
+ // Mark as inactive so the countdown TV airing doesn't repeat
+ // Will be flagged as "upcoming" again by UpdatePokeNewsCountdown
+ gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE;
ShowFieldMessage(sPokeNewsTextGroup_Upcoming[gSaveBlock1Ptr->pokeNews[i].kind]);
}
gSpecialVar_Result = TRUE;
}
}
-bool8 GetPriceReduction(u8 newsKind)
+bool8 IsPokeNewsActive(u8 newsKind)
{
u8 i;
@@ -2653,7 +2664,7 @@ bool8 GetPriceReduction(u8 newsKind)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind)
{
- if (gSaveBlock1Ptr->pokeNews[i].state == 2 && IsPriceDiscounted(newsKind))
+ if (gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_ACTIVE && ShouldApplyPokeNewsEffect(newsKind))
return TRUE;
return FALSE;
@@ -2662,16 +2673,23 @@ bool8 GetPriceReduction(u8 newsKind)
return FALSE;
}
-static bool8 IsPriceDiscounted(u8 newsKind)
+// Returns TRUE if the effects of the given PokeNews should be applied.
+// For POKENEWS_SLATEPORT / POKENEWS_LILYCOVE, only apply the effect if
+// the player is talking to the Energy Guru / at the Dept Store Rooftop.
+// For any other type of PokeNews this is always TRUE.
+static bool8 ShouldApplyPokeNewsEffect(u8 newsKind)
{
switch (newsKind)
{
case POKENEWS_SLATEPORT:
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY) && gSpecialVar_LastTalked == 25)
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY)
+ && gSpecialVar_LastTalked == LOCALID_SLATEPORT_ENERGY_GURU)
return TRUE;
return FALSE;
case POKENEWS_LILYCOVE:
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP))
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP))
return TRUE;
return FALSE;
}
@@ -2693,7 +2711,7 @@ static bool8 IsAddingPokeNewsDisallowed(u8 newsKind)
return FALSE;
}
-static void UpdatePokeNewsTimeLeft(u16 days)
+static void UpdatePokeNewsCountdown(u16 days)
{
u8 i;
@@ -2701,16 +2719,18 @@ static void UpdatePokeNewsTimeLeft(u16 days)
{
if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE)
{
- if (gSaveBlock1Ptr->pokeNews[i].days < days)
+ if (gSaveBlock1Ptr->pokeNews[i].dayCountdown < days)
{
+ // News event has elapsed, clear it from list
ClearPokeNewsBySlot(i);
}
else
{
- if (gSaveBlock1Ptr->pokeNews[i].state == 0 && FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
- gSaveBlock1Ptr->pokeNews[i].state = 1;
+ // Progress countdown to news event
+ if (gSaveBlock1Ptr->pokeNews[i].state == POKENEWS_STATE_INACTIVE && FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
+ gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_UPCOMING;
- gSaveBlock1Ptr->pokeNews[i].days -= days;
+ gSaveBlock1Ptr->pokeNews[i].dayCountdown -= days;
}
}
}
@@ -2760,9 +2780,7 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category)
void SetContestCategoryStringVarForInterview(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
}
@@ -2789,9 +2807,7 @@ size_t CountDigits(int value)
static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show)
{
u8 i;
- int price;
-
- price = 0;
+ int price = 0;
for (i = 0; i < SMARTSHOPPER_NUM_ITEMS; i++)
{
if (show->smartshopperShow.itemIds[i] != ITEM_NONE)
@@ -2832,21 +2848,19 @@ static bool8 IsRecordMixShowAlreadySpawned(u8 kind, bool8 delete)
static void SortPurchasesByQuantity(void)
{
u8 i, j;
- u16 tmpId;
- u16 tmpQn;
-
+
for (i = 0; i < SMARTSHOPPER_NUM_ITEMS - 1; i++)
{
for (j = i + 1; j < SMARTSHOPPER_NUM_ITEMS; j++)
{
if (gMartPurchaseHistory[i].quantity < gMartPurchaseHistory[j].quantity)
{
- tmpId = gMartPurchaseHistory[i].itemId;
- tmpQn = gMartPurchaseHistory[i].quantity;
+ u16 tempItemId = gMartPurchaseHistory[i].itemId;
+ u16 tempQuantity = gMartPurchaseHistory[i].quantity;
gMartPurchaseHistory[i].itemId = gMartPurchaseHistory[j].itemId;
gMartPurchaseHistory[i].quantity = gMartPurchaseHistory[j].quantity;
- gMartPurchaseHistory[j].itemId = tmpId;
- gMartPurchaseHistory[j].quantity = tmpQn;
+ gMartPurchaseHistory[j].itemId = tempItemId;
+ gMartPurchaseHistory[j].quantity = tempQuantity;
}
}
}
@@ -2923,7 +2937,8 @@ static void InterviewBefore_FanClubLetter(void)
if (!gSpecialVar_Result)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words, 6);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubLetter.words));
}
}
@@ -2932,7 +2947,8 @@ static void InterviewBefore_RecentHappenings(void)
TryReplaceOldTVShowOfKind(TVSHOW_RECENT_HAPPENINGS);
if (!gSpecialVar_Result)
{
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words, 6);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words));
}
}
@@ -2943,8 +2959,9 @@ static void InterviewBefore_PkmnFanClubOpinions(void)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2);
- StringGetEnd10(gStringVar2);
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words, 2);
+ StringGet_Nickname(gStringVar2);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanclubOpinions.words));
}
}
@@ -2962,7 +2979,8 @@ static void InterviewBefore_BravoTrainerPkmnProfile(void)
{
TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
if (!gSpecialVar_Result)
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words, 2);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words));
}
static void InterviewBefore_ContestLiveUpdates(void)
@@ -2979,14 +2997,16 @@ static void InterviewBefore_BravoTrainerBTProfile(void)
{
TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
if (!gSpecialVar_Result)
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words, 1);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words));
}
static void InterviewBefore_FanClubSpecial(void)
{
TryReplaceOldTVShowOfKind(TVSHOW_FAN_CLUB_SPECIAL);
if (!gSpecialVar_Result)
- InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words, 1);
+ InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words,
+ ARRAY_COUNT(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words));
}
static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx)
@@ -3058,23 +3078,19 @@ static void CompactTVShowArray(TVShow *shows)
}
}
-static u16 GetRandomDifferentSpeciesAndNameSeenByPlayer(u8 varIdx, u16 passedSpecies)
+static u16 GetRandomDifferentSpeciesAndNameSeenByPlayer(u8 varIdx, u16 excludedSpecies)
{
- u16 species;
-
- species = GetRandomDifferentSpeciesSeenByPlayer(passedSpecies);
+ u16 species = GetRandomDifferentSpeciesSeenByPlayer(excludedSpecies);
StringCopy(gTVStringVarPtrs[varIdx], gSpeciesNames[species]);
return species;
}
-static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 passedSpecies)
+static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 excludedSpecies)
{
- u16 species;
- u16 initSpecies;
+ u16 species = Random() % (NUM_SPECIES - 1) + 1;
+ u16 initSpecies = species;
- species = (Random() % (NUM_SPECIES - 1)) + 1;
- initSpecies = species;
- while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies)
+ while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == excludedSpecies)
{
if (species == SPECIES_NONE + 1)
species = NUM_SPECIES - 1;
@@ -3083,7 +3099,8 @@ static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 passedSpecies)
if (species == initSpecies)
{
- species = passedSpecies;
+ // Looped back to initial species (only Pokémon seen), must choose excluded species
+ species = excludedSpecies;
return species;
}
};
@@ -3308,7 +3325,7 @@ static void ChangeBoxPokemonNickname_CB(void)
void BufferMonNickname(void)
{
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
- StringGetEnd10(gStringVar1);
+ StringGet_Nickname(gStringVar1);
}
void IsMonOTIDNotPlayers(void)
@@ -3798,7 +3815,7 @@ void DeactivateAllNormalTVShows(void)
}
}
-// Ensures a minimum of 5 empty mixed show slots
+// Ensures a minimum of 5 empty record mixed show slots
static void DeleteExcessMixedShows(void)
{
s8 i;
@@ -3897,8 +3914,8 @@ static bool8 TryMixPokeNewsShow(PokeNews *dest, PokeNews *src, s8 slot)
return FALSE;
}
dest[slot].kind = src->kind;
- dest[slot].state = 1;
- dest[slot].days = src->days;
+ dest[slot].state = POKENEWS_STATE_UPCOMING;
+ dest[slot].dayCountdown = src->dayCountdown;
return TRUE;
}
@@ -3929,7 +3946,7 @@ static void ClearPokeNewsIfGameNotComplete(void)
if (FlagGet(FLAG_SYS_GAME_CLEAR) != TRUE)
{
for (i = 0; i < POKE_NEWS_COUNT; i++)
- gSaveBlock1Ptr->pokeNews[i].state = 0;
+ gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE;
}
}
@@ -5907,21 +5924,21 @@ static void DoTVShowSecretBaseVisit(void)
{
case 0:
TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
- if (show->secretBaseVisit.nDecorations == 0)
+ if (show->secretBaseVisit.numDecorations == 0)
sTVShowState = 2;
else
sTVShowState = 1;
break;
case 1:
StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[0]].name);
- if (show->secretBaseVisit.nDecorations == 1)
+ if (show->secretBaseVisit.numDecorations == 1)
sTVShowState = 4;
else
sTVShowState = 3;
break;
case 3:
StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[1]].name);
- switch (show->secretBaseVisit.nDecorations)
+ switch (show->secretBaseVisit.numDecorations)
{
case 2:
sTVShowState = 7;
@@ -5985,21 +6002,13 @@ static void DoTVShowPokemonLotteryWinnerFlashReport(void)
state = sTVShowState;
TVShowConvertInternationalString(gStringVar1, show->lottoWinner.playerName, show->lottoWinner.language);
if (show->lottoWinner.whichPrize == 0)
- {
StringCopy(gStringVar2, gText_Jackpot);
- }
else if (show->lottoWinner.whichPrize == 1)
- {
StringCopy(gStringVar2, gText_First);
- }
else if (show->lottoWinner.whichPrize == 2)
- {
StringCopy(gStringVar2, gText_Second);
- }
else
- {
StringCopy(gStringVar2, gText_Third);
- }
StringCopy(gStringVar3, ItemId_GetName(show->lottoWinner.item));
TVShowDone();
ShowFieldMessage(sTVPokemonLotteryWinnerFlashReportTextGroup[state]);
@@ -6712,23 +6721,23 @@ static void DoTVShowSafariFanClub(void)
switch (state)
{
case 0:
- if (show->safariFanClub.nMonsCaught == 0)
+ if (show->safariFanClub.monsCaught == 0)
sTVShowState = 6;
- else if (show->safariFanClub.nMonsCaught < 4)
+ else if (show->safariFanClub.monsCaught < 4)
sTVShowState = 5;
else
sTVShowState = 1;
break;
case 1:
TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught);
- if (show->safariFanClub.nPkblkUsed == 0)
+ ConvertIntToDecimalString(1, show->safariFanClub.monsCaught);
+ if (show->safariFanClub.pokeblocksUsed == 0)
sTVShowState = 3;
else
sTVShowState = 2;
break;
case 2:
- ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed);
+ ConvertIntToDecimalString(1, show->safariFanClub.pokeblocksUsed);
sTVShowState = 4;
break;
case 3:
@@ -6740,21 +6749,21 @@ static void DoTVShowSafariFanClub(void)
break;
case 5:
TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught);
- if (show->safariFanClub.nPkblkUsed == 0)
+ ConvertIntToDecimalString(1, show->safariFanClub.monsCaught);
+ if (show->safariFanClub.pokeblocksUsed == 0)
sTVShowState = 8;
else
sTVShowState = 7;
break;
case 6:
TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- if (show->safariFanClub.nPkblkUsed == 0)
+ if (show->safariFanClub.pokeblocksUsed == 0)
sTVShowState = 8;
else
sTVShowState = 7;
break;
case 7:
- ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed);
+ ConvertIntToDecimalString(1, show->safariFanClub.pokeblocksUsed);
sTVShowState = 9;
break;
case 8:
diff --git a/src/union_room.c b/src/union_room.c
index 1400a0b1d..9a743dbab 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -49,7 +49,6 @@
#include "constants/battle_frontier.h"
#include "constants/cable_club.h"
#include "constants/game_stat.h"
-#include "constants/maps.h"
#include "constants/party_menu.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -1593,8 +1592,8 @@ void StartUnionRoomBattle(u16 battleFlags)
static void WarpForWirelessMinigame(u16 linkService, u16 x, u16 y)
{
VarSet(VAR_CABLE_CLUB_STATE, linkService);
- SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
- SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
+ SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y);
+ SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE, x, y);
WarpIntoMap();
}
@@ -1605,7 +1604,7 @@ static void WarpForCableClubActivity(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 l
gFieldLinkPlayerCount = GetLinkPlayerCount();
gLocalLinkPlayerId = GetMultiplayerId();
SetCableClubWarp();
- SetWarpDestination(mapGroup, mapNum, -1, x, y);
+ SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y);
WarpIntoMap();
}
@@ -4503,6 +4502,6 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *d
static void CopyAndTranslatePlayerName(u8 *dest, struct RfuPlayer *player)
{
- StringCopy7(dest, player->rfu.name);
+ StringCopy_PlayerName(dest, player->rfu.name);
ConvertInternationalString(dest, player->rfu.data.compatibility.language);
}
diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c
index 225386165..908eb8f21 100644
--- a/src/union_room_player_avatar.c
+++ b/src/union_room_player_avatar.c
@@ -400,12 +400,12 @@ void CreateUnionRoomPlayerSprites(u8 * spriteIds, s32 leaderId)
for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++)
{
s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId);
- spriteIds[id] = CreateObjectSprite(OBJ_EVENT_GFX_MAN_4,
+ spriteIds[id] = CreateVirtualObject(OBJ_EVENT_GFX_MAN_4,
id - UR_SPRITE_START_ID,
sUnionRoomPlayerCoords[leaderId][0] + sUnionRoomGroupOffsets[memberId][0],
sUnionRoomPlayerCoords[leaderId][1] + sUnionRoomGroupOffsets[memberId][1],
3, 1);
- SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, TRUE);
+ SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, TRUE);
}
}
@@ -443,7 +443,7 @@ static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 memberId, u32 leaderId, st
static bool32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 memberId)
{
- return IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID);
+ return IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID);
}
static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct RfuGameData * gameData)
@@ -452,10 +452,10 @@ static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct R
s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId);
if (IsUnionRoomPlayerInvisible(leaderId, memberId) == TRUE)
{
- SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, FALSE);
- SetObjectEventSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN);
+ SetVirtualObjectInvisibility(id - UR_SPRITE_START_ID, FALSE);
+ SetVirtualObjectSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN);
}
- SetObjectEventSpriteGraphics(id - UR_SPRITE_START_ID, graphicsId);
+ SetVirtualObjectGraphics(id - UR_SPRITE_START_ID, graphicsId);
SetUnionRoomObjectFacingDirection(memberId, leaderId, GetNewFacingDirectionForUnionRoomPlayer(memberId, leaderId, gameData));
GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y);
MapGridSetMetatileImpassabilityAt(x, y, TRUE);
@@ -464,7 +464,7 @@ static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct R
static void DespawnGroupMember(u32 leaderId, u32 memberId)
{
s32 x, y;
- SetObjectEventSpriteAnim(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT);
+ SetVirtualObjectSpriteAnim(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT);
GetUnionRoomPlayerCoords(leaderId, memberId, &x, &y);
MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
@@ -476,7 +476,7 @@ static void AssembleGroup(u32 leaderId, struct RfuGameData * gameData)
PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2);
- if (IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(leaderId, 0) - UR_SPRITE_START_ID) == TRUE)
+ if (IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, 0) - UR_SPRITE_START_ID) == TRUE)
{
if (IsUnionRoomPlayerAt(leaderId, 0, x, y) == TRUE || IsUnionRoomPlayerAt(leaderId, 0, x2, y2) == TRUE)
return;
@@ -576,9 +576,9 @@ bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdP
continue;
// Has a group member spawned at this position?
- if (IsObjectEventSpriteInvisible(id - UR_SPRITE_START_ID))
+ if (IsVirtualObjectInvisible(id - UR_SPRITE_START_ID))
continue;
- if (IsObjectEventSpriteAnimating(id - UR_SPRITE_START_ID))
+ if (IsVirtualObjectAnimating(id - UR_SPRITE_START_ID))
continue;
if (leaders[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
continue;
@@ -595,9 +595,9 @@ bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdP
static void SetUnionRoomObjectFacingDirection(s32 memberId, s32 leaderId, u8 newDirection)
{
- TurnObjectEventSprite(MAX_RFU_PLAYERS * leaderId - UR_SPRITE_START_ID + memberId, newDirection);
+ TurnVirtualObject(MAX_RFU_PLAYERS * leaderId - UR_SPRITE_START_ID + memberId, newDirection);
// should be line below, but order is swapped here
- // TurnObjectEventSprite(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, newDirection);
+ // TurnVirtualObject(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID, newDirection);
}
void UpdateUnionRoomMemberFacing(u32 memberId, u32 leaderId, struct RfuPlayerList *list)
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 312e2107e..8f041a6ff 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -868,7 +868,7 @@ static void AskUsePokeblock(void)
u8 stringBuffer[0x40];
GetMonData(&gPlayerParty[GetPartyIdFromSelectionId(sMenu->info.curSelection)], MON_DATA_NICKNAME, stringBuffer);
- StringGetEnd10(stringBuffer);
+ StringGet_Nickname(stringBuffer);
StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion);
StringCopy(gStringVar4, stringBuffer);
FillWindowPixelBuffer(WIN_TEXT, 17);
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 65d8c86d0..5960692a2 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -20,7 +20,6 @@
#include "constants/game_stat.h"
#include "constants/items.h"
#include "constants/layouts.h"
-#include "constants/maps.h"
#include "constants/weather.h"
extern const u8 EventScript_RepelWoreOff[];