Fill in a lot of missed cases (mostly just messages)

- Increase strength of slayer weapons that weren't in the original BoE by making sure that each race applies some multiplier to the ability strength
- Messages for every occasional status effect, both negative and positive. If charm/forcecage, ignore.
- Fix weapon poison not being applied
- Forcecage supported for damaging terrain (in town only, of course) and "affect status" items
- Weapon poison supported for "affect status" items; it differs from "poison weapon" items in that it honours the magic use type and doesn't risk messing up (like the Envenom spell)
- Show error messages when encountering an unimplemented spell or special node
- Fix missing handling of NPCs appearing after town dies when loading a saved town
This commit is contained in:
2015-01-27 23:52:47 -05:00
parent ea0fbcffc8
commit 92a20b1c67
18 changed files with 396 additions and 57 deletions

View File

@@ -1040,6 +1040,7 @@ static bool edit_monst_abil_detail(cDialog& me, std::string hit, cMonster& monst
case eMonstAbilTemplate::BREATH_DARKNESS:
param = get_monst_abil_num("Breath weapon strength:", 0, 4, me);
break;
default: break; // None of the other templates take parameters
}
// Protect from overwriting an existing ability.
auto save_abils = monst.abil;

View File

@@ -164,6 +164,11 @@ static short get_small_icon(ter_num_t ter){
case eDamageType::DEMON:
icon = 19;
break;
case eDamageType::SPECIAL:
// TODO: Need icon for this and possibly new icons for undead/demon
break;
case eDamageType::MARKED: // Invalid
break;
}
break;
case eTerSpec::BRIDGE:
@@ -206,6 +211,8 @@ static short get_small_icon(ter_num_t ter){
case eStatus::ACID:
icon = 41;
break;
case eStatus::FORCECAGE:
// TODO: Need icon for this
case eStatus::MAIN: case eStatus::CHARM:
break; // Nothing to do here; these values are "magic" and should not be used
}

View File

@@ -708,6 +708,9 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
case eShopType::PRIEST: btn = 'P'; break;
case eShopType::ALCHEMY: btn = 'a'; break;
case eShopType::SKILLS: btn = 'k'; break;
case eShopType::FOOD: case eShopType::HEALING: case eShopType::MAGIC_GOOD: case eShopType::MAGIC_GREAT:
case eShopType::MAGIC_JUNK: case eShopType::MAGIC_LOUSY: case eShopType::MAGIC_SO_SO:
break;
}
}
short val = me[field].getTextAsNum(), mode = (btn == 'S' || btn == '$') ? 0 : edit_stack.top().mode, store;

View File

@@ -1053,6 +1053,9 @@ static bool save_talk_node(cDialog& me, std::string item_hit, std::stack<short>&
case eTalkNode::DEP_ON_TOWN:
if(cre(talk_node.extras[0],0,scenario.towns.size(),"Town number must be from 0 to " + std::to_string(scenario.towns.size()) + ".","",&me)) return false;
break;
case eTalkNode::BUY_TOWN_LOC:
if(cre(talk_node.extras[1],0,scenario.towns.size(),"Town number must be from 0 to " + std::to_string(scenario.towns.size()) + ".","",&me)) return false;
break;
case eTalkNode::BUY_ITEMS: case eTalkNode::BUY_MAGE: case eTalkNode::BUY_PRIEST:
case eTalkNode::BUY_ALCHEMY: case eTalkNode::BUY_HEALING:
if(cre(talk_node.extras[0],0,6,"Cost adjustment must be from 0 (cheapest) to 6 (most expensive).","",&me)) return false;
@@ -1076,6 +1079,11 @@ static bool save_talk_node(cDialog& me, std::string item_hit, std::stack<short>&
case eTalkNode::CALL_SCEN_SPEC:
if(cre(talk_node.extras[0],-1,255,"The scenario special node called must be in the legal range (0 - 255), or -1 for No Special.","",&me)) return false;
break;
case eTalkNode::BUY_INFO: case eTalkNode::BUY_JUNK: case eTalkNode::DEP_ON_TIME: case eTalkNode::REGULAR:
case eTalkNode::END_ALARM: case eTalkNode::END_DIE: case eTalkNode::END_FIGHT: case eTalkNode::END_FORCE:
case eTalkNode::IDENTIFY: case eTalkNode::SELL_ARMOR: case eTalkNode::SELL_ITEMS: case eTalkNode::SELL_WEAPONS:
case eTalkNode::TRAINING:
break;
}
talk_node.str1 = me["str1"].getText();