Sketch out what pickers and string lists should probably exist, and annotate those into the button dictionary.

This commit doesn't implement any new pickers, only adds the data for later use.
This commit is contained in:
2025-02-22 14:09:43 -05:00
committed by Celtic Minstrel
parent be702fe365
commit 7306c65d5a
8 changed files with 151 additions and 58 deletions

View File

@@ -13,69 +13,95 @@ node_category_info_t CAT_AFFECT{eSpecType::SELECT_TARGET, eSpecType::UNSTORE_PC}
namespace {
node_properties_t S_SELECT = node_builder_t(eSpecType::SELECT_TARGET)
.msg()
.ex1b(eSpecPicker::NODE);
.ex1a(STRT_TARG_TYPE)
.ex1b(eSpecPicker::NODE)
.ex2a(STRT_TARG_MODE);
node_properties_t S_DAMAGE = node_builder_t(eSpecType::DAMAGE)
.msg()
.ex2b(eSpecPicker::DAMAGE_TYPE)
.ex2c(eSpecPicker::SOUND);
node_properties_t S_HEALTH = node_builder_t(eSpecType::AFFECT_HP)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_MANA = node_builder_t(eSpecType::AFFECT_SP)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_EXP = node_builder_t(eSpecType::AFFECT_XP)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_SKILLPT = node_builder_t(eSpecType::AFFECT_SKILL_PTS)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_KILL = node_builder_t(eSpecType::AFFECT_DEADNESS)
.msg()
.ex1a(STRT_STATUS);
.ex1a(STRT_STATUS)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_STATUS = node_builder_t(eSpecType::AFFECT_STATUS)
.msg()
.ex1b(eSpecPicker::TOGGLE)
.ex1c(eSpecPicker::STATUS);
node_properties_t S_TRAIT = node_builder_t(eSpecType::AFFECT_TRAITS)
.msg()
.ex1a(STRT_TRAIT);
.ex1a(STRT_TRAIT)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_ACTIONS = node_builder_t(eSpecType::AFFECT_AP)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_NAME = node_builder_t(eSpecType::AFFECT_NAME)
.msg()
.msg3(eSpecPicker::MSG_SINGLE);
node_properties_t S_LEVEL = node_builder_t(eSpecType::AFFECT_LEVEL)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_MORALE = node_builder_t(eSpecType::AFFECT_MORALE)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_CRYSTAL = node_builder_t(eSpecType::AFFECT_SOUL_CRYSTAL)
.msg();
.msg()
.ex1a(eSpecPicker::TOGGLE)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_EQUIP = node_builder_t(eSpecType::GIVE_ITEM)
.msg()
.pict(eSpecPicker::NODE)
.ex1a(STRT_ITEM)
.ex1b(STRT_ENCHANT);
.ex1b(STRT_ENCHANT)
.ex2a(STRT_ID_MODE)
.ex2b(STRT_CURSE_MODE)
.ex2c(STRT_EQUIP_MODE);
node_properties_t S_TARGET = node_builder_t(eSpecType::AFFECT_MONST_TARG)
.msg();
node_properties_t S_ATTACK = node_builder_t(eSpecType::AFFECT_MONST_ATT)
.msg();
.msg()
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_STAT_M = node_builder_t(eSpecType::AFFECT_MONST_STAT)
.msg()
.ex1b(eSpecPicker::TOGGLE)
.ex2a(STRT_MONST_STAT);
node_properties_t S_STAT_P = node_builder_t(eSpecType::AFFECT_STAT)
.msg()
.ex1b(eSpecPicker::TOGGLE)
.ex2a(STRT_SKILL);
node_properties_t S_MAGE = node_builder_t(eSpecType::AFFECT_MAGE_SPELL)
.msg()
.ex1a(STRT_MAGE);
.ex1a(STRT_MAGE)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_PRIEST = node_builder_t(eSpecType::AFFECT_PRIEST_SPELL)
.msg()
.ex1a(STRT_PRIEST);
.ex1a(STRT_PRIEST)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_GOLD = node_builder_t(eSpecType::AFFECT_GOLD)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_FOOD = node_builder_t(eSpecType::AFFECT_FOOD)
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_ALCHEMY = node_builder_t(eSpecType::AFFECT_ALCHEMY)
.msg()
.ex1a(STRT_ALCHEMY);
.ex1a(STRT_ALCHEMY)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_STATUS_PARTY = node_builder_t(eSpecType::AFFECT_PARTY_STATUS)
.msg()
.ex1b(eSpecPicker::TOGGLE)
.ex1c(eSpecPicker::STATUS_PARTY);
node_properties_t S_NEWPC = node_builder_t(eSpecType::CREATE_NEW_PC)
.sdf()
@@ -86,7 +112,8 @@ namespace {
.ex1c(STRT_RACE);
node_properties_t S_STOREPC = node_builder_t(eSpecType::STORE_PC)
.sdf()
.msg();
.msg()
.ex1a(eSpecPicker::TOGGLE);
node_properties_t S_UNSTOREPC = node_builder_t(eSpecType::UNSTORE_PC)
.sdf()
.msg()

View File

@@ -35,16 +35,24 @@ namespace {
.ex1a(STRT_STATUS)
.ex1b(eSpecPicker::NODE);
node_properties_t S_GOLD = node_builder_t(eSpecType::IF_HAS_GOLD)
.ex1b(eSpecPicker::NODE);
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_FOOD = node_builder_t(eSpecType::IF_HAS_FOOD)
.ex1b(eSpecPicker::NODE);
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_ITEM_THERE = node_builder_t(eSpecType::IF_ITEM_CLASS_ON_SPACE)
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2b(eSpecPicker::NODE);
.ex2a(eSpecPicker::ITEM_CLASS)
.ex2b(eSpecPicker::NODE)
.ex2c(eSpecPicker::TOGGLE);
node_properties_t S_ITEM_OWNED = node_builder_t(eSpecType::IF_HAVE_ITEM_CLASS)
.ex1b(eSpecPicker::NODE);
.ex1a(eSpecPicker::ITEM_CLASS)
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_ITEM_EQUIP = node_builder_t(eSpecType::IF_EQUIP_ITEM_CLASS)
.ex1b(eSpecPicker::NODE);
.ex1a(eSpecPicker::ITEM_CLASS)
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_MAGE = node_builder_t(eSpecType::IF_MAGE_SPELL)
.ex1a(STRT_MAGE)
.ex1b(eSpecPicker::NODE);
@@ -68,8 +76,11 @@ namespace {
.msg1(eSpecPicker::FIELD)
.msg2(eSpecPicker::NODE);
node_properties_t S_PARTY_SIZE = node_builder_t(eSpecType::IF_PARTY_SIZE)
.ex1b(eSpecPicker::NODE);
.ex1a(eSpecPicker::TOGGLE)
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_EVENT = node_builder_t(eSpecType::IF_EVENT_OCCURRED)
.ex1b(eSpecPicker::EVENT)
.ex2b(eSpecPicker::NODE);
node_properties_t S_RACE = node_builder_t(eSpecType::IF_SPECIES)
.ex1a(STRT_RACE)
@@ -94,17 +105,21 @@ namespace {
.ex1b(eSpecPicker::NODE);
node_properties_t S_CONTEXT = node_builder_t(eSpecType::IF_CONTEXT)
.ex1a(STRT_CONTEXT)
.ex1b(eSpecPicker::TOGGLE)
.ex1c(eSpecPicker::NODE);
node_properties_t S_NUM = node_builder_t(eSpecType::IF_NUM_RESPONSE)
.msg1(+eSpecPicker::MSG_SINGLE)
.pict(STRT_CMP_MODE)
.ptyp(eSpecPicker::NODE)
.ex1b(STRT_CMP)
.ex1c(eSpecPicker::NODE)
.ex2b(STRT_CMP)
.ex2c(eSpecPicker::NODE);
node_properties_t S_BOAT = node_builder_t(eSpecType::IF_IN_BOAT)
.ex1b(eSpecPicker::BOAT)
.ex1c(eSpecPicker::NODE);
node_properties_t S_HORSE = node_builder_t(eSpecType::IF_ON_HORSE)
.ex1b(eSpecPicker::HORSE)
.ex1c(eSpecPicker::NODE);
node_properties_t S_QUEST = node_builder_t(eSpecType::IF_QUEST)
.ex1a(STRT_QUEST)

View File

@@ -17,7 +17,8 @@ namespace{
.msg();
node_properties_t S_INCFLAG = node_builder_t(eSpecType::INC_SDF)
.sdf()
.msg();
.msg()
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_MSG = node_builder_t(eSpecType::DISPLAY_MSG)
.msg();
node_properties_t S_SHOP = node_builder_t(eSpecType::ENTER_SHOP)
@@ -41,31 +42,42 @@ namespace{
.msg();
node_properties_t S_STORY = node_builder_t(eSpecType::STORY_DIALOG)
.msg1(eSpecPicker::MSG_SINGLE)
.field_pair(eSpecField::MSG2, eSpecField::MSG3, eSpecPicker::MSG_SEQUENCE_VAR)
.pic();
node_properties_t S_PREVENT = node_builder_t(eSpecType::CANT_ENTER)
.msg();
.msg()
.ex1a(eSpecPicker::TOGGLE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_TIME = node_builder_t(eSpecType::CHANGE_TIME)
.msg();
node_properties_t S_TIMER = node_builder_t(eSpecType::SCEN_TIMER_START)
.msg()
.ex1b(+eSpecPicker::NODE);
node_properties_t S_SND = node_builder_t(eSpecType::PLAY_SOUND)
.ex1a(eSpecPicker::SOUND);
.ex1a(eSpecPicker::SOUND)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_HORSE_OWN = node_builder_t(eSpecType::CHANGE_HORSE_OWNER)
.msg();
.msg()
.ex1a(eSpecPicker::HORSE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_BOAT_OWN = node_builder_t(eSpecType::CHANGE_BOAT_OWNER)
.msg();
.msg()
.ex1a(eSpecPicker::BOAT)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_TOWN_VIS = node_builder_t(eSpecType::SET_TOWN_VISIBILITY)
.msg()
.ex1a(STRT_TOWN);
.ex1a(STRT_TOWN)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_EVENT = node_builder_t(eSpecType::MAJOR_EVENT_OCCURRED)
.msg();
.msg()
.ex1a(eSpecPicker::EVENT);
node_properties_t S_FORCEGIVE = node_builder_t(eSpecType::FORCED_GIVE)
.msg()
.ex1a(STRT_ITEM)
.ex1b(eSpecPicker::NODE);
node_properties_t S_BUYTYPE = node_builder_t(eSpecType::BUY_ITEMS_OF_TYPE)
.msg()
.ex1a(eSpecPicker::ITEM_CLASS)
.ex1b(eSpecPicker::NODE);
node_properties_t S_GLOBAL = node_builder_t(eSpecType::CALL_GLOBAL)
.jump(+eSpecPicker::NODE);
@@ -84,12 +96,15 @@ namespace{
.pic();
node_properties_t S_END_SCEN = node_builder_t(eSpecType::END_SCENARIO);
node_properties_t S_SETPTR = node_builder_t(eSpecType::SET_POINTER)
.sdf();
.sdf()
.ex1a(eSpecPicker::POINTER);
node_properties_t S_CAMPFLAG = node_builder_t(eSpecType::SET_CAMP_FLAG)
.sdf()
.msg1(+eSpecPicker::MSG_SINGLE);
.msg1(+eSpecPicker::MSG_SINGLE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_DEBUG = node_builder_t(eSpecType::PRINT_NUMS)
.sdf();
.sdf()
.pict(STRT_DEBUG_PRINT);
node_properties_t S_MULFLAG = node_builder_t(eSpecType::SDF_TIMES)
.sdf()
.msg();
@@ -114,14 +129,20 @@ namespace{
.loc(eSpecField::EX1A, eSpecField::EX1B);
node_properties_t S_BUF_CLEAR = node_builder_t(eSpecType::CLEAR_BUF);
node_properties_t S_BUF_ADDSTR = node_builder_t(eSpecType::APPEND_STRING)
.ex1a(eSpecPicker::MSG_SINGLE);
node_properties_t S_BUF_ADDNUM = node_builder_t(eSpecType::APPEND_NUM);
.ex1a(eSpecPicker::MSG_SINGLE)
.pict(eSpecPicker::TOGGLE);
node_properties_t S_BUF_ADDNUM = node_builder_t(eSpecType::APPEND_NUM)
.pict(eSpecPicker::TOGGLE);
node_properties_t S_BUF_ADDMONST = node_builder_t(eSpecType::APPEND_MONST)
.ex1a(STRT_MONST);
.ex1a(STRT_MONST)
.pict(eSpecPicker::TOGGLE);
node_properties_t S_BUF_ADDITEM = node_builder_t(eSpecType::APPEND_ITEM)
.ex1a(STRT_ITEM);
.ex1a(STRT_ITEM)
.pict(eSpecPicker::TOGGLE)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_BUF_ADDTER = node_builder_t(eSpecType::APPEND_TER)
.ex1a(STRT_TER);
.ex1a(STRT_TER)
.pict(eSpecPicker::TOGGLE);
node_properties_t S_PAUSE = node_builder_t(eSpecType::PAUSE);
node_properties_t S_TALK = node_builder_t(eSpecType::START_TALK)
.pict(PIC_TALK)
@@ -134,5 +155,5 @@ namespace{
node_properties_t S_BUF_SWAP = node_builder_t(eSpecType::SWAP_STR_BUF)
.msg();
node_properties_t S_ALTER_SIGN = node_builder_t(eSpecType::STR_BUF_TO_SIGN)
.msg();
.msg1(eSpecPicker::MSG_SINGLE);
}

View File

@@ -19,7 +19,8 @@ namespace {
node_properties_t S_GIVE_SPECITEM = node_builder_t(eSpecType::ONCE_GIVE_SPEC_ITEM)
.sdf()
.msg()
.ex1a(STRT_SPEC_ITEM);
.ex1a(STRT_SPEC_ITEM)
.ex1b(eSpecPicker::TOGGLE);
node_properties_t S_NONE = node_builder_t(eSpecType::ONCE_NULL)
.sdf();
node_properties_t S_SETSDF = node_builder_t(eSpecType::ONCE_SET_SDF)
@@ -30,6 +31,7 @@ namespace {
node_properties_t S_DIALOG = node_builder_t(eSpecType::ONCE_DIALOG)
.sdf()
.msg1(eSpecPicker::MSG_SEQUENCE)
.msg3(eSpecPicker::TOGGLE)
.pic()
.ex1a(STRT_BUTTON)
.ex2a(STRT_BUTTON)

View File

@@ -17,10 +17,12 @@ namespace {
.sdf2(+eSpecPicker::FIELD);
node_properties_t S_EXPLORE = node_builder_t(eSpecType::RECT_SET_EXPLORED)
.msg()
.rect();
.rect()
.sdf1(eSpecPicker::TOGGLE);
node_properties_t S_MOVE = node_builder_t(eSpecType::RECT_MOVE_ITEMS)
.msg()
.rect()
.msg3(eSpecPicker::TOGGLE)
.loc(eSpecField::SDF1, eSpecField::SDF2);
node_properties_t S_DESTROY = node_builder_t(eSpecType::RECT_DESTROY_ITEMS)
.msg()

View File

@@ -19,6 +19,7 @@ namespace {
.pict(PIC_MISSILE)
.loc(eSpecField::EX1A, eSpecField::EX1B)
.loc(eSpecField::EX2A, eSpecField::EX2B)
.ex1c(STRT_PATH)
.ex2c(eSpecPicker::SOUND);
node_properties_t S_ATTACK = node_builder_t(eSpecType::TOWN_MONST_ATTACK)
.msg();
@@ -29,7 +30,8 @@ namespace {
.ex2c(eSpecPicker::SOUND);
node_properties_t S_TELEPORT = node_builder_t(eSpecType::TOWN_MOVE_PARTY)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B);
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_HIT = node_builder_t(eSpecType::TOWN_HIT_SPACE)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
@@ -48,13 +50,15 @@ namespace {
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(eSpecPicker::EXPLOSION)
.ex2b(eSpecPicker::TOGGLE)
.ex2c(eSpecPicker::SOUND);
node_properties_t S_WANDER = node_builder_t(eSpecType::TOWN_CREATE_WANDERING)
.msg();
node_properties_t S_SPAWN = node_builder_t(eSpecType::TOWN_PLACE_MONST)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(STRT_MONST);
.ex2a(STRT_MONST)
.ex2b(eSpecPicker::TOGGLE);
node_properties_t S_KILL = node_builder_t(eSpecType::TOWN_DESTROY_MONST)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B);
@@ -86,39 +90,47 @@ namespace {
.pic()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(STRT_TOWN)
.ex2b(eSpecPicker::TOGGLE)
.ex2c(STRT_STAIR_MODE)
.jump(eSpecPicker::NONE);
node_properties_t S_OUTDOOR = node_builder_t(eSpecType::TOWN_RELOCATE)
.msg()
.field_pair(eSpecField::EX1A, eSpecField::EX1B, STRT_SECTOR)
.loc(eSpecField::EX2A, eSpecField::EX2B);
node_properties_t S_ITEM = node_builder_t(eSpecType::TOWN_PLACE_ITEM)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(STRT_ITEM);
.ex2a(STRT_ITEM)
.ex2b(eSpecPicker::TOGGLE);
node_properties_t S_SPLIT = node_builder_t(eSpecType::TOWN_SPLIT_PARTY)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(eSpecPicker::SOUND);
node_properties_t S_REUNITE = node_builder_t(eSpecType::TOWN_REUNITE_PARTY)
.msg()
.ex1c(eSpecPicker::SOUND);
.ex1a(eSpecPicker::SOUND)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_TIMER = node_builder_t(eSpecType::TOWN_TIMER_START)
.msg()
.ex1b(eSpecPicker::NODE);
node_properties_t S_LIGHT = node_builder_t(eSpecType::TOWN_CHANGE_LIGHTING)
.msg()
.ex1a(STRT_LIGHT);
.ex1a(STRT_LIGHT)
.ex2b(eSpecPicker::TOGGLE);
node_properties_t S_CHARM = node_builder_t(eSpecType::TOWN_SET_ATTITUDE)
.msg()
.ex1b(STRT_ATTITUDE);
node_properties_t S_CAMERA = node_builder_t(eSpecType::TOWN_SET_CENTER)
.msg();
node_properties_t S_FOG = node_builder_t(eSpecType::TOWN_LIFT_FOG)
.msg();
.msg()
.ex1a(eSpecPicker::TOGGLE);
node_properties_t S_TARGET = node_builder_t(eSpecType::TOWN_START_TARGETING)
.msg()
.ex1a(STRT_SPELL_PAT)
.ex2a(eSpecPicker::NODE);
.ex2a(eSpecPicker::NODE)
.ex2b(eSpecPicker::TOGGLE)
.ex2c(eSpecPicker::TOGGLE);
node_properties_t S_FIELDS = node_builder_t(eSpecType::TOWN_SPELL_PAT_FIELD)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
@@ -128,12 +140,14 @@ namespace {
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex1c(+STRT_SPELL_PAT)
.ex2a(eSpecPicker::DAMAGE_TYPE);
.ex2a(eSpecPicker::DAMAGE_TYPE)
.ex2c(STRT_SPELL_PAT_MODE);
node_properties_t S_WARP = node_builder_t(eSpecType::TOWN_RELOCATE_CREATURE)
.msg()
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2b(STRT_POS_MODE);
node_properties_t S_LABEL = node_builder_t(eSpecType::TOWN_PLACE_LABEL)
.msg1(eSpecPicker::MSG_SINGLE)
.loc(eSpecField::EX1A, eSpecField::EX1B);
.loc(eSpecField::EX1A, eSpecField::EX1B)
.ex2a(STRT_LABEL_ALIGN);
}

View File

@@ -765,7 +765,7 @@ node_builder_t& node_builder_t::msg() {
node_builder_t& node_builder_t::rect() {
// The intent is to specify that ex1a,ex1b, and ex2a,ex2b are locations.
// But specifying that two fields are a location isn't implemented yet.
return loc(eSpecField::EX1A, eSpecField::EX1B).loc(eSpecField::EX2A, eSpecField::EX2B);
return loc(eSpecField::EX1A, eSpecField::EX1B).loc(eSpecField::EX2A, eSpecField::EX2B).pict(eSpecPicker::TOGGLE);
};
node_builder_t& node_builder_t::pic() {
@@ -834,14 +834,17 @@ node_builder_t& node_builder_t::field(eSpecField field, node_function_t picker)
return *this;
}
node_builder_t& node_builder_t::field_pair(eSpecField main, eSpecField extra, node_function_t picker) {
// Not implemented yet, so just assign the picker to the main field and NONE to the extra field.
return field(main, picker).field(extra, eSpecPicker::NONE);
}
node_builder_t& node_builder_t::sdf(eSpecField a, eSpecField b) {
// A stuff done flag picker isn't implemented yet.
return *this;
return field_pair(a, b, eSpecPicker::SDF);
}
node_builder_t& node_builder_t::loc(eSpecField a, eSpecField b) {
// A location picker isn't implemented yet
return *this;
return field_pair(a, b, eSpecPicker::LOCATION);
}
node_builder_t::operator node_properties_t() {

View File

@@ -143,14 +143,21 @@ enum eStrType {
STRT_STATUS, STRT_SPELL_PAT, STRT_SUMMON, STRT_TALK, STRT_TALK_NODE_PERSON,
STRT_ENCHANT, STRT_DIR, STRT_QUEST, STRT_QUEST_STATUS,
STRT_HEALING, STRT_TREASURE, STRT_MONST_STAT, STRT_POS_MODE,
STRT_DEBUG_PRINT, STRT_TARG_TYPE, STRT_TARG_MODE,
STRT_ID_MODE, STRT_CURSE_MODE, STRT_EQUIP_MODE,
STRT_CMP_MODE, STRT_PATH, STRT_SPELL_PAT_MODE,
STRT_LABEL_ALIGN,
};
enum class eSpecPicker {
NONE,
MSG_SINGLE, MSG_PAIR, MSG_SEQUENCE,
MSG_SINGLE, MSG_PAIR, MSG_SEQUENCE, MSG_SEQUENCE_VAR,
PICTURE, NODE, STRING, SOUND,
FIELD, DAMAGE_TYPE, EXPLOSION,
STATUS, STATUS_PARTY,
SDF, LOCATION, RECTANGLE, TOGGLE,
HORSE, BOAT, EVENT, ITEM_CLASS,
POINTER,
};
enum class eSpecField { SDF1, SDF2, MSG1, MSG2, MSG3, PICT, PTYP, EX1A, EX1B, EX1C, EX2A, EX2B, EX2C, JUMP };
@@ -212,6 +219,8 @@ struct node_builder_t {
node_builder_t(eSpecType type) : node(type) {}
// Specifies that a particular field should use a specified picker.
node_builder_t& field(eSpecField field, node_function_t picker);
// Specifies that a particular field should use a specified picker which fills two fields as a pair.
node_builder_t& field_pair(eSpecField main, eSpecField extra, node_function_t picker);
// Quick overloads for each possible field.
node_builder_t& sdf1(node_function_t picker);
node_builder_t& sdf2(node_function_t picker);