add if-then node definition for checking monster range alive
This commit is contained in:
@@ -525,3 +525,19 @@ Unused
|
||||
Otherwise call this special
|
||||
Result depends on the status of a quest.
|
||||
--------------------
|
||||
If Monster(s) Alive?
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
First monster
|
||||
Last monster
|
||||
Specific attitude?
|
||||
If at least this many are alive ...
|
||||
Call this special ...
|
||||
Unused
|
||||
Otherwise call this special
|
||||
Result depends on how many monsters within the given range of townpeople are alive and present.
|
||||
@@ -9,7 +9,7 @@
|
||||
#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};
|
||||
node_category_info_t CAT_COND{eSpecType::IF_SDF, eSpecType::IF_MONSTERS_ALIVE};
|
||||
|
||||
namespace {
|
||||
node_properties_t S_SDF = node_builder_t(eSpecType::IF_SDF)
|
||||
@@ -165,4 +165,10 @@ namespace {
|
||||
.ex1b(STRT_QUEST_STATUS)
|
||||
.ex1c(eSpecPicker::NODE)
|
||||
.no_preview();
|
||||
node_properties_t S_MONSTERS_ALIVE = node_builder_t(eSpecType::IF_MONSTERS_ALIVE)
|
||||
.ex1a(eSpecPicker::TOWNPERSON)
|
||||
.ex1b(eSpecPicker::TOWNPERSON)
|
||||
.ex1c(STRT_ATTITUDE_FILTER)
|
||||
.ex2b(eSpecPicker::NODE)
|
||||
.no_preview();
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ enum class eSpecType {
|
||||
IF_STATUS = 145, IF_LOOKING = 146, IF_DAY_REACHED = 147, IF_FIELDS = 148, IF_PARTY_SIZE = 149,
|
||||
IF_EVENT_OCCURRED = 150, IF_SPECIES = 151, IF_TRAIT = 152, IF_STATISTIC = 153, IF_TEXT_RESPONSE = 154,
|
||||
IF_SDF_EQ = 155, IF_CONTEXT = 156, IF_NUM_RESPONSE = 157, IF_IN_BOAT = 158, IF_ON_HORSE = 159,
|
||||
IF_QUEST = 160,
|
||||
IF_QUEST = 160, IF_MONSTERS_ALIVE = 161,
|
||||
|
||||
MAKE_TOWN_HOSTILE = 170, TOWN_RUN_MISSILE = 171, TOWN_MONST_ATTACK = 172, TOWN_BOOM_SPACE = 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,
|
||||
@@ -218,7 +218,7 @@ enum eStrType {
|
||||
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, STRT_HORSE, STRT_BOAT,
|
||||
STRT_LABEL_ALIGN, STRT_HORSE, STRT_BOAT, STRT_ATTITUDE_FILTER
|
||||
};
|
||||
|
||||
const char*const stairDlogs[8] = {
|
||||
|
||||
@@ -642,6 +642,12 @@ short choose_text(eStrType list, unsigned short cur_choice, cDialog* parent, std
|
||||
}
|
||||
}
|
||||
break;
|
||||
case STRT_ATTITUDE_FILTER:
|
||||
strings = {"Any", "Any Friendly", "Any Hostile"};
|
||||
for(std::string str : attitude_disp_strs){
|
||||
strings.push_back(str);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(cur_choice < 0 || cur_choice >= strings.size())
|
||||
cur_choice = -1;
|
||||
@@ -1560,6 +1566,7 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
|
||||
case STRT_BOAT: title = "Which boat?"; break;
|
||||
case STRT_HORSE: title = "Which horse?"; break;
|
||||
case STRT_TALK: title = "Which personality?"; break;
|
||||
case STRT_ATTITUDE_FILTER: title = "What attitude(s)?"; break;
|
||||
default: title = "Title not set for this string type!!!"; break;
|
||||
}
|
||||
if(fcn.str_type == STRT_SECTOR && fcn.continuation == eSpecField::NONE) {
|
||||
@@ -1591,6 +1598,8 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
|
||||
store += 79;
|
||||
} else if(fcn.str_type == STRT_ANY_SPELL && store >= nMageSpells) {
|
||||
store += 100 - nMageSpells;
|
||||
} else if(fcn.str_type == STRT_ATTITUDE_FILTER) {
|
||||
store -= 3;
|
||||
}
|
||||
} break;
|
||||
case eSpecPicker::PICTURE: {
|
||||
@@ -1727,7 +1736,7 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
|
||||
case eSpecPicker::POINTER: store = val; break; // TODO: Not implemented...
|
||||
case eSpecPicker::TOWNPERSON:
|
||||
if(town->creatures.empty()){
|
||||
showWarning("There are no creatures in this town to change attitude!");
|
||||
showWarning("There are no creatures in this town to choose from!");
|
||||
break;
|
||||
}
|
||||
if(alt_button){
|
||||
|
||||
Reference in New Issue
Block a user