Label used metatile attributes

This commit is contained in:
GriffinR
2020-03-16 19:01:48 -04:00
parent 2c7387951b
commit ebf2f04d91
4 changed files with 66 additions and 38 deletions
+28
View File
@@ -12,6 +12,34 @@
#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name) #define METATILE_ID(tileset, name) (METATILE_##tileset##_##name)
enum
{
METATILE_ATTRIBUTE_BEHAVIOR,
METATILE_ATTRIBUTE_TERRAIN,
METATILE_ATTRIBUTE_2,
METATILE_ATTRIBUTE_3,
METATILE_ATTRIBUTE_ENCOUNTER_TYPE,
METATILE_ATTRIBUTE_5,
METATILE_ATTRIBUTE_LAYER_TYPE,
METATILE_ATTRIBUTE_7,
METATILE_ATTRIBUTE_COUNT,
};
enum
{
TILE_ENCOUNTER_NONE,
TILE_ENCOUNTER_GRASS,
TILE_ENCOUNTER_WATER,
};
enum
{
TILE_TERRAIN_NORMAL,
TILE_TERRAIN_GRASS,
TILE_TERRAIN_WATER,
TILE_TERRAIN_WATERFALL,
};
enum enum
{ {
CONNECTION_SOUTH = 1, CONNECTION_SOUTH = 1,
+21 -21
View File
@@ -36,26 +36,26 @@ EWRAM_DATA u8 gUnknown_2036E28 = 0;
static const struct ConnectionFlags sDummyConnectionFlags = {}; static const struct ConnectionFlags sDummyConnectionFlags = {};
static const u32 sMetatileAttrMasks[] = { static const u32 sMetatileAttrMasks[METATILE_ATTRIBUTE_COUNT] = {
0x000001ff, [METATILE_ATTRIBUTE_BEHAVIOR] = 0x000001ff,
0x00003e00, [METATILE_ATTRIBUTE_TERRAIN] = 0x00003e00,
0x0003c000, [METATILE_ATTRIBUTE_2] = 0x0003c000,
0x00fc0000, [METATILE_ATTRIBUTE_3] = 0x00fc0000,
0x07000000, [METATILE_ATTRIBUTE_ENCOUNTER_TYPE] = 0x07000000,
0x18000000, [METATILE_ATTRIBUTE_5] = 0x18000000,
0x60000000, [METATILE_ATTRIBUTE_LAYER_TYPE] = 0x60000000,
0x80000000 [METATILE_ATTRIBUTE_7] = 0x80000000
}; };
static const u8 sMetatileAttrShifts[] = { static const u8 sMetatileAttrShifts[METATILE_ATTRIBUTE_COUNT] = {
0, [METATILE_ATTRIBUTE_BEHAVIOR] = 0,
9, [METATILE_ATTRIBUTE_TERRAIN] = 9,
14, [METATILE_ATTRIBUTE_2] = 14,
18, [METATILE_ATTRIBUTE_3] = 18,
24, [METATILE_ATTRIBUTE_ENCOUNTER_TYPE] = 24,
27, [METATILE_ATTRIBUTE_5] = 27,
29, [METATILE_ATTRIBUTE_LAYER_TYPE] = 29,
31 [METATILE_ATTRIBUTE_7] = 31
}; };
const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection) const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection)
@@ -425,7 +425,7 @@ u32 MapGridGetMetatileIdAt(s32 x, s32 y)
u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit) u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit)
{ {
if (bit >= 8) if (bit >= METATILE_ATTRIBUTE_COUNT)
return original; return original;
return (original & sMetatileAttrMasks[bit]) >> sMetatileAttrShifts[bit]; return (original & sMetatileAttrMasks[bit]) >> sMetatileAttrShifts[bit];
@@ -439,12 +439,12 @@ u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr)
u32 MapGridGetMetatileBehaviorAt(s16 x, s16 y) u32 MapGridGetMetatileBehaviorAt(s16 x, s16 y)
{ {
return MapGridGetMetatileAttributeAt(x, y, 0); return MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_BEHAVIOR);
} }
u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y) u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y)
{ {
return MapGridGetMetatileAttributeAt(x, y, 6); return MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_LAYER_TYPE);
} }
void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile) void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
+1 -1
View File
@@ -111,7 +111,7 @@ static const struct SpriteTemplate sSpriteTemplate_FldEff_CutGrass = {
static u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y) static u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y)
{ {
return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, 1), 1); return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_TERRAIN), TILE_TERRAIN_GRASS);
} }
bool8 SetUpFieldMove_Cut(void) bool8 SetUpFieldMove_Cut(void)
+16 -16
View File
@@ -367,11 +367,11 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
headerId = GetCurrentMapWildMonHeaderId(); headerId = GetCurrentMapWildMonHeaderId();
if (headerId != 0xFFFF) if (headerId != 0xFFFF)
{ {
if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == TRUE) if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_GRASS)
{ {
if (gWildMonHeaders[headerId].landMonsInfo == NULL) if (gWildMonHeaders[headerId].landMonsInfo == NULL)
return FALSE; return FALSE;
else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
return FALSE; return FALSE;
if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
{ {
@@ -405,12 +405,12 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi
} }
} }
} }
else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == 2 else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_WATER
|| (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0)) == TRUE)) || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR)) == TRUE))
{ {
if (gWildMonHeaders[headerId].waterMonsInfo == NULL) if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
return FALSE; return FALSE;
else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR) && !DoGlobalWildEncounterDiceRoll())
return FALSE; return FALSE;
else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE)
{ {
@@ -474,7 +474,7 @@ bool8 SweetScentWildEncounter(void)
headerId = GetCurrentMapWildMonHeaderId(); headerId = GetCurrentMapWildMonHeaderId();
if (headerId != 0xFFFF) if (headerId != 0xFFFF)
{ {
if (MapGridGetMetatileAttributeAt(x, y, 4) == 1) if (MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_GRASS)
{ {
if (TryStartRoamerEncounter() == TRUE) if (TryStartRoamerEncounter() == TRUE)
{ {
@@ -490,7 +490,7 @@ bool8 SweetScentWildEncounter(void)
StartWildBattle(); StartWildBattle();
return TRUE; return TRUE;
} }
else if (MapGridGetMetatileAttributeAt(x, y, 4) == 2) else if (MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_ENCOUNTER_TYPE) == TILE_ENCOUNTER_WATER)
{ {
if (TryStartRoamerEncounter() == TRUE) if (TryStartRoamerEncounter() == TRUE)
{ {
@@ -675,12 +675,12 @@ static u16 WildEncounterRandom(void)
return sWildEncounterData.rngState >> 16; return sWildEncounterData.rngState >> 16;
} }
static u8 GetMapBaseEncounterCooldown(u8 a0) static u8 GetMapBaseEncounterCooldown(u8 encounterType)
{ {
u16 headerIdx = GetCurrentMapWildMonHeaderId(); u16 headerIdx = GetCurrentMapWildMonHeaderId();
if (headerIdx == 0xFFFF) if (headerIdx == 0xFFFF)
return 0xFF; return 0xFF;
if (a0 == 1) if (encounterType == TILE_ENCOUNTER_GRASS)
{ {
if (gWildMonHeaders[headerIdx].landMonsInfo == NULL) if (gWildMonHeaders[headerIdx].landMonsInfo == NULL)
return 0xFF; return 0xFF;
@@ -690,7 +690,7 @@ static u8 GetMapBaseEncounterCooldown(u8 a0)
return 8; return 8;
return 8 - (gWildMonHeaders[headerIdx].landMonsInfo->encounterRate / 10); return 8 - (gWildMonHeaders[headerIdx].landMonsInfo->encounterRate / 10);
} }
if (a0 == 2) if (encounterType == TILE_ENCOUNTER_WATER)
{ {
if (gWildMonHeaders[headerIdx].waterMonsInfo == NULL) if (gWildMonHeaders[headerIdx].waterMonsInfo == NULL)
return 0xFF; return 0xFF;
@@ -711,12 +711,12 @@ void ResetEncounterRateModifiers(void)
static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior) static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior)
{ {
u8 unk = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4); u8 encounterType = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_ENCOUNTER_TYPE);
u32 minSteps; u32 minSteps;
u32 encRate; u32 encRate;
if (unk == 0) if (encounterType == TILE_ENCOUNTER_NONE)
return FALSE; return FALSE;
minSteps = GetMapBaseEncounterCooldown(unk); minSteps = GetMapBaseEncounterCooldown(encounterType);
if (minSteps == 0xFF) if (minSteps == 0xFF)
return FALSE; return FALSE;
minSteps *= 256; minSteps *= 256;
@@ -763,19 +763,19 @@ bool8 TryStandardWildEncounter(u32 currMetatileBehavior)
{ {
if (!HandleWildEncounterCooldown(currMetatileBehavior)) if (!HandleWildEncounterCooldown(currMetatileBehavior))
{ {
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
return FALSE; return FALSE;
} }
else if (StandardWildEncounter(currMetatileBehavior, sWildEncounterData.prevMetatileBehavior) == TRUE) else if (StandardWildEncounter(currMetatileBehavior, sWildEncounterData.prevMetatileBehavior) == TRUE)
{ {
sWildEncounterData.encounterRateBuff = 0; sWildEncounterData.encounterRateBuff = 0;
sWildEncounterData.stepsSinceLastEncounter = 0; sWildEncounterData.stepsSinceLastEncounter = 0;
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
return TRUE; return TRUE;
} }
else else
{ {
sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, METATILE_ATTRIBUTE_BEHAVIOR);
return FALSE; return FALSE;
} }
} }