Strictify special node type enum
This commit is contained in:
@@ -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,
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
Reference in New Issue
Block a user