171 lines
6.4 KiB
C++
171 lines
6.4 KiB
C++
//
|
|
// special-town.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_TOWN{eSpecType::MAKE_TOWN_HOSTILE, eSpecType::TOWN_PLACE_LABEL};
|
|
|
|
namespace {
|
|
node_properties_t S_ATTITUDE = node_builder_t(eSpecType::MAKE_TOWN_HOSTILE)
|
|
.msg()
|
|
.ex2a(STRT_ATTITUDE);
|
|
node_properties_t S_MISSILE = node_builder_t(eSpecType::TOWN_RUN_MISSILE)
|
|
.msg()
|
|
.pict(PIC_MISSILE)
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.loc(eSpecField::EX2A, eSpecField::EX2B, eLocType::ACTIVE_TOWN)
|
|
.ex1c(STRT_PATH)
|
|
.ex2c(eSpecPicker::SOUND);
|
|
node_properties_t S_ATTACK = node_builder_t(eSpecType::TOWN_MONST_ATTACK)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN);
|
|
node_properties_t S_BOOM = node_builder_t(eSpecType::TOWN_BOOM_SPACE)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2a(PIC_BOOM)
|
|
.ex2c(eSpecPicker::SOUND);
|
|
node_properties_t S_TELEPORT = node_builder_t(eSpecType::TOWN_MOVE_PARTY)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2a(eSpecPicker::TOGGLE);
|
|
node_properties_t S_HIT = node_builder_t(eSpecType::TOWN_HIT_SPACE)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2b(eSpecPicker::DAMAGE_TYPE);
|
|
node_properties_t S_EXPLODE = node_builder_t(eSpecType::TOWN_EXPLODE_SPACE)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2b(eSpecPicker::DAMAGE_TYPE);
|
|
node_properties_t S_LOCK = node_builder_t(eSpecType::TOWN_LOCK_SPACE)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN);
|
|
node_properties_t S_UNLOCK = node_builder_t(eSpecType::TOWN_UNLOCK_SPACE)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN);
|
|
node_properties_t S_BURST = node_builder_t(eSpecType::TOWN_SFX_BURST)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.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, eLocType::ACTIVE_TOWN)
|
|
.ex2a(STRT_MONST)
|
|
.ex2b(eSpecPicker::TOGGLE);
|
|
node_properties_t S_KILL = node_builder_t(eSpecType::TOWN_DESTROY_MONST)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN);
|
|
node_properties_t S_NUKE = node_builder_t(eSpecType::TOWN_NUKE_MONSTS)
|
|
.msg()
|
|
.ex1a(STRT_MONST);
|
|
// TODO Implement preview
|
|
node_properties_t S_LEVER_G = node_builder_t(eSpecType::TOWN_GENERIC_LEVER)
|
|
.ex1b(eSpecPicker::NODE)
|
|
.no_preview();
|
|
// TODO Implement preview
|
|
node_properties_t S_PORTAL_G = node_builder_t(eSpecType::TOWN_GENERIC_PORTAL)
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.no_preview();
|
|
// TODO Implement preview
|
|
node_properties_t S_BUTTON_G = node_builder_t(eSpecType::TOWN_GENERIC_BUTTON)
|
|
.ex1b(eSpecPicker::NODE)
|
|
.no_preview();
|
|
// TODO implement preview
|
|
node_properties_t S_STAIR_G = node_builder_t(eSpecType::TOWN_GENERIC_STAIR)
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::SPECIFIED_TOWN, eSpecField::EX2A)
|
|
.ex2a(STRT_TOWN)
|
|
.ex2b(STRT_STAIR)
|
|
.ex2c(STRT_STAIR_MODE)
|
|
.jump(eSpecPicker::NONE)
|
|
.no_preview();
|
|
// TODO implement preview
|
|
node_properties_t S_LEVER = node_builder_t(eSpecType::TOWN_LEVER)
|
|
.msg1(eSpecPicker::MSG_SEQUENCE)
|
|
.pic()
|
|
.ex1b(eSpecPicker::NODE)
|
|
.no_preview();
|
|
// TODO implement preview
|
|
node_properties_t S_PORTAL = node_builder_t(eSpecType::TOWN_PORTAL)
|
|
.msg1(eSpecPicker::MSG_SEQUENCE)
|
|
.pic()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.no_preview();
|
|
// TODO implement preview
|
|
node_properties_t S_STAIR = node_builder_t(eSpecType::TOWN_STAIR)
|
|
.msg1(eSpecPicker::MSG_SEQUENCE)
|
|
.pic()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::SPECIFIED_TOWN, eSpecField::EX2A)
|
|
.ex2a(STRT_TOWN)
|
|
.ex2b(eSpecPicker::TOGGLE)
|
|
.ex2c(STRT_STAIR_MODE)
|
|
.jump(eSpecPicker::NONE)
|
|
.no_preview();
|
|
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, eLocType::SPECIFIED_OUT, eSpecField::EX1A);
|
|
node_properties_t S_ITEM = node_builder_t(eSpecType::TOWN_PLACE_ITEM)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2a(STRT_ITEM)
|
|
.ex2b(eSpecPicker::TOGGLE);
|
|
node_properties_t S_SPLIT = node_builder_t(eSpecType::TOWN_SPLIT_PARTY)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex2a(eSpecPicker::SOUND);
|
|
node_properties_t S_REUNITE = node_builder_t(eSpecType::TOWN_REUNITE_PARTY)
|
|
.msg()
|
|
.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)
|
|
.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()
|
|
.ex1a(eSpecPicker::TOGGLE);
|
|
node_properties_t S_TARGET = node_builder_t(eSpecType::TOWN_START_TARGETING)
|
|
.msg()
|
|
.ex1a(eSpecPicker::SPELL_PATTERN)
|
|
.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, eLocType::ACTIVE_TOWN)
|
|
.ex1c(+eSpecPicker::SPELL_PATTERN)
|
|
.ex2a(+eSpecPicker::FIELD);
|
|
node_properties_t S_PATTERN = node_builder_t(eSpecType::TOWN_SPELL_PAT_BOOM)
|
|
.msg()
|
|
.loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN)
|
|
.ex1c(+eSpecPicker::SPELL_PATTERN)
|
|
.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, eLocType::ACTIVE_TOWN)
|
|
.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, eLocType::ACTIVE_TOWN)
|
|
.ex2a(STRT_LABEL_ALIGN)
|
|
.no_preview();
|
|
}
|