Files
oboe/src/scenario/special-condition.cpp

140 lines
4.8 KiB
C++

//
// special-condition.cpp
// Common
//
// Created by Celtic Minstrel on 2025-02-20.
//
#include "special.hpp"
#include "special-conditions.hpp"
// Note: If adding a new node type below, be sure to adjust the end point here too.
node_category_info_t CAT_COND{eSpecType::IF_SDF, eSpecType::IF_QUEST};
namespace {
node_properties_t S_SDF = node_builder_t(eSpecType::IF_SDF)
.sdf()
.ex1b(eSpecPicker::NODE)
.ex2b(eSpecPicker::NODE);
node_properties_t S_TOWN = node_builder_t(eSpecType::IF_TOWN_NUM)
.ex1a(STRT_TOWN)
.ex1b(eSpecPicker::NODE);
node_properties_t S_RANDOM = node_builder_t(eSpecType::IF_RANDOM)
.ex1b(eSpecPicker::NODE);
node_properties_t S_SPECITEM = node_builder_t(eSpecType::IF_HAVE_SPECIAL_ITEM)
.ex1a(STRT_SPEC_ITEM)
.ex1b(eSpecPicker::NODE);
node_properties_t S_SDFCMP = node_builder_t(eSpecType::IF_SDF_COMPARE)
.sdf()
.sdf(eSpecField::EX1A, eSpecField::EX1B)
.ex2b(eSpecPicker::NODE);
node_properties_t S_TERRAIN = node_builder_t(eSpecType::IF_TER_TYPE)
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_AUTO)
.ex2a(STRT_TER)
.ex2b(eSpecPicker::NODE);
node_properties_t S_ALIVE = node_builder_t(eSpecType::IF_ALIVE)
.ex1a(STRT_STATUS)
.ex1b(eSpecPicker::NODE);
node_properties_t S_GOLD = node_builder_t(eSpecType::IF_HAS_GOLD)
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_FOOD = node_builder_t(eSpecType::IF_HAS_FOOD)
.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, eLocType::ACTIVE_TOWN)
.ex2a(eSpecPicker::ITEM_CLASS)
.ex2b(eSpecPicker::NODE)
.ex2c(eSpecPicker::TOGGLE);
node_properties_t S_ITEM_OWNED = node_builder_t(eSpecType::IF_HAVE_ITEM_CLASS)
.ex1a(eSpecPicker::ITEM_CLASS)
.ex1b(eSpecPicker::NODE)
.ex2a(eSpecPicker::TOGGLE);
node_properties_t S_ITEM_EQUIP = node_builder_t(eSpecType::IF_EQUIP_ITEM_CLASS)
.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);
node_properties_t S_PRIEST = node_builder_t(eSpecType::IF_PRIEST_SPELL)
.ex1a(STRT_PRIEST)
.ex1b(eSpecPicker::NODE);
node_properties_t S_ALCHEMY = node_builder_t(eSpecType::IF_RECIPE)
.ex1a(STRT_ALCHEMY)
.ex1b(eSpecPicker::NODE);
node_properties_t S_STATUS = node_builder_t(eSpecType::IF_STATUS)
.ex1a(eSpecPicker::STATUS)
.ex1b(eSpecPicker::NODE)
.ex2b(STRT_ACCUM)
.ex2c(STRT_CMP);
node_properties_t S_LOOK = node_builder_t(eSpecType::IF_LOOKING)
.ex1c(eSpecPicker::NODE);
node_properties_t S_DAY = node_builder_t(eSpecType::IF_DAY_REACHED)
.ex1b(eSpecPicker::NODE);
node_properties_t S_FIELDS = node_builder_t(eSpecType::IF_FIELDS)
.rect(eLocType::ACTIVE_TOWN)
.pict(eSpecPicker::TOGGLE)
.msg1(eSpecPicker::FIELD)
.msg2(eSpecPicker::NODE);
node_properties_t S_PARTY_SIZE = node_builder_t(eSpecType::IF_PARTY_SIZE)
.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)
.ex1b(eSpecPicker::NODE)
.ex2b(STRT_CMP);
node_properties_t S_TRAIT = node_builder_t(eSpecType::IF_TRAIT)
.ex1a(STRT_TRAIT)
.ex1b(eSpecPicker::NODE)
.ex2b(STRT_CMP);
node_properties_t S_STAT = node_builder_t(eSpecType::IF_STATISTIC)
.ex1b(eSpecPicker::NODE)
.ex2a(STRT_SKILL_CHECK)
.ex2b(STRT_ACCUM);
node_properties_t S_TEXT = node_builder_t(eSpecType::IF_TEXT_RESPONSE)
.msg1(+eSpecPicker::MSG_SINGLE)
.ex1a(+eSpecPicker::MSG_SINGLE)
.ex1b(eSpecPicker::NODE)
.ex2a(+eSpecPicker::MSG_SINGLE)
.ex2b(eSpecPicker::NODE);
node_properties_t S_SDFEQ = node_builder_t(eSpecType::IF_SDF_EQ)
.sdf()
.ex1b(eSpecPicker::NODE);
node_properties_t S_CONTEXT = node_builder_t(eSpecType::IF_CONTEXT)
.ex1a(STRT_CONTEXT)
.ex1c(eSpecPicker::NODE)
.when(eSpecField::EX1A < 3, 1)
.ex1b(eSpecPicker::TOGGLE)
.end()
.when(eSpecField::EX1A == 16, 2)
.ex1b(STRT_ANY_SPELL)
.end();
node_properties_t S_NUM = node_builder_t(eSpecType::IF_NUM_RESPONSE)
.msg1(+eSpecPicker::MSG_SINGLE)
.pict(STRT_CMP_MODE)
.ptyp(eSpecPicker::NODE)
.ex1c(eSpecPicker::NODE)
.ex2c(eSpecPicker::NODE)
.when(eSpecField::PICT == 2, 1)
.ex1a()
.ex1b(STRT_CMP)
.ex2a()
.ex2b(STRT_CMP)
.end();
node_properties_t S_BOAT = node_builder_t(eSpecType::IF_IN_BOAT)
.ex1b(STRT_BOAT)
.ex1c(eSpecPicker::NODE);
node_properties_t S_HORSE = node_builder_t(eSpecType::IF_ON_HORSE)
.ex1b(STRT_HORSE)
.ex1c(eSpecPicker::NODE);
node_properties_t S_QUEST = node_builder_t(eSpecType::IF_QUEST)
.ex1a(STRT_QUEST)
.ex1b(STRT_QUEST_STATUS)
.ex1c(eSpecPicker::NODE);
}