Add flags union to Tile struct

This commit is contained in:
DizzyEggg
2025-07-19 12:18:39 +02:00
parent e10939cfdc
commit ecec4fb703
34 changed files with 335 additions and 325 deletions

View File

@@ -55,15 +55,18 @@ enum SpawnFlags
#define VISIBILITY_FLAG_REVEALED 1 // When using Luminous Orb - whole layout is shown, but grayed-out
#define VISIBILITY_FLAG_VISITED 2 // Tile was visited, show filled/white layout
// size: 0x18
union SpawnOrVisibilityFlags
{
u16 spawn; // Tracks the kinds of entities which should be spawned on this tile. See: SpawnFlags
u16 visibility;
};
// size: 0x18 Red, 0x14 Blue
typedef struct Tile
{
// Uses the TerrainType bit flags.
/* 0x0 */ u16 terrainType;
u8 fill2[0x4 - 0x2];
u16 spawnOrVisibilityFlags; // Tracks the kinds of entities which should be spawned on this tile. See: SpawnFlags
u16 unk6;
u8 unk8;
/* 0x0 */ u16 terrainFlags; // Uses the TerrainType bit flags.
/* 0x4 */ union SpawnOrVisibilityFlags spawnOrVisibilityFlags; // Because of padding this field takes 6 bytes on gba and only 2 on DS.
/* 0x8 */ u8 unk8;
/* 0x9 */ u8 room;
// Bitwise flags for whether Pokémon can move to an adjacent tile. Bits correspond to directions in direction.h.
// Different sets of flags are used for Pokémon that can cross special terrain, corresponding to the CrossableTerrain enum.
@@ -92,10 +95,10 @@ typedef struct RoomData
} RoomData;
// Helper functions for main terrain types.
static inline void SetTerrainType(Tile *tile, u32 terrainType)
static inline void SetTerrainType(Tile *tile, u32 terrainFlags)
{
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainType |= terrainType;
tile->terrainFlags &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainFlags |= terrainFlags;
}
static inline void SetTerrainNormal(Tile *tile)
@@ -115,7 +118,7 @@ static inline void SetTerrainWall(Tile *tile)
static inline s32 GetTerrainType(const Tile *tile)
{
return tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
return tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
}

View File

