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 levelint wall_type_room; // simplifies logic of innermost loop {dlb}
// remember, can have many wall types in one leveldungeon_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));