Tweak Vahnatai PC traits and add Magery item ability
- Vahnatai no longer have a bonus to mage spells (that's now the Magery item ability) - Vahnatai XP gain bonus changed - Fix sliths being noted as resistant to poison (they aren't and never have been)
This commit is contained in:
@@ -155,10 +155,8 @@ otherwise, it's equal to one-half the Ability Strength.</dd>
|
||||
<dt>Ability 31 - Full Protection</dt>
|
||||
<dd>This partially blocks weapon and spell damage the wielder takes. It also protects from
|
||||
poison.</dd>
|
||||
<dt>Ability 32 - Melee Protection</dt>
|
||||
<dd>This item behaves as armour even if it isn't. It reduces damage by a die with the
|
||||
number of sides specified in Ability Strength. If the item is armour, this is on top of
|
||||
the normal damage reduction of the armour.</dd>
|
||||
<dt>Ability 32 - Magery</dt>
|
||||
<dd>This item makes your mage spells stronger.</dd>
|
||||
<dt>Ability 33 - Evasion</dt>
|
||||
<dd>This reduces the chance of enemies hitting you with melee attacks and non-magical
|
||||
missiles. The Ability Strength determines how much less likely they are to hit, as a
|
||||
|
@@ -176,13 +176,12 @@ Sliths in Exile. Some of them are friendly and allied with your people, and some
|
||||
are cruel and barbaric, and fight you whenever they get the chance. Slithzerikai are
|
||||
trained from birth to use pole weapons, and get a sizable bonus when attacking with them.
|
||||
Also, when character creation is completed, each Slithzerikai character gains 2 bonus
|
||||
points of strength and 1 bonus point of intelligence. Finally, Slithzerikai are resistant
|
||||
to poison.</dd>
|
||||
<dt>Vahnatai (-5%)</dt>
|
||||
points of strength and 1 bonus point of intelligence.</dd>
|
||||
<dt>Vahnatai (18%)</dt>
|
||||
<dd>The Vahnatai are an ancient race of spindly, grey-skinned humanoids that periodically
|
||||
enter a dormant state to allow the caves to regenerate. They are strong in magic, but tend
|
||||
to be weak physically, though there are exceptions. They have a penalty to strength and
|
||||
can't carry as much as other characters, but gain a bonus when casting mage spells. Also,
|
||||
can't carry as much as other characters. Also,
|
||||
when character creation is completed, each Vahnatai character gains 2 bonus points of
|
||||
intelligence and 2 bonus 4th-level spells, Capture Soul and Simulacrum.
|
||||
</dl>
|
||||
|
@@ -11,7 +11,7 @@
|
||||
<led name='race1' top='53' left='55' width='90'>Human (0%)</led>
|
||||
<led name='race2' top='53' left='170' width='90'>Nephilim (12%)</led>
|
||||
<led name='race3' top='53' left='285' width='90'>Slithzerikai (20%)</led>
|
||||
<led name='race4' top='53' left='400' width='90'>Vahnatai (-5%)</led>
|
||||
<led name='race4' top='53' left='400' width='90'>Vahnatai (18%)</led>
|
||||
</group>
|
||||
<text size='large' top='74' left='55' width='126' height='16'>Advantages:</text>
|
||||
<led name='good1' top='95' left='55' width='126'>Toughness (10%)</led>
|
||||
|
@@ -29,7 +29,7 @@ Call special when attacking
|
||||
|
||||
Protection from damage type
|
||||
Full protection
|
||||
Unused
|
||||
Magery
|
||||
Evasion
|
||||
Martyr's shield
|
||||
Awkward weapon
|
||||
|
@@ -1039,7 +1039,7 @@ void do_combat_cast(location target) {
|
||||
else {
|
||||
level = 1 + caster.level / 2;
|
||||
bonus = caster.stat_adj(eSkill::INTELLIGENCE);
|
||||
if(caster.race == eRace::VAHNATAI && !(*spell_being_cast).is_priest())
|
||||
if((*spell_being_cast).level <= caster.get_prot_level(eItemAbil::MAGERY))
|
||||
level++;
|
||||
if(caster.traits[eTrait::ANAMA] && (*spell_being_cast).is_priest())
|
||||
level++;
|
||||
@@ -4785,7 +4785,7 @@ void combat_immed_mage_cast(short current_pc, eSpell spell_num, bool freebie) {
|
||||
miss_num_t store_m_type = 0;
|
||||
short bonus = freebie ? 1 : univ.party[current_pc].stat_adj(eSkill::INTELLIGENCE);
|
||||
short level = freebie ? store_item_spell_level : univ.party[current_pc].level;
|
||||
if(!freebie && univ.party[current_pc].race == eRace::VAHNATAI)
|
||||
if(!freebie && (*spell_num).level <= univ.party[current_pc].get_prot_level(eItemAbil::MAGERY))
|
||||
level++;
|
||||
cCreature* which_m;
|
||||
start_missile_anim();
|
||||
|
@@ -712,7 +712,7 @@ void do_mage_spell(short pc_num,eSpell spell_num,bool freebie) {
|
||||
|
||||
adj = freebie ? 1 : univ.party[pc_num].stat_adj(eSkill::INTELLIGENCE);
|
||||
short level = freebie ? store_item_spell_level : univ.party[pc_num].level;
|
||||
if(!freebie && univ.party[pc_num].race == eRace::VAHNATAI)
|
||||
if(!freebie && (*spell_num).level <= univ.party[pc_num].get_prot_level(eItemAbil::MAGERY))
|
||||
level++;
|
||||
|
||||
switch(spell_num) {
|
||||
@@ -1340,7 +1340,7 @@ void cast_town_spell(location where) {
|
||||
ter = univ.town->terrain(where.x,where.y);
|
||||
short adj = spell_freebie ? 1 : univ.party[who_cast].stat_adj(eSkill::INTELLIGENCE);
|
||||
short level = spell_freebie ? store_item_spell_level : univ.party[who_cast].level;
|
||||
if(!spell_freebie && univ.party[who_cast].race == eRace::VAHNATAI && !(*town_spell).is_priest())
|
||||
if(!spell_freebie && (*town_spell).level <= univ.party[who_cast].get_prot_level(eItemAbil::MAGERY) && !(*town_spell).is_priest())
|
||||
level++;
|
||||
if(!spell_freebie && univ.party[who_cast].traits[eTrait::ANAMA] && (*town_spell).is_priest())
|
||||
level++;
|
||||
|
@@ -1171,7 +1171,7 @@ void use_item(short pc,short item) {
|
||||
case eItemAbil::EXPLODING_WEAPON: case eItemAbil::FREE_ACTION: case eItemAbil::FULL_PROTECTION: case eItemAbil::WILL:
|
||||
case eItemAbil::GIANT_STRENGTH: case eItemAbil::GRAYMOLD: case eItemAbil::HEALING_WEAPON: case eItemAbil::HEAVIER_OBJECT:
|
||||
case eItemAbil::HIT_CALL_SPECIAL: case eItemAbil::HOLLY: case eItemAbil::LIFE_SAVING: case eItemAbil::LIGHTER_OBJECT:
|
||||
case eItemAbil::LOCKPICKS: case eItemAbil::MANDRAKE: case eItemAbil::MARTYRS_SHIELD: case eItemAbil::UNUSED2:
|
||||
case eItemAbil::LOCKPICKS: case eItemAbil::MANDRAKE: case eItemAbil::MARTYRS_SHIELD: case eItemAbil::MAGERY:
|
||||
case eItemAbil::NETTLE: case eItemAbil::NONE: case eItemAbil::OCCASIONAL_STATUS: case eItemAbil::POISON_AUGMENT:
|
||||
case eItemAbil::PROTECT_FROM_PETRIFY: case eItemAbil::PROTECT_FROM_SPECIES: case eItemAbil::RADIANT:
|
||||
case eItemAbil::REGENERATE: case eItemAbil::RESURRECTION_BALM: case eItemAbil::RETURNING_MISSILE: case eItemAbil::SAPPHIRE:
|
||||
|
@@ -965,7 +965,7 @@ std::string cItem::getAbilName() const {
|
||||
bool party = abil_group();
|
||||
std::ostringstream sout;
|
||||
switch(ability) {
|
||||
case eItemAbil::UNUSED: case eItemAbil::UNUSED2: break; // Invalid
|
||||
case eItemAbil::UNUSED: break; // Invalid
|
||||
case eItemAbil::NONE: sout << "No ability"; break;
|
||||
case eItemAbil::HEALING_WEAPON: sout << "Heals target"; break;
|
||||
case eItemAbil::RETURNING_MISSILE: sout << "Returning missile"; break;
|
||||
@@ -986,6 +986,7 @@ std::string cItem::getAbilName() const {
|
||||
case eItemAbil::BOOST_MAGIC: sout << "Mage's Mantle"; break;
|
||||
case eItemAbil::ACCURACY: sout << "Accuracy"; break;
|
||||
case eItemAbil::THIEVING: sout << "Thieving"; break;
|
||||
case eItemAbil::MAGERY: sout << "Magery"; break;
|
||||
case eItemAbil::GIANT_STRENGTH: sout << "Giant Strength"; break;
|
||||
case eItemAbil::LIGHTER_OBJECT: sout << "Lighter Object"; break;
|
||||
case eItemAbil::HEAVIER_OBJECT: sout << "Heavier Object"; break;
|
||||
|
@@ -62,7 +62,7 @@ void cPlayer::append(legacy::pc_record_type old){
|
||||
short cPlayer::get_tnl(){
|
||||
short tnl = 100,store_per = 100;
|
||||
// Omitting a race from this list gives it a value of 0, thanks to the defaulting implementation of operator[]
|
||||
static std::map<const eRace, const int> rp = {{eRace::NEPHIL,12},{eRace::SLITH,20},{eRace::VAHNATAI,-5}};
|
||||
static std::map<const eRace, const int> rp = {{eRace::NEPHIL,12},{eRace::SLITH,20},{eRace::VAHNATAI,18}};
|
||||
static std::map<const eTrait, const short> ap = {
|
||||
{eTrait::TOUGHNESS,10}, {eTrait::MAGICALLY_APT,20}, {eTrait::AMBIDEXTROUS,8}, {eTrait::NIMBLE,10}, {eTrait::CAVE_LORE,4},
|
||||
{eTrait::WOODSMAN,6}, {eTrait::GOOD_CONST,10}, {eTrait::HIGHLY_ALERT,7}, {eTrait::STRENGTH,12}, {eTrait::RECUPERATION,15},
|
||||
@@ -789,6 +789,7 @@ void cPlayer::finish_create() {
|
||||
items[1] = cItem('helm');
|
||||
break;
|
||||
case eRace::VAHNATAI:
|
||||
// TODO: Should they have a robe instead of a knife?
|
||||
items[0] = cItem('nife');
|
||||
items[1] = cItem('rdsk');
|
||||
break;
|
||||
|
@@ -397,7 +397,7 @@ enum class eItemAbil {
|
||||
// General abilities
|
||||
DAMAGE_PROTECTION = 30,
|
||||
FULL_PROTECTION = 31,
|
||||
UNUSED2 = 32,
|
||||
MAGERY = 32,
|
||||
EVASION = 33,
|
||||
MARTYRS_SHIELD = 34,
|
||||
ENCUMBERING = 35,
|
||||
|
Reference in New Issue
Block a user