optimizations

develop
Petr Mrázek 2009-11-22 14:43:53 +00:00
parent 99f6e0860f
commit 6cb7c4a636
7 changed files with 1936 additions and 1163 deletions

@ -41,6 +41,9 @@ class API::Private
uint32_t tile_type_offset;
uint32_t designation_offset;
uint32_t occupancy_offset;
uint32_t biome_stuffs;
uint32_t veinvector;
uint32_t veinsize;
uint32_t window_x_offset;
uint32_t window_y_offset;
@ -151,7 +154,10 @@ bool API::InitMap()
d->tile_type_offset = d->offset_descriptor->getOffset("type");
d->designation_offset = d->offset_descriptor->getOffset("designation");
d->occupancy_offset = d->offset_descriptor->getOffset("occupancy");
d->biome_stuffs = d->offset_descriptor->getOffset("biome_stuffs");
d->veinvector = d->offset_descriptor->getOffset("v_vein");
d->veinsize = d->offset_descriptor->getHexValue("v_vein_size");
// get the map pointer
uint32_t x_array_loc = MreadDWord(map_offset);
@ -211,14 +217,14 @@ bool API::DestroyMap()
bool API::isValidBlock(uint32_t x, uint32_t y, uint32_t z)
{
return d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z] != NULL;
return d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z] != 0;
}
// 256 * sizeof(uint16_t)
bool API::ReadTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mread(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer);
return true;
@ -231,7 +237,7 @@ bool API::ReadTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
bool API::ReadDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mread(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true;
@ -244,7 +250,7 @@ bool API::ReadDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
bool API::ReadOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mread(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true;
@ -257,7 +263,7 @@ bool API::ReadOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
bool API::WriteTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mwrite(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer);
return true;
@ -270,7 +276,7 @@ bool API::WriteTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
bool API::WriteDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mwrite(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true;
@ -283,7 +289,7 @@ bool API::WriteDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer
bool API::WriteOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mwrite(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true;
@ -296,11 +302,10 @@ bool API::WriteOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
// 16 * sizeof(uint8_t)
bool API::ReadRegionOffsets(uint32_t x, uint32_t y, uint32_t z, uint8_t *buffer)
{
uint32_t biome_stuffs = d->offset_descriptor->getOffset("biome_stuffs");
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL)
if (addr)
{
Mread(addr+biome_stuffs, 16 * sizeof(uint8_t), buffer);
Mread(addr+d->biome_stuffs, 16 * sizeof(uint8_t), buffer);
return true;
}
return false;
@ -311,25 +316,25 @@ bool API::ReadRegionOffsets(uint32_t x, uint32_t y, uint32_t z, uint8_t *buffer)
bool API::ReadVeins(uint32_t x, uint32_t y, uint32_t z, vector <t_vein> & veins)
{
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
int veinvector = d->offset_descriptor->getOffset("v_vein");
int veinsize = d->offset_descriptor->getHexValue("v_vein_size");
assert(sizeof(t_vein) == d->veinsize);
veins.clear();
if(addr!=NULL && veinvector && veinsize)
if(addr && d->veinvector && d->veinsize)
{
assert(sizeof(t_vein) == veinsize);
// veins are stored as a vector of pointers to veins
/*pointer is 4 bytes! we work with a 32bit program here, no matter what architecture we compile khazad for*/
DfVector p_veins = d->dm->readVector(addr + veinvector, 4);
DfVector p_veins = d->dm->readVector(addr + d->veinvector, 4);
uint32_t size = p_veins.getSize();
veins.reserve(size);
// read all veins
for (uint32_t i = 0; i< p_veins.getSize();i++)
for (uint32_t i = 0; i< size;i++)
{
t_vein v;
// read the vein pointer from the vector
uint32_t temp = *(uint32_t *) p_veins[i];
// read the vein data (dereference pointer)
Mread(temp, veinsize, (uint8_t *)&v);
Mread(temp, d->veinsize, (uint8_t *)&v);
// store it in the vector
veins.push_back(v);
}

@ -29,29 +29,12 @@ distribution.
#include <string>
#include <vector>
#include "integers.h"
#include "DFTileTypes.h"
namespace DFHack
{
class memory_info;
class Process;
enum VegetationType
{
TREE_DEAD,
TREE_OK,
SAPLING_DEAD,
SAPLING_OK,
SHRUB_DEAD,
SHRUB_OK
};
DFHACK_EXPORT bool isWallTerrain(int in);
DFHACK_EXPORT bool isFloorTerrain(int in);
DFHACK_EXPORT bool isRampTerrain(int in);
DFHACK_EXPORT bool isStairTerrain(int in);
DFHACK_EXPORT bool isOpenTerrain(int in);
DFHACK_EXPORT int getVegetationType(int in);
class DFHACK_EXPORT API
{
class Private;

@ -39,7 +39,7 @@ void memory_info::setVersion(const char * v)
}
void memory_info::setVersion(string v)
void memory_info::setVersion(const string &v)
{
version = v;
}
@ -63,7 +63,7 @@ void memory_info::setOS(const char *os)
}
void memory_info::setOS(string os)
void memory_info::setOS(const string &os)
{
if(os == "windows")
OS = OS_WINDOWS;
@ -85,7 +85,7 @@ void memory_info::setOS(OSType os)
}
memory_info::OSType memory_info::getOS()
memory_info::OSType memory_info::getOS() const
{
return OS;
}
@ -112,57 +112,57 @@ memory_info::memory_info(const memory_info &old)
}
uint32_t memory_info::getBase ()
uint32_t memory_info::getBase () const
{
return base;
}
void memory_info::setBase (string s)
void memory_info::setBase (const string &s)
{
base = strtol(s.c_str(), NULL, 16);
}
void memory_info::setBase (uint32_t b)
void memory_info::setBase (const uint32_t b)
{
base = b;
}
void memory_info::setOffset (string key, string value)
void memory_info::setOffset (const string & key, const string & value)
{
uint32_t offset = strtol(value.c_str(), NULL, 16);
offsets[key] = offset;
}
void memory_info::setAddress (string key, string value)
void memory_info::setAddress (const string & key, const string & value)
{
uint32_t address = strtol(value.c_str(), NULL, 16);
addresses[key] = address;
}
void memory_info::setHexValue (string key, string value)
void memory_info::setHexValue (const string & key, const string & value)
{
uint32_t hexval = strtol(value.c_str(), NULL, 16);
hexvals[key] = hexval;
}
void memory_info::setString (string key, string value)
void memory_info::setString (const string & key, const string & value)
{
strings[key] = value;
}
void memory_info::setLabor(string key, string value)
void memory_info::setLabor(const string & key, const string & value)
{
uint32_t keyInt = strtol(key.c_str(), NULL, 10);
labors[keyInt] = value;
}
void memory_info::setProfession (string key, string value)
void memory_info::setProfession (const string & key, const string & value)
{
uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(professions.size() <= keyInt)
@ -172,7 +172,7 @@ void memory_info::setProfession (string key, string value)
professions[keyInt] = value;
}
void memory_info::setJob (string key, string value)
void memory_info::setJob (const string & key, const string & value)
{
uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(jobs.size() <= keyInt)
@ -182,7 +182,7 @@ void memory_info::setJob (string key, string value)
jobs[keyInt] = value;
}
void memory_info::setSkill (string key, string value)
void memory_info::setSkill (const string & key, const string & value)
{
uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(skills.size() <= keyInt){
@ -191,7 +191,14 @@ void memory_info::setSkill (string key, string value)
skills[keyInt] = value;
}
void memory_info::setTrait(string key,string value,string zero,string one,string two,string three,string four,string five)
void memory_info::setTrait(const string & key,
const string & value,
const string & zero,
const string & one,
const string & two,
const string & three,
const string & four,
const string & five)
{
uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(traits.size() <= keyInt)
@ -341,7 +348,7 @@ void memory_info::copyBuildings(vector<string> & v_buildingtypes)
// change base of all addresses
void memory_info::RebaseAddresses(int32_t new_base)
void memory_info::RebaseAddresses(const int32_t new_base)
{
map<string, uint32_t>::iterator iter;
int32_t rebase = - (int32_t)base + new_base;
@ -375,74 +382,115 @@ void memory_info::RebaseVTable(int32_t offset)
}
}
// Get named address
uint32_t memory_info::getAddress (string key)
uint32_t memory_info::getAddress (const char *key)
{
if(addresses.count(key))
map <string, uint32_t>::iterator iter = addresses.find(key);
if(iter != addresses.end())
{
return addresses[key];
return (*iter).second;
}
return 0;
}
// Get named offset
uint32_t memory_info::getOffset (string key)
uint32_t memory_info::getOffset (const char *key)
{
map <string, uint32_t>::iterator iter = offsets.find(key);
if(iter != offsets.end())
{
return (*iter).second;
}
return 0;
}
// Get named numerical value
uint32_t memory_info::getHexValue (const char *key)
{
if(offsets.count(key))
map <string, uint32_t>::iterator iter = hexvals.find(key);
if(iter != hexvals.end())
{
return offsets[key];
return (*iter).second;
}
return 0;
}
// Get named string
std::string memory_info::getString (string key)
// Get named address
uint32_t memory_info::getAddress (const string &key)
{
if(strings.count(key))
map <string, uint32_t>::iterator iter = addresses.find(key);
if(iter != addresses.end())
{
return strings[key];
return (*iter).second;
}
else return string("");
return 0;
}
// Get named offset
uint32_t memory_info::getOffset (const string &key)
{
map <string, uint32_t>::iterator iter = offsets.find(key);
if(iter != offsets.end())
{
return (*iter).second;
}
return 0;
}
// Get named numerical value
uint32_t memory_info::getHexValue (string key)
uint32_t memory_info::getHexValue (const string &key)
{
if(hexvals.count(key))
map <string, uint32_t>::iterator iter = hexvals.find(key);
if(iter != hexvals.end())
{
return hexvals[key];
return (*iter).second;
}
return 0;
}
// Get named string
std::string memory_info::getString (const string &key)
{
map <string, string>::iterator iter = strings.find(key);
if(iter != strings.end())
{
return (*iter).second;
}
return string("");
}
// Get Profession
string memory_info::getProfession (uint32_t key)
string memory_info::getProfession (const uint32_t key) const
{
if(professions.size() > key)
{
return professions[key];
}
else{
else
{
return string("");
}
}
// Get Job
string memory_info::getJob (uint32_t key)
string memory_info::getJob (const uint32_t key) const
{
if(jobs.size() > key){
if(jobs.size() > key)
{
return jobs[key];
}
return string("Job Does Not Exist");
}
string memory_info::getSkill (uint32_t key)
string memory_info::getSkill (const uint32_t key) const
{
if(skills.size() > key){
if(skills.size() > key)
{
return skills[key];
}
return string("Skill is not Defined");
@ -456,7 +504,7 @@ int absolute (int number)
return number;
}
string memory_info::getTrait (uint32_t traitIdx, uint32_t traitValue)
string memory_info::getTrait (const uint32_t traitIdx, const uint32_t traitValue) const
{
if(traits.size() > traitIdx)
{
@ -481,7 +529,7 @@ string memory_info::getTrait (uint32_t traitIdx, uint32_t traitValue)
return string("Trait is not Defined");
}
string memory_info::getTraitName(uint32_t traitIdx)
string memory_info::getTraitName(const uint32_t traitIdx) const
{
if(traits.size() > traitIdx)
{
@ -490,7 +538,7 @@ string memory_info::getTraitName(uint32_t traitIdx)
return string("Trait is not Defined");
}
string memory_info::getLabor (uint32_t laborIdx)
string memory_info::getLabor (const uint32_t laborIdx)
{
if(labors.count(laborIdx))
{

@ -60,59 +60,63 @@ namespace DFHack
memory_info(const memory_info&);
void RebaseAddresses(int32_t new_base);
void RebaseAll(int32_t new_base);
uint32_t getBase ();
void setBase (string);
void setBase (uint32_t);
uint32_t getOffset (string);
uint32_t getAddress (string);
uint32_t getHexValue (string);
string getString (string);
string getProfession(uint32_t);
string getJob(uint32_t);
string getSkill (uint32_t);
string getTrait (uint32_t, uint32_t);
string getTraitName(uint32_t);
string getLabor (uint32_t);
void RebaseAddresses(const int32_t new_base);
void RebaseAll(const int32_t new_base);
uint32_t getBase () const;
void setBase (const string&);
void setBase (const uint32_t);
uint32_t getOffset (const string&);
uint32_t getAddress (const string&);
uint32_t getHexValue (const string&);
uint32_t getOffset (const char *);
uint32_t getAddress (const char *);
uint32_t getHexValue (const char *);
string getString (const string&);
string getProfession(const uint32_t) const;
string getJob(const uint32_t) const;
string getSkill (const uint32_t) const;
string getTrait (const uint32_t, const uint32_t) const;
string getTraitName(const uint32_t) const;
string getLabor (const uint32_t);
void setVersion(const char *);
void setVersion(string);
void setVersion(const string&);
string getVersion();
void setOS(const char *);
void setOS(string);
void setOS(OSType);
OSType getOS();
void setOffset (string, int32_t);
void setAddress (string, uint32_t);
void setHexValue (string, uint32_t);
void setOffset (string, const char *);
void setAddress (string, const char *);
void setHexValue (string, const char *);
void setString (string, const char *);
void setOffset (string, string);
void setAddress (string, string);
void setHexValue (string, string);
void setString (string, string);
void setProfession(string, string);
void setJob(string, string);
void setSkill(string, string);
void setTrait(string,string,string,string,string,string,string,string);
void setLabor(string, string);
void RebaseVTable(int32_t offset);
void setOS(const string&);
void setOS(const OSType);
OSType getOS() const;
void setOffset (const string &, const int32_t);
void setAddress (const string &, const uint32_t);
void setHexValue (const string &, const uint32_t);
void setOffset (const string &, const char *);
void setAddress (const string &, const char *);
void setHexValue (const string &, const char *);
void setString (const string &, const char *);
void setOffset (const string &, const string &);
void setAddress (const string &, const string &);
void setHexValue (const string &, const string &);
void setString (const string &, const string &);
void setProfession(const string &, const string &);
void setJob(const string &, const string &);
void setSkill(const string &, const string &);
void setTrait(const string &,const string &,const string &,const string &,const string &,const string &,const string &,const string &);
void setLabor(const string &, const string &);
void RebaseVTable(const int32_t offset);
void setClass (const char * name, const char * vtable);
uint32_t setMultiClass (const char * name, const char * vtable, const char * typeoffset);
void setMultiClassChild (uint32_t multi_index, const char * name, const char * type);
// ALERT: uses memory reading directly
bool resolveClassId(uint32_t address, int32_t & classid);
bool resolveClassId(const uint32_t address, int32_t & classid);
void copyBuildings(vector<string> & v_buildingtypes);
void flush();

File diff suppressed because it is too large Load Diff

@ -25,4 +25,734 @@ distribution.
#ifndef TILETYPES_H_INCLUDED
#define TILETYPES_H_INCLUDED
namespace DFHack
{
enum TileClass
{
EMPTY,
WALL,
PILLAR,
FORTIFICATION,
STAIR_UP,
STAIR_DOWN,
STAIR_UPDOWN,
RAMP,
FLOOR,
TREE_DEAD,
TREE_OK,
SAPLING_DEAD,
SAPLING_OK,
SHRUB_DEAD,
SHRUB_OK,
BOULDER,
PEBBLES
};
enum TileMaterial
{
AIR,
SOIL,
STONE,
FEATSTONE, // whatever it is
OBSIDIAN,
VEIN,
ICE,
GRASS,
GRASS2,
GRASS_DEAD,
GRASS_DRY,
DRIFTWOOD,
HFS,
MAGMA,
CAMPFIRE,
FIRE,
ASHES,
CONSTRUCTED
};
enum TileVariant
{
VAR_1,
VAR_2,
VAR_3,
VAR_4
};
struct TileRow
{
const char * name;
TileClass c;
TileMaterial m;
TileVariant v;
};
const TileRow tileTypeTable[520] =
{
// 0
{"void",EMPTY, AIR, VAR_1},
{"ramp top",EMPTY, AIR, VAR_1},
{"pool",FLOOR, SOIL, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
// 10
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{"driftwood stack",FLOOR, DRIFTWOOD, VAR_1},
// 20
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"tree",TREE_OK, SOIL, VAR_1},
{"ice stair up/down",STAIR_UPDOWN, ICE, VAR_1},
{"ice stair down",STAIR_DOWN, ICE, VAR_1},
{"ice stair up",STAIR_UP, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 30
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"empty space",EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"shrub",SHRUB_OK, SOIL, VAR_1},
{"chasm",FLOOR, AIR, VAR_1},
{"obsidian stair up/down",STAIR_UPDOWN, OBSIDIAN, VAR_1},
{"obsidian stair down",STAIR_DOWN, OBSIDIAN, VAR_1},
{"obsidian stair up",STAIR_UP, OBSIDIAN, VAR_1},
{"soil stair up/down",STAIR_UPDOWN, SOIL, VAR_1},
// 40
{"soil stair down",STAIR_DOWN, SOIL, VAR_1},
{"soil stair up",STAIR_UP, SOIL, VAR_1},
{"eerie pit",FLOOR, HFS, VAR_1},
{"smooth stone floor",FLOOR, STONE, VAR_1},
{"smooth obsidian floor",FLOOR, OBSIDIAN, VAR_1},
{"smooth featstone? floor",FLOOR, FEATSTONE, VAR_1},
{"smooth vein floor",FLOOR, VEIN, VAR_1},
{"smooth ice floor",FLOOR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"grass stair up/down",STAIR_UPDOWN, GRASS, VAR_1},
// 50
{"grass stair down",STAIR_DOWN, GRASS, VAR_1},
{"grass stair up",STAIR_UP, GRASS, VAR_1},
{"grass2 stair up/down",STAIR_UPDOWN, GRASS2, VAR_1},
{"grass2 stair down",STAIR_DOWN, GRASS2, VAR_1},
{"grass2 stair up",STAIR_UP, GRASS2, VAR_1},
{"stone stair up/down",STAIR_UPDOWN, STONE, VAR_1},
{"stone stair down",STAIR_DOWN, STONE, VAR_1},
{"stone stair up",STAIR_UP, STONE, VAR_1},
{"vein stair up/down",STAIR_UPDOWN, VEIN, VAR_1},
{"vein stair down",STAIR_DOWN, VEIN, VAR_1},
// 60
{"vein stair up",STAIR_UP, VEIN, VAR_1},
{"featstone? stair up/down",STAIR_UPDOWN, FEATSTONE, VAR_1},
{"featstone? stair down",STAIR_DOWN, FEATSTONE, VAR_1},
{"featstone? stair up",STAIR_UP, FEATSTONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone fortification",FORTIFICATION, STONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"campfire",FLOOR, CAMPFIRE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 70
{"fire",FLOOR, FIRE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone pillar",PILLAR, STONE, VAR_1},
//80
{"obsidian pillar",PILLAR, OBSIDIAN, VAR_1},
{"featstone? pillar",PILLAR, FEATSTONE, VAR_1},
{"vein pillar",PILLAR, VEIN, VAR_1},
{"ice pillar",PILLAR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"waterfall landing",FLOOR, SOIL, VAR_1}, // verify material
// 90
{"river source",FLOOR, SOIL, VAR_1}, // verify material
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 100
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 110
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 120
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 130
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 140
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 150
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 160
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 170
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"cracked stone wall" ,WALL, STONE, VAR_1},
{"damaged stone wall" ,WALL, STONE, VAR_1},
{"worn stone wall" ,WALL, STONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 180
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 190
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 200
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 210
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone wall" ,WALL, STONE, VAR_1},
// 220
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 230
{0 ,EMPTY, AIR, VAR_1},
{"sapling" ,SAPLING_OK, SOIL, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"dry grass ramp" ,RAMP, GRASS_DRY, VAR_1},
{"dead grass ramp" ,RAMP, GRASS_DEAD, VAR_1},
{"grass ramp" ,RAMP, GRASS, VAR_1},
{"grass ramp" ,RAMP, GRASS2, VAR_1},
{"stone ramp" ,RAMP, STONE, VAR_1},
{"obsidian ramp" ,RAMP, OBSIDIAN, VAR_1},
{"featstone? ramp" ,RAMP, FEATSTONE, VAR_1},
// 240
{"vein ramp" ,RAMP, VEIN, VAR_1},
{"soil ramp" ,RAMP, SOIL, VAR_1},
{"ashes" ,FLOOR, ASHES, VAR_1},
{"ashes" ,FLOOR, ASHES, VAR_2},
{"ashes" ,FLOOR, ASHES, VAR_3},
{"ice ramp" ,RAMP, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 250
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"ice floor" ,FLOOR, ICE, VAR_2},
{"ice floor" ,FLOOR, ICE, VAR_3},
// 260
{"ice floor" ,FLOOR, ICE, VAR_4},
{"furrowed soil" ,FLOOR, SOIL, VAR_1},
{"ice floor" ,FLOOR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"magma" ,FLOOR, MAGMA, VAR_1}, // is it really a floor?
{"soil wall" ,WALL, SOIL, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
// 270
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
// 280
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
// 290
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
//300
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
//310
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
//320
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"obsidian fortification",FORTIFICATION,OBSIDIAN,VAR_1},
{"featstone? fortification",FORTIFICATION,FEATSTONE,VAR_1},
{"cracked obsidian wall",WALL,OBSIDIAN,VAR_1},
{"damaged obsidian wall",WALL,OBSIDIAN,VAR_1},
// 330
{"worn obsidian wall",WALL,OBSIDIAN,VAR_1},
{"obsidian wall",WALL,OBSIDIAN,VAR_1},
{"cracked stone wall",WALL,STONE,VAR_1},
{"damaged stone wall",WALL,STONE,VAR_1},
{"worn stone wall",WALL,STONE,VAR_1},
{"stone wall",WALL,STONE,VAR_1},
{"stone floor",FLOOR,STONE,VAR_1},
{"stone floor",FLOOR,STONE,VAR_2},
{"stone floor",FLOOR,STONE,VAR_3},
{"stone floor",FLOOR,STONE,VAR_4},
// 340
{"obsidian floor",FLOOR,OBSIDIAN,VAR_1},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_2},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_3},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_4},
{"featstone? floor",FLOOR,FEATSTONE,VAR_1},
{"featstone? floor",FLOOR,FEATSTONE,VAR_2},
{"featstone? floor",FLOOR,FEATSTONE,VAR_3},
{"featstone? floor",FLOOR,FEATSTONE,VAR_4},
{"grass",FLOOR,GRASS,VAR_1},
{"grass",FLOOR,GRASS,VAR_2},
// 350
{"grass",FLOOR,GRASS,VAR_3},
{"grass",FLOOR,GRASS,VAR_4},
{"soil floor",FLOOR,SOIL,VAR_1},
{"soil floor",FLOOR,SOIL,VAR_2},
{"soil floor",FLOOR,SOIL,VAR_3},
{"soil floor",FLOOR,SOIL,VAR_4},
{"wet soil floor",FLOOR,SOIL,VAR_1},
{"wet soil floor",FLOOR,SOIL,VAR_2},
{"wet soil floor",FLOOR,SOIL,VAR_3},
{"wet soil floor",FLOOR,SOIL,VAR_4},
// 360
{"ice fortification",FORTIFICATION,ICE,VAR_1},
{"cracked ice wall",WALL,ICE,VAR_1},
{"damaged ice wall",WALL,ICE,VAR_1},
{"worn ice wall",WALL,ICE,VAR_1},
{"ice wall",WALL,ICE,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
//370
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
// 380
{"stream",FLOOR,SOIL,VAR_1},
{"stream top",FLOOR,SOIL,VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"dry grass",FLOOR,GRASS_DRY,VAR_1},
{"dry grass",FLOOR,GRASS_DRY,VAR_2},
{"dry grass",FLOOR,GRASS_DRY,VAR_3},
// 390
{"dry grass",FLOOR,GRASS_DRY,VAR_4},
{"dead tree",TREE_DEAD,SOIL,VAR_1},
{"dead sapling",SAPLING_DEAD,SOIL,VAR_1},
{"dead shrub",SHRUB_DEAD,SOIL,VAR_1},
{"dead grass",FLOOR,GRASS_DEAD,VAR_1},
{"dead grass",FLOOR,GRASS_DEAD,VAR_2},
{"dead grass",FLOOR,GRASS_DEAD,VAR_3},
{"dead grass",FLOOR,GRASS_DEAD,VAR_4},
{"grass",FLOOR,GRASS2,VAR_1},
{"grass",FLOOR,GRASS2,VAR_2},
// 400
{"grass",FLOOR,GRASS2,VAR_3},
{"grass",FLOOR,GRASS2,VAR_4},
{"boulder",BOULDER,STONE,VAR_1},
{"obsidian boulder",BOULDER,OBSIDIAN,VAR_1},
{"featstone? boulder",BOULDER,FEATSTONE,VAR_1},
{"pebbles",PEBBLES,STONE,VAR_1},
{"pebbles",PEBBLES,STONE,VAR_2},
{"pebbles",PEBBLES,STONE,VAR_3},
{"pebbles",PEBBLES,STONE,VAR_4},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_1},
// 410
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_2},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_3},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_4},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_1},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_2},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_3},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_4},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
// 420
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
// 430
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"vein fortification",FORTIFICATION,VEIN,VAR_1},
{"cracked vein wall",WALL,VEIN,VAR_1},
{"damaged vein wall",WALL,VEIN,VAR_1},
{"worn vein wall",WALL,VEIN,VAR_1},
// 440
{"vein wall",WALL,VEIN,VAR_1},
{"vein floor",FLOOR,VEIN,VAR_1},
{"vein floor",FLOOR,VEIN,VAR_2},
{"vein floor",FLOOR,VEIN,VAR_3},
{"vein floor",FLOOR,VEIN,VAR_4},
{"vein boulder",BOULDER,VEIN,VAR_1},
{"vein pebbles",PEBBLES,VEIN,VAR_1},
{"vein pebbles",PEBBLES,VEIN,VAR_2},
{"vein pebbles",PEBBLES,VEIN,VAR_3},
{"vein pebbles",PEBBLES,VEIN,VAR_4},
// 450
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
// 460
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 470
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 480
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 490
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"constructed floor",FLOOR,CONSTRUCTED, VAR_1},
{"constructed fortification",FORTIFICATION,CONSTRUCTED, VAR_1},
{"constructed pillar",PILLAR,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
// 500
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
// 510
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed stair up/down",STAIR_UPDOWN,CONSTRUCTED, VAR_1},
{"constructed stair down",STAIR_DOWN,CONSTRUCTED, VAR_1},
{"constructed stair up",STAIR_UP,CONSTRUCTED, VAR_1},
{"constructed ramp",STAIR_UPDOWN,CONSTRUCTED, VAR_1},
{0 ,EMPTY, AIR, VAR_1} // end
};
inline
bool isWallTerrain(int in)
{
return tileTypeTable[in].c >= WALL && tileTypeTable[in].c <= FORTIFICATION ;
}
inline
bool isFloorTerrain(int in)
{
return tileTypeTable[in].c >= FLOOR && tileTypeTable[in].c <= PEBBLES;
}
inline
bool isRampTerrain(int in)
{
return tileTypeTable[in].c == RAMP;
}
inline
bool isStairTerrain(int in)
{
return tileTypeTable[in].c >= STAIR_UP && tileTypeTable[in].c <= STAIR_UPDOWN;
}
inline
bool isOpenTerrain(int in)
{
return tileTypeTable[in].c == EMPTY;
}
inline
int getVegetationType(int in)
{
return tileTypeTable[in].c;
}
}
#endif // TILETYPES_H_INCLUDED

File diff suppressed because it is too large Load Diff