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++)
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);
return;
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -15,7 +15,7 @@
#include "oldstructs.h"
cSpecial::cSpecial(){
type = 0;
type = eSpecType::NONE;
sd1 = -1;
sd2 = -1;
pic = -1;
@@ -30,13 +30,15 @@ cSpecial::cSpecial(){
}
cSpecial& cSpecial::operator = (legacy::special_node_type& old){
type = old.type;
type = (eSpecType)old.type;
sd1 = old.sd1;
sd2 = old.sd2;
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;
else if(type == 57 || type == 60)
// Large dialogs with monster graphics
else if(old.type == 57 || old.type == 60)
pic -= 400;
m1 = old.m1;
m2 = old.m2;
@@ -47,3 +49,17 @@ cSpecial& cSpecial::operator = (legacy::special_node_type& old){
jumpto = old.jumpto;
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 {
public:
short type;
eSpecType type;
short sd1;
short sd2;
short pic;
@@ -46,4 +46,7 @@ struct pending_special_type {
long long trigger_time;
};
std::ostream& operator << (std::ostream& out, eSpecType& e);
std::istream& operator >> (std::istream& in, eSpecType& e);
#endif

View File

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

View File

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