@@ -316,7 +316,7 @@ void HandlePlaceItemAction(Entity *entity)
}
else {
const Tile *tile = GetTile(entity->pos.x, entity->pos.y);
if ((tile->terrainType & TERRAIN_TYPE_STAIRS)) {
if ((tile->terrainFlags & TERRAIN_TYPE_STAIRS)) {
LogMessageByIdWithPopupCheckUser(entity,gUnknown_80F8E04);
}
else if (GetTerrainType(tile) != TERRAIN_TYPE_NORMAL) {

View File

@@ -498,7 +498,7 @@ void sub_806B6C4(void)
x++;
if (x == DUNGEON_MAX_SIZE_X) {x = 0;}
if (GetTile(x, y)->spawnOrVisibilityFlags & 8) {
if (GetTile(x, y)->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_MONSTER) {
bool8 r6 = FALSE;
if (r8) {

View File

@@ -503,22 +503,22 @@ u32 DetermineMonsterShadow(Entity *entity)
{
const Tile *mapTile;
u32 shadowSize;
u16 terrainType;
u16 terrainFlags;
EntityInfo *entityInfo;
mapTile = GetTileAtEntitySafe(entity);
terrainType = mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
terrainFlags = mapTile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
entityInfo = GetEntInfo(entity);
shadowSize = GetShadowSize(entityInfo->apparentID);
if (terrainType == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY))
if (terrainFlags == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY))
return 6;
if (terrainType == TERRAIN_TYPE_NORMAL) {
if (terrainFlags == TERRAIN_TYPE_NORMAL) {
if (IsWaterTileset())
shadowSize = gUnknown_8106EEF[shadowSize];
}
else if (terrainType == TERRAIN_TYPE_SECONDARY && gDungeonWaterType[gDungeon->tileset] != DUNGEON_WATER_TYPE_LAVA)
else if (terrainFlags == TERRAIN_TYPE_SECONDARY && gDungeonWaterType[gDungeon->tileset] != DUNGEON_WATER_TYPE_LAVA)
shadowSize = gUnknown_8106EEF[shadowSize];
entityInfo->unk204 = shadowSize;

View File

@@ -439,7 +439,7 @@ u32 sub_8075818(Entity *entity)
{
tile = GetTileAtEntitySafe(entity);
if(IQSkillIsEnabled(entity, IQ_SUPER_MOBILE))
if(!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
return 1;
subEntity = tile->object;
if(subEntity != NULL)
@@ -483,7 +483,7 @@ flag_check:
{
if(!(entityInfo->heldItem.flags & ITEM_FLAG_EXISTS))
{
if(!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
{
if(entityInfo->isNotTeamMember)
break;
@@ -529,7 +529,7 @@ void sub_8075900(Entity *pokemon, u8 r1)
{
if(!gDungeon->unk644.monsterHouseTriggered)
{
if((GetTileAtEntitySafe(pokemon)->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE))
if((GetTileAtEntitySafe(pokemon)->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
{
// It's a monster house!
LogMessageByIdWithPopupCheckUser(GetLeader(), gPtrItsaMonsterHouseMessage);

View File

@@ -100,7 +100,7 @@ void sub_807AB38(Entity *entity, bool8 forcedMonsterHouse)
if (GetEntInfo(entity)->isNotTeamMember)
return;
if (!(GetTileAtEntitySafe(entity)->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE))
if (!(GetTileAtEntitySafe(entity)->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
return;
if (gDungeon->unk644.monsterHouseTriggered)
@@ -137,7 +137,7 @@ void sub_807AB38(Entity *entity, bool8 forcedMonsterHouse)
for (y = yStart; y < yEnd; y++) {
for (x = xStart; x < xEnd; x++) {
Tile *tile = GetTileMut(x, y);
if (tile->monster == NULL && GetTerrainType(tile) == TERRAIN_TYPE_NORMAL && tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE && count < 100) {
if (tile->monster == NULL && GetTerrainType(tile) == TERRAIN_TYPE_NORMAL && tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE && count < 100) {
positions[count].x = x;
positions[count].y = y;
count++;

View File

@@ -69,7 +69,7 @@ void sub_8071B48(void)
entity = dungeon->wildPokemon[index];
if ((EntityIsValid(entity)) &&
(tile = GetTile((entity->pos).x, (entity->pos).y),
(tile->terrainType & TERRAIN_TYPE_UNBREAKABLE) == 0)) {
(tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE) == 0)) {
counter++;
}
}

View File

@@ -906,7 +906,7 @@ bool8 IsTargetInRange(Entity *pokemon, Entity *targetPokemon, s32 direction, s32
}
while (0); // Extra label needed to swap branch locations in ASM.
mapTile = GetTile(currentPosX, currentPosY);
if (!(mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if (!(mapTile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
{
break;
}

View File

@@ -124,7 +124,7 @@ bool8 CanTakeItem(Entity *pokemon)
case ENTITY_ITEM:
if (!pokemonInfo->isTeamLeader &&
!(pokemonInfo->heldItem.flags & ITEM_FLAG_EXISTS) &&
((mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) || !pokemonInfo->isNotTeamMember) &&
((mapTile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) || !pokemonInfo->isNotTeamMember) &&
!(GetItemInfo(object)->flags & ITEM_FLAG_IN_SHOP))
{
return TRUE;
@@ -551,7 +551,7 @@ bool8 AvoidEnemies(Entity *pokemon)
if (room == closestTargetRoom && room != CORRIDOR_ROOM)
{
const Tile *tile = GetTile(pokemon->pos.x, pokemon->pos.y);
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
{
DungeonPos aiTargetPos;
s32 targetDir;
@@ -770,7 +770,7 @@ bool8 Wander(Entity *pokemon)
// it gives up and exits the way it came.
// This occurs normally for one-exit rooms, but can happen rarely for multi-exit rooms.
}
if (GetTile(pokemon->pos.x, pokemon->pos.y)->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (GetTile(pokemon->pos.x, pokemon->pos.y)->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
{
s32 i;
targetFacingDir = DungeonRandInt(NUM_DIRECTIONS);

View File

@@ -258,7 +258,7 @@ static void JirachiWish(void)
}
pos.x = (jirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos.y = (jirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileMut(pos.x, pos.y)->terrainType & 3) != 0) {
if ((GetTileMut(pos.x, pos.y)->terrainFlags & 3) != 0) {
PlaySoundEffect(0x14c);
sub_808BB3C(&pos);
sub_8046860(jirachiEntity,&pos,moneyItems,9);
@@ -284,7 +284,7 @@ static void JirachiWish(void)
pos.x = (jirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos.y = (jirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileMut(pos.x, pos.y)->terrainType & 3) != 0) {
if ((GetTileMut(pos.x, pos.y)->terrainFlags & 3) != 0) {
PlaySoundEffect(400);
sub_808BB3C(&pos);
sub_8046860(jirachiEntity,&pos,items,9);
@@ -341,7 +341,7 @@ static void JirachiWish(void)
pos.x = (jirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos.y = (jirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileMut(pos.x, pos.y)->terrainType & 3) != 0) {
if ((GetTileMut(pos.x, pos.y)->terrainFlags & 3) != 0) {
PlaySoundEffect(400);
sub_808BB3C(&pos);
sub_8046860(jirachiEntity,&pos,strengthItems,4);
@@ -504,9 +504,9 @@ static void CreateJirachiWishWarpTile(void)
Tile *tile;
tile = GetTileMut(gDungeon->unkE220[7].x, gDungeon->unkE220[7].y);
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainType &= ~TERRAIN_TYPE_STAIRS;
tile->terrainFlags &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags &= ~TERRAIN_TYPE_STAIRS;
sub_8049884();
sub_8049B8C();
UpdateTrapsVisibility();
@@ -518,10 +518,10 @@ static void EnableJirachiWishWarpTile(void)
Tile *tile;
tile = GetTileMut(gDungeon->unkE220[7].x, gDungeon->unkE220[7].y);
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainType |= TERRAIN_TYPE_NORMAL;
tile->terrainType &= ~TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainType |= TERRAIN_TYPE_STAIRS;
tile->terrainFlags &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainFlags |= TERRAIN_TYPE_NORMAL;
tile->terrainFlags &= ~TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_STAIRS;
tile->unk8 = 1;
sub_8049884();
sub_8049B8C();

View File

@@ -325,7 +325,7 @@ static void sub_808B1CC(u8 itemID)
}
sub_807FE04(&pos, 0);
tile = GetTileMut(pos.x, pos.y);
tile->terrainType = tile->terrainType | TERRAIN_TYPE_STAIRS;
tile->terrainFlags = tile->terrainFlags | TERRAIN_TYPE_STAIRS;
if (((itemID != ITEM_NOTHING) && (sub_80860A8(itemID) == 0)) &&
(sub_80860A8(ITEM_MUSIC_BOX) == 0)) {
ItemIdToItem(&item,itemID,0);

View File

@@ -367,7 +367,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
if (arg8 != 0 && ShouldDisplayEntity(target)) {
unkTile = GetTileAtEntitySafe(target);
sub_803E708(0x14, 0x18);
unkTile->spawnOrVisibilityFlags |= 4;
unkTile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_TRAP;
UpdateTrapsVisibility();
}
if (targetData->unk152 == 0) {
@@ -464,7 +464,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
if (unkTile != NULL)
{
unkTile->spawnOrVisibilityFlags &= ~(0x4);
unkTile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
UpdateTrapsVisibility();
}
return FALSE;
@@ -479,7 +479,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
sub_803E708(0x14, 0x18);
target->unk22 = 2;
sub_803E708(0xA, 0x18);
unkTile->spawnOrVisibilityFlags &= ~(0x4);
unkTile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
UpdateTrapsVisibility();
}
else if (var_24) {

View File

@@ -333,7 +333,7 @@ void GenerateFloor(void)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
const Tile *tile = GetTile(x, y);
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL && tile->room <= 240) {
if ((tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL && tile->room <= 240) {
roomTiles++;
if (tile->room < 64) {
rooms[tile->room] = TRUE;
@@ -431,7 +431,7 @@ static void sub_804B534(s32 xStart, s32 yStart, s32 maxX, s32 maxY)
s32 unkCount = 0;
Tile *tile = GetTileMut(x, y);
tile->terrainType &= ~(TERRAIN_TYPE_CORNER_CUTTABLE);
tile->terrainFlags &= ~(TERRAIN_TYPE_CORNER_CUTTABLE);
if (tile->room == CORRIDOR_ROOM && (GetTerrainType(tile) == TERRAIN_TYPE_NORMAL)) {
if (x > 0 && (GetTerrainType(GetTile(x - 1, y)) == TERRAIN_TYPE_NORMAL))
unkCount++;
@@ -444,7 +444,7 @@ static void sub_804B534(s32 xStart, s32 yStart, s32 maxX, s32 maxY)
unkCount++;
if (unkCount > 2) {
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
}
}
}
@@ -1317,7 +1317,7 @@ static void GenerateExtraHallways(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_
break;
if (GetTerrainType(GetTile(currX, currY)) == TERRAIN_TYPE_NORMAL)
break;
if (GetTile(currX, currY)->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (GetTile(currX, currY)->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
break;
willNotMakeSquare = TRUE;
@@ -2911,9 +2911,9 @@ static void EnsureConnectedGrid(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LE
SetTerrainWall(tile);
// Also remove any spawn flags
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_STAIRS);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_TRAP);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_STAIRS);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
}
}
}
@@ -2933,9 +2933,9 @@ static void EnsureConnectedGrid(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LE
SetTerrainWall(tile);
// Remove any spawn flags
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_STAIRS);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_TRAP);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_STAIRS);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
// Set room index to 0xFF (not a room)
tile->room = CORRIDOR_ROOM;
@@ -3002,7 +3002,7 @@ static void FinalizeJunctions(void)
if (x > 0) {
Tile *tile = GetTileMut(x - 1, y);
if (tile->room != CORRIDOR_ROOM) {
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
// If there's any water/lava on the junction tile, remove it
if (GetTerrainType(tile) == TERRAIN_TYPE_SECONDARY) {
@@ -3015,8 +3015,8 @@ static void FinalizeJunctions(void)
Tile *tile = GetTileMut(x, y - 1);
if (tile->room != CORRIDOR_ROOM) {
// Yes, these |= have to be duplicated in order to match. Either it's an error and they wanted to use a different flag, or just copy-pasted it twice.
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
if (GetTerrainType(tile) == TERRAIN_TYPE_SECONDARY) {
SetTerrainType(tile, TERRAIN_TYPE_NORMAL);
}
@@ -3026,8 +3026,8 @@ static void FinalizeJunctions(void)
if (y < DUNGEON_MAX_SIZE_Y - 1) {
Tile *tile = GetTileMut(x, y + 1);
if (tile->room != CORRIDOR_ROOM) {
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
if (GetTerrainType(tile) == TERRAIN_TYPE_SECONDARY) {
SetTerrainType(tile, TERRAIN_TYPE_NORMAL);
}
@@ -3037,8 +3037,8 @@ static void FinalizeJunctions(void)
if (x < DUNGEON_MAX_SIZE_X - 1) {
Tile *tile = GetTileMut(x + 1, y);
if (tile->room != CORRIDOR_ROOM) {
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
tile->terrainFlags |= TERRAIN_TYPE_NATURAL_JUNCTION;
if (GetTerrainType(tile) == TERRAIN_TYPE_SECONDARY) {
SetTerrainType(tile, TERRAIN_TYPE_NORMAL);
}
@@ -3066,7 +3066,7 @@ void sub_804EB30(void)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
if (GetTile(x, y)->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION) {
if (GetTile(x, y)->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION) {
u32 roomIndex = GetTile(x, y)->room;
if (roomIndex < MAX_ROOM_COUNT && dungeon->naturalJunctionListCounts[roomIndex] < MAX_ROOM_COUNT) {
dungeon->naturalJunctionList[roomIndex][dungeon->naturalJunctionListCounts[roomIndex]].x = x;
@@ -3198,11 +3198,11 @@ static void GenerateKecleonShop(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LE
for (curY = sKecleonShopPosition.minY; curY < sKecleonShopPosition.maxY; curY++) {
Tile *tile = GetTileMut(curX, curY);
tile->terrainType |= TERRAIN_TYPE_SHOP;
tile->terrainFlags |= TERRAIN_TYPE_SHOP;
// Restrict monsters and stairs from spawning here
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_MONSTER);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_STAIRS);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_MONSTER);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_STAIRS);
// Ensure the borders are assigned properly
if (dungeon->kecleonShopPos.minX > curX) {
@@ -3226,7 +3226,7 @@ static void GenerateKecleonShop(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LE
// Sets an unknown spawn flag for all tiles in the room
for (curX = grid[x][y].start.x; curX < grid[x][y].end.x; curX++) {
for (curY = grid[x][y].start.y; curY < grid[x][y].end.y; curY++) {
GetTileMut(curX, curY)->spawnOrVisibilityFlags |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(curX, curY)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_SPECIAL_TILE;
}
}
@@ -3352,7 +3352,7 @@ static void GenerateMonsterHouse(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_L
for (curX = grid[x][y].start.x; curX < grid[x][y].end.x; curX++) {
for (curY = grid[x][y].start.y; curY < grid[x][y].end.y; curY++) {
GetTileMut(curX, curY)->terrainType |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
GetTileMut(curX, curY)->terrainFlags |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
dungeon->monsterHouseRoom = GetTile(curX, curY)->room;
}
}
@@ -3658,7 +3658,7 @@ static void GenerateMazeLine(s32 x0, s32 y0, s32 xMin, s32 yMin, s32 xMax, s32 y
static void SetTerrainSecondaryWithFlag(Tile *tile, u32 additionalFlag)
{
SetTerrainSecondary(tile);
tile->terrainType |= additionalFlag;
tile->terrainFlags |= additionalFlag;
}
/*
@@ -3670,7 +3670,7 @@ static void SetSpawnFlag5(struct GridCell *gridCell)
for (x = gridCell->start.x; x < gridCell->end.x; x++) {
for (y = gridCell->start.y; y < gridCell->end.y; y++) {
GetTileMut(x, y)->spawnOrVisibilityFlags |= SPAWN_FLAG_UNK5;
GetTileMut(x, y)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_UNK5;
}
}
}
@@ -3739,7 +3739,7 @@ static void GenerateSecondaryStructure(struct GridCell *gridCell)
for (curX = gridCell->start.x; curX < middleX; curX++) {
for (curY = gridCell->start.y; curY < gridCell->end.y; curY++) {
GetTileMut(curX, curY)->terrainType |= TERRAIN_TYPE_UNK_7;
GetTileMut(curX, curY)->terrainFlags |= TERRAIN_TYPE_UNK_7;
}
}
@@ -3766,7 +3766,7 @@ static void GenerateSecondaryStructure(struct GridCell *gridCell)
for (curY = gridCell->start.y; curY < middleY; curY++) {
for (curX = gridCell->start.x; curX < gridCell->end.x; curX++) {
GetTileMut(curX, curY)->terrainType |= TERRAIN_TYPE_UNK_7;
GetTileMut(curX, curY)->terrainFlags |= TERRAIN_TYPE_UNK_7;
}
}
@@ -3802,18 +3802,18 @@ static void GenerateSecondaryStructure(struct GridCell *gridCell)
SetTerrainSecondaryWithFlag(GetTileMut(middleX + 1, middleY + 1), TERRAIN_TYPE_CORNER_CUTTABLE);
// Trap
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags |= SPAWN_FLAG_TRAP;
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_TRAP;
// Warp Tile ?
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags |= SPAWN_FLAG_UNK6;
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_UNK6;
// Items
GetTileMut(middleX, middleY - 1)->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
GetTileMut(middleX - 1, middleY)->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
GetTileMut(middleX, middleY)->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX, middleY - 1)->spawnOrVisibilityFlags |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX - 1, middleY)->spawnOrVisibilityFlags |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX, middleY)->spawnOrVisibilityFlags |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX, middleY - 1)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
GetTileMut(middleX - 1, middleY)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
GetTileMut(middleX, middleY)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
GetTileMut(middleX - 1, middleY - 1)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX, middleY - 1)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX - 1, middleY)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_SPECIAL_TILE;
GetTileMut(middleX, middleY)->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_SPECIAL_TILE;
gridCell->hasSecondaryStructure = TRUE;
}
@@ -3921,23 +3921,23 @@ static void ResolveInvalidSpawns(void)
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
Tile *tile = GetTileMut(x, y);
if (GetTerrainType(tile) != TERRAIN_TYPE_NORMAL) {
if (tile->terrainType & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL)) {
if (tile->terrainFlags & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL)) {
// This tile is an impassable obstacle, make sure no items spawn here
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
}
// This tile is an obstacle, make sure no traps spawn here
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_TRAP);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
}
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_STAIRS) {
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_STAIRS) {
// This tile has the stairs, make sure the stairs bit is set and
// make sure no traps spawn here
tile->terrainType |= TERRAIN_TYPE_STAIRS;
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_TRAP);
tile->terrainFlags |= TERRAIN_TYPE_STAIRS;
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
}
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_ITEM) {
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM) {
//This tile is an item spawn, make sure no traps spawn here
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_TRAP);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_TRAP);
}
}
}
@@ -3966,7 +3966,7 @@ static void EnsureImpassableTilesAreWalls(void)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
if (GetTile(x, y)->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) {
if (GetTile(x, y)->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) {
SetTerrainWall(GetTileMut(x,y));
}
}
@@ -3975,8 +3975,8 @@ static void EnsureImpassableTilesAreWalls(void)
static void ResetTile(Tile *tile)
{
tile->terrainType = 0;
tile->spawnOrVisibilityFlags = 0;
tile->terrainFlags = 0;
tile->spawnOrVisibilityFlags.spawn = 0;
tile->room = -1;
tile->unk8 = 0;
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_REGULAR] = 0;
@@ -4020,7 +4020,7 @@ static void ResetFloor(void)
(PosIsOutOfBounds(x - 1, y)) ||
(PosIsOutOfBounds(x - 1, y - 1)))
{
GetTileMut(x,y)->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
GetTileMut(x,y)->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
@@ -4102,15 +4102,15 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_MONSTER)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_MONSTER)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_SPECIAL_TILE)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_SPECIAL_TILE)
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
validSpawns[count].x = x;
@@ -4124,8 +4124,8 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
s32 stairsIndex = DungeonRandInt(count);
Tile *stairsTile = GetTileMut(validSpawns[stairsIndex].x, validSpawns[stairsIndex].y);
stairsTile->spawnOrVisibilityFlags |= SPAWN_FLAG_STAIRS;
stairsTile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
stairsTile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_STAIRS;
stairsTile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
sStairsRoomIndex = stairsTile->room;
dungeon->stairsSpawn.x = validSpawns[stairsIndex].x;
dungeon->stairsSpawn.y = validSpawns[stairsIndex].y;
@@ -4137,7 +4137,7 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
Tile *tile = GetTileMut(x, y);
if (GetTerrainType(tile) == TERRAIN_TYPE_NORMAL && tile->room == stairsRoomIndex) {
tile->terrainType |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
tile->terrainFlags |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
dungeon->monsterHouseRoom = tile->room;
}
}
@@ -4164,13 +4164,13 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE)
if (tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE)
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
validSpawns[count].x = x;
@@ -4195,7 +4195,7 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
randIndex = DungeonRandInt(count);
for (i = 0; i < numItems; i++) {
Tile *tile = GetTileMut(validSpawns[randIndex].x, validSpawns[randIndex].y);
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
randIndex++;
if (randIndex == count) {
@@ -4234,7 +4234,7 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
randIndex = DungeonRandInt(count);
for (i = 0; i < numItems; i++) {
Tile *tile = GetTileMut(validSpawns[randIndex].x, validSpawns[randIndex].y);
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
randIndex++;
if (randIndex == count) {
@@ -4255,11 +4255,11 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
// - in a Monster House
// - not a junction (near a hallway)
const Tile *tile = GetTile(x, y);
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (!(tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE))
if (!(tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
validSpawns[count].x = x;
@@ -4290,10 +4290,10 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
// 50/50 chance of spawning an item or a trap
if (DungeonRandInt(2) != 0) {
// Spawn an item
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
}
else if (gDungeon->unk644.unk18) {
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_TRAP;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_TRAP;
}
randIndex++;
@@ -4321,13 +4321,13 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_ITEM)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
validSpawns[count].x = x;
@@ -4351,7 +4351,7 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
trapIndex = DungeonRandInt(count);
for (i = 0; i < numTraps; i++) {
Tile *tile = GetTileMut(validSpawns[trapIndex].x, validSpawns[trapIndex].y);
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_TRAP;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_TRAP;
trapIndex++;
if (trapIndex == count) {
@@ -4380,17 +4380,17 @@ static void SpawnNonEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHou
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_ITEM)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_MONSTER)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_MONSTER)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_TRAP)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_TRAP)
continue;
validSpawns[count].x = x;
@@ -4450,15 +4450,15 @@ static void SpawnEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHouse)
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_ITEM)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)
continue;
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_STAIRS)
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_STAIRS)
continue;
if (tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
if (x == dungeon->playerSpawn.x && y == dungeon->playerSpawn.y)
continue;
@@ -4482,7 +4482,7 @@ static void SpawnEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHouse)
for (i = 0; i < numEnemies; i++) {
Tile *tile = GetTileMut(validSpawns[randIndex].x, validSpawns[randIndex].y);
// Spawn an enemy here
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_MONSTER;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_MONSTER;
randIndex++;
if (randIndex == count) {
@@ -4525,11 +4525,11 @@ static void SpawnEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHouse)
continue;
if (tile->room == CORRIDOR_ROOM)
continue;
if (tile->terrainType & TERRAIN_TYPE_SHOP)
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
continue;
if (tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)
if (tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)
continue;
if (!(tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE))
if (!(tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
continue;
if (x == dungeon->playerSpawn.x && y == dungeon->playerSpawn.y)
continue;
@@ -4559,7 +4559,7 @@ static void SpawnEnemies(FloorProperties *floorProps, bool8 isEmptyMonsterHouse)
for (i = 0; i < numEnemies; i++) {
Tile *tile = GetTileMut(validSpawns[randIndex].x, validSpawns[randIndex].y);
// Spawn an enemy here
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_MONSTER;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_MONSTER;
randIndex++;
if (randIndex == count) {
@@ -4579,7 +4579,7 @@ void SetSecondaryTerrainOnWall(Tile *tile)
bool8 isWall = TRUE;
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL)
isWall = FALSE;
if (tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
isWall = FALSE;
if (isWall) {
@@ -4852,7 +4852,7 @@ static void GenerateSecondaryTerrainFormations(u32 flag, FloorProperties *floorP
// This really shouldn't happen since we only place terrain on wall tiles to begin with,
// but it provides additional safety
if (tile->terrainType & (TERRAIN_TYPE_SHOP | TERRAIN_TYPE_IN_MONSTER_HOUSE | TERRAIN_TYPE_UNBREAKABLE) || (tile->spawnOrVisibilityFlags & SPAWN_FLAG_STAIRS)) {
if (tile->terrainFlags & (TERRAIN_TYPE_SHOP | TERRAIN_TYPE_IN_MONSTER_HOUSE | TERRAIN_TYPE_UNBREAKABLE) || (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_STAIRS)) {
SetTerrainNormal(tile);
}
else {
@@ -5605,17 +5605,17 @@ bool8 StairsAlwaysReachable(s32 stairsX, s32 stairsY, bool8 markUnreachable)
test[x][y] = 0;
if (markUnreachable) {
// Reset all unreachable flags on tiles, they'll be recomputed from scratch
tile->terrainType &= ~(TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS);
tile->terrainFlags &= ~(TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS);
}
if (terrain != TERRAIN_TYPE_NORMAL) {
if (!(tile->terrainType & TERRAIN_TYPE_CORNER_CUTTABLE)) {
if (!(tile->terrainFlags & TERRAIN_TYPE_CORNER_CUTTABLE)) {
test[x][y] |= STAIRS_FLAG_CANNOT_CORNER_CUT;
}
}
if (terrain == TERRAIN_TYPE_SECONDARY) {
if (!(tile->terrainType & TERRAIN_TYPE_CORNER_CUTTABLE)) {
if (!(tile->terrainFlags & TERRAIN_TYPE_CORNER_CUTTABLE)) {
test[x][y] |= STAIRS_FLAG_SECONDARY_TERRAIN_CANNOT_CORNER_CUT;
}
}
@@ -5715,12 +5715,12 @@ bool8 StairsAlwaysReachable(s32 stairsX, s32 stairsY, bool8 markUnreachable)
if (!(test[x][y] & (STAIRS_FLAG_CANNOT_CORNER_CUT | STAIRS_FLAG_SECONDARY_TERRAIN_CANNOT_CORNER_CUT | STAIRS_FLAG_UNKNOWN | STAIRS_FLAG_VISITED))) {
// This is an open tile that wasn't visited by BFS, which means it's unreachable from the starting stairs
if (markUnreachable) {
tile->terrainType |= TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS;
tile->terrainFlags |= TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS;
}
else {
// unbreakable tiles can't really be navigated onto anyways, so if
// we can ignore the tile (otherwise it's a problem!)
if (!(tile->terrainType & TERRAIN_TYPE_UNBREAKABLE)) {
if (!(tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE)) {
return FALSE;
}
}
@@ -5882,7 +5882,7 @@ static u8 sub_80511F0(void)
static bool8 sub_805124C(Tile *tile, u8 a1, s32 x, s32 y, bool8 spawnTrapOrItem)
{
tile->terrainType |= TERRAIN_TYPE_UNBREAKABLE;
tile->terrainFlags |= TERRAIN_TYPE_UNBREAKABLE;
tile->unkE = 0;
return PlaceFixedRoomTile(tile, a1, x, y, spawnTrapOrItem);
}
@@ -5913,7 +5913,7 @@ static void sub_8051288(s32 fixedRoomNumber)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
if (x <= 4 || x >= fixedRoomSizeX + 5 || y <= 4 || y >= fixedRoomSizeY + 5) {
Tile *tile = GetTileMut(x, y);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
if (gUnknown_202F1A8) {
SetTerrainType(tile, TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
}
@@ -5928,7 +5928,7 @@ static void sub_8051288(s32 fixedRoomNumber)
for (y = 5; y < 17; y++) {
for (x = 2; x < 5; x++) {
Tile *tile = GetTileMut(x, y);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
SetTerrainWall(tile);
}
}
@@ -5939,7 +5939,7 @@ static void sub_8051288(s32 fixedRoomNumber)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
Tile *tile = GetTileMut(x, y);
if (GetTerrainType(tile) == TERRAIN_TYPE_WALL) {
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
@@ -5977,7 +5977,7 @@ static void sub_8051438(struct GridCell *gridCell, s32 fixedRoomNumber)
roomId = tile->room;
*tile = dungeon->unkE27C[xIndex][yIndex];
if (x >= gridCell->start.x + 2 && x < gridCell->end.x - 2 && y >= gridCell->start.y + 2 && y < gridCell->end.y - 2) {
tile->terrainType = TERRAIN_TYPE_IMPASSABLE_WALL | TERRAIN_TYPE_UNBREAKABLE;
tile->terrainFlags = TERRAIN_TYPE_IMPASSABLE_WALL | TERRAIN_TYPE_UNBREAKABLE;
tile->unkE = 0xE;
}
tile->room = roomId;
@@ -6037,7 +6037,7 @@ static void sub_8051654(FloorProperties *floorProps)
if (DungeonRandInt(100) < 50) {
s32 y;
for (y = sKecleonShopPosition.minY; y < sKecleonShopPosition.maxY; y++) {
GetTileMut(sKecleonShopPosition.minX, y)->terrainType &= ~(TERRAIN_TYPE_SHOP);
GetTileMut(sKecleonShopPosition.minX, y)->terrainFlags &= ~(TERRAIN_TYPE_SHOP);
}
sKecleonShopPosition.minX++;
}
@@ -6045,7 +6045,7 @@ static void sub_8051654(FloorProperties *floorProps)
s32 y;
sKecleonShopPosition.maxX--;
for (y = sKecleonShopPosition.minY; y < sKecleonShopPosition.maxY; y++) {
GetTileMut(sKecleonShopPosition.maxX, y)->terrainType &= ~(TERRAIN_TYPE_SHOP);
GetTileMut(sKecleonShopPosition.maxX, y)->terrainFlags &= ~(TERRAIN_TYPE_SHOP);
}
}
}
@@ -6057,7 +6057,7 @@ static void sub_8051654(FloorProperties *floorProps)
if (DungeonRandInt(100) < 50) {
s32 x;
for (x = sKecleonShopPosition.minX; x < sKecleonShopPosition.maxX; x++) {
GetTileMut(x, sKecleonShopPosition.minY)->terrainType &= ~(TERRAIN_TYPE_SHOP);
GetTileMut(x, sKecleonShopPosition.minY)->terrainFlags &= ~(TERRAIN_TYPE_SHOP);
}
sKecleonShopPosition.minY++;
}
@@ -6065,7 +6065,7 @@ static void sub_8051654(FloorProperties *floorProps)
s32 x;
sKecleonShopPosition.maxY--;
for (x = sKecleonShopPosition.minX; x < sKecleonShopPosition.maxX; x++) {
GetTileMut(x, sKecleonShopPosition.maxY)->terrainType &= ~(TERRAIN_TYPE_SHOP);
GetTileMut(x, sKecleonShopPosition.maxY)->terrainFlags &= ~(TERRAIN_TYPE_SHOP);
}
}
}
@@ -6073,12 +6073,12 @@ static void sub_8051654(FloorProperties *floorProps)
for (x = sKecleonShopPosition.minX; x < sKecleonShopPosition.maxX; x++) {
for (y = sKecleonShopPosition.minY; y < sKecleonShopPosition.maxY; y++) {
Tile *tile = GetTileMut(x, y);
if (!(tile->terrainType & TERRAIN_TYPE_SHOP))
if (!(tile->terrainFlags & TERRAIN_TYPE_SHOP))
continue;
if (!(tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION))
if (!(tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION))
continue;
tile->terrainType &= ~(TERRAIN_TYPE_SHOP);
tile->terrainFlags &= ~(TERRAIN_TYPE_SHOP);
}
}
@@ -6089,15 +6089,15 @@ static void sub_8051654(FloorProperties *floorProps)
yIndex = 0;
for (y = middleY; y < middleY + 3; y++, yIndex++) {
Tile *tile = GetTileMut(x, y);
if (!(tile->terrainType & TERRAIN_TYPE_SHOP))
if (!(tile->terrainFlags & TERRAIN_TYPE_SHOP))
continue;
if ((tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE))
if ((tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
continue;
if ((tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION))
if ((tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION))
continue;
if (sKecleonShopItemSpawnChances[floorProps->unk18][yIndex][xIndex] > DungeonRandInt(100)) {
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_ITEM;
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_ITEM;
}
}
}
@@ -6117,13 +6117,13 @@ static void ResetInnerBoundaryTileRows(void)
Tile *tile = GetTileMut(x, 1);
ResetTile(tile);
if (x == 0 || x == DUNGEON_MAX_SIZE_X - 1) {
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
tile = GetTileMut(x, 30);
ResetTile(tile);
if (x == 0 || x == DUNGEON_MAX_SIZE_X - 1) {
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}

View File

@@ -865,7 +865,7 @@ bool8 PlaceFixedRoomTile(Tile *tile, u8 fixedRoomActionId, s32 x, s32 y, bool8 s
break;
case 1:
SetTerrainWall(tile);
tile->terrainType &= ~(TERRAIN_TYPE_UNBREAKABLE);
tile->terrainFlags &= ~(TERRAIN_TYPE_UNBREAKABLE);
tile->room = CORRIDOR_ROOM;
break;
case 4:
@@ -888,22 +888,22 @@ bool8 PlaceFixedRoomTile(Tile *tile, u8 fixedRoomActionId, s32 x, s32 y, bool8 s
// fall through
case 10:
SetTerrainType(tile, TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->room = CORRIDOR_ROOM;
break;
case 8:
case 67:
SetTerrainNormal(tile);
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_STAIRS;
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_STAIRS;
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
tile->room = 0;
gDungeon->stairsSpawn.x = x;
gDungeon->stairsSpawn.y = y;
break;
case 68:
tile->terrainType |= TERRAIN_TYPE_UNK_x800;
tile->terrainFlags |= TERRAIN_TYPE_UNK_x800;
SetTerrainNormal(tile);
tile->spawnOrVisibilityFlags &= ~(SPAWN_FLAG_ITEM);
tile->spawnOrVisibilityFlags.spawn &= ~(SPAWN_FLAG_ITEM);
tile->room = 0;
break;
case 9:
@@ -912,21 +912,21 @@ bool8 PlaceFixedRoomTile(Tile *tile, u8 fixedRoomActionId, s32 x, s32 y, bool8 s
break;
case 11:
SetTerrainNormal(tile);
tile->terrainType |= TERRAIN_TYPE_UNK_x800;
tile->terrainFlags |= TERRAIN_TYPE_UNK_x800;
tile->room = 0;
break;
case 12:
SetTerrainNormal(tile);
tile->terrainType |= TERRAIN_TYPE_UNK_x1000;
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainType |= TERRAIN_TYPE_UNK_x800;
tile->terrainFlags |= TERRAIN_TYPE_UNK_x1000;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_UNK_x800;
tile->room = 0;
break;
case 2:
case 13:
case 14:
SetTerrainWall(tile);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainFlags |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->room = CORRIDOR_ROOM;
break;
default:
@@ -990,7 +990,7 @@ void sub_8051E7C(Entity *pokemon)
{
Tile *tile = GetTileMut(pokemon->pos.x, pokemon->pos.y - 1);
if (!(tile->terrainType & TERRAIN_TYPE_UNK_x1000)) {
if (!(tile->terrainFlags & TERRAIN_TYPE_UNK_x1000)) {
LogMessageByIdWithPopupCheckUser(pokemon, gUnknown_80FDDF0); // It can't be used here!
}
else if (!gDungeon->unk3A09) {
@@ -1014,13 +1014,13 @@ void sub_8051E7C(Entity *pokemon)
continue;
loopTile = GetTileMut(x, y);
if (loopTile->terrainType & TERRAIN_TYPE_UNBREAKABLE) {
loopTile->terrainType = gDungeon->unkE27C[xDiff][yDiff].terrainType;
loopTile->spawnOrVisibilityFlags = gDungeon->unkE27C[xDiff][yDiff].spawnOrVisibilityFlags;
if (loopTile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE) {
loopTile->terrainFlags = gDungeon->unkE27C[xDiff][yDiff].terrainFlags;
loopTile->spawnOrVisibilityFlags.visibility = gDungeon->unkE27C[xDiff][yDiff].spawnOrVisibilityFlags.visibility;
}
PlaceFixedRoomTile(loopTile, gDungeon->unkE87C[xDiff][yDiff], x, y, TRUE);
loopTile->spawnOrVisibilityFlags |= 3;
loopTile->spawnOrVisibilityFlags.visibility |= (VISIBILITY_FLAG_REVEALED | VISIBILITY_FLAG_VISITED);
if (roomId != CORRIDOR_ROOM) {
loopTile->room = roomId;
}
@@ -1046,7 +1046,7 @@ void sub_8051E7C(Entity *pokemon)
}
gDungeon->unk3A09 = TRUE;
tile->terrainType &= ~(TERRAIN_TYPE_IMPASSABLE_WALL | TERRAIN_TYPE_UNK_x1000);
tile->terrainFlags &= ~(TERRAIN_TYPE_IMPASSABLE_WALL | TERRAIN_TYPE_UNK_x1000);
sub_80498A8(pokemon->pos.x, pokemon->pos.y - 1);
sub_8049B8C();
UpdateTrapsVisibility();

View File

@@ -122,13 +122,13 @@ void CreateFloorItems(void)
}
tile = GetTile(x,y);
if (!(tile->terrainType & TERRAIN_TYPE_STAIRS) && (tile->spawnOrVisibilityFlags & SPAWN_FLAG_ITEM)) {
if (!(tile->terrainFlags & TERRAIN_TYPE_STAIRS) && (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)) {
DungeonPos pos;
bool8 shopFlag = FALSE;
pos.x = x;
pos.y = y;
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
shopFlag = TRUE;
spawnType = ITEM_SPAWN_IN_SHOP;
}
@@ -138,7 +138,7 @@ void CreateFloorItems(void)
spawnType = ITEM_SPAWN_WALL;
}
else {
spawnType = (tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE) ? ITEM_SPAWN_IN_MONSTER_HOUSE : ITEM_SPAWN_NORMAL;
spawnType = (tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE) ? ITEM_SPAWN_IN_MONSTER_HOUSE : ITEM_SPAWN_NORMAL;
}
}
itemID = GetRandomFloorItem(spawnType);
@@ -319,7 +319,7 @@ bool8 SpawnItem(DungeonPos *pos, Item *item, bool8 a2)
itemEntity->isVisible = TRUE;
tile = GetTileMut(pos->x, pos->y);
tile->object = itemEntity;
if ((tile->terrainType & TERRAIN_TYPE_SHOP) && IsShoppableItem(item->id)) {
if ((tile->terrainFlags & TERRAIN_TYPE_SHOP) && IsShoppableItem(item->id)) {
if (item->flags & ITEM_FLAG_IN_SHOP) {
if (a2) {
gDungeon->unk644.unk48 += GetActualBuyPrice(item);
@@ -350,7 +350,7 @@ bool8 RemoveGroundItem(DungeonPos *pos, bool8 a2)
return FALSE;
item = GetItemInfo(tileObject);
if ((tile->terrainType & TERRAIN_TYPE_SHOP) && IsShoppableItem(item->id)) {
if ((tile->terrainFlags & TERRAIN_TYPE_SHOP) && IsShoppableItem(item->id)) {
if (item->flags & ITEM_FLAG_IN_SHOP) {
if (a2) {
gDungeon->unk644.unk48 -= GetActualBuyPrice(item);
@@ -388,11 +388,11 @@ bool8 sub_80462AC(Entity * entity, u8 hallucinating, u8 a2, u8 a3, u8 a4)
return FALSE;
if (a2) {
s32 terrainType = GetTerrainType(GetTile(entity->pos.x, entity->pos.y));
s32 terrainFlags = GetTerrainType(GetTile(entity->pos.x, entity->pos.y));
if (terrainType == TERRAIN_TYPE_WALL)
if (terrainFlags == TERRAIN_TYPE_WALL)
return FALSE;
if (terrainType == TERRAIN_TYPE_SECONDARY) {
if (terrainFlags == TERRAIN_TYPE_SECONDARY) {
objMode = 1;
}
@@ -496,7 +496,7 @@ void SpawnDroppedItem(Entity *entity1, Entity *entity2, Item *item, bool8 a3, Du
localPos.x = entity2->pos.x + gUnknown_80F4468[i].x;
localPos.y = entity2->pos.y + gUnknown_80F4468[i].y;
tile = GetTile(localPos.x, localPos.y);
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL && !(tile->terrainType & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL && !(tile->terrainFlags & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
sub_8046734(entity2, &localPos);
localPos2 = localPos;
if (GetTerrainType(tile) == (TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL) || (SpawnItem(&localPos, item, TRUE))) {
@@ -617,7 +617,7 @@ void sub_804687C(Entity *entity, DungeonPos *pos1, DungeonPos *pos2, Item *item,
pos.y = pos2->y + gUnknown_80F4468[j].y;
tile = GetTile(pos.x, pos.y);
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL && !(tile->terrainType & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
if (GetTerrainType(tile) != TERRAIN_TYPE_WALL && !(tile->terrainFlags & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
targetTilePos[i] = pos;
targetTileUsed[j] = TRUE;
foundTile = TRUE;

View File

@@ -50,7 +50,7 @@ void sub_807EC28(bool8 arg0)
leader = GetLeader();
leaderInfo = GetEntInfo(leader);
prevTileWasShop = gDungeon->unk644.unk54;
isShopTile = (GetTileAtEntitySafe(leader)->terrainType & TERRAIN_TYPE_SHOP) != 0;
isShopTile = (GetTileAtEntitySafe(leader)->terrainFlags & TERRAIN_TYPE_SHOP) != 0;
gDungeon->unk644.unk54 = isShopTile;
gDungeon->unk644.unk55 = isShopTile;
if (gDungeon->unk644.unk2A || gDungeon->unk644.unk50 == 0)
@@ -187,7 +187,7 @@ void sub_807EF84(void)
val = sub_807F19C(TRUE);
if (val != 0) {
Tile *tile = GetTileAtEntitySafe(GetLeader());
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
if (val != 2) {
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE63C, 1); // This is very disappointing, please return any items before you leave.
}
@@ -229,7 +229,7 @@ void sub_807EFFC(bool8 arg0)
pos.y = y;
pos.x = x;
tile = GetTile(x,y);
if (tile->terrainType & TERRAIN_TYPE_SHOP && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) {
Item *itemPtr = GetItemInfo(tile->object);
if (!ItemInShop(itemPtr)) {
Item item = *itemPtr;
@@ -276,7 +276,7 @@ s32 sub_807F19C(bool8 arg0)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
const Tile *tile = GetTile(x, y);
if (!(tile->terrainType & TERRAIN_TYPE_SHOP) && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) {
if (!(tile->terrainFlags & TERRAIN_TYPE_SHOP) && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) {
Item *itemPtr = GetItemInfo(tile->object);
if (IsShoppableItem(itemPtr->id)) {
itemPtr->flags &= ~(ITEM_FLAG_IN_SHOP);

View File

@@ -65,9 +65,9 @@ u8 sub_807034C(s32 id, const Tile *tile)
id_s32 = SpeciesId(id);
if ((tile->monster == NULL) && ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) {
if ((tile->monster == NULL) && ((tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) {
crossableTerrain = GetCrossableTerrain(id_s32);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tileFlags = tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
switch(crossableTerrain)
{
case CROSSABLE_TERRAIN_LIQUID:
@@ -100,12 +100,12 @@ u8 sub_80703A0(Entity *pokemon, DungeonPos *pos)
return TRUE;
if (tile->monster != NULL)
return TRUE;
if (tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
return TRUE;
if ((IsCurrentFixedRoomBossFight()) || ((entityInfo->invisibleClassStatus.status != STATUS_MOBILE && (!HasHeldItem(pokemon, ITEM_MOBILE_SCARF))))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tileFlags = tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
@@ -164,14 +164,14 @@ bool8 sub_807049C(Entity *pokemon, DungeonPos *pos)
return TRUE;
if (pos->x >= DUNGEON_MAX_SIZE_X || pos->y >= DUNGEON_MAX_SIZE_Y)
return TRUE;
if (tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
return TRUE;
if (tile->monster != NULL && GetEntityType(tile->monster) != ENTITY_MONSTER)
return TRUE;
if (IsCurrentFixedRoomBossFight() || (entityInfo->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tileFlags = tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
@@ -211,7 +211,7 @@ bool8 sub_8070564(Entity *pokemon, DungeonPos *pos)
return TRUE;
if (pos->x >= DUNGEON_MAX_SIZE_X || pos->y >= DUNGEON_MAX_SIZE_Y)
return TRUE;
if (tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
return TRUE;
if (tile->monster != NULL && GetEntityType(tile->monster) != ENTITY_MONSTER)
return TRUE;
@@ -252,10 +252,10 @@ bool8 sub_80705F0(Entity *pokemon, DungeonPos *pos)
return TRUE;
if (pos->x >= DUNGEON_MAX_SIZE_X || pos->y >= DUNGEON_MAX_SIZE_Y)
return TRUE;
if (((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0) && (tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))) {
if (((tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) == 0) && (tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tileFlags = tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
@@ -292,11 +292,11 @@ bool8 sub_80706A4(Entity *pokemon, DungeonPos *pos)
return TRUE;
if (pos->x >= DUNGEON_MAX_SIZE_X || pos->y >= DUNGEON_MAX_SIZE_Y)
return TRUE;
if ((((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0))
if ((((tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) == 0))
&& (tile->monster == NULL || ((GetEntityType(tile->monster) == ENTITY_MONSTER) && (GetEntInfo(tile->monster) == entityInfo)))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tileFlags = tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
}
@@ -685,7 +685,7 @@ bool8 CanMoveInDirection(Entity *pokemon, u32 direction)
const Tile *currentMapTile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x,
pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if (currentMapTile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL || currentMapTile->monster != NULL)
if (currentMapTile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL || currentMapTile->monster != NULL)
return FALSE;
if (!IsCurrentFixedRoomBossFight())
@@ -718,7 +718,7 @@ bool8 sub_8070F3C(Entity * pokemon, DungeonPos *pos, s32 direction)
terrain = GetCrossableTerrain(GetEntInfo(pokemon)->id);
tile = GetTile(pos->x + gAdjacentTileOffsets[direction].x, pos->y + gAdjacentTileOffsets[direction].y);
if ((!(tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
if ((!(tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
(((tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))))) {
if (!IsCurrentFixedRoomBossFight())
{
@@ -761,7 +761,7 @@ bool8 sub_8070F14(Entity * pokemon, s32 direction)
tile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x, pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if ((!(tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
if ((!(tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
(((tile->monster == NULL)))) {
tile = GetTile(pokemon->pos.x, pokemon->pos.y);
@@ -781,7 +781,7 @@ bool8 sub_8070F80(Entity * pokemon, s32 direction)
terrain = GetCrossableTerrain(GetEntInfo(pokemon)->id);
tile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x, pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if ((!(tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
if ((!(tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
(((tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))))) {
if (!IsCurrentFixedRoomBossFight())
{
@@ -826,7 +826,7 @@ UNUSED static bool8 sub_8071058(Entity * pokemon, s32 direction)
terrain = GetCrossableTerrain(GetEntInfo(pokemon)->id);
tile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x, pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if ((!(tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
if ((!(tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)) &&
(((tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER)) ||
(!GetEntInfo(tile->monster)->isNotTeamMember)))) {
if (!IsCurrentFixedRoomBossFight())
@@ -873,7 +873,7 @@ bool8 CanAttackInDirection(Entity *pokemon, s32 direction)
}
tile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x,
pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if (!(tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) &&
if (!(tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) &&
(tile->monster == NULL || GetEntityType(tile->monster) == ENTITY_MONSTER))
{
if (!IsCurrentFixedRoomBossFight())
@@ -918,11 +918,11 @@ bool8 CanAIMonsterMoveInDirection(Entity *pokemon, s32 direction, bool8 *pokemon
*pokemonInFront = FALSE;
frontTile = GetTile(pokemon->pos.x + gAdjacentTileOffsets[direction].x,
pokemon->pos.y + gAdjacentTileOffsets[direction].y);
if (frontTile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL)
if (frontTile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL)
{
return FALSE;
}
if (frontTile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE &&
if (frontTile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE &&
!gDungeon->unk644.monsterHouseTriggered &&
IQSkillIsEnabled(pokemon, IQ_HOUSE_AVOIDER))
{
@@ -935,7 +935,7 @@ bool8 CanAIMonsterMoveInDirection(Entity *pokemon, s32 direction, bool8 *pokemon
{
return FALSE;
}
if ((frontTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY &&
if ((frontTile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY &&
gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA &&
IQSkillIsEnabled(pokemon, IQ_LAVA_EVADER))
{

View File

@@ -821,7 +821,7 @@ static bool8 sub_805E874(void)
return FALSE;
}
else {
if (leaderTile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
if (leaderTile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
return FALSE;
}
@@ -829,7 +829,7 @@ static bool8 sub_805E874(void)
const Tile *tile = GetTile(x + gAdjacentTileOffsets[(direction + j) & 7].x, y + gAdjacentTileOffsets[(direction + j) & 7].y);
if (tile->monster != NULL)
return FALSE;
if (tile->terrainType & TERRAIN_TYPE_STAIRS)
if (tile->terrainFlags & TERRAIN_TYPE_STAIRS)
return FALSE;
}
@@ -1006,7 +1006,7 @@ void CheckLeaderTile(void)
tile = GetTileAtEntitySafe(leader);
if (IQSkillIsEnabled(leader, IQ_SUPER_MOBILE) && GetEntInfo(leader)->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(leader, ITEM_MOBILE_SCARF))
sub_804AE84(&leader->pos);
if (tile->terrainType & TERRAIN_TYPE_STAIRS)
if (tile->terrainFlags & TERRAIN_TYPE_STAIRS)
gDungeon->unk1 = 1;
tileObject = tile->object;
@@ -1491,7 +1491,7 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1)
break;
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
SetLeaderActionToNothing(TRUE);
ShowDungeonStairsMenu(GetLeader());
if (GetLeaderActionId() != ACTION_NOTHING)

View File

@@ -169,7 +169,7 @@ void DrawMinimapTile(s32 x, s32 y)
const Tile *tile;
Dungeon *dungeon;
bool8 blinded;
u32 terrainType;
u32 terrainFlags;
bool8 hallucinating;
bool8 showItems;
bool8 showHiddenTraps;
@@ -210,14 +210,14 @@ void DrawMinimapTile(s32 x, s32 y)
}
tile = GetTile(x, y);
terrainType = GetTerrainType(tile);
terrainFlags = GetTerrainType(tile);
hallucinating = gDungeon->unk181e8.hallucinating;
blinded = gDungeon->unk181e8.blinded;
showHiddenTraps = gDungeon->unk181e8.showInvisibleTrapsMonsters;
showItems = gDungeon->unk181e8.showAllFloorItems;
allTilesRevealed = gDungeon->unk181e8.allTilesRevealed;
if (blinded) {
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
tileKnown = tile->spawnOrVisibilityFlags.visibility & VISIBILITY_FLAG_REVEALED;
var_24 = FALSE;
}
else {
@@ -225,7 +225,7 @@ void DrawMinimapTile(s32 x, s32 y)
tileKnown = TRUE;
}
else {
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
tileKnown = tile->spawnOrVisibilityFlags.visibility & VISIBILITY_FLAG_REVEALED;
}
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
@@ -273,7 +273,7 @@ void DrawMinimapTile(s32 x, s32 y)
if (!tileKnown) {
mapGfxType = MAP_GFX_NOTHING;
if (entType == ENTITY_ITEM) {
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
if ((showItems || (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)) && terrainFlags != TERRAIN_TYPE_WALL) {
mapGfxType = MAP_GFX_ITEM;
}
}
@@ -291,14 +291,14 @@ void DrawMinimapTile(s32 x, s32 y)
if (lookForMapObject) {
if (entType == ENTITY_ITEM) {
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
if ((showItems || (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_ITEM)) && terrainFlags != TERRAIN_TYPE_WALL) {
mapGfxType = MAP_GFX_ITEM;
lookForMapObject = FALSE;
}
}
}
if (lookForMapObject) {
if (terrainType != TERRAIN_TYPE_NORMAL) {
if (terrainFlags != TERRAIN_TYPE_NORMAL) {
mapGfxType = MAP_GFX_NOTHING;
lookForMapObject = FALSE;
}
@@ -306,7 +306,7 @@ void DrawMinimapTile(s32 x, s32 y)
}
else {
if (!tileKnown) {
if (var_24 && (tile->terrainType & TERRAIN_TYPE_STAIRS)) {
if (var_24 && (tile->terrainFlags & TERRAIN_TYPE_STAIRS)) {
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
mapGfxType = MAP_GFX_STAIRS;
}
@@ -317,7 +317,7 @@ void DrawMinimapTile(s32 x, s32 y)
}
}
else {
if ((tile->terrainType & TERRAIN_TYPE_STAIRS)) {
if ((tile->terrainFlags & TERRAIN_TYPE_STAIRS)) {
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
mapGfxType = MAP_GFX_STAIRS;
}
@@ -340,7 +340,7 @@ void DrawMinimapTile(s32 x, s32 y)
if (!tileKnown) {
mapGfxType = 1;
}
else if (terrainType != TERRAIN_TYPE_NORMAL) {
else if (terrainFlags != TERRAIN_TYPE_NORMAL) {
mapGfxType = 1;
}
else {
@@ -371,7 +371,7 @@ void DrawMinimapTile(s32 x, s32 y)
}
mapGfxType = (s16) terrainLine;
if (tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_VISITED) {
if (tile->spawnOrVisibilityFlags.visibility & VISIBILITY_FLAG_VISITED) {
mapGfxType = (s16) (mapGfxType + MAP_GFX_TERRAIN_TILES_VISITED);
}
else {

View File

@@ -183,7 +183,7 @@ void sub_80498A8(s32 x,s32 y)
return;
}
r7 = 0;
sp_0x20 = GetTile(x, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x20 = GetTile(x, y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (gDungeon->tileset >= 0x40) {
if ((0x17 >= x) && (0x17 >= y)) {
GetTileMut(x,y)->unk8 = gDungeon->unk12C24[y * 0x18 + x];
@@ -194,14 +194,14 @@ void sub_80498A8(s32 x,s32 y)
}
else
{
sp_0x0 = GetTile(x,y + 1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x4 = GetTile(x + 1,y + 1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x8 = GetTile(x + 1,y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0xC = GetTile(x + 1,y -1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x10 = GetTile(x, y -1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x14 = GetTile(x - 1,y -1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x18 = GetTile(x - 1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
r1 = GetTile(x - 1,y + 1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x0 = GetTile(x,y + 1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x4 = GetTile(x + 1,y + 1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x8 = GetTile(x + 1,y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0xC = GetTile(x + 1,y -1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x10 = GetTile(x, y -1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x14 = GetTile(x - 1,y -1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x18 = GetTile(x - 1, y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
r1 = GetTile(x - 1,y + 1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
sp_0x1C = r1;
if (sp_0x20 == 1) {
r7 = 0xFF;
@@ -351,15 +351,15 @@ void sub_8049BB0(s32 x, s32 y)
flags[2] = 0;
flags[3] = 0;
terrainFlags = GetTile(x, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
terrainFlags = GetTile(x, y+1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[0] = terrainFlags;
var_4C[1] = GetTile(x+1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[2] = GetTile(x+1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[3] = GetTile(x+1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[4] = GetTile(x, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[5] = GetTile(x-1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[6] = GetTile(x-1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[7] = GetTile(x-1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[1] = GetTile(x+1, y+1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[2] = GetTile(x+1, y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[3] = GetTile(x+1, y-1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[4] = GetTile(x, y-1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[5] = GetTile(x-1, y-1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[6] = GetTile(x-1, y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[7] = GetTile(x-1, y+1)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (var_4C[0] == TERRAIN_TYPE_NORMAL)
flags[CROSSABLE_TERRAIN_REGULAR] |= 1;
@@ -503,16 +503,16 @@ void UpdateTrapsVisibility(void)
var_44 = gUnknown_80F6C06[30 + y];
r7 = r10 + (r8 * 3);
tile = GetTile(var_48, var_44);
if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r7];
}
else if (tile->terrainType & TERRAIN_TYPE_SHOP) {
else if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r7];
}
else if (hallucinating) {
src = &dungeon->unk11884[tile->unk8][r7];
}
else if (tile->spawnOrVisibilityFlags & 4) {
else if (tile->spawnOrVisibilityFlags.visibility & 4) {
src = &dungeon->unk12A18[27][r7];
}
else
@@ -527,7 +527,7 @@ void UpdateTrapsVisibility(void)
src = &dungeon->unk11884[tile->unk8][r7];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r7];
}
else {
@@ -548,16 +548,16 @@ void UpdateTrapsVisibility(void)
var_44++;
r7 = r10;
tile = GetTile(var_48, var_44);
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r7];
}
else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
else if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r7];
}
else if (hallucinating) {
src = &dungeon->unk11884[tile->unk8][r7];
}
else if (tile->spawnOrVisibilityFlags & 4) {
else if (tile->spawnOrVisibilityFlags.visibility & 4) {
src = &dungeon->unk12A18[27][r7];
}
else
@@ -572,7 +572,7 @@ void UpdateTrapsVisibility(void)
src = &dungeon->unk11884[tile->unk8][r7];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r7];
}
else {
@@ -621,10 +621,10 @@ void sub_804A1F0(s32 a0, s32 a1)
r10 = gUnknown_80F6C06[30 + y];
r6 = var_28 + r8 * 3;
tile = GetTile(var_2C, r10);
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r6];
}
else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
else if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r6];
}
else if (hallucinating) {
@@ -642,7 +642,7 @@ void sub_804A1F0(s32 a0, s32 a1)
src = &dungeon->unk11884[tile->unk8][r6];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r6];
}
else {
@@ -662,10 +662,10 @@ void sub_804A1F0(s32 a0, s32 a1)
r10++;
r6 = var_28;
tile = GetTile(var_2C, r10);
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r6];
}
else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
else if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r6];
}
else if (hallucinating) {
@@ -683,7 +683,7 @@ void sub_804A1F0(s32 a0, s32 a1)
src = &dungeon->unk11884[tile->unk8][r6];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r6];
}
else {
@@ -722,10 +722,10 @@ void sub_804A49C(s32 a0, s32 a1)
var_2C = gUnknown_80F6C06[30 + y];
r6 = r9 + var_28 * 3;
tile = GetTile(r10, var_2C);
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r6];
}
else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
else if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r6];
}
else if (hallucinating) {
@@ -743,7 +743,7 @@ void sub_804A49C(s32 a0, s32 a1)
src = &dungeon->unk11884[tile->unk8][r6];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r6];
}
else {
@@ -763,10 +763,10 @@ void sub_804A49C(s32 a0, s32 a1)
r10++;
r6 = var_28 * 3;
tile = GetTile(r10, var_2C);
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
if (tile->terrainFlags & TERRAIN_TYPE_SHOP) {
src = &dungeon->unk12A18[25][r6];
}
else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) {
else if (tile->terrainFlags & TERRAIN_TYPE_UNK_x1000) {
src = &dungeon->unk12A18[26][r6];
}
else if (hallucinating) {
@@ -784,7 +784,7 @@ void sub_804A49C(s32 a0, s32 a1)
src = &dungeon->unk11884[tile->unk8][r6];
}
}
else if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
else if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
src = &dungeon->unk12A18[dungeon->unk3A12][r6];
}
else {
@@ -945,7 +945,7 @@ void sub_804AAAC(void)
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
{
tile = GetTileMut(x,y);
tile->spawnOrVisibilityFlags = 0;
tile->spawnOrVisibilityFlags.visibility = 0;
}
}
}
@@ -1057,7 +1057,7 @@ void DiscoverMinimap(DungeonPos *pos)
for (y = yMin; y <= yMax; y++) {
for (x = xMin; x <= xMax; x++) {
tile = GetTileMut(x,y);
tile->spawnOrVisibilityFlags |= 3;
tile->spawnOrVisibilityFlags.visibility |= (VISIBILITY_FLAG_REVEALED | VISIBILITY_FLAG_VISITED);
DrawMinimapTile(x,y);
}
}
@@ -1101,10 +1101,10 @@ bool8 sub_804AD34(DungeonPos *pos)
iVar8 = 0;
tile = GetTileMut(pos->x,pos->y);
if (!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainType & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL))){
if (!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainFlags & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL))){
iVar8 = 1;
tile->terrainType = (tile->terrainType & ~(TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) | TERRAIN_TYPE_NORMAL;
tile->terrainFlags = (tile->terrainFlags & ~(TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) | TERRAIN_TYPE_NORMAL;
for(y = -1; y < 2; y++)
{
@@ -1140,11 +1140,11 @@ bool8 sub_804AE08(DungeonPos *pos)
uVar6 = FALSE;
tile = GetTileMut(pos->x,pos->y);
if (!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainType & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL))) {
if (!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if(!(tile->terrainFlags & (TERRAIN_TYPE_UNBREAKABLE | TERRAIN_TYPE_IMPASSABLE_WALL))) {
uVar6 = TRUE;
tile->terrainType = (tile->terrainType & ~(TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) | TERRAIN_TYPE_NORMAL;
tile->spawnOrVisibilityFlags = tile->spawnOrVisibilityFlags | 0x10;
tile->terrainFlags = (tile->terrainFlags & ~(TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) | TERRAIN_TYPE_NORMAL;
tile->spawnOrVisibilityFlags.visibility = tile->spawnOrVisibilityFlags.visibility | 0x10;
for(y = -1; y < 2; y++)
{
@@ -1166,8 +1166,8 @@ void sub_804AE84(DungeonPos *pos)
s32 y;
tile = GetTileMut(pos->x,pos->y);
if ((tile->spawnOrVisibilityFlags & 0x10) != 0) {
tile->spawnOrVisibilityFlags &= 0xffef;
if ((tile->spawnOrVisibilityFlags.visibility & 0x10) != 0) {
tile->spawnOrVisibilityFlags.visibility &= 0xffef;
for(y = -1; y < 2; y++)
{
@@ -1195,12 +1195,12 @@ bool8 IsTileGround(Tile *tile)
bool8 isGround = FALSE;
if (IsWaterTileset())
{
if (!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if (!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
{
isGround = TRUE;
}
}
else if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_SECONDARY ||
else if ((tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_SECONDARY ||
gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA)
{
isGround = TRUE;

View File

@@ -470,7 +470,7 @@ void sub_8068F80(void)
dungeon->unk644.unk2F = 0;
dungeon->unkC0.type = ENTITY_NOTHING;
if (leader != NULL) {
bool8 isShop = (GetTileAtEntitySafe(leader)->terrainType & TERRAIN_TYPE_SHOP) != 0;
bool8 isShop = (GetTileAtEntitySafe(leader)->terrainFlags & TERRAIN_TYPE_SHOP) != 0;
dungeon->unk644.unk54 = isShop;
dungeon->unk644.unk55 = isShop;
DiscoverMinimap(&leader->pos);
@@ -1453,13 +1453,13 @@ static bool8 sub_806A5A4(s16 r0)
void sub_806A5B8(Entity *entity)
{
s32 terrainType;
s32 terrainFlags;
if (!EntityIsValid(entity))
return;
terrainType = GetTerrainType(GetTileAtEntitySafe(entity));
if (terrainType == TERRAIN_TYPE_SECONDARY) {
terrainFlags = GetTerrainType(GetTileAtEntitySafe(entity));
if (terrainFlags == TERRAIN_TYPE_SECONDARY) {
EntityInfo *info = GetEntInfo(entity);
// If lava - defrost and burn
if (gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA) {
@@ -1482,7 +1482,7 @@ void sub_806A5B8(Entity *entity)
}
}
// If wall - decrement belly by 5
else if (terrainType == TERRAIN_TYPE_WALL) {
else if (terrainFlags == TERRAIN_TYPE_WALL) {
const u8 *str;
EntityInfo *info = GetEntInfo(entity);

View File

@@ -634,7 +634,7 @@ void sub_80566F8(Entity *attacker, Move *move, s32 a2, bool8 a3, s32 itemId, s32
var_68.y += var_48;
someCount++;
tile = GetTile(var_68.x, var_68.y);
if (!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if (!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
break;
if (tile->monster != NULL && GetEntityType(tile->monster) == ENTITY_MONSTER)
break;
@@ -713,7 +713,7 @@ void sub_80566F8(Entity *attacker, Move *move, s32 a2, bool8 a3, s32 itemId, s32
}
tile = GetTile(var_68.x, var_68.y);
if (!(tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
if (!(tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)))
break;
if (tile->monster != NULL && GetEntityType(tile->monster) == ENTITY_MONSTER && !sub_80571F0(tile->monster, move)) {
if (targetArrId <= 0) {

View File

@@ -185,7 +185,7 @@ bool8 IsTargetTwoTilesAway(DungeonPos *pos1, DungeonPos *pos2)
y1--;
}
tile = GetTile(x1, y1);
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == 0)
if ((tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == 0)
{
return FALSE;
}
@@ -213,7 +213,7 @@ bool8 IsTargetTwoTilesAway(DungeonPos *pos1, DungeonPos *pos2)
y2 = y2 - 1;
}
tile = GetTile(x2, y2);
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == 0)
if ((tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == 0)
{
return FALSE;
}
@@ -362,7 +362,7 @@ bool8 sub_808384C(DungeonPos *posDst, const DungeonPos *posSrc)
x = gUnknown_80F4468[i].x + posSrc->x;
y = gUnknown_80F4468[i].y + posSrc->y;
tile = GetTile(x, y);
if (!(tile->terrainType & TERRAIN_TYPE_UNK_x800)
if (!(tile->terrainFlags & TERRAIN_TYPE_UNK_x800)
&& GetTerrainType(tile) == TERRAIN_TYPE_NORMAL
&& tile->object == NULL
&& tile->monster == NULL)

View File

@@ -688,8 +688,8 @@ static void WriteIQSkills(DataSerializer *seri, IqSkillFlags *src)
static void WriteTile(DataSerializer *seri, Tile *src)
{
WriteU16(seri, src->terrainType);
WriteU16(seri, src->spawnOrVisibilityFlags);
WriteU16(seri, src->terrainFlags);
WriteU16(seri, src->spawnOrVisibilityFlags.visibility);
WriteBytes(seri, &src->room, 1);
WriteBytes(seri, &src->unkE, 1);
}
@@ -805,8 +805,8 @@ static void ReadTile(DataSerializer *seri, Tile *dst)
{
memset(dst, 0, sizeof(Tile));
dst->terrainType = ReadU16(seri);
dst->spawnOrVisibilityFlags = ReadU16(seri);
dst->terrainFlags = ReadU16(seri);
dst->spawnOrVisibilityFlags.visibility = ReadU16(seri);
ReadBytes(seri, &dst->room, 1);
ReadBytes(seri, &dst->unkE, 1);

View File

@@ -713,7 +713,7 @@ void HandleLuminousOrbAction(Entity *pokemon)
for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++)
{
Tile *mapTile = GetTileMut(XCoord, YCoord);
mapTile->spawnOrVisibilityFlags |= VISIBILITY_FLAG_REVEALED;
mapTile->spawnOrVisibilityFlags.visibility |= VISIBILITY_FLAG_REVEALED;
}
}
UpdateCamera(0);

View File

@@ -366,7 +366,7 @@ Entity *SpawnItemEntity(DungeonPos *pos)
Entity *ent;
if (gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA
&& (GetTileMut(pos->x, pos->y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
&& (GetTileMut(pos->x, pos->y)->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
return NULL;
}

View File

@@ -126,7 +126,7 @@ void HandleExplosion(Entity *pokemon,Entity *target,DungeonPos *param_3,s32 para
tile = GetTileMut(pos.x,pos.y);
if ((0 < pos.x) && (0 < pos.y && ((pos.x < (DUNGEON_MAX_SIZE_X - 1) && ((pos.y < (DUNGEON_MAX_SIZE_Y - 1)
&& GetTerrainType(tile) == TERRAIN_TYPE_WALL)))
)) && (tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0) {
)) && (tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) == 0) {
SetTerrainNormal(tile);
for(y = -1; y < 2; y++)
{

View File

@@ -273,7 +273,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
case MOVE_DIG:
{
Tile *tile = GetTileAtEntitySafe(pokemon);
if (!IsTileGround(tile) || (tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)
if (!IsTileGround(tile) || (tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)
{
return FALSE;
}

View File

@@ -131,7 +131,7 @@ bool8 DigMoveAction(Entity * pokemon, Entity * target, Move *move, s32 param_4)
flag = FALSE;
tile = GetTileAtEntitySafe(pokemon);
if ((!IsTileGround(tile)) || ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != 1)) {
if ((!IsTileGround(tile)) || ((tile->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != 1)) {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FD14C); // It can only be used on land!
}
else {

View File

@@ -44,8 +44,8 @@ bool8 FillInOrbAction(Entity *pokemon,Entity *target, Move *move, s32 param_4)
sub_8042A54(&tileCoords);
tileToFill = GetTileMut(tileCoords.x,tileCoords.y);
if ((tileToFill->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
tileToFill->terrainType = (tileToFill->terrainType & ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) | TERRAIN_TYPE_NORMAL;
if ((tileToFill->terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
tileToFill->terrainFlags = (tileToFill->terrainFlags & ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) | TERRAIN_TYPE_NORMAL;
for(y = -1; y < 2; y++)
for(x = -1; x < 2; x++)

View File

@@ -401,7 +401,7 @@ void BurnedStatusTarget(Entity * pokemon, Entity * target, u8 param_3, bool8 dis
else
{
tile_1 = GetTileAtEntitySafe(target);
if (((tile_1->terrainType & (TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) == TERRAIN_TYPE_SECONDARY) &&
if (((tile_1->terrainFlags & (TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) == TERRAIN_TYPE_SECONDARY) &&
(gDungeonWaterType[gDungeon->tileset] != DUNGEON_WATER_TYPE_LAVA)) {
if (displayMessage)
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FEBBC);
@@ -656,7 +656,7 @@ void FrozenStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessage)
else
{
tile = GetTileAtEntitySafe(target);
if (((tile->terrainType & (TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) == TERRAIN_TYPE_SECONDARY) &&
if (((tile->terrainFlags & (TERRAIN_TYPE_SECONDARY | TERRAIN_TYPE_NORMAL)) == TERRAIN_TYPE_SECONDARY) &&
(gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA)) {
if (displayMessage)
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCE34);

View File

@@ -58,14 +58,14 @@ void HandleOneRoomOrb(Entity *pokemon, Entity *target)
{
bVar1 = 0;
tile = GetTileMut(x,y);
tile->terrainType &= ~(TERRAIN_TYPE_UNK_x400);
tile->terrainFlags &= ~(TERRAIN_TYPE_UNK_x400);
tile->room = 0;
if ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)
if ((tile->terrainFlags & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)
{
if((tile->terrainType & TERRAIN_TYPE_UNBREAKABLE) == 0) {
tile->spawnOrVisibilityFlags |= SPAWN_FLAG_STAIRS | SPAWN_FLAG_ITEM;
tile->terrainType &= ~(TERRAIN_TYPE_NATURAL_JUNCTION);
if ((tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE)) {
if((tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE) == 0) {
tile->spawnOrVisibilityFlags.spawn |= SPAWN_FLAG_STAIRS | SPAWN_FLAG_ITEM;
tile->terrainFlags &= ~(TERRAIN_TYPE_NATURAL_JUNCTION);
if ((tile->terrainFlags & TERRAIN_TYPE_IN_MONSTER_HOUSE)) {
isMonsterHouse = TRUE;
}
if (GetTerrainType(tile) != TERRAIN_TYPE_SECONDARY)
@@ -80,7 +80,7 @@ void HandleOneRoomOrb(Entity *pokemon, Entity *target)
else {
if (GetTerrainType(tile) == TERRAIN_TYPE_NORMAL) continue;
SetTerrainNormal(tile);
tile->terrainType |= TERRAIN_TYPE_UNK_x400;
tile->terrainFlags |= TERRAIN_TYPE_UNK_x400;
}
}
}
@@ -95,8 +95,8 @@ void HandleOneRoomOrb(Entity *pokemon, Entity *target)
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
{
tile = GetTileMut(x,y);
if (!(tile->terrainType & TERRAIN_TYPE_UNBREAKABLE))
if(((tile->terrainType & (TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS| TERRAIN_TYPE_UNK_x400)) == (TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS| TERRAIN_TYPE_UNK_x400))) {
if (!(tile->terrainFlags & TERRAIN_TYPE_UNBREAKABLE))
if(((tile->terrainFlags & (TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS| TERRAIN_TYPE_UNK_x400)) == (TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS| TERRAIN_TYPE_UNK_x400))) {
SetTerrainSecondary(tile);
}
}
@@ -111,7 +111,7 @@ void HandleOneRoomOrb(Entity *pokemon, Entity *target)
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
{
if (isMonsterHouse) {
GetTileMut(x,y)->terrainType |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
GetTileMut(x,y)->terrainFlags |= TERRAIN_TYPE_IN_MONSTER_HOUSE;
}
sub_8049BB0(x,y);
}

View File

@@ -56,11 +56,11 @@ void sub_807FA18(void)
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
Tile *tile = GetTileMut(x, y);
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_TRAP) {
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_TRAP) {
s32 trapId;
DungeonPos pos = {x, y};
if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_UNK6) {
if (tile->spawnOrVisibilityFlags.spawn & SPAWN_FLAG_UNK6) {
trapId = TRAP_WARP_TRAP;
}
else {
@@ -99,7 +99,7 @@ void sub_807FA9C(void)
if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP && (tile->object->isVisible || showInvisibles)) {
r6 = TRUE;
}
if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
if (tile->terrainFlags & TERRAIN_TYPE_STAIRS) {
r6 = TRUE;
}
@@ -133,21 +133,28 @@ void sub_807FC3C(DungeonPos *pos, u32 trapID, u32 param_3)
bool8 CanLayTrap(DungeonPos *pos)
{
Tile *tile = GetTileMut(pos->x, pos->y);
if (tile->terrainType & TERRAIN_TYPE_STAIRS ||
tile->room == CORRIDOR_ROOM ||
tile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
{
if (tile->terrainFlags & TERRAIN_TYPE_STAIRS)
return FALSE;
}
if (tile->terrainType & TERRAIN_TYPE_SHOP)
{
if (tile->room == CORRIDOR_ROOM)
return FALSE;
}
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL ||
(tile->object != NULL && GetEntityType(tile->object) != ENTITY_TRAP))
{
if (tile->terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION)
return FALSE;
if (tile->terrainFlags & TERRAIN_TYPE_SHOP)
return FALSE;
if (GetTerrainType(tile) != TERRAIN_TYPE_NORMAL)
return FALSE;
if (tile->object != NULL) {
if (GetEntityType(tile->object) != ENTITY_TRAP)
return FALSE;
else
return TRUE;
}
return TRUE;
}
@@ -156,7 +163,7 @@ bool8 LayTrap(DungeonPos *pos, u8 trapID, u8 param_3)
Tile *tile;
Entity *entity;
int counter;
u16 terrainType;
u16 terrainFlags;
tile = GetTileMut(pos->x, pos->y);
if (TRAP_SPIKE_TRAP < trapID) {
@@ -168,12 +175,12 @@ bool8 LayTrap(DungeonPos *pos, u8 trapID, u8 param_3)
trapID = TRAP_CHESTNUT_TRAP;
}
}
terrainType = tile->terrainType;
if ((terrainType & TERRAIN_TYPE_STAIRS) != 0) goto _0807FD6E;
terrainFlags = tile->terrainFlags;
if ((terrainFlags & TERRAIN_TYPE_STAIRS) != 0) goto _0807FD6E;
if (tile->room == CORRIDOR_ROOM) goto _0807FD6E;
if ((terrainType & TERRAIN_TYPE_NATURAL_JUNCTION) != 0) goto _0807FD6E;
if ((terrainType & TERRAIN_TYPE_SHOP) != 0) goto _0807FD6E;
if (((terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)) goto _0807FD6E;
if ((terrainFlags & TERRAIN_TYPE_NATURAL_JUNCTION) != 0) goto _0807FD6E;
if ((terrainFlags & TERRAIN_TYPE_SHOP) != 0) goto _0807FD6E;
if (((terrainFlags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)) goto _0807FD6E;
if (tile->object != NULL) {
if (GetEntityType(tile->object) != ENTITY_TRAP) goto _0807FD6E;
GetTrapInfo(tile->object)->id = trapID;

View File

@@ -100,7 +100,7 @@ void HandleTrawlOrbAction(Entity *user, Entity *target)
pos.y = user->pos.y + gUnknown_80F4468[j].y;
tile = GetTile(pos.x, pos.y);
if (GetTerrainType(tile) == TERRAIN_TYPE_NORMAL && !(tile->terrainType & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
if (GetTerrainType(tile) == TERRAIN_TYPE_NORMAL && !(tile->terrainFlags & TERRAIN_TYPE_STAIRS) && tile->object == NULL) {
targetTilePos[i] = pos;
targetTileUsed[j] = TRUE;
foundTile = TRUE;