summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-10-18 12:20:35 -0400
committerGriffinR <griffin.g.richards@gmail.com>2021-10-18 12:54:29 -0400
commitb31bddddca327bd15cc022717d19ace43b435ac2 (patch)
tree458aad0ac09d04c69f50f3f9993bb286feb47fab /src
parent7590bacec1362cd3d339aa422ced50bb57f6cca0 (diff)
Clean up metatile_behavior
Diffstat (limited to 'src')
-rw-r--r--src/battle_setup.c6
-rw-r--r--src/field_control_avatar.c6
-rwxr-xr-xsrc/field_effect_helpers.c10
-rwxr-xr-xsrc/item_use.c2
-rw-r--r--src/metatile_behavior.c107
-rw-r--r--src/wild_encounter.c2
6 files changed, 85 insertions, 48 deletions
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 4337ec29c..28e80545f 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -674,9 +674,11 @@ u8 BattleSetup_GetTerrainId(void)
return BATTLE_TERRAIN_MOUNTAIN;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
- if (MetatileBehavior_GetBridgeType(tileBehavior))
+ // Is BRIDGE_TYPE_POND_*?
+ if (MetatileBehavior_GetBridgeType(tileBehavior) != BRIDGE_TYPE_OCEAN)
return BATTLE_TERRAIN_POND;
- if (MetatileBehavior_IsBridge(tileBehavior) == TRUE)
+
+ if (MetatileBehavior_IsBridgeOverWater(tileBehavior) == TRUE)
return BATTLE_TERRAIN_WATER;
}
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE113) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE113))
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 10f8d49bb..e58fb783b 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -729,9 +729,9 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
DoTeleportTileWarp();
return TRUE;
}
- if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE)
+ if (MetatileBehavior_IsBridgeOverOcean(metatileBehavior) == TRUE)
{
- // Maybe unused? This MB is used by log bridges, but there's never a warp event on them
+ // Maybe unused? This MB is used by log bridges, but there's never a warp event on them.
DoSpinExitWarp();
return TRUE;
}
@@ -762,7 +762,7 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior)
&& MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) != TRUE
&& MetatileBehavior_IsMtPyreHole(metatileBehavior) != TRUE
&& MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) != TRUE
- && MetatileBehavior_IsWarpOrBridge(metatileBehavior) != TRUE)
+ && MetatileBehavior_IsBridgeOverOcean(metatileBehavior) != TRUE)
return FALSE;
return TRUE;
}
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index 0a0e465a8..0acb15863 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -71,9 +71,15 @@ static s16 GetReflectionVerticalOffset(struct ObjectEvent *objectEvent)
static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *reflectionSprite)
{
u8 bridgeType;
- u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 };
+ u16 bridgeReflectionVerticalOffsets[] = {
+ [BRIDGE_TYPE_POND_LOW - 1] = 12,
+ [BRIDGE_TYPE_POND_MED - 1] = 28,
+ [BRIDGE_TYPE_POND_HIGH - 1] = 44
+ };
reflectionSprite->sReflectionVerticalOffset = 0;
- if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
+ if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad
+ && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior))
+ || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
{
reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1];
LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum);
diff --git a/src/item_use.c b/src/item_use.c
index 0a3181608..665d27e7d 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -249,7 +249,7 @@ static bool32 CanFish(void)
{
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y))
return TRUE;
- if (MetatileBehavior_8089510(tileBehavior) == TRUE)
+ if (MetatileBehavior_IsBridgeOverWaterNoEdge(tileBehavior) == TRUE)
return TRUE;
}
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index 5c8b8ec51..3829523df 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -122,22 +122,22 @@ static const u8 sTileBitAttributes[] =
[MB_WATER_SOUTH_ARROW_WARP] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE),
[MB_DEEP_SOUTH_WARP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_UNUSED_6F] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE),
- [MB_WARP_OR_BRIDGE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
- [MB_UNUSED_71] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE120_NORTH_BRIDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE120_NORTH_BRIDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_BRIDGE_OVER_OCEAN] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
+ [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_FORTREE_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_UNUSED_79] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
- [MB_ROUTE120_SOUTH_BRIDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE120_SOUTH_BRIDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE120_NORTH_BRIDGE_3] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE120_NORTH_BRIDGE_4] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_UNUSED_7E] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
- [MB_ROUTE110_BRIDGE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_BRIDGE_OVER_POND_MED_EDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_BRIDGE_OVER_POND_MED_EDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_BRIDGE_OVER_POND_HIGH_EDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_BRIDGE_OVER_POND_HIGH_EDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_UNUSED_BRIDGE_1] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
+ [MB_UNUSED_BRIDGE_2] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE),
[MB_COUNTER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_UNUSED_81] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_UNUSED_82] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
@@ -833,7 +833,9 @@ bool8 MetatileBehavior_IsPlayerRoomPCOn(u8 metatileBehavior)
bool8 MetatileBehavior_HasRipples(u8 metatileBehavior)
{
- if (metatileBehavior == MB_POND_WATER || metatileBehavior == MB_PUDDLE || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER)
+ if (metatileBehavior == MB_POND_WATER
+ || metatileBehavior == MB_PUDDLE
+ || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER)
return TRUE;
else
return FALSE;
@@ -888,10 +890,19 @@ bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsBridge(u8 metatileBehavior)
+// For the sections of log bridges that span water / water's edge.
+// Note that the rest of the metatiles for these bridges use MB_NORMAL.
+// This is used to allow encounters on the water below the bridge.
+bool8 MetatileBehavior_IsBridgeOverWater(u8 metatileBehavior)
{
- if ((metatileBehavior == MB_WARP_OR_BRIDGE || metatileBehavior == MB_UNUSED_71 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_1 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_2)
- || (metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_3 || metatileBehavior == MB_ROUTE120_NORTH_BRIDGE_4 || metatileBehavior == MB_UNUSED_7E || metatileBehavior == MB_ROUTE110_BRIDGE))
+ if ((metatileBehavior == MB_BRIDGE_OVER_OCEAN
+ || metatileBehavior == MB_BRIDGE_OVER_POND_LOW
+ || metatileBehavior == MB_BRIDGE_OVER_POND_MED
+ || metatileBehavior == MB_BRIDGE_OVER_POND_HIGH)
+ || (metatileBehavior == MB_BRIDGE_OVER_POND_HIGH_EDGE_1
+ || metatileBehavior == MB_BRIDGE_OVER_POND_HIGH_EDGE_2
+ || metatileBehavior == MB_UNUSED_BRIDGE_1
+ || metatileBehavior == MB_UNUSED_BRIDGE_2))
return TRUE;
else
return FALSE;
@@ -899,34 +910,39 @@ bool8 MetatileBehavior_IsBridge(u8 metatileBehavior)
u8 MetatileBehavior_GetBridgeType(u8 metatileBehavior)
{
- u8 result = metatileBehavior - MB_WARP_OR_BRIDGE;
- if (result < 4)
- return result;
+ // MB_BRIDGE_OVER_OCEAN --> BRIDGE_TYPE_OCEAN (Routes 110/119)
+ // MB_BRIDGE_OVER_POND_LOW --> BRIDGE_TYPE_POND_LOW (Unused)
+ // MB_BRIDGE_OVER_POND_MED --> BRIDGE_TYPE_POND_MED (Route 120, south)
+ // MB_BRIDGE_OVER_POND_HIGH --> BRIDGE_TYPE_POND_HIGH (Route 120, north)
+ if (metatileBehavior >= MB_BRIDGE_OVER_OCEAN
+ && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH)
+ return metatileBehavior - MB_BRIDGE_OVER_OCEAN;
- result = metatileBehavior - MB_ROUTE120_SOUTH_BRIDGE_1;
- if (result < 2)
- return 2;
+ if (metatileBehavior >= MB_BRIDGE_OVER_POND_MED_EDGE_1
+ && metatileBehavior <= MB_BRIDGE_OVER_POND_MED_EDGE_2)
+ return BRIDGE_TYPE_POND_MED;
- result = metatileBehavior - MB_ROUTE120_NORTH_BRIDGE_3;
- if (result < 2)
- return 3;
+ if (metatileBehavior >= MB_BRIDGE_OVER_POND_HIGH_EDGE_1
+ && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH_EDGE_2)
+ return BRIDGE_TYPE_POND_HIGH;
- return 0;
+ return BRIDGE_TYPE_OCEAN;
}
-u8 MetatileBehavior_8089510(u8 metatileBehavior)
+// Used to allow fishing below the bridge metatiles.
+bool8 MetatileBehavior_IsBridgeOverWaterNoEdge(u8 metatileBehavior)
{
- u8 result = metatileBehavior - MB_WARP_OR_BRIDGE;
-
- if (result < 4)
- return 1;
+ if (metatileBehavior >= MB_BRIDGE_OVER_OCEAN
+ && metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH)
+ return TRUE;
else
- return 0;
+ return FALSE;
}
bool8 MetatileBehavior_IsLandWildEncounter(u8 metatileBehavior)
{
- if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == FALSE && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE)
+ if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == FALSE
+ && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE)
return TRUE;
else
return FALSE;
@@ -934,7 +950,8 @@ bool8 MetatileBehavior_IsLandWildEncounter(u8 metatileBehavior)
bool8 MetatileBehavior_IsWaterWildEncounter(u8 metatileBehavior)
{
- if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE)
+ if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE
+ && MetatileBehavior_IsEncounterTile(metatileBehavior) == TRUE)
return TRUE;
else
return FALSE;
@@ -1148,8 +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_1
+ || metatileBehavior == MB_PACIFIDLOG_VERTICAL_LOG_2
+ || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_1
+ || metatileBehavior == MB_PACIFIDLOG_HORIZONTAL_LOG_2)
return TRUE;
else
return FALSE;
@@ -1243,9 +1262,13 @@ bool8 MetatileBehavior_IsAquaHideoutWarp(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsWarpOrBridge(u8 metatileBehavior)
+// Very odd, used to initiate a teleport-style warp.
+// No warp events seem to be on a metatile of this kind, and it's
+// used by log bridges over ocean-style water, which wouldn't make
+// sense to have a warp like this.
+bool8 MetatileBehavior_IsBridgeOverOcean(u8 metatileBehavior)
{
- if (metatileBehavior == MB_WARP_OR_BRIDGE)
+ if (metatileBehavior == MB_BRIDGE_OVER_OCEAN)
return TRUE;
else
return FALSE;
@@ -1262,9 +1285,15 @@ bool8 MetatileBehavior_IsMossdeepGymWarp(u8 metatileBehavior)
bool8 MetatileBehavior_IsSurfableFishableWater(u8 metatileBehavior)
{
- if (metatileBehavior == MB_POND_WATER || metatileBehavior == MB_OCEAN_WATER || metatileBehavior == MB_SEMI_DEEP_WATER || metatileBehavior == MB_DEEP_WATER
- || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER || (metatileBehavior == MB_EASTWARD_CURRENT || metatileBehavior == MB_WESTWARD_CURRENT
- || metatileBehavior == MB_NORTHWARD_CURRENT || metatileBehavior == MB_SOUTHWARD_CURRENT))
+ if (metatileBehavior == MB_POND_WATER
+ || metatileBehavior == MB_OCEAN_WATER
+ || metatileBehavior == MB_SEMI_DEEP_WATER
+ || metatileBehavior == MB_DEEP_WATER
+ || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER
+ || (metatileBehavior == MB_EASTWARD_CURRENT
+ || metatileBehavior == MB_WESTWARD_CURRENT
+ || metatileBehavior == MB_NORTHWARD_CURRENT
+ || metatileBehavior == MB_SOUTHWARD_CURRENT))
return TRUE;
else
return FALSE;
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 5d7425762..458882853 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -613,7 +613,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
}
}
else if (MetatileBehavior_IsWaterWildEncounter(currMetaTileBehavior) == TRUE
- || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(currMetaTileBehavior) == TRUE))
+ || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridgeOverWater(currMetaTileBehavior) == TRUE))
{
if (AreLegendariesInSootopolisPreventingEncounters() == TRUE)
return FALSE;