Changed env.grid to dungeon_feature_type. (The special-level builder still stores map characters directly into env.grid and then translates them to features.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1592 c06c8d41-db1a-0410-9941-cceddc491573
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
YYHCM4CUN6G5PFWPGOYMDYX4P3SGNYUT5SZK5AUWUL2G7RULQJDAC
5KJCHLIUFKRPMIVWUAYT6EOF7SW4PTQF6Y5OPEFWXGLE7DUGYLZAC
TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
OT53X5ORPLBVG4SRIM5PTQ5ERZLZELB7ZKR6ZKDKVOD7IJR6VDOQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
IPXXB4VRVZWOU5DKQ5ZTD37LS3QNK2R6APNZUO672YEEJT6OFAYQC
GDHH6O4KVTDWSENR573WKVFCRM2L4AVOBRSVPI6F5A2UR7U7SPXAC
LXLUKS5CKXBUSVV3QTZ4SM7NWSY6JFQEBHUBQW2VUEU5DOL3RRLAC
3YK4G4IQBXW63HPGU5WRTV6L2FCMKAK4DOTCHFK2FNSB5B3Y3PVQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
SH6NU4H5TG4O7CRXRHZ7MDHABZLWWXQ77NJDBHI7KCVHXHQYK46QC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
2EF3QUVPUQAKBTZKLKQ5B73Z26TXX2H2G2MKIMXD7B7BSDCYE7SAC
547JREUJXTZNYVGHNNAET5F5O5JYYGNTDQB6ABZNT7YX5EY64OHAC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
Y66ZAXN24E3HLIBOSW4OXUTQ4X4PRGNJII4KVDQH4GQJVA6GO3NAC
GACH6PWPGGUBEE7PFEPQMOZKSR7HTQGL2WLGF2AQPJD3FCCSKZNQC
ZHFUXYUHS6V47WK2NRH7OU6RX77NRKTXOZC3MND2GG7PEEWSGFTAC
PTB7I4WQ3NTF7BE3O6WKXDSJD6QRWSZIEWPBSZGCJJZVNKT4OL5AC
KRN7O2VJTLPT5KLUEMNGNYDSVHB3LYWONSREU2GOUXRMM3J6REYQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC
ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC
UDYVF65OZSNPANLHDI3ODBEGUAKAVZ4KH4OZFAKR2CQJPO4AXU6QC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
D27U7RT2C77NEUBP6JCSQJ2DRCJVHOXUO2PFZ45VFYMEVMKI4TSAC
XY77S75KH5KV54MZVAPMUC64TVRE2QM2KVJAAGJGCIBGQEC5GUTQC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC
7J3H7JY6AUO2UHNF6DAHDZI4O33JMTUUTYTPRM3CKNPUOF2RQOGAC
AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC
L6O4LGZRKBURVWEY7XRVCSQLJ5RULNBEWMQJ6I2UYVWWB66FM3MQC
2TTHWHQ3ZDD3DLB3KRULTBMS3ZREJG472IBVZXIGTP7MBZWAU52QC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC
void losight(FixedArray<unsigned int, 19, 19>& sh, FixedArray<unsigned char, 80, 70>& gr, int x_p, int y_p);
void losight(FixedArray<unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>& sh,
FixedArray<dungeon_feature_type, GXM, GYM>& gr,
int x_p, int y_p);
// answers the question: "Is a grid within character's line of sight?"
bool see_grid(unsigned char grx, unsigned char gry)
{
if (grx > you.x_pos - 9 && grx < you.x_pos + 9
&& gry > you.y_pos - 9 && gry < you.y_pos + 9)
{
if (env.show[grx - you.x_pos + 9][gry - you.y_pos + 9] != 0)
return true;
// rare case: can player see self? (of course!)
if (grx == you.x_pos && gry == you.y_pos)
return true;
}
return false;
} // end see_grid()
bool Stash::is_boring_feature(dungeon_feature_type feat)
{
switch (feat)
{
// Discard spammy dungeon features.
case DNGN_SHALLOW_WATER: case DNGN_DEEP_WATER:
case DNGN_LAVA: case DNGN_OPEN_DOOR: case DNGN_STONE_STAIRS_DOWN_I:
case DNGN_STONE_STAIRS_DOWN_II: case DNGN_STONE_STAIRS_DOWN_III:
case DNGN_STONE_STAIRS_UP_I: case DNGN_STONE_STAIRS_UP_II:
case DNGN_STONE_STAIRS_UP_III: case DNGN_ROCK_STAIRS_DOWN:
case DNGN_ROCK_STAIRS_UP: case DNGN_ENTER_SHOP:
case DNGN_UNDISCOVERED_TRAP:
return (true);
default:
return (grid_is_solid(feat));
}
}
// note item when first entering field of vision
// (only works with stashes enabled)
// learned_something_new(TUT_SEEN_FIRST_OBJECT, x, y);
// learned_something_new(TUT_SEEN_FIRST_OBJECT, item);
tutorial_first_item(item);
tutorial_first_item(item);
if (!env.show[cx - 8][cy] && !(cx == 17 && cy == 9))
continue;
if ((!lev || !lev->update_stash(x, y))
&& mode == ST_AGGRESSIVE
&& igrd[x][y] != NON_ITEM)
const dungeon_feature_type grid = grd[cx][cy];
if ((!lev || !lev->update_stash(cx, cy))
&& mode == ST_AGGRESSIVE
&& (igrd[cx][cy] != NON_ITEM
|| !Stash::is_boring_feature(grid)))
}
static void get_matching_altars(
const base_pattern &pattern, std::vector<stash_search_result> &results)
{
for ( altar_map_type::const_iterator na_iter = altars_present.begin();
na_iter != altars_present.end(); ++na_iter )
{
const std::string adesc =
altar_description(na_iter->second);
if (pattern.matches(place_desc(na_iter->first) + adesc))
{
stash_search_result sr;
sr.pos = na_iter->first;
sr.match = adesc;
results.push_back(sr);
}
}
}
static void get_matching_portals(
const base_pattern &pattern, std::vector<stash_search_result> &results)
{
for ( portal_map_type::const_iterator pl_iter = portals_present.begin();
pl_iter != portals_present.end(); ++pl_iter )
{
const std::string desc =
portal_description(pl_iter->second);
if (pattern.matches(place_desc(pl_iter->first) + desc + " [portal]"))
{
stash_search_result sr;
sr.pos = pl_iter->first;
sr.match = desc;
results.push_back(sr);
}
}
bool grid_is_wall(int grid);
bool grid_is_opaque(int grid);
bool grid_is_solid(int grid);
int trap_at_xy(int x, int y);
trap_type trap_type_at_xy(int x, int y);
bool grid_is_wall(dungeon_feature_type grid);
bool grid_is_opaque(dungeon_feature_type grid);
bool grid_is_solid(dungeon_feature_type grid);
bool grid_is_water(int grid);
bool grid_is_watery( int grid );
god_type grid_altar_god( unsigned char grid );
int altar_for_god( god_type god );
bool grid_is_branch_stairs( unsigned char grid );
bool grid_is_water(dungeon_feature_type grid);
bool grid_is_watery(dungeon_feature_type grid);
god_type grid_altar_god( dungeon_feature_type grid );
dungeon_feature_type altar_for_god( god_type god );
bool grid_is_branch_stairs( dungeon_feature_type grid );
unsigned char floor=0, unsigned char wall=0, unsigned char avoid=0);
static void replace_area(int sx, int sy, int ex, int ey, unsigned char replace,
unsigned char feature);
dungeon_feature_type floor=DNGN_UNSEEN,
dungeon_feature_type wall=DNGN_UNSEEN,
dungeon_feature_type avoid=DNGN_UNSEEN);
static void replace_area(int sx, int sy, int ex, int ey,
dungeon_feature_type replace,
dungeon_feature_type feature);
static void make_trail(int xs, int xr, int ys, int yr,int corrlength, int intersect_chance,
int no_corr, unsigned char begin, unsigned char end=0);
static void make_trail(int xs, int xr, int ys, int yr,int corrlength,
int intersect_chance,
int no_corr, dungeon_feature_type begin,
dungeon_feature_type end=DNGN_UNSEEN);
unsigned char floor_type = ((temp_rand > 1) ? DNGN_FLOOR : // 5/7
(temp_rand > 0) ? DNGN_DEEP_WATER// 1/7
: DNGN_LAVA); // 1/7
dungeon_feature_type floor_type =
((temp_rand > 1) ? DNGN_FLOOR : // 5/7
(temp_rand > 0) ? DNGN_DEEP_WATER// 1/7
: DNGN_LAVA); // 1/7
int wall_type; // remember, can have many wall types in one level
int wall_type_room; // simplifies logic of innermost loop {dlb}
// remember, can have many wall types in one level
dungeon_feature_type wall_type;
// simplifies logic of innermost loop {dlb}
dungeon_feature_type wall_type_room;
static void chequerboard( spec_room &sr, unsigned char target,
unsigned char floor1, unsigned char floor2 )
static void chequerboard( spec_room &sr, dungeon_feature_type target,
dungeon_feature_type floor1,
dungeon_feature_type floor2 )
if (grid_is_trap(grid) && trap != NUM_TRAPS)
{
switch (trap)
{
case TRAP_DART:
return ("A dart trap.");
case TRAP_ARROW:
return ("An arrow trap.");
case TRAP_SPEAR:
return ("A spear trap.");
case TRAP_AXE:
return ("An axe trap.");
case TRAP_TELEPORT:
return ("A teleportation trap.");
case TRAP_AMNESIA:
return ("An amnesia trap.");
case TRAP_BLADE:
return ("A blade trap.");
case TRAP_BOLT:
return ("A bolt trap.");
case TRAP_ZOT:
return ("A Zot trap.");
case TRAP_NEEDLE:
return ("A needle trap.");
default:
error_message_to_player();
return ("An undefined trap.");
}
}
{
int trf;
for (trf = 0; trf < MAX_TRAPS; trf++)
{
if (env.trap[trf].x == mx
&& env.trap[trf].y == my)
{
break;
}
if (trf == MAX_TRAPS - 1)
{
mpr("Error - couldn't find that trap.");
error_message_to_player();
break;
}
}
switch (env.trap[trf].type)
{
case TRAP_DART:
return ("A dart trap.");
case TRAP_ARROW:
return ("An arrow trap.");
case TRAP_SPEAR:
return ("A spear trap.");
case TRAP_AXE:
return ("An axe trap.");
case TRAP_TELEPORT:
return ("A teleportation trap.");
case TRAP_AMNESIA:
return ("An amnesia trap.");
case TRAP_BLADE:
return ("A blade trap.");
case TRAP_BOLT:
return ("A bolt trap.");
case TRAP_ZOT:
return ("A Zot trap.");
case TRAP_NEEDLE:
return ("A needle trap.");
default:
error_message_to_player();
return ("An undefined trap.");
}
}
return feature_description(grid, trap_type_at_xy(mx, my));