diff options
-rw-r--r-- | crawl-ref/docs/develop/levels/syntax.txt | 12 | ||||
-rw-r--r-- | crawl-ref/source/dat/levdes.vim | 2 | ||||
-rw-r--r-- | crawl-ref/source/externs.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/l_dgntil.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/mapdef.cc | 21 | ||||
-rw-r--r-- | crawl-ref/source/mapdef.h | 12 | ||||
-rw-r--r-- | crawl-ref/source/tags.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/tags.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/tilepick.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/util/levcomp.lpp | 1 | ||||
-rw-r--r-- | crawl-ref/source/util/levcomp.ypp | 20 |
11 files changed, 78 insertions, 11 deletions
diff --git a/crawl-ref/docs/develop/levels/syntax.txt b/crawl-ref/docs/develop/levels/syntax.txt index cc6de15206..1598f04719 100644 --- a/crawl-ref/docs/develop/levels/syntax.txt +++ b/crawl-ref/docs/develop/levels/syntax.txt @@ -825,6 +825,18 @@ RTILE: x = wall_hive:15 / wall_lair / none Identical to FTILE, but for rock walls. Not useful for anything but the rock wall feature. +TILE: x = wall_flesh + Identical to FTILE and RTILE in syntax, but closer to COLOUR in + functionality. Instead of replacing the floor or relevant rock tiles, + this can be used to replace the tile used for any specific feature. + + This can be used in combination with FTILE and RTILE to change the + appearance of features. It can only be used with previously specified + tiles, however. + + Like COLOUR and FTILE, this should be used sparingly and to good + effect. + SHUFFLE: def, 12/3? This allows you to randomly permute glyphs on the map. There are two ways: diff --git a/crawl-ref/source/dat/levdes.vim b/crawl-ref/source/dat/levdes.vim index d506c76982..f94294f740 100644 --- a/crawl-ref/source/dat/levdes.vim +++ b/crawl-ref/source/dat/levdes.vim @@ -51,7 +51,7 @@ syn region desNsubst start=/^NSUBST:\s*/ end=/$/ contains=desNsubstDec,desSubstA syn region desShuffle start=/^SHUFFLE:\s*/ end=/$/ contains=desShuffleDec,desMapFrag keepend -syn keyword desDeclarator NAME: ORIENT: DEPTH: PLACE: MONS: FLAGS: default-depth: TAGS: CHANCE: WEIGHT: ITEM: KFEAT: KMONS: KITEM: COLOUR: KMASK: KPROP: MARKER: LFLAGS: BFLAGS: LROCKCOL: LFLOORCOL: LFLOORTILE: LROCKTILE: FTILE: RTILE: SUBVAULT: +syn keyword desDeclarator NAME: ORIENT: DEPTH: PLACE: MONS: FLAGS: default-depth: TAGS: CHANCE: WEIGHT: ITEM: KFEAT: KMONS: KITEM: COLOUR: KMASK: KPROP: MARKER: LFLAGS: BFLAGS: LROCKCOL: LFLOORCOL: LFLOORTILE: LROCKTILE: FTILE: RTILE: TILE: SUBVAULT: syn keyword desOrientation encompass north south east west northeast northwest southeast southwest float syn keyword desOrientation no_hmirror no_vmirror no_rotate syn keyword desOrientation entry pan lab bazaar allow_dup dummy mini_float minotaur diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 629fee3735..80386f0658 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -34,6 +34,9 @@ struct tile_flavour unsigned short wall; // Used as a random value or for special cases e.g. (bazaars, gates). unsigned short special; + // Used by the vault 'TILE' overlay. Called ftile as it was originally + // to be for features and 'tile' is obtuse. + unsigned short ftile; }; // A glorified unsigned int that assists with ref-counting the mcache. diff --git a/crawl-ref/source/l_dgntil.cc b/crawl-ref/source/l_dgntil.cc index 25995f683a..6939b98aea 100644 --- a/crawl-ref/source/l_dgntil.cc +++ b/crawl-ref/source/l_dgntil.cc @@ -147,12 +147,22 @@ LUAFN(dgn_rtile) #endif } +LUAFN(dgn_tile) +{ +#ifdef USE_TILE + return dgn_map_add_transform(ls, &map_lines::add_spec_tile); +#else + return 0; +#endif +} + const struct luaL_reg dgn_tile_dlib[] = { { "lrocktile", dgn_lrocktile }, { "lfloortile", dgn_lfloortile }, { "rtile", dgn_rtile }, { "ftile", dgn_ftile }, +{ "tile", dgn_tile }, { "change_rock_tile", dgn_change_rock_tile }, { "change_floor_tile", dgn_change_floor_tile }, { "lev_floortile", dgn_lev_floortile }, diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc index 628b3f39c6..066848536a 100644 --- a/crawl-ref/source/mapdef.cc +++ b/crawl-ref/source/mapdef.cc @@ -509,6 +509,12 @@ void map_lines::apply_grid_overlay(const coord_def &c) int offset = random2(tile_dngn_count(rock)); env.tile_flv(gc).wall = rock + offset; } + const int tile = (*overlay)(x, y).tile; + if (tile) + { + int offset = random2(tile_dngn_count(tile)); + env.tile_flv(gc).ftile = tile + offset; + } #endif } } @@ -1193,6 +1199,8 @@ void map_lines::overlay_tiles(tile_spec &spec) { if (spec.floor) (*overlay)(pos, y).floortile = spec.get_tile(); + else if (spec.feat) + (*overlay)(pos, y).tile = spec.get_tile(); else (*overlay)(pos, y).rocktile = spec.get_tile(); ++pos; @@ -1715,7 +1723,7 @@ bool map_tile_list::parse(const std::string &s, int weight) return true; } -std::string map_lines::add_tile(const std::string &sub, bool is_floor) +std::string map_lines::add_tile(const std::string &sub, bool is_floor, bool is_feat) { std::string s = trimmed_string(sub); @@ -1735,7 +1743,7 @@ std::string map_lines::add_tile(const std::string &sub, bool is_floor) if (!err.empty()) return (err); - tile_spec spec(key, sep == ':', is_floor, list); + tile_spec spec(key, sep == ':', is_floor, is_feat, list); overlay_tiles(spec); return (""); @@ -1743,12 +1751,17 @@ std::string map_lines::add_tile(const std::string &sub, bool is_floor) std::string map_lines::add_rocktile(const std::string &sub) { - return add_tile(sub, false); + return add_tile(sub, false, false); } std::string map_lines::add_floortile(const std::string &sub) { - return add_tile(sub, true); + return add_tile(sub, true, false); +} + +std::string map_lines::add_spec_tile(const std::string &sub) +{ + return add_tile(sub, false, true); } ////////////////////////////////////////////////////////////////////////// diff --git a/crawl-ref/source/mapdef.h b/crawl-ref/source/mapdef.h index 7b3f2518c1..d24ad4a2da 100644 --- a/crawl-ref/source/mapdef.h +++ b/crawl-ref/source/mapdef.h @@ -189,8 +189,8 @@ public: class tile_spec { public: - tile_spec(const std::string &_key, bool _fix, bool _floor, const map_tile_list &_tiles) - : key(_key), fix(_fix), chose_fixed(false), floor(_floor), + tile_spec(const std::string &_key, bool _fix, bool _floor, bool _feat, const map_tile_list &_tiles) + : key(_key), fix(_fix), chose_fixed(false), floor(_floor), feat(_feat), fixed_tile(0), tiles(_tiles) { } @@ -202,6 +202,7 @@ public: bool fix; bool chose_fixed; bool floor; + bool feat; int fixed_tile; map_tile_list tiles; }; @@ -279,6 +280,7 @@ public: #ifdef USE_TILE std::string add_floortile(const std::string &s); std::string add_rocktile(const std::string &s); + std::string add_spec_tile(const std::string &s); #endif std::vector<coord_def> find_glyph(const std::string &glyphs) const; @@ -400,7 +402,7 @@ private: glyph_replacements_t &gly); #ifdef USE_TILE - std::string add_tile(const std::string &sub, bool is_floor); + std::string add_tile(const std::string &sub, bool is_floor, bool is_feat); #endif std::string add_key_field( @@ -425,10 +427,12 @@ private: struct overlay_def { - overlay_def() : colour(0), rocktile(0), floortile(0), property(0), keyspec_idx(0) {} + overlay_def() : colour(0), rocktile(0), floortile(0), tile(0), + property(0), keyspec_idx(0) {} int colour; int rocktile; int floortile; + int tile; int property; int keyspec_idx; }; diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc index 79af67c505..ca54391a56 100644 --- a/crawl-ref/source/tags.cc +++ b/crawl-ref/source/tags.cc @@ -2165,6 +2165,7 @@ void tag_construct_level_tiles(writer &th) marshallShort(th, env.tile_flv[count_x][count_y].wall); marshallShort(th, env.tile_flv[count_x][count_y].floor); marshallShort(th, env.tile_flv[count_x][count_y].special); + marshallShort(th, env.tile_flv[count_x][count_y].ftile); } mcache.construct(th); @@ -2522,6 +2523,7 @@ void tag_read_level_tiles(struct reader &th) env.tile_flv[x][y].wall = unmarshallShort(th); env.tile_flv[x][y].floor = unmarshallShort(th); env.tile_flv[x][y].special = unmarshallShort(th); + env.tile_flv[x][y].ftile = unmarshallShort(th); } if (ver > TILETAG_PRE_MCACHE) diff --git a/crawl-ref/source/tags.h b/crawl-ref/source/tags.h index e3ec18f659..a700eb50ac 100644 --- a/crawl-ref/source/tags.h +++ b/crawl-ref/source/tags.h @@ -40,7 +40,7 @@ enum tag_file_type // file types supported by tag system enum tag_major_version { TAG_MAJOR_START = 5, - TAG_MAJOR_VERSION = 8 + TAG_MAJOR_VERSION = 9 }; // Minor version will be reset to zero when major version changes. diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 5645237bde..f76e162aa2 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -2365,6 +2365,10 @@ static int _tileidx_shop(coord_def where) int tileidx_feature(dungeon_feature_type feat, int gx, int gy) { + int override = env.tile_flv[gx][gy].ftile; + if (override) + return override; + switch (feat) { case DNGN_UNSEEN: diff --git a/crawl-ref/source/util/levcomp.lpp b/crawl-ref/source/util/levcomp.lpp index 151ef1418e..0de769b58a 100644 --- a/crawl-ref/source/util/levcomp.lpp +++ b/crawl-ref/source/util/levcomp.lpp @@ -251,6 +251,7 @@ LFLOORTILE: { CBEGIN(ARGUMENT); return LFLOORTILE; } LROCKTILE: { CBEGIN(ARGUMENT); return LROCKTILE; } FTILE: { CBEGIN(ITEM_LIST); return FTILE; } RTILE: { CBEGIN(ITEM_LIST); return RTILE; } +TILE: { CBEGIN(ITEM_LIST); return TILE; } MONS: { CBEGIN(MNAME); return MONS; } ITEM: { CBEGIN(ITEM_LIST); return ITEM; } MARKER: { CBEGIN(ARGUMENT); return MARKER; } diff --git a/crawl-ref/source/util/levcomp.ypp b/crawl-ref/source/util/levcomp.ypp index f13f102da0..2a5bf231df 100644 --- a/crawl-ref/source/util/levcomp.ypp +++ b/crawl-ref/source/util/levcomp.ypp @@ -54,7 +54,7 @@ level_range set_range(const char *s, int start, int end) %token <i> DEFAULT_DEPTH SHUFFLE SUBST TAGS KFEAT KITEM KMONS KMASK KPROP %token <i> NAME DEPTH ORIENT PLACE CHANCE WEIGHT MONS ITEM MARKER COLOUR %token <i> PRELUDE MAIN VALIDATE VETO NSUBST WELCOME LFLAGS BFLAGS -%token <i> LFLOORCOL LROCKCOL LFLOORTILE LROCKTILE FTILE RTILE SUBVAULT +%token <i> LFLOORCOL LROCKCOL LFLOORTILE LROCKTILE FTILE RTILE TILE SUBVAULT %token <i> COMMA COLON PERC INTEGER CHARACTER @@ -166,6 +166,7 @@ metaline : place | lrocktile | ftile | rtile + | tile | shuffle | tags | lflags @@ -437,6 +438,23 @@ rtile_specifier : ITEM_INFO } ; +tile : TILE tile_specifiers + ; + +tile_specifiers : tile_specifier + | tile_specifiers COMMA tile_specifier + ; + +tile_specifier : ITEM_INFO + { + lc_map.main.add( + yylineno, + make_stringf("tile(\"%s\")", + quote_lua_string($1).c_str())); + } + ; + + colour_specifiers : colour_specifier { } | colour_specifiers COMMA colour_specifier { } ; |