Strictify special node type enum

This commit is contained in:
2014-12-06 22:28:09 -05:00
parent e3af2cce16
commit bfdcfeab58
7 changed files with 480 additions and 430 deletions

View File

@@ -1812,7 +1812,7 @@ void sanctify_space(location where)
for (i = 0; i < 50; i++) for (i = 0; i < 50; i++)
if (where == univ.town->special_locs[i]) { if (where == univ.town->special_locs[i]) {
if (univ.town->specials[univ.town->spec_id[i]].type == 24) if(univ.town->specials[univ.town->spec_id[i]].type == eSpecType::SANCTIFY)
run_special(16,2,univ.town->spec_id[i],where,&s1,&s2,&s3); run_special(16,2,univ.town->spec_id[i],where,&s1,&s2,&s3);
return; return;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -541,154 +541,179 @@ enum eSpecContext {
SPEC_SEE_MONST = 18, SPEC_SEE_MONST = 18,
}; };
enum eSpecNodeType { enum class eSpecType {
SPEC_NULL = 0, ERROR = -1, // A magic value used while processing nodes
SPEC_SET_SDF = 1, NONE = 0,
SPEC_INC_SDF = 2, SET_SDF = 1,
SPEC_DISPLAY_MSG = 3, INC_SDF = 2,
SPEC_SECRET_PASSAGE = 4, DISPLAY_MSG = 3,
SPEC_DISPLAY_SM_MSG = 5, SECRET_PASSAGE = 4,
SPEC_FLIP_SDF = 6, DISPLAY_SM_MSG = 5,
SPEC_OUT_BLOCK = 7, FLIP_SDF = 6,
SPEC_TOWN_BLOCK = 8, OUT_BLOCK = 7,
SPEC_FIGHT_BLOCK = 9, TOWN_BLOCK = 8,
SPEC_LOOK_BLOCK = 10, FIGHT_BLOCK = 9,
SPEC_CANT_ENTER = 11, LOOK_BLOCK = 10,
SPEC_CHANGE_TIME = 12, CANT_ENTER = 11,
SPEC_SCEN_TIMER_START = 13, CHANGE_TIME = 12,
SPEC_PLAY_SOUND = 14, SCEN_TIMER_START = 13,
SPEC_CHANGE_HORSE_OWNER = 15, PLAY_SOUND = 14,
SPEC_CHANGE_BOAT_OWNER = 16, CHANGE_HORSE_OWNER = 15,
SPEC_SET_TOWN_VISIBILITY = 17, CHANGE_BOAT_OWNER = 16,
SPEC_MAJOR_EVENT_OCCURRED = 18, SET_TOWN_VISIBILITY = 17,
SPEC_FORCED_GIVE = 19, MAJOR_EVENT_OCCURRED = 18,
SPEC_BUY_ITEMS_OF_TYPE = 20, FORCED_GIVE = 19,
SPEC_CALL_GLOBAL = 21, BUY_ITEMS_OF_TYPE = 20,
SPEC_SET_SDF_ROW = 22, CALL_GLOBAL = 21,
SPEC_COPY_SDF = 23, SET_SDF_ROW = 22,
SPEC_SANCTIFY = 24, COPY_SDF = 23,
SPEC_REST = 25, SANCTIFY = 24,
SPEC_WANDERING_WILL_FIGHT = 26, REST = 25,
SPEC_END_SCENARIO = 27, WANDERING_WILL_FIGHT = 26,
SPEC_ONCE_GIVE_ITEM = 50, END_SCENARIO = 27,
SPEC_ONCE_GIVE_SPEC_ITEM = 51, ONCE_GIVE_ITEM = 50,
SPEC_ONCE_NULL = 52, ONCE_GIVE_SPEC_ITEM = 51,
SPEC_ONCE_SET_SDF = 53, ONCE_NULL = 52,
SPEC_ONCE_DISPLAY_MSG = 54, ONCE_SET_SDF = 53,
SPEC_ONCE_DIALOG = 55, ONCE_DISPLAY_MSG = 54,
SPEC_ONCE_DIALOG_TERRAIN = 56, ONCE_DIALOG = 55,
SPEC_ONCE_DIALOG_MONSTER = 57, ONCE_DIALOG_TERRAIN = 56,
SPEC_ONCE_GIVE_ITEM_DIALOG = 58, ONCE_DIALOG_MONSTER = 57,
SPEC_ONCE_GIVE_ITEM_TERRAIN = 59, ONCE_GIVE_ITEM_DIALOG = 58,
SPEC_ONCE_GIVE_ITEM_MONSTER = 60, ONCE_GIVE_ITEM_TERRAIN = 59,
SPEC_ONCE_OUT_ENCOUNTER = 61, ONCE_GIVE_ITEM_MONSTER = 60,
SPEC_ONCE_TOWN_ENCOUNTER = 62, ONCE_OUT_ENCOUNTER = 61,
SPEC_ONCE_TRAP = 63, ONCE_TOWN_ENCOUNTER = 62,
SPEC_SELECT_PC = 80, ONCE_TRAP = 63,
SPEC_DAMAGE = 81, SELECT_PC = 80,
SPEC_AFFECT_HP = 82, DAMAGE = 81,
SPEC_AFFECT_SP = 83, AFFECT_HP = 82,
SPEC_AFFECT_XP = 84, AFFECT_SP = 83,
SPEC_AFFECT_SKILL_PTS = 85, AFFECT_XP = 84,
SPEC_AFFECT_DEADNESS = 86, AFFECT_SKILL_PTS = 85,
SPEC_AFFECT_POISON = 87, AFFECT_DEADNESS = 86,
SPEC_AFFECT_SPEED = 88, AFFECT_POISON = 87,
SPEC_AFFECT_INVULN = 89, AFFECT_SPEED = 88,
SPEC_AFFECT_MAGIC_RES = 90, AFFECT_INVULN = 89,
SPEC_AFFECT_WEBS = 91, AFFECT_MAGIC_RES = 90,
SPEC_AFFECT_DISEASE = 92, AFFECT_WEBS = 91,
SPEC_AFFECT_SANCTUARY = 93, AFFECT_DISEASE = 92,
SPEC_AFFECT_CURSE_BLESS = 94, AFFECT_SANCTUARY = 93,
SPEC_AFFECT_DUMBFOUND = 95, AFFECT_CURSE_BLESS = 94,
SPEC_AFFECT_SLEEP = 96, AFFECT_DUMBFOUND = 95,
SPEC_AFFECT_PARALYSIS = 97, AFFECT_SLEEP = 96,
SPEC_AFFECT_STAT = 98, AFFECT_PARALYSIS = 97,
SPEC_AFFECT_MAGE_SPELL = 99, AFFECT_STAT = 98,
SPEC_AFFECT_PRIEST_SPELL = 100, AFFECT_MAGE_SPELL = 99,
SPEC_AFFECT_GOLD = 101, AFFECT_PRIEST_SPELL = 100,
SPEC_AFFECT_FOOD = 102, AFFECT_GOLD = 101,
SPEC_AFFECT_ALCHEMY = 103, AFFECT_FOOD = 102,
SPEC_AFFECT_STEALTH = 104, AFFECT_ALCHEMY = 103,
SPEC_AFFECT_FIREWALK = 105, AFFECT_STEALTH = 104,
SPEC_AFFECT_FLIGHT = 106, AFFECT_FIREWALK = 105,
SPEC_IF_SDF = 130, AFFECT_FLIGHT = 106,
SPEC_IF_TOWN_NUM = 131, IF_SDF = 130,
SPEC_IF_RANDOM = 132, IF_TOWN_NUM = 131,
SPEC_IF_HAVE_SPECIAL_ITEM = 133, IF_RANDOM = 132,
SPEC_IF_SDF_COMPARE = 134, IF_HAVE_SPECIAL_ITEM = 133,
SPEC_IF_TOWN_TER_TYPE = 135, IF_SDF_COMPARE = 134,
SPEC_IF_OUT_TER_TYPE = 136, IF_TOWN_TER_TYPE = 135,
SPEC_IF_HAS_GOLD = 137, IF_OUT_TER_TYPE = 136,
SPEC_IF_HAS_FOOD = 138, IF_HAS_GOLD = 137,
SPEC_IF_ITEM_CLASS_ON_SPACE = 139, IF_HAS_FOOD = 138,
SPEC_IF_HAVE_ITEM_CLASS = 140, IF_ITEM_CLASS_ON_SPACE = 139,
SPEC_IF_EQUIP_ITEM_CLASS = 141, IF_HAVE_ITEM_CLASS = 140,
SPEC_IF_HAS_GOLD_AND_TAKE = 142, IF_EQUIP_ITEM_CLASS = 141,
SPEC_IF_HAS_FOOD_AND_TAKE = 143, IF_HAS_GOLD_AND_TAKE = 142,
SPEC_IF_ITEM_CLASS_ON_SPACE_AND_TAKE = 144, IF_HAS_FOOD_AND_TAKE = 143,
SPEC_IF_HAVE_ITEM_CLASS_AND_TAKE = 145, IF_ITEM_CLASS_ON_SPACE_AND_TAKE = 144,
SPEC_IF_EQUIP_ITEM_CLASS_AND_TAKE = 146, IF_HAVE_ITEM_CLASS_AND_TAKE = 145,
SPEC_IF_DAY_REACHED = 147, IF_EQUIP_ITEM_CLASS_AND_TAKE = 146,
SPEC_IF_BARRELS = 148, IF_DAY_REACHED = 147,
SPEC_IF_CRATES = 149, IF_BARRELS = 148,
SPEC_IF_EVENT_OCCURRED = 150, IF_CRATES = 149,
SPEC_IF_HAS_CAVE_LORE = 151, IF_EVENT_OCCURRED = 150,
SPEC_IF_HAS_WOODSMAN = 152, IF_HAS_CAVE_LORE = 151,
SPEC_IF_ENOUGH_MAGE_LORE = 153, IF_HAS_WOODSMAN = 152,
SPEC_IF_TEXT_RESPONSE = 154, IF_ENOUGH_MAGE_LORE = 153,
SPEC_IF_SDF_EQ = 155, IF_TEXT_RESPONSE = 154,
SPEC_MAKE_TOWN_HOSTILE = 170, IF_SDF_EQ = 155,
SPEC_TOWN_CHANGE_TER = 171, MAKE_TOWN_HOSTILE = 170,
SPEC_TOWN_SWAP_TER = 172, TOWN_CHANGE_TER = 171,
SPEC_TOWN_TRANS_TER = 173, TOWN_SWAP_TER = 172,
SPEC_TOWN_MOVE_PARTY = 174, TOWN_TRANS_TER = 173,
SPEC_TOWN_HIT_SPACE = 175, TOWN_MOVE_PARTY = 174,
SPEC_TOWN_EXPLODE_SPACE = 176, TOWN_HIT_SPACE = 175,
SPEC_TOWN_LOCK_SPACE = 177, TOWN_EXPLODE_SPACE = 176,
SPEC_TOWN_UNLOCK_SPACE = 178, TOWN_LOCK_SPACE = 177,
SPEC_TOWN_SFX_BURST = 179, TOWN_UNLOCK_SPACE = 178,
SPEC_TOWN_CREATE_WANDERING = 180, TOWN_SFX_BURST = 179,
SPEC_TOWN_PLACE_MONST = 181, TOWN_CREATE_WANDERING = 180,
SPEC_TOWN_DESTROY_MONST = 182, TOWN_PLACE_MONST = 181,
SPEC_TOWN_NUKE_MONSTS = 183, TOWN_DESTROY_MONST = 182,
SPEC_TOWN_GENERIC_LEVER = 184, TOWN_NUKE_MONSTS = 183,
SPEC_TOWN_GENERIC_PORTAL = 185, TOWN_GENERIC_LEVER = 184,
SPEC_TOWN_GENERIC_BUTTON = 186, TOWN_GENERIC_PORTAL = 185,
SPEC_TOWN_GENERIC_STAIR = 187, TOWN_GENERIC_BUTTON = 186,
SPEC_TOWN_LEVER = 188, TOWN_GENERIC_STAIR = 187,
SPEC_TOWN_PORTAL = 189, TOWN_LEVER = 188,
SPEC_TOWN_STAIR = 190, TOWN_PORTAL = 189,
SPEC_TOWN_RELOCATE = 191, // Relocate outdoors TOWN_STAIR = 190,
SPEC_TOWN_PLACE_ITEM = 192, TOWN_RELOCATE = 191, // Relocate outdoors
SPEC_TOWN_SPLIT_PARTY = 193, TOWN_PLACE_ITEM = 192,
SPEC_TOWN_REUNITE_PARTY = 194, TOWN_SPLIT_PARTY = 193,
SPEC_TOWN_TIMER_START = 195, TOWN_REUNITE_PARTY = 194,
SPEC_RECT_PLACE_FIRE = 200, TOWN_TIMER_START = 195,
SPEC_RECT_PLACE_FORCE = 201, RECT_PLACE_FIRE = 200,
SPEC_RECT_PLACE_ICE = 202, RECT_PLACE_FORCE = 201,
SPEC_RECT_PLACE_BLADE = 203, RECT_PLACE_ICE = 202,
SPEC_RECT_PLACE_SCLOUD = 204, RECT_PLACE_BLADE = 203,
SPEC_RECT_PLACE_SLEEP = 205, RECT_PLACE_SCLOUD = 204,
SPEC_RECT_PLACE_QUICKFIRE = 206, RECT_PLACE_SLEEP = 205,
SPEC_RECT_PLACE_FIRE_BARR = 207, RECT_PLACE_QUICKFIRE = 206,
SPEC_RECT_PLACE_FORCE_BARR = 208, RECT_PLACE_FIRE_BARR = 207,
SPEC_RECT_CLEANSE = 209, RECT_PLACE_FORCE_BARR = 208,
SPEC_RECT_PLACE_SFX = 210, RECT_CLEANSE = 209,
SPEC_RECT_PLACE_OBJECT = 211, // place barrels, etc RECT_PLACE_SFX = 210,
SPEC_RECT_MOVE_ITEMS = 212, RECT_PLACE_OBJECT = 211, // place barrels, etc
SPEC_RECT_DESTROY_ITEMS = 213, RECT_MOVE_ITEMS = 212,
SPEC_RECT_CHANGE_TER = 214, RECT_DESTROY_ITEMS = 213,
SPEC_RECT_SWAP_TER = 215, RECT_CHANGE_TER = 214,
SPEC_RECT_TRANS_TER = 216, RECT_SWAP_TER = 215,
SPEC_RECT_LOCK = 217, RECT_TRANS_TER = 216,
SPEC_RECT_UNLOCK = 218, RECT_LOCK = 217,
SPEC_OUT_MAKE_WANDER = 225, RECT_UNLOCK = 218,
SPEC_OUT_CHANGE_TER = 226, OUT_MAKE_WANDER = 225,
SPEC_OUT_PLACE_ENCOUNTER = 227, OUT_CHANGE_TER = 226,
SPEC_OUT_MOVE_PARTY = 228, OUT_PLACE_ENCOUNTER = 227,
SPEC_OUT_STORE = 229, OUT_MOVE_PARTY = 228,
OUT_STORE = 229,
}; };
enum class eSpecCat {
INVALID = -1,
GENERAL, ONCE, AFFECT, IF_THEN, TOWN, RECT, OUTDOOR
};
inline eSpecCat getNodeCategory(eSpecType node) {
int code = (int) node;
if(code >= 0 && code <= 27)
return eSpecCat::GENERAL;
if(code >= 50 && code <= 63)
return eSpecCat::ONCE;
if(code >= 80 && code <= 106)
return eSpecCat::AFFECT;
if(code >= 130 && code <= 155)
return eSpecCat::IF_THEN;
if(code >= 170 && code <= 195)
return eSpecCat::TOWN;
if(code >= 200 && code <= 218)
return eSpecCat::RECT;
if(code >= 225 && code <= 229)
return eSpecCat::OUTDOOR;
return eSpecCat::INVALID;
}
enum eTalkNodeType { enum eTalkNodeType {
TALK_REGULAR = 0, TALK_REGULAR = 0,
TALK_DEP_ON_SDF = 1, TALK_DEP_ON_SDF = 1,

View File

@@ -15,7 +15,7 @@
#include "oldstructs.h" #include "oldstructs.h"
cSpecial::cSpecial(){ cSpecial::cSpecial(){
type = 0; type = eSpecType::NONE;
sd1 = -1; sd1 = -1;
sd2 = -1; sd2 = -1;
pic = -1; pic = -1;
@@ -30,13 +30,15 @@ cSpecial::cSpecial(){
} }
cSpecial& cSpecial::operator = (legacy::special_node_type& old){ cSpecial& cSpecial::operator = (legacy::special_node_type& old){
type = old.type; type = (eSpecType)old.type;
sd1 = old.sd1; sd1 = old.sd1;
sd2 = old.sd2; sd2 = old.sd2;
pic = old.pic; pic = old.pic;
if(type == 55 || type == 58 || type == 189) // Large dialogs with 36x36 dialog graphics
if(old.type == 55 || old.type == 58 || old.type == 189)
pic -= 700; pic -= 700;
else if(type == 57 || type == 60) // Large dialogs with monster graphics
else if(old.type == 57 || old.type == 60)
pic -= 400; pic -= 400;
m1 = old.m1; m1 = old.m1;
m2 = old.m2; m2 = old.m2;
@@ -47,3 +49,17 @@ cSpecial& cSpecial::operator = (legacy::special_node_type& old){
jumpto = old.jumpto; jumpto = old.jumpto;
return *this; return *this;
} }
std::ostream& operator << (std::ostream& out, eSpecType& e) {
return out << (int) e;
}
// TODO: This should probably understand symbolic names as well?
std::istream& operator >> (std::istream& in, eSpecType& e) {
int i;
in >> i;
e = (eSpecType) i;
if(getNodeCategory(e) == eSpecCat::INVALID)
e = eSpecType::ERROR;
return in;
}

View File

@@ -17,7 +17,7 @@ namespace legacy { struct special_node_type; };
class cSpecial { class cSpecial {
public: public:
short type; eSpecType type;
short sd1; short sd1;
short sd2; short sd2;
short pic; short pic;
@@ -46,4 +46,7 @@ struct pending_special_type {
long long trigger_time; long long trigger_time;
}; };
std::ostream& operator << (std::ostream& out, eSpecType& e);
std::istream& operator >> (std::istream& in, eSpecType& e);
#endif #endif

View File

@@ -23,7 +23,7 @@ class SpecialParser {
static void prep_add_symbol(char c); static void prep_add_symbol(char c);
static void add_symbol(int i); static void add_symbol(int i);
static void add_command(); static void add_command();
static void set_type(eSpecNodeType type); static void set_type(eSpecType type);
static void skip_to(int i); static void skip_to(int i);
static void for_sdf(); static void for_sdf();
static void for_pic(); static void for_pic();

View File

@@ -18,7 +18,7 @@
#include "special.h" #include "special.h"
namespace ph = boost::phoenix; namespace ph = boost::phoenix;
qi::symbols<char, eSpecNodeType> opcode; qi::symbols<char, eSpecType> opcode;
#define _(fcn) SpecialParser::fcn #define _(fcn) SpecialParser::fcn
@@ -66,113 +66,113 @@ SpecialParser::SpecialParser() {
struct initer { struct initer {
initer() { initer() {
opcode.add opcode.add
("null", SPEC_NULL) ("null", eSpecType::NONE)
("set-sdf", SPEC_SET_SDF) ("set-sdf", eSpecType::SET_SDF)
("inc-sdf", SPEC_INC_SDF) ("inc-sdf", eSpecType::INC_SDF)
("disp-msg", SPEC_DISPLAY_MSG) ("disp-msg", eSpecType::DISPLAY_MSG)
("secret-pass", SPEC_SECRET_PASSAGE) ("secret-pass", eSpecType::SECRET_PASSAGE)
("disp-sm-msg", SPEC_DISPLAY_SM_MSG) ("disp-sm-msg", eSpecType::DISPLAY_SM_MSG)
("flip-sdf", SPEC_FLIP_SDF) ("flip-sdf", eSpecType::FLIP_SDF)
("filter-context", SPEC_OUT_BLOCK) ("filter-context", eSpecType::OUT_BLOCK)
("block-move", SPEC_CANT_ENTER) ("block-move", eSpecType::CANT_ENTER)
("change-time", SPEC_CHANGE_TIME) ("change-time", eSpecType::CHANGE_TIME)
("start-timer-scen", SPEC_SCEN_TIMER_START) ("start-timer-scen", eSpecType::SCEN_TIMER_START)
("play-sound", SPEC_PLAY_SOUND) ("play-sound", eSpecType::PLAY_SOUND)
("change-horse", SPEC_CHANGE_HORSE_OWNER) ("change-horse", eSpecType::CHANGE_HORSE_OWNER)
("change-boat", SPEC_CHANGE_BOAT_OWNER) ("change-boat", eSpecType::CHANGE_BOAT_OWNER)
("town-visible", SPEC_SET_TOWN_VISIBILITY) ("town-visible", eSpecType::SET_TOWN_VISIBILITY)
("set-event", SPEC_MAJOR_EVENT_OCCURRED) ("set-event", eSpecType::MAJOR_EVENT_OCCURRED)
("force-give", SPEC_FORCED_GIVE) ("force-give", eSpecType::FORCED_GIVE)
("buy-item-class", SPEC_BUY_ITEMS_OF_TYPE) ("buy-item-class", eSpecType::BUY_ITEMS_OF_TYPE)
("call-global", SPEC_CALL_GLOBAL) ("call-global", eSpecType::CALL_GLOBAL)
("set-sdf-row", SPEC_SET_SDF_ROW) ("set-sdf-row", eSpecType::SET_SDF_ROW)
("copy-sdf", SPEC_COPY_SDF) ("copy-sdf", eSpecType::COPY_SDF)
("rest", SPEC_REST) ("rest", eSpecType::REST)
("set-wander-fight", SPEC_WANDERING_WILL_FIGHT) ("set-wander-fight", eSpecType::WANDERING_WILL_FIGHT)
("end-scen", SPEC_END_SCENARIO) ("end-scen", eSpecType::END_SCENARIO)
("once-give-item", SPEC_ONCE_GIVE_ITEM) ("once-give-item", eSpecType::ONCE_GIVE_ITEM)
("once-give-spec-item", SPEC_ONCE_GIVE_SPEC_ITEM) ("once-give-spec-item", eSpecType::ONCE_GIVE_SPEC_ITEM)
("once", SPEC_ONCE_NULL) ("once", eSpecType::ONCE_NULL)
("once-set-sdf", SPEC_ONCE_SET_SDF) ("once-set-sdf", eSpecType::ONCE_SET_SDF)
("once-disp-msg", SPEC_ONCE_DISPLAY_MSG) ("once-disp-msg", eSpecType::ONCE_DISPLAY_MSG)
("once-dlog", SPEC_ONCE_DIALOG) ("once-dlog", eSpecType::ONCE_DIALOG)
("once-give-dlog", SPEC_ONCE_GIVE_ITEM_DIALOG) ("once-give-dlog", eSpecType::ONCE_GIVE_ITEM_DIALOG)
("once-encounter", SPEC_ONCE_OUT_ENCOUNTER) ("once-encounter", eSpecType::ONCE_OUT_ENCOUNTER)
("once-trap", SPEC_ONCE_TRAP) ("once-trap", eSpecType::ONCE_TRAP)
("select-pc", SPEC_SELECT_PC) ("select-pc", eSpecType::SELECT_PC)
("damage", SPEC_DAMAGE) ("damage", eSpecType::DAMAGE)
("hp", SPEC_AFFECT_HP) ("hp", eSpecType::AFFECT_HP)
("sp", SPEC_AFFECT_SP) ("sp", eSpecType::AFFECT_SP)
("xp", SPEC_AFFECT_XP) ("xp", eSpecType::AFFECT_XP)
("skill-pts", SPEC_AFFECT_SKILL_PTS) ("skill-pts", eSpecType::AFFECT_SKILL_PTS)
("death", SPEC_AFFECT_DEADNESS) ("death", eSpecType::AFFECT_DEADNESS)
("status", SPEC_AFFECT_POISON) ("status", eSpecType::AFFECT_POISON)
("statistic", SPEC_AFFECT_STAT) ("statistic", eSpecType::AFFECT_STAT)
("spell", SPEC_AFFECT_MAGE_SPELL) ("spell", eSpecType::AFFECT_MAGE_SPELL)
("gold", SPEC_AFFECT_GOLD) ("gold", eSpecType::AFFECT_GOLD)
("food", SPEC_AFFECT_FOOD) ("food", eSpecType::AFFECT_FOOD)
("alchemy", SPEC_AFFECT_ALCHEMY) ("alchemy", eSpecType::AFFECT_ALCHEMY)
("stealth", SPEC_AFFECT_STEALTH) ("stealth", eSpecType::AFFECT_STEALTH)
("firewalk", SPEC_AFFECT_FIREWALK) ("firewalk", eSpecType::AFFECT_FIREWALK)
("flight", SPEC_AFFECT_FLIGHT) ("flight", eSpecType::AFFECT_FLIGHT)
("if-sdf", SPEC_IF_SDF) ("if-sdf", eSpecType::IF_SDF)
("if-town", SPEC_IF_TOWN_NUM) ("if-town", eSpecType::IF_TOWN_NUM)
("if-spec-item", SPEC_IF_HAVE_SPECIAL_ITEM) ("if-spec-item", eSpecType::IF_HAVE_SPECIAL_ITEM)
("if-sdf-compare", SPEC_IF_SDF_COMPARE) ("if-sdf-compare", eSpecType::IF_SDF_COMPARE)
("if-ter", SPEC_IF_TOWN_TER_TYPE) ("if-ter", eSpecType::IF_TOWN_TER_TYPE)
("if-gold", SPEC_IF_HAS_GOLD_AND_TAKE) ("if-gold", eSpecType::IF_HAS_GOLD_AND_TAKE)
("if-food", SPEC_IF_HAS_FOOD_AND_TAKE) ("if-food", eSpecType::IF_HAS_FOOD_AND_TAKE)
("if-item-class-on-space", SPEC_IF_ITEM_CLASS_ON_SPACE_AND_TAKE) ("if-item-class-on-space", eSpecType::IF_ITEM_CLASS_ON_SPACE_AND_TAKE)
("if-item-class", SPEC_IF_HAVE_ITEM_CLASS_AND_TAKE) ("if-item-class", eSpecType::IF_HAVE_ITEM_CLASS_AND_TAKE)
("if-item-class-equip", SPEC_IF_EQUIP_ITEM_CLASS_AND_TAKE) ("if-item-class-equip", eSpecType::IF_EQUIP_ITEM_CLASS_AND_TAKE)
("if-day", SPEC_IF_DAY_REACHED) ("if-day", eSpecType::IF_DAY_REACHED)
("if-field", SPEC_IF_BARRELS) ("if-field", eSpecType::IF_BARRELS)
("if-object", SPEC_IF_CRATES) ("if-object", eSpecType::IF_CRATES)
("if-event", SPEC_IF_EVENT_OCCURRED) ("if-event", eSpecType::IF_EVENT_OCCURRED)
("if-cave-lore", SPEC_IF_HAS_CAVE_LORE) ("if-cave-lore", eSpecType::IF_HAS_CAVE_LORE)
("if-woodsman", SPEC_IF_HAS_WOODSMAN) ("if-woodsman", eSpecType::IF_HAS_WOODSMAN)
("if-mage-lore", SPEC_IF_ENOUGH_MAGE_LORE) ("if-mage-lore", eSpecType::IF_ENOUGH_MAGE_LORE)
("if-response", SPEC_IF_TEXT_RESPONSE) ("if-response", eSpecType::IF_TEXT_RESPONSE)
("if-sdf-eq", SPEC_IF_SDF_EQ) ("if-sdf-eq", eSpecType::IF_SDF_EQ)
("town-attitude", SPEC_MAKE_TOWN_HOSTILE) ("town-attitude", eSpecType::MAKE_TOWN_HOSTILE)
("change-ter", SPEC_TOWN_CHANGE_TER) ("change-ter", eSpecType::TOWN_CHANGE_TER)
("swap-ter", SPEC_TOWN_SWAP_TER) ("swap-ter", eSpecType::TOWN_SWAP_TER)
("trans-ter", SPEC_TOWN_TRANS_TER) ("trans-ter", eSpecType::TOWN_TRANS_TER)
("move-party", SPEC_TOWN_MOVE_PARTY) ("move-party", eSpecType::TOWN_MOVE_PARTY)
("hit-space", SPEC_TOWN_HIT_SPACE) ("hit-space", eSpecType::TOWN_HIT_SPACE)
("explode-space", SPEC_TOWN_EXPLODE_SPACE) ("explode-space", eSpecType::TOWN_EXPLODE_SPACE)
("lock-space", SPEC_TOWN_LOCK_SPACE) ("lock-space", eSpecType::TOWN_LOCK_SPACE)
("unlock-space", SPEC_TOWN_UNLOCK_SPACE) ("unlock-space", eSpecType::TOWN_UNLOCK_SPACE)
("anim-explode", SPEC_TOWN_SFX_BURST) ("anim-explode", eSpecType::TOWN_SFX_BURST)
("make-wandering", SPEC_TOWN_CREATE_WANDERING) ("make-wandering", eSpecType::TOWN_CREATE_WANDERING)
("place-monst", SPEC_TOWN_PLACE_MONST) ("place-monst", eSpecType::TOWN_PLACE_MONST)
("destroy-most", SPEC_TOWN_DESTROY_MONST) ("destroy-most", eSpecType::TOWN_DESTROY_MONST)
("nuke-monsts", SPEC_TOWN_NUKE_MONSTS) ("nuke-monsts", eSpecType::TOWN_NUKE_MONSTS)
("lever-generic", SPEC_TOWN_GENERIC_LEVER) ("lever-generic", eSpecType::TOWN_GENERIC_LEVER)
("portal-generic", SPEC_TOWN_GENERIC_PORTAL) ("portal-generic", eSpecType::TOWN_GENERIC_PORTAL)
("stair-generic", SPEC_TOWN_GENERIC_STAIR) ("stair-generic", eSpecType::TOWN_GENERIC_STAIR)
("button-generic", SPEC_TOWN_GENERIC_BUTTON) ("button-generic", eSpecType::TOWN_GENERIC_BUTTON)
("lever", SPEC_TOWN_LEVER) ("lever", eSpecType::TOWN_LEVER)
("portal", SPEC_TOWN_PORTAL) ("portal", eSpecType::TOWN_PORTAL)
("stair", SPEC_TOWN_STAIR) ("stair", eSpecType::TOWN_STAIR)
("set-sector", SPEC_TOWN_RELOCATE) ("set-sector", eSpecType::TOWN_RELOCATE)
("place-item", SPEC_TOWN_PLACE_ITEM) ("place-item", eSpecType::TOWN_PLACE_ITEM)
("split-party", SPEC_TOWN_SPLIT_PARTY) ("split-party", eSpecType::TOWN_SPLIT_PARTY)
("unite-party", SPEC_TOWN_REUNITE_PARTY) ("unite-party", eSpecType::TOWN_REUNITE_PARTY)
("start-timer-town", SPEC_TOWN_TIMER_START) ("start-timer-town", eSpecType::TOWN_TIMER_START)
("rect-place-field", SPEC_RECT_PLACE_BLADE) ("rect-place-field", eSpecType::RECT_PLACE_BLADE)
("rect-cleanse", SPEC_RECT_CLEANSE) ("rect-cleanse", eSpecType::RECT_CLEANSE)
("rect-place-sfx", SPEC_RECT_PLACE_SFX) ("rect-place-sfx", eSpecType::RECT_PLACE_SFX)
("rect-place-object", SPEC_RECT_PLACE_OBJECT) ("rect-place-object", eSpecType::RECT_PLACE_OBJECT)
("rect-move-items", SPEC_RECT_MOVE_ITEMS) ("rect-move-items", eSpecType::RECT_MOVE_ITEMS)
("rect-destroy-items", SPEC_RECT_DESTROY_ITEMS) ("rect-destroy-items", eSpecType::RECT_DESTROY_ITEMS)
("rect-change-ter", SPEC_RECT_CHANGE_TER) ("rect-change-ter", eSpecType::RECT_CHANGE_TER)
("rect-swap-ter", SPEC_RECT_SWAP_TER) ("rect-swap-ter", eSpecType::RECT_SWAP_TER)
("rect-trans-ter", SPEC_RECT_TRANS_TER) ("rect-trans-ter", eSpecType::RECT_TRANS_TER)
("rect-lock", SPEC_RECT_LOCK) ("rect-lock", eSpecType::RECT_LOCK)
("rect-unlock", SPEC_RECT_UNLOCK) ("rect-unlock", eSpecType::RECT_UNLOCK)
("make-out-monst", SPEC_OUT_PLACE_ENCOUNTER) ("make-out-monst", eSpecType::OUT_PLACE_ENCOUNTER)
("start-shop", SPEC_OUT_STORE) ("start-shop", eSpecType::OUT_STORE)
; ;
} }
}; };
@@ -187,7 +187,7 @@ void SpecialParser::init_file() {
void SpecialParser::init_block() { void SpecialParser::init_block() {
cur_node++; cur_node++;
temp_symbol.clear(); temp_symbol.clear();
curSpec.type = SPEC_NULL; curSpec.type = eSpecType::NONE;
curSpec.sd1 = -1; curSpec.sd1 = -1;
curSpec.sd2 = -1; curSpec.sd2 = -1;
curSpec.m1 = -1; curSpec.m1 = -1;
@@ -217,7 +217,7 @@ void SpecialParser::add_command() {
specials[cur_node] = curSpec; specials[cur_node] = curSpec;
} }
void SpecialParser::set_type(eSpecNodeType type) { void SpecialParser::set_type(eSpecType type) {
curSpec.type = type; curSpec.type = type;
} }