git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7560 c06c8d41-db1a-0410-9941-cceddc491573
KIDHPMZSLUVK3TF4565MH7SJ57C45SORJXR274VJTOULNOTGHQ4AC 5H5CMQX57I2C4IBRQJWKGJBTNOG7FX4HFXZTWYAGLJJZPIHQ5PNAC BW6QCGQDWZ6G2UGDD4EXI5VVDZHM5S53MJIC5CKG3Q3VQ4IDQ2VQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC A3CO4KBFTFU3ZSHWRY2OPPX3MMTFV7OUCZGL7Q4Y2FU7JO4AP7MAC AO3KHGKGSX2ZR24KJVIOTUY7EHYHMMI5W4HN3CAG4YGQHBOHLGDQC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC KTRWLM6WDL4GAAJZNLQEEA3TGY2OKYZZUAAT4TCAVKRTR2NQBWUQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC 3UKFCWWS5BLFQWZRB5FUA46CE2XGX5VRCEWC3K3XH5RCGQK64N2AC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC J7GPW2YXLT6FGSKJ24FGQ24GTRZ6A2BDYM6CIXV4R6YBEHP6BGPAC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC VS246W2SVNBUAI5SZE3RS5WPQWLEYXHHJHFXP45BZO76CB56NI6QC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC W45PMU4HNPSAMMEBJ4XH4MTHLPVIASZT4FXTBPID5LFXKIMNUBKAC 6ZCKL3LCJ2QYYRI6CVK7CU4VXZMIZ6RIOTFUDEM2QTM4EHKVUKMAC 2YSMM7QMFZOPD5NXAD2OAMDJEY5LOZO4NCYBC7UCQVANKINJRNBAC 6CHNAAPWNROCQNX6EWPLXZOWX5HHKL5ZOHO24XRMNQTQF3CWB3VQC SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC K6ELQ4HEZYDROC7CJFLPJS64AAJQ4G6RVLL4GBRUG6FJMKSBDDIQC S7T5CO7QMCIK6QSVVB76GNOAQ6QNJOOINGMLFWRC26VK276R3QCAC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC 34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC 56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC AF7VAKCSGEYCXRTITS2WAW7VTM3OEQOECMNXR6YMOQLBCVZZFAVQC X7MFMKQTNZ2IWBFVGS6WQV7NRNKJ3DWQAW2X7IQMFQQXW24AHPZQC B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC XAFFD52IHN6FWFR2TT5F2KCUS7HAVCBI5CWTFMKPQG77GGTGAHLAC 6ZQY6HMQHBIQP6RPQZTK4KJ6YGCW2SJJUYHGI6UVATES5GKJRP7QC JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC XJUQANMY7JJTA3KDICDXEOBE22YQTMZQSDPP4PFBTTGJJDK4X5KAC XPTDBTPHD5CIPPOHIPMI7HBOTQIGGJPYKDOJCHWG2ZTI7SLUHTEAC 26HVORSNY267C3BZQ4RZD5NINMTJPDOAXBVPJX5HWMTOEINNBY3QC int orient;map_def map;std::vector<coord_def> exits;int level_number, altar_count, num_runes;// If we're not placing runes, this is the substitute feature.int rune_subst;vault_placement(): pos(-1, -1), size(0, 0), orient(0), map(),exits(), level_number(0), altar_count(0), num_runes(0),rune_subst(-1){}};int vault_main(map_type vgrid,vault_placement &vp,
int vault_main(vault_placement &vp,
// First, fill in entirely with walls and null-terminate {dlb}:for (int vx = 0; vx < MAP_SIDE; vx++){for (int vy = 0; vy < MAP_SIDE; vy++)vgrid[vx][vy] = 'x';vgrid[MAP_SIDE][vx] = 0;vgrid[vx][MAP_SIDE] = 0;}
const std::vector<std::string> &lines = ml.get_lines();#ifdef DEBUG_DIAGNOSTICSmprf(MSGCH_DIAGNOSTICS, "Applying %s at (%d,%d), dimensions (%d,%d)",def.name.c_str(), start.x, start.y, size.x, size.y);#endif
for (int y = start.y; y < start.y + size.y; ++y){const std::string &s = lines[y - start.y];strncpy(&map[y][start.x], s.c_str(), s.length());}
int orient;map_def map;std::vector<coord_def> exits;int level_number, altar_count, num_runes;// If we're not placing runes, this is the substitute feature.int rune_subst;public:vault_placement(): pos(-1, -1), size(0, 0), orient(0), map(),exits(), level_number(0), altar_count(0), num_runes(0),rune_subst(-1){}void reset();void apply_grid();void draw_at(const coord_def &c);};
// This is a throwaway.std::vector<coord_def> &target_connections = place.exits;// Paint the minivault onto the grid.for (rectangle_iterator ri(v1, v1 + place.size - 1); ri; ++ri){const coord_def vdelta = *ri - v1;// FIXME: why the y and x swap?const int feat = vgrid[vdelta.y][vdelta.x];if (feat == ' ')continue;const dungeon_feature_type oldgrid = grd(*ri);_vault_grid( place, feat, *ri, target_connections );if (!Generating_Level){link_items();const dungeon_feature_type newgrid = grd(*ri);grd(*ri) = oldgrid;dungeon_terrain_changed(*ri, newgrid, true, true);env.markers.remove_markers_at(*ri, MAT_ANY);}env.map(*ri).property |= FPROP_VAULT;}place.map.map.apply_overlays(v1);
place.apply_grid();
dgn_region this_vault(place.pos, place.size);if (!place.size.zero()){// NOTE: assumes *no* previous item (I think) or monster (definitely)// placement.for ( rectangle_iterator ri(place.pos, place.pos + place.size - 1);ri; ++ri ){if (vgrid[ri->y][ri->x] == ' ')continue;const dungeon_feature_type oldgrid = grd(*ri);_vault_grid( place, vgrid[ri->y][ri->x], *ri,target_connections );if (!Generating_Level){// Have to link items each square at a time, or// dungeon_terrain_changed could blow up.link_items();const dungeon_feature_type newgrid = grd(*ri);grd(*ri) = oldgrid;dungeon_terrain_changed(*ri, newgrid, true, true);env.markers.remove_markers_at(*ri, MAT_ANY);}env.map(*ri).property |= FPROP_VAULT;}}place.map.map.apply_overlays(place.pos);
place.apply_grid();
//////////////////////////////////////////////////////////////////////////// vault_placementvoid vault_placement::reset(){altar_count = 0;}void vault_placement::apply_grid(){if (!size.zero()){// NOTE: assumes *no* previous item (I think) or monster (definitely)// placement.for ( rectangle_iterator ri(pos, pos + size - 1); ri; ++ri ){const coord_def &rp(*ri);const coord_def dp = rp - pos;const int feat = map.map.glyph(dp);if (feat == ' ')continue;const dungeon_feature_type oldgrid = grd(*ri);_vault_grid( *this, feat, *ri );if (!Generating_Level){// Have to link items each square at a time, or// dungeon_terrain_changed could blow up.link_items();const dungeon_feature_type newgrid = grd(*ri);grd(*ri) = oldgrid;dungeon_terrain_changed(*ri, newgrid, true, true);env.markers.remove_markers_at(*ri, MAT_ANY);}env.map(*ri).property |= FPROP_VAULT;}map.map.apply_overlays(pos);}}void vault_placement::draw_at(const coord_def &c){pos = c;apply_grid();}