diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-06-26 16:57:36 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-06-26 16:57:36 +0000 |
commit | 9d1463d7bdca2b485c5f8caa9b86782f29e30f8c (patch) | |
tree | deeaa2d0b2a05d8ba346b941e9d47fcc3e40e95d /crawl-ref/source/util | |
parent | 5f2f20b49792c771ebd67442042f97344e2a6a56 (diff) | |
download | crawl-ref-9d1463d7bdca2b485c5f8caa9b86782f29e30f8c.tar.gz crawl-ref-9d1463d7bdca2b485c5f8caa9b86782f29e30f8c.zip |
Added support for a validation hook for maps to check if they're A-Ok.
Tweaked savefile format (breaks saves) to allow the game to perform emergency
saves if level-generation fails (followers are lost, needs to be fixed).
[1743698] Re-refixed SP_ELF stub (Eino).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1659 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/util')
-rw-r--r-- | crawl-ref/source/util/levcomp.lpp | 4 | ||||
-rw-r--r-- | crawl-ref/source/util/levcomp.ypp | 28 |
2 files changed, 30 insertions, 2 deletions
diff --git a/crawl-ref/source/util/levcomp.lpp b/crawl-ref/source/util/levcomp.lpp index 4cc718855a..6df93afa7c 100644 --- a/crawl-ref/source/util/levcomp.lpp +++ b/crawl-ref/source/util/levcomp.lpp @@ -161,6 +161,10 @@ NSPACE [^\ \t\r\n] ^prelude[ \t]*\{\{ { BEGIN(LUA); return PRELUDE; } ^lua[ \t]*\{\{ { BEGIN(LUA); return MAIN; } ^[ \t]*\{\{ { BEGIN(LUA); return MAIN; } +^validate[ \t]*\{\{ { BEGIN(LUA); return VALIDATE; } +^veto[ \t]*\{\{ { BEGIN(LUA); return VETO; } + + NAME: { BEGIN(ARGUMENT); return NAME; } default-depth: { BEGIN(ARGUMENT); return DEFAULT_DEPTH; } DEPTH: { BEGIN(ARGUMENT); return DEPTH; } diff --git a/crawl-ref/source/util/levcomp.ypp b/crawl-ref/source/util/levcomp.ypp index 0a3cb8ada1..aec084fb22 100644 --- a/crawl-ref/source/util/levcomp.ypp +++ b/crawl-ref/source/util/levcomp.ypp @@ -65,7 +65,7 @@ level_range set_range(const char *s, int start, int end) %token <i> BRANCHDEF BRANCH DESC DEFAULT %token <i> DEFAULT_DEPTH SHUFFLE SUBST TAGS KFEAT KITEM KMONS %token <i> NAME DEPTH ORIENT PLACE CHANCE MONS ITEM -%token <i> PRELUDE MAIN +%token <i> PRELUDE MAIN VALIDATE VETO %token <i> CHARACTER @@ -114,7 +114,7 @@ level : name map_specs yyerror( lc_global_prelude.orig_error().c_str() ); } - std::string err = lc_map.validate(); + std::string err = lc_map.validate_map_def(); if (!err.empty()) yyerror(err.c_str()); if (!lc_map.has_depth() && !lc_default_depths.empty()) @@ -172,6 +172,8 @@ metaline : place | kmons | main_lua | prelude_lua + | validate_lua + | veto_lua ; global_lua : MAIN global_lua_lines { } @@ -196,6 +198,28 @@ main_lua_line : LUA_LINE lc_map.main.add(yylineno, $1); } +validate_lua : VALIDATE validate_lua_lines { } + +validate_lua_lines : /* empty */ { } + | validate_lua_lines validate_lua_line { } + ; + +validate_lua_line : LUA_LINE + { + lc_map.validate.add(yylineno, $1); + } + +veto_lua : VETO veto_lua_lines { } + +veto_lua_lines : /* empty */ { } + | veto_lua_lines veto_lua_line { } + ; + +veto_lua_line : LUA_LINE + { + lc_map.veto.add(yylineno, $1); + } + prelude_lua : PRELUDE prelude_lua_lines { } prelude_lua_lines : /* empty */ { } |