Anonymous | Login | 2024-04-24 14:07 CEST |
Main | My View | View Issues | Change Log | Wiki | Tavern | News |
Viewing Issue Advanced Details [ Jump to Notes ] [ Wiki ] | [ View Simple ] [ Issue History ] [ Print ] | ||||||
ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||
0007897 | [DCSS] Patches | feature | N/A | 2013-12-21 05:22 | 2014-03-06 07:38 | ||
Reporter | Sage | View Status | public | ||||
Assigned To | neil | ||||||
Priority | normal | Resolution | done | Local or Remote | Both | ||
Status | closed | Operating System | All | ||||
Projection | none | Console or Tiles | Both | ||||
ETA | none | Fixed in Branch | 0.14 ancient branch | Product Branch | 0.14 ancient branch | ||
Product Version | |||||||
Summary | 0007897: Vine stalker species. | ||||||
Description | Parasitic vines. Powerful bite which leeches mana and applies antimagic, bites every melee attack, regen III, spirit shield, +1 MP. -3 HP, can't restore HP with potions or wands (Gods and regeneration in general work). | ||||||
Steps To Reproduce | |||||||
Additional Information | |||||||
Tags | No tags attached. | ||||||
Attached Files |
vine_stalkers.patch [^] (57,880 bytes) 2013-12-21 05:22 [Show Content] [Hide Content]From 9d6d88330631002df8af78189678d6dc202d2461 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 18 Dec 2013 20:32:19 +0000 Subject: [PATCH 01/22] Vine stalkers added. Weirdness and Mutations: - Fangs II (Becomes III at xl8) - Antimagic bite (Much stronger than standard bite, bites every turn, applies antimagic brand, and restores your mana) - Potions and wands cannot restore your HP - Regen III - Unbreathing - Spirit shield - HP -3 - MP +1 --- crawl-ref/docs/crawl_manual.reST | 30 ++++++++++++++++++++++ crawl-ref/source/acquire.cc | 4 ++- crawl-ref/source/aptitudes.h | 39 +++++++++++++++++++++++++++++ crawl-ref/source/dat/descript/species.txt | 4 +++ crawl-ref/source/describe.cc | 1 + crawl-ref/source/enum.h | 5 +++- crawl-ref/source/itemname.cc | 7 ++++-- crawl-ref/source/melee_attack.cc | 28 ++++++++++++++++++--- crawl-ref/source/mutation-data.h | 20 +++++++++++++++ crawl-ref/source/mutation.cc | 1 + crawl-ref/source/ng-restr.cc | 4 +++ crawl-ref/source/ng-setup.cc | 9 +++++++ crawl-ref/source/player.cc | 15 +++++++++++ crawl-ref/source/potion.cc | 29 ++++++++++++++++++++- crawl-ref/source/species.cc | 34 ++++++++++++++++--------- crawl-ref/source/spl-goditem.cc | 2 ++ crawl-ref/source/tilepick-p.cc | 5 ++++ 17 files changed, 216 insertions(+), 21 deletions(-) diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index 0980b75..f198d55 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1833,6 +1833,36 @@ Lava Orcs that Hill Orcs do). They're pretty bad spellcasters, except for transmutations, fire and earth magic. +Vine Stalkers + A vine stalker is a humanoid, twisted mass of thick vines. These spread from + a once-human torso, covered in rough bark which contains a slowly beating + heart that now- rather than blood, pumps the magical energies that sustain + and envelop the stalker. + + Its shape limber and its movements sudden, this is a hugely violent creature + that attacks with astonishing ferocity any being bearing the smallest drop + of magical essence to sate its thirst. Lacking any other discernible features, + its face is dominated by a disproportinate, vicious maw and two small slits, + each containing a magically condensated blue crystal with which the stalker + can lay its gaze on any prey. + + While terrifyingly voracious and strong, the vine stalker's symbiotic body is + frail to the extreme. It is however, also protected by the very magical + energies it devours and, as many an unfortunate spellcaster have discovered + much too late, their ferocious bites will replenish them quickly and infuse + renewed strength into their bodies. Further counteracting their frailness, + the stalker's stream of magic restores any wounds and breaches it sustains at + an alarmingly fast rate. However, due to this highly specialized healing + system, the stalker's human core is no longer able to handle natural healing + measures such as potions or wands of heal wounds. They can, however, still + benefit from the non-healing side of alchemy and divine intervention will + still affect them. + + Having been created not by necromantic rituals but by a terrible act of + parasitation on a mortally wounded humanoid who never knew the release of + death, these beings are still accepted by the good gods as worshippers and + can devote themselves to worshipment of Fedhas as well. + Elves ======================================== diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index 1b3e94c..a723531 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -712,8 +712,10 @@ static int _acquirement_wand_subtype() // First, weight according to usefulness. switch (type) { - case WAND_HASTING: // each 17.9%, group unknown each 26.3% case WAND_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + w = 0; break; + case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% w = 15; break; diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 2211078..66e9170 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1451,6 +1451,45 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_POISON_MAGIC, 3), APT(SP_FORMICID, SK_INVOCATIONS, 2), APT(SP_FORMICID, SK_EVOCATIONS, 2), + + // SP_VINE_STALKER + APT(SP_VINE_STALKER, SK_FIGHTING, 2), + APT(SP_VINE_STALKER, SK_SHORT_BLADES, 0), + APT(SP_VINE_STALKER, SK_LONG_BLADES, 0), + APT(SP_VINE_STALKER, SK_AXES, 0), + APT(SP_VINE_STALKER, SK_MACES_FLAILS, 0), + APT(SP_VINE_STALKER, SK_POLEARMS, 0), + APT(SP_VINE_STALKER, SK_STAVES, 0), + APT(SP_VINE_STALKER, SK_SLINGS, 0), + APT(SP_VINE_STALKER, SK_BOWS, 0), + APT(SP_VINE_STALKER, SK_CROSSBOWS, 0), + APT(SP_VINE_STALKER, SK_THROWING, 0), + APT(SP_VINE_STALKER, SK_ARMOUR, 0), + APT(SP_VINE_STALKER, SK_DODGING, 0), + APT(SP_VINE_STALKER, SK_STEALTH, 3), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_STABBING, -99), +#endif + APT(SP_VINE_STALKER, SK_SHIELDS, -1), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_TRAPS, -99), +#endif + APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 1), + APT(SP_VINE_STALKER, SK_SPELLCASTING, 0), + APT(SP_VINE_STALKER, SK_CONJURATIONS, 0), + APT(SP_VINE_STALKER, SK_HEXES, 0), + APT(SP_VINE_STALKER, SK_CHARMS, 0), + APT(SP_VINE_STALKER, SK_SUMMONINGS, 0), + APT(SP_VINE_STALKER, SK_NECROMANCY, 0), + APT(SP_VINE_STALKER, SK_TRANSLOCATIONS, 0), + APT(SP_VINE_STALKER, SK_TRANSMUTATIONS, 0), + APT(SP_VINE_STALKER, SK_FIRE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_ICE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_AIR_MAGIC, 0), + APT(SP_VINE_STALKER, SK_EARTH_MAGIC, 0), + APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0), + APT(SP_VINE_STALKER, SK_INVOCATIONS, 0), + APT(SP_VINE_STALKER, SK_EVOCATIONS, 0), }; #endif diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt index 3b571bd..db93293 100644 --- a/crawl-ref/source/dat/descript/species.txt +++ b/crawl-ref/source/dat/descript/species.txt @@ -134,3 +134,7 @@ Vampire Shifting between the states of life and undeath, they're accomplished stabbers and casters. %%%% +Vine Stalker + +Very frail, manavampiric, regenerative, bitey. +%%%% diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 6026242..ff4ae88 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3796,6 +3796,7 @@ string get_ghost_description(const monster_info &mi, bool concise) case SP_MUMMY: case SP_GHOUL: case SP_FORMICID: + case SP_VINE_STALKER: str += 10; break; diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index c0737a1..5a07743 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2943,6 +2943,7 @@ enum mutation_type MUT_ACUTE_VISION, MUT_AGILE, + MUT_ANTIMAGIC_BITE, MUT_BERSERK, MUT_BLINK, MUT_BLURRY_VISION, @@ -2979,6 +2980,7 @@ enum mutation_type MUT_MUTATION_RESISTANCE, MUT_NEGATIVE_ENERGY_RESISTANCE, MUT_NIGHTSTALKER, + MUT_NO_DEVICE_HEAL, MUT_PASSIVE_FREEZE, MUT_PASSIVE_MAPPING, MUT_POISON_RESISTANCE, @@ -3384,7 +3386,8 @@ enum species_type SP_LAVA_ORC, SP_GARGOYLE, SP_FORMICID, - LAST_VALID_SPECIES = SP_FORMICID, + SP_VINE_STALKER, + LAST_VALID_SPECIES = SP_VINE_STALKER, // The high scores viewer still needs enums for removed species. SP_ELF, // (placeholder) SP_HILL_DWARF, // (placeholder) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 9cc79aa..f566368 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -2889,7 +2889,8 @@ bool is_emergency_item(const item_def &item) if (you.species == SP_FORMICID) return false; case WAND_HEAL_WOUNDS: - return true; + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + return true; default: return false; } @@ -2915,8 +2916,10 @@ bool is_emergency_item(const item_def &item) case POT_SPEED: if (you_worship(GOD_CHEIBRIADOS) || you.species == SP_FORMICID) return false; - case POT_CURING: case POT_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + return false; + case POT_CURING: case POT_RESISTANCE: case POT_MAGIC: return true; diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index f298e2a..2417b44 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1231,6 +1231,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) aux_verb.clear(); damage_brand = SPWPN_NORMAL; aux_damage = 0; + int bite_damage = 0; switch (atk) { @@ -1318,8 +1319,9 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) case UNAT_BITE: aux_attack = aux_verb = "bite"; - aux_damage += you.has_usable_fangs() * 2; - aux_damage += div_rand_round(max(you.strength()-10, 0), 5); + bite_damage += you.has_usable_fangs() * 2; + bite_damage += div_rand_round(max(you.strength()-10, 0), 5); + aux_damage += bite_damage; noise_factor = 75; // prob of vampiric bite: @@ -1333,6 +1335,15 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) damage_brand = SPWPN_VAMPIRICISM; } + if (player_mutation_level(MUT_ANTIMAGIC_BITE)) + { + //Change formula to fangs_level*3 + str/6 + aux_damage -= bite_damage; + aux_damage += you.has_usable_fangs() * 3; + aux_damage += div_rand_round(you.strength(), 6); + damage_brand = SPWPN_ANTIMAGIC; + } + if (player_mutation_level(MUT_ACIDIC_BITE)) { damage_brand = SPWPN_ACID; @@ -1561,6 +1572,14 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) attacker->start_constricting(*defender); break; + case UNAT_BITE: + if (you.mutation[MUT_ANTIMAGIC_BITE] && you.magic_points < you.max_magic_points + && damage_done > 0) + { + inc_mp(random2(damage_done) + random2(damage_done) + 2); + mprf("You feel invigorated."); + } + default: break; } @@ -5420,10 +5439,11 @@ bool melee_attack::_extra_aux_attack(unarmed_attack_type atk, bool is_uc) && !one_chance_in(3); case UNAT_BITE: - return (is_uc + return ((is_uc || you.has_usable_fangs() || player_mutation_level(MUT_ACIDIC_BITE)) - && x_chance_in_y(2, 5); + && x_chance_in_y(2, 5)) + || you.mutation[MUT_ANTIMAGIC_BITE]; case UNAT_PUNCH: return is_uc && !one_chance_in(3); diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 33d9907..34f688f 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1247,6 +1247,26 @@ "acidic bite" }, +{ MUT_ANTIMAGIC_BITE, 0, 1, false, true, true, + "antimagic bite", + + {"Your bite disrupts and absorbs the magic of your enemies.", "", ""}, + {"You feel a sudden thirst for magic.", "", ""}, + {"Your magical appetite wanes.", "", ""}, + + "antimagic bite bite" +}, + +{ MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, + "no device heal", + + {"Potions and wands cannot restore your HP.", "", ""}, + {"Your system rejects artificial healing.", "", ""}, + {"Your system accepts artificial healing.", "", ""}, + + "no device heal" +}, + // Scale mutations { MUT_DISTORTION_FIELD, 2, 3, false, false, false, "repulsion field", diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index 0dbbf4b..41db5e3 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -1193,6 +1193,7 @@ static int _handle_conflicting_mutations(mutation_type mutation, { MUT_ACUTE_VISION, MUT_BLURRY_VISION, 1}, { MUT_FAST, MUT_SLOW, 1}, { MUT_MUTATION_RESISTANCE, MUT_EVOLUTION, -1}, + { MUT_ANTIMAGIC_BITE, MUT_ACIDIC_BITE, -1}, }; // If we have one of the pair, delete all levels of the other, diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc index e980188..a8aeaad 100644 --- a/crawl-ref/source/ng-restr.cc +++ b/crawl-ref/source/ng-restr.cc @@ -657,6 +657,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_OCTOPODE: case SP_BASE_DRACONIAN: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -682,6 +683,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; case SP_SPRIGGAN: @@ -718,6 +720,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -767,6 +770,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_DJINNI: case SP_FORMICID: case SP_GARGOYLE: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index 7dc5cf5..723e008 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -78,6 +78,7 @@ static void _species_stat_init(species_type which_species) case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24 case SP_TENGU: s = 8; i = 8; d = 9; break; // 25 case SP_FORMICID: s = 12; i = 7; d = 6; break; // 25 + case SP_VINE_STALKER: s = 8; i = 6; d = 7; break; // 21 case SP_KOBOLD: s = 7; i = 6; d = 10; break; // 23 case SP_HALFLING: s = 5; i = 8; d = 11; break; // 24 @@ -326,6 +327,14 @@ void give_basic_mutations(species_type speci) case SP_DJINNI: you.mutation[MUT_NEGATIVE_ENERGY_RESISTANCE] = 3; break; + case SP_VINE_STALKER: + you.mutation[MUT_FANGS] = 2; + you.mutation[MUT_ANTIMAGIC_BITE] = 1; + you.mutation[MUT_REGENERATION] = 2; + you.mutation[MUT_UNBREATHING] = 1; + you.mutation[MUT_MANA_SHIELD] = 1; + you.mutation[MUT_NO_DEVICE_HEAL] = 1; + break; default: break; } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 294200e..693453c 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3561,6 +3561,20 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } break; + case SP_VINE_STALKER: + if (!(you.experience_level % 4)) + { + modify_stat((coinflip() ? STAT_STR + : STAT_DEX), 1, false, + "level gain"); + } + + if (you.experience_level == 8) + { + perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } + break; + default: break; } @@ -6891,6 +6905,7 @@ int player_res_magic(bool calc_unid, bool temp) break; case SP_NAGA: case SP_MUMMY: + case SP_VINE_STALKER: rm = you.experience_level * 5; break; case SP_PURPLE_DRACONIAN: diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 5d86e99..884cbf2 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -81,7 +81,23 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } - inc_hp((5 + random2(7)) / factor); + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + if (potion && was_known && you.duration[DUR_CONF] == 0 + && you.duration[DUR_POISONING] == 0) + { + mpr("You have to ailments to cure."); + return false; + } + mpr("You feel vaguely better."); + break; + } + + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + { + inc_hp((5 + random2(7)) / factor); + } + mpr("You feel better."); // Only fix rot when healed to full. @@ -109,6 +125,17 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + if (potion && was_known) + { + mpr("That would not heal you."); + return false; + } + mpr("That seemed strangely inert."); + break; + } + inc_hp((10 + random2avg(28, 3)) / factor); mpr("You feel much better."); diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index e0e03ed..8143835 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,6 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, @@ -67,7 +68,7 @@ static const char * Species_Abbrev_List[NUM_SPECIES] = // the draconians "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Ce", "Dg", "Sp", "Mi", "Ds", "Gh", "Te", "Mf", "Vp", "DD", - "Fe", "Op", "Dj", "LO", "Gr", "Fo", + "Fe", "Op", "Dj", "LO", "Gr", "Fo", "VS", // placeholders "El", "HD", "OM", "GE", "Gn", "MD", #if TAG_MAJOR_VERSION > 34 @@ -192,17 +193,18 @@ string species_name(species_type speci, bool genus, bool adj) default: switch (speci) { - case SP_HUMAN: res = "Human"; break; - case SP_HALFLING: res = "Halfling"; break; - case SP_KOBOLD: res = "Kobold"; break; - case SP_MUMMY: res = "Mummy"; break; - case SP_NAGA: res = "Naga"; break; - case SP_CENTAUR: res = "Centaur"; break; - case SP_SPRIGGAN: res = "Spriggan"; break; - case SP_MINOTAUR: res = "Minotaur"; break; - case SP_TENGU: res = "Tengu"; break; - case SP_GARGOYLE: res = "Gargoyle"; break; - case SP_FORMICID: res = "Formicid"; break; + case SP_HUMAN: res = "Human"; break; + case SP_HALFLING: res = "Halfling"; break; + case SP_KOBOLD: res = "Kobold"; break; + case SP_MUMMY: res = "Mummy"; break; + case SP_NAGA: res = "Naga"; break; + case SP_CENTAUR: res = "Centaur"; break; + case SP_SPRIGGAN: res = "Spriggan"; break; + case SP_MINOTAUR: res = "Minotaur"; break; + case SP_TENGU: res = "Tengu"; break; + case SP_GARGOYLE: res = "Gargoyle"; break; + case SP_FORMICID: res = "Formicid"; break; + case SP_VINE_STALKER: res = "Vine Stalker"; break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); @@ -390,6 +392,11 @@ monster_type player_species_to_mons_species(species_type species) return MONS_DJINNI; case SP_FORMICID: return MONS_FORMICID; + //MONS_VINE_STALKER currently unimplemented + /* + case SP_VINE_STALKER: + return MONS_VINE_STALKER; + */ case SP_ELF: case SP_HILL_DWARF: case SP_MOUNTAIN_DWARF: @@ -437,6 +444,7 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: + case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -486,6 +494,7 @@ int species_hp_modifier(species_type species) case SP_FELID: return -4; case SP_SPRIGGAN: + case SP_VINE_STALKER: return -3; case SP_DEEP_ELF: case SP_TENGU: @@ -541,6 +550,7 @@ int species_mp_modifier(species_type species) return 0; case SP_SLUDGE_ELF: case SP_TENGU: + case SP_VINE_STALKER: return 1; case SP_FELID: case SP_HIGH_ELF: diff --git a/crawl-ref/source/spl-goditem.cc b/crawl-ref/source/spl-goditem.cc index ad2240c..11977ce 100644 --- a/crawl-ref/source/spl-goditem.cc +++ b/crawl-ref/source/spl-goditem.cc @@ -382,6 +382,8 @@ int cast_healing(int pow, int max_pow, bool divine_ability, { pow = min(50, pow); max_pow = min(50, max_pow); + if (!not_self && !divine_ability && you.mutation[MUT_NO_DEVICE_HEAL]) + return 0; return _healing_spell(pow + roll_dice(2, pow) - 2, (3 * max_pow) - 2, divine_ability, where, not_self, mode); } diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc index 819af2c..bfba4fc 100644 --- a/crawl-ref/source/tilepick-p.cc +++ b/crawl-ref/source/tilepick-p.cc @@ -630,6 +630,11 @@ tileidx_t tilep_species_to_base_tile(int sp, int level) return TILEP_BASE_DJINNI; case SP_FORMICID: return TILEP_BASE_FORMICID; + //TILEP_BASE_VINE_STALKER currently unimplemented + /* + case SP_VINE_STALKER: + return TILEP_BASE_VINE_STALKER; + */ default: return TILEP_BASE_HUMAN; } -- 1.7.9.5 From 777a65d801a0a11e5bd73b77f001f2fc9a63e08e Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 09:03:32 +0000 Subject: [PATCH 02/22] Add two to all vine stalker starting stats. --- crawl-ref/source/ng-setup.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index 723e008..eea6a6f 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -78,7 +78,7 @@ static void _species_stat_init(species_type which_species) case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24 case SP_TENGU: s = 8; i = 8; d = 9; break; // 25 case SP_FORMICID: s = 12; i = 7; d = 6; break; // 25 - case SP_VINE_STALKER: s = 8; i = 6; d = 7; break; // 21 + case SP_VINE_STALKER: s = 10; i = 8; d = 9; break; // 27 case SP_KOBOLD: s = 7; i = 6; d = 10; break; // 23 case SP_HALFLING: s = 5; i = 8; d = 11; break; // 24 -- 1.7.9.5 From cbdf76ee4a3cfa69bd0e09274d7b54da4cb7f62d Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 09:07:08 +0000 Subject: [PATCH 03/22] Change MUT_ANTIMAGIC_BITE bite formula to str/6 + xl/3. --- crawl-ref/source/melee_attack.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 2417b44..e87c0da 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1231,7 +1231,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) aux_verb.clear(); damage_brand = SPWPN_NORMAL; aux_damage = 0; - int bite_damage = 0; + int str_bite_damage = 0; switch (atk) { @@ -1319,9 +1319,9 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) case UNAT_BITE: aux_attack = aux_verb = "bite"; - bite_damage += you.has_usable_fangs() * 2; - bite_damage += div_rand_round(max(you.strength()-10, 0), 5); - aux_damage += bite_damage; + aux_damage += you.has_usable_fangs() * 2; + str_bite_damage += div_rand_round(max(you.strength()-10, 0), 5); + aux_damage += str_bite_damage; noise_factor = 75; // prob of vampiric bite: @@ -1338,9 +1338,8 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { //Change formula to fangs_level*3 + str/6 - aux_damage -= bite_damage; - aux_damage += you.has_usable_fangs() * 3; - aux_damage += div_rand_round(you.strength(), 6); + aux_damage -= str_bite_damage; + aux_damage += div_rand_round(you.strength(), 6) + div_rand_round(you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; } -- 1.7.9.5 From 70b84982f803d5cf2f7e0fa3f0f13cb0156841ca Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 09:08:31 +0000 Subject: [PATCH 04/22] Make 'You feel invigorated' print after the bite message. --- crawl-ref/source/melee_attack.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index e87c0da..33a779a 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1571,14 +1571,6 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) attacker->start_constricting(*defender); break; - case UNAT_BITE: - if (you.mutation[MUT_ANTIMAGIC_BITE] && you.magic_points < you.max_magic_points - && damage_done > 0) - { - inc_mp(random2(damage_done) + random2(damage_done) + 2); - mprf("You feel invigorated."); - } - default: break; } @@ -1598,6 +1590,7 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (damage_brand == SPWPN_VENOM && coinflip()) poison_monster(defender->as_monster(), &you); + // Normal vampiric biting attack, not if already got stabbing special. if (damage_brand == SPWPN_VAMPIRICISM && you.species == SP_VAMPIRE && (!stab_attempt || stab_bonus <= 0)) @@ -1605,6 +1598,13 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) _player_vampire_draws_blood(defender->as_monster(), damage_done); } + if (atk == UNAT_BITE && you.mutation[MUT_ANTIMAGIC_BITE] && + you.magic_points < you.max_magic_points && damage_done > 0) + { + inc_mp(random2(damage_done) + random2(damage_done) + 2); + mprf("You feel invigorated."); + } + if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN && grd(you.pos()) == DNGN_DEEP_WATER && feat_is_water(grd(defender->as_monster()->pos()))) -- 1.7.9.5 From a1aa368c0d4eb407f363400550e9191241f022a3 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 05:33:42 +0000 Subject: [PATCH 05/22] Make vine stalkers immune to rotting. Since they cannot heal from potions or wands, they cannot remove rot, so giving vine stalkers rRot circumvents this issue. If this is undesirable, they can regenerate rot like they regenerate hp, or they can get Mu's self-restoration ability. --- crawl-ref/source/dat/descript/species.txt | 4 +++- crawl-ref/source/ng-setup.cc | 2 +- crawl-ref/source/player.cc | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt index db93293..d404aae 100644 --- a/crawl-ref/source/dat/descript/species.txt +++ b/crawl-ref/source/dat/descript/species.txt @@ -136,5 +136,7 @@ and casters. %%%% Vine Stalker -Very frail, manavampiric, regenerative, bitey. +Frail symbionts, vine stalkers regenerate quickly but cannot regain hp from +devices or potions. They are protected by their magical reserves, and pack a +mean bite that replenishes them. %%%% diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index eea6a6f..725d7ad 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -330,7 +330,7 @@ void give_basic_mutations(species_type speci) case SP_VINE_STALKER: you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; - you.mutation[MUT_REGENERATION] = 2; + you.mutation[MUT_REGENERATION] = 3; you.mutation[MUT_UNBREATHING] = 1; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 693453c..e4ade43 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -6798,7 +6798,7 @@ int player::res_rotting(bool temp) const if (temp && (petrified() || form == TRAN_STATUE || form == TRAN_WISP)) return 3; - if (species == SP_GARGOYLE) + if (species == SP_GARGOYLE || species == SP_VINE_STALKER) return 3; if (mutation[MUT_FOUL_STENCH]) -- 1.7.9.5 From 01c43fd4f4fa4e3d8f7f0f488057a8193a1211ce Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 06:28:53 +0000 Subject: [PATCH 06/22] Make vine stalker antimagic actually apply, and apply when mp == mhp. --- crawl-ref/source/melee_attack.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 33a779a..3c1bbc7 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1598,9 +1598,10 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) _player_vampire_draws_blood(defender->as_monster(), damage_done); } - if (atk == UNAT_BITE && you.mutation[MUT_ANTIMAGIC_BITE] && - you.magic_points < you.max_magic_points && damage_done > 0) + if (damage_brand == SPWPN_ANTIMAGIC && you.mutation[MUT_ANTIMAGIC_BITE] + && damage_done > 0) { + antimagic_affects_defender(); inc_mp(random2(damage_done) + random2(damage_done) + 2); mprf("You feel invigorated."); } -- 1.7.9.5 From bff194c234f32e0f503c33a34365c41e9452cee0 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 07:00:30 +0000 Subject: [PATCH 07/22] Correct vine stalker bite messaging. --- crawl-ref/source/melee_attack.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 3c1bbc7..4f56fd0 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1583,7 +1583,7 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) { mprf("%s is splashed with acid.", defender->name(DESC_THE).c_str()); - corrode_monster(defender->as_monster(), &you); + corrode_monster(defender->as_monster(), &you); } // TODO: remove this? Unarmed poison attacks? @@ -1602,6 +1602,8 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) && damage_done > 0) { antimagic_affects_defender(); + mprf("You drain %s magic.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); inc_mp(random2(damage_done) + random2(damage_done) + 2); mprf("You feel invigorated."); } -- 1.7.9.5 From 120e5cd613cd9ed7b8cb8eb925b16cc078d07ebd Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 23:33:17 +0000 Subject: [PATCH 08/22] Decrease vine stalker apts. Vine stalkers had an easy early game, combining their bite, regeneration, mana drain, spirit shield, and +2 Fighting. This should make it a little more interesting by reducing their Fighting to 0, reducing weapon skills by one point, and Dodging and Armour by two points. --- crawl-ref/source/aptitudes.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 66e9170..031eb6c 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1453,19 +1453,19 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_EVOCATIONS, 2), // SP_VINE_STALKER - APT(SP_VINE_STALKER, SK_FIGHTING, 2), - APT(SP_VINE_STALKER, SK_SHORT_BLADES, 0), - APT(SP_VINE_STALKER, SK_LONG_BLADES, 0), - APT(SP_VINE_STALKER, SK_AXES, 0), - APT(SP_VINE_STALKER, SK_MACES_FLAILS, 0), - APT(SP_VINE_STALKER, SK_POLEARMS, 0), - APT(SP_VINE_STALKER, SK_STAVES, 0), - APT(SP_VINE_STALKER, SK_SLINGS, 0), - APT(SP_VINE_STALKER, SK_BOWS, 0), - APT(SP_VINE_STALKER, SK_CROSSBOWS, 0), - APT(SP_VINE_STALKER, SK_THROWING, 0), - APT(SP_VINE_STALKER, SK_ARMOUR, 0), - APT(SP_VINE_STALKER, SK_DODGING, 0), + APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), + APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), + APT(SP_VINE_STALKER, SK_AXES, -1), + APT(SP_VINE_STALKER, SK_MACES_FLAILS, -1), + APT(SP_VINE_STALKER, SK_POLEARMS, -1), + APT(SP_VINE_STALKER, SK_STAVES, -1), + APT(SP_VINE_STALKER, SK_SLINGS, -1), + APT(SP_VINE_STALKER, SK_BOWS, -1), + APT(SP_VINE_STALKER, SK_CROSSBOWS, -1), + APT(SP_VINE_STALKER, SK_THROWING, -1), + APT(SP_VINE_STALKER, SK_ARMOUR, -2), + APT(SP_VINE_STALKER, SK_DODGING, -2), APT(SP_VINE_STALKER, SK_STEALTH, 3), #if TAG_MAJOR_VERSION == 34 APT(SP_VINE_STALKER, SK_STABBING, -99), @@ -1474,7 +1474,7 @@ static const species_skill_aptitude species_skill_aptitudes[] = #if TAG_MAJOR_VERSION == 34 APT(SP_VINE_STALKER, SK_TRAPS, -99), #endif - APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 1), + APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 0), APT(SP_VINE_STALKER, SK_SPELLCASTING, 0), APT(SP_VINE_STALKER, SK_CONJURATIONS, 0), APT(SP_VINE_STALKER, SK_HEXES, 0), -- 1.7.9.5 From 99786266f633dfe400bf1fbe9757957135346d41 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 23:52:33 +0000 Subject: [PATCH 09/22] Double vine stalkers' bite's antimagic. Even when the bite was killing a spellcaster by itself, the spellcaster would rarely falter. This doubles the antimagic the bite applies. --- crawl-ref/source/melee_attack.cc | 15 +++++++++++++-- crawl-ref/source/melee_attack.h | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 4f56fd0..df10ca8 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1601,7 +1601,16 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (damage_brand == SPWPN_ANTIMAGIC && you.mutation[MUT_ANTIMAGIC_BITE] && damage_done > 0) { - antimagic_affects_defender(); + bool spell_user = false; + + if (defender->as_monster()->can_use_spells() + && !defender->as_monster()->is_priest() + && !mons_class_flag(defender->type, M_FAKE_SPELLS)) + { + spell_user = true; + } + + antimagic_affects_defender(true); mprf("You drain %s magic.", defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); inc_mp(random2(damage_done) + random2(damage_done) + 2); @@ -2476,7 +2485,7 @@ bool melee_attack::distortion_affects_defender() return false; } -void melee_attack::antimagic_affects_defender() +void melee_attack::antimagic_affects_defender(bool amplify_effect = false) { if (defender->is_player()) { @@ -2493,6 +2502,8 @@ void melee_attack::antimagic_affects_defender() { int dur = div_rand_round(damage_done * 8, defender->as_monster()->hit_dice); dur = random2(dur + 1) * BASELINE_DELAY; + if (amplify_effect) + dur *= 2; defender->as_monster()->add_ench(mon_enchant(ENCH_ANTIMAGIC, 0, attacker, // doesn't matter dur)); diff --git a/crawl-ref/source/melee_attack.h b/crawl-ref/source/melee_attack.h index c387471..d2ca0f3 100644 --- a/crawl-ref/source/melee_attack.h +++ b/crawl-ref/source/melee_attack.h @@ -125,7 +125,7 @@ private: /* Brand / Attack Effects */ // Returns true if the defender is banished. bool distortion_affects_defender(); - void antimagic_affects_defender(); + void antimagic_affects_defender(bool amplify_effect); void pain_affects_defender(); void chaos_affects_defender(); void chaos_affects_attacker(); -- 1.7.9.5 From 14e5183e33cdc64f6c8c3c5e95c07f5754a9636d Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Thu, 19 Dec 2013 23:59:58 +0000 Subject: [PATCH 10/22] Halve vine stalkers' mana drain on non-spellcasters. While they should be able to rely on their defining feature consistently, it is odd that a troll provides roughly as much mana as a deep elf. If this is an excessive penalty, then non-spellcaster mana drain can provide the old amount of mana, and spellcaster mana drain can provide more than that. --- crawl-ref/source/melee_attack.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index df10ca8..3c991f5 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1613,8 +1613,14 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) antimagic_affects_defender(true); mprf("You drain %s magic.", defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); - inc_mp(random2(damage_done) + random2(damage_done) + 2); - mprf("You feel invigorated."); + inc_mp(random2(damage_done) + 1); + + if (spell_user) // The mana drain is more effective on spellcasters + { + inc_mp(random2(damage_done) + 1); + } + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); } if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN -- 1.7.9.5 From 83cff507168d49648413f8f40c05637e3578f74c Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 09:31:25 +0000 Subject: [PATCH 11/22] Remove Unbreathing from vine stalkers. It was added to prevent miasma from rotting them; since it doesn't actually do that, it has no reason to stay. --- crawl-ref/source/ng-setup.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index 725d7ad..aa9e40c 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -331,7 +331,6 @@ void give_basic_mutations(species_type speci) you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; you.mutation[MUT_REGENERATION] = 3; - you.mutation[MUT_UNBREATHING] = 1; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; break; -- 1.7.9.5 From 9fe86df55134ff928dd82b92165b69ac92a71561 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 10:21:51 +0000 Subject: [PATCH 12/22] Add vine stalkers to manual. --- crawl-ref/docs/crawl_manual.reST | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index f198d55..1ec36a9 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1788,6 +1788,32 @@ Gargoyles skilled with blunt weapons and in unarmed combat. They can also be exceptional earth-based conjurers. +Vine Stalkers + Limber in shape, Vine Stalkers are anthropomorphic masses of thick vines. + They possess a once-humanoid core, parasitized moments before death by the + magical vines. Lacking any other discernible features, their faces are + dominated by their disproportionate, vicious maw with which they disrupt and + devour the magical energies of their foes. + + Magic courses freely through their bodies, and they can not only share any + damage taken with their magical reserves, but in fact physically regenerate + at an alarming rate. However these traits come at a price: the dual nature of + their bodies makes them frail to the extreme and they cannot benefit from + potions or wands to heal their wounds. + + Living examples of adaptation, Vine Stalkers level up quickly and lend well + to an all-out offensive style; trusting their stealth to choose their prey + and then their regenerating capabilities to power through the wounds they may + sustain in battle. Many members of the species however, are seen wielding + magic quite competently and then switching to a hybrid style when their + reserves start to run low, thus replenishing their shroud of magic and their + spells' fuel with each voracious bite. + + Their great offensive capabilities and intrinsic regeneration lead some Vine + Stalkers to eschew more traditional defenses such as armour and dodging, + although this proves fatally unwise often times when their judgement of their + prey fails and they bite more than they can possibly chew. + Orcs ======================================== -- 1.7.9.5 From ac96b234d413c7b8cbb8fdf31fbebeac8cee2dac Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 10:25:46 +0000 Subject: [PATCH 13/22] Remove extra vine stalker entry from manual. --- crawl-ref/docs/crawl_manual.reST | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index 1ec36a9..f501a2d 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1859,36 +1859,6 @@ Lava Orcs that Hill Orcs do). They're pretty bad spellcasters, except for transmutations, fire and earth magic. -Vine Stalkers - A vine stalker is a humanoid, twisted mass of thick vines. These spread from - a once-human torso, covered in rough bark which contains a slowly beating - heart that now- rather than blood, pumps the magical energies that sustain - and envelop the stalker. - - Its shape limber and its movements sudden, this is a hugely violent creature - that attacks with astonishing ferocity any being bearing the smallest drop - of magical essence to sate its thirst. Lacking any other discernible features, - its face is dominated by a disproportinate, vicious maw and two small slits, - each containing a magically condensated blue crystal with which the stalker - can lay its gaze on any prey. - - While terrifyingly voracious and strong, the vine stalker's symbiotic body is - frail to the extreme. It is however, also protected by the very magical - energies it devours and, as many an unfortunate spellcaster have discovered - much too late, their ferocious bites will replenish them quickly and infuse - renewed strength into their bodies. Further counteracting their frailness, - the stalker's stream of magic restores any wounds and breaches it sustains at - an alarmingly fast rate. However, due to this highly specialized healing - system, the stalker's human core is no longer able to handle natural healing - measures such as potions or wands of heal wounds. They can, however, still - benefit from the non-healing side of alchemy and divine intervention will - still affect them. - - Having been created not by necromantic rituals but by a terrible act of - parasitation on a mortally wounded humanoid who never knew the release of - death, these beings are still accepted by the good gods as worshippers and - can devote themselves to worshipment of Fedhas as well. - Elves ======================================== -- 1.7.9.5 From 4f71798b687e0cd51a904675f74f41b77ea2b127 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 12:29:26 +0000 Subject: [PATCH 14/22] Remove useless comment. --- crawl-ref/source/species.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index 8143835..dc92323 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -392,11 +392,6 @@ monster_type player_species_to_mons_species(species_type species) return MONS_DJINNI; case SP_FORMICID: return MONS_FORMICID; - //MONS_VINE_STALKER currently unimplemented - /* - case SP_VINE_STALKER: - return MONS_VINE_STALKER; - */ case SP_ELF: case SP_HILL_DWARF: case SP_MOUNTAIN_DWARF: -- 1.7.9.5 From 41d667f69ff918e4f11dfee2478e21a91b5dc998 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 12:39:14 +0000 Subject: [PATCH 15/22] Add vine stalker tiles. --- .../source/rltiles/player/base/vine_stalker_f.png | Bin 0 -> 800 bytes .../source/rltiles/player/base/vine_stalker_m.png | Bin 0 -> 778 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_f.png create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_m.png diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_f.png b/crawl-ref/source/rltiles/player/base/vine_stalker_f.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa47d487bfe7a0c389c6231a13d11c351f93e8 GIT binary patch literal 800 zcmV+*1K<3KP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~AC>O75T9E(%0<B3z zK~z}7#aF#<qd*Y;27@e`lS^OcDmp2J^9FW%Pl4_ouDARS*T)ojhP3z%a1mWZwH1jw z7m<jC&0Mi8EO-fUCdx<%Yj&95Z)e8D%=k*O@Wo`Cm_%e0R@utWxpqcfzi)M*>0?bX z!*hV83j_%u&LAQNKnB_CO2Ev8!Z?l*$1woF`~4RXDKN9){fPhoQ4}GHA`lTeV@ny( zpC%cd1<&Dq81g<084HW`lC<fm*y`heb}kJ|qs8wwU8Zv~8Px07aLxem^Y*sjJw82E zfM^1vNmnZdi0I;h=g>Y33z^Ns1K>FpNh;-r!a$|=>d`UaIb1pGVXL(SHQ)g=8xSY? z)@kO*caQ*n3Uwu~E`jn1fV}tOB;U%QZdjy%IQQy=T{FN~xw)Yu?kA<+;=m9Gsl&e; z<;*j%%`UR=zZr0fNW}>N@M}VaaYg<FW%RRAHFH;HKt?Z4dSoc@kY}afFDzg=mhv?$ z^v!@o^!+z8=m5zNj(Wr;e`ZT3TW*HcXnf^L1tOK4b%JShQ$xO;M_U4K8r`VKB`G}( zPP9)$m3jcLFV9lvVuaa&flwL}Ac(mIf0q?92#%$befNRVxK{JBmb?aIbwK4N_;({< zry+lv$%vOdJ0Sp?e*f`NS7WSPhUc(1x7eFovJ<Y{W_f^fomSnRZE%RGxsh{T&r2+* z8z3X6dJ}tnc_ubogZ?|AGA7ROcNzR$R$^s2Zkr<mETvjQssMHAmcaYetyrYeSlMa` zeky0d#~HZVfpL+6Ah|qMgG!ej*n#(=F_|V_km%j-{c}p7qO7-G)iat}_FxX=Yq(+I zAZ)XG83uJg4kd;7CfdB!htMDkNj?!%<A`l`GzHd4>p1RKu>9{=C)&K#my&^2vig45 et>d+>Wd8tyU;^bM4k$1H0000<MNUMnLSTY-)?@hq literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_m.png b/crawl-ref/source/rltiles/player/base/vine_stalker_m.png new file mode 100644 index 0000000000000000000000000000000000000000..bf616c10aa100944c14bb736e9e7986762866883 GIT binary patch literal 778 zcmV+l1NHogP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~9D<w(ZPFDZ`0+&fd zK~z}7#aFv-+b|S8H<4gyDYDhwI0XSRcaGL>{R5$&P@ub!FX+;}_K<JrD$iZC1T8di zQtK@!0tkUD-wqTXl4(ow10f)oBCqbb&qJD+8Lv4m@X90bEfSGeSVybb=guAt{l3?L zT^~D&8A%Al5s;REtU*K!fIPCtrGS}@!lEcp6a@ev`SJ^p6(9m6-*Nyzp6AH(97Ke{ zwWR^vXP1n-ge2rumhmdf7<U)!rle0#3u}x4&b|Uxpl05u%ePNHKsSFo_89;^+}@hC zACHf%Li81*PgidZ5K;GGBq3H=W@P3M4?q%vh}e}KGI}G>%?7@|QM0tf>hn(kz}v6y z0TBQq1U~(P?uH?4IK}|REK(q{va8*9xds-M*NB5s(DGb^iBJK_wR)Fp3odJ57HtvL zC?@m{?PdA`#84!p*F|8##if!t;aR}AyRcpxPb<ZO8cfzsS}q4iVOR>{iJ@F9H`WLd zG<z=!bh&Aw5Ljc6Fn~?&HJC|9ZH>_2ZUnS^5?VbY4Nw)II2C?hVwzvu5Cb*>4)`>` z)?J{6*0aNi{Y7XzRlk4#{8l>U2I7i<OaVy{<P&4z$e7v?!I52Hy&)$xkWbbjcW&gC z8?_jZY(vfSxG%fFEkJSAOSRPKVE~xEy8#jL)_HLd6{jVVtZoPDW77?)OUTc}OotPZ zOGqNX!fnY}q$)q20LyZJM2^0cx`gDmT^x;Kz{3rYl>)P&CM+6Oj3;L`fK3EaPnhG# zjSQbB0-Bg)y}g%~F8iG+1=>r^gk93=QufIW&`0m~g@dr%bklHB1MF37AHe*%dkCH6 zPS~7?)!ysYwxN|~Q#$^ynZ64Q8T04%iFu-1G50ar5LqAAf2*L&e3r5Ah5!Hn07*qo IM6N<$g8pby1^@s6 literal 0 HcmV?d00001 -- 1.7.9.5 From 71877adae43c56111ecd5c16533cf823b34ab1ae Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 12:41:28 +0000 Subject: [PATCH 16/22] Remove incorrect comment and enable vine stalker tiles. --- crawl-ref/source/tilepick-p.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc index bfba4fc..0189ae9 100644 --- a/crawl-ref/source/tilepick-p.cc +++ b/crawl-ref/source/tilepick-p.cc @@ -630,11 +630,8 @@ tileidx_t tilep_species_to_base_tile(int sp, int level) return TILEP_BASE_DJINNI; case SP_FORMICID: return TILEP_BASE_FORMICID; - //TILEP_BASE_VINE_STALKER currently unimplemented - /* case SP_VINE_STALKER: return TILEP_BASE_VINE_STALKER; - */ default: return TILEP_BASE_HUMAN; } -- 1.7.9.5 From 40b12cf33ea1b3ac6d6f2333c0940c4ae246e1eb Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 13:21:32 +0000 Subject: [PATCH 17/22] Add vine stalkers to dc-player.txt. --- crawl-ref/source/rltiles/dc-player.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt index 6158a89..e4a2f62 100644 --- a/crawl-ref/source/rltiles/dc-player.txt +++ b/crawl-ref/source/rltiles/dc-player.txt @@ -75,6 +75,8 @@ djinni_f DJINNI djinni_m %rim 1 formicid FORMICID +vine_stalker_f VINE_STALKER +vine_stalker_m # draconians draconian_f DRACONIAN DRACONIAN_FIRST -- 1.7.9.5 From 6dfebe5618a9fea1c37c38d6005c4189ed4cf43d Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 14:25:03 +0000 Subject: [PATCH 18/22] Reduce a line to below 80 characters. --- crawl-ref/source/melee_attack.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 3c991f5..fe099fd 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1339,7 +1339,8 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) { //Change formula to fangs_level*3 + str/6 aux_damage -= str_bite_damage; - aux_damage += div_rand_round(you.strength(), 6) + div_rand_round(you.get_experience_level(), 3); + aux_damage += div_rand_round(you.strength(), 6) + + div_rand_round(you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; } -- 1.7.9.5 From 6f6d151a64de49462101748bff95288c869ecf16 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 14:39:04 +0000 Subject: [PATCH 19/22] Mark potions and wands of heal wounds as useless for vine stalkers. --- crawl-ref/source/itemname.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index f566368..e77e6cd 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -3213,6 +3213,10 @@ bool is_useless_item(const item_def &item, bool temp) if (you.species == SP_FELID) return true; + if (you.mutation[MUT_NO_DEVICE_HEAL] + && item.sub_type == WAND_HEAL_WOUNDS) + return true; + if (item.sub_type == WAND_INVISIBILITY && item_type_known(item) && _invisibility_is_useless(temp)) @@ -3281,7 +3285,8 @@ bool is_useless_item(const item_def &item, bool temp) case POT_SLOWING: case POT_PARALYSIS: return you.species == SP_FORMICID; - + case POT_HEAL_WOUNDS: + return you.mutation[MUT_NO_DEVICE_HEAL]; case POT_INVISIBILITY: return _invisibility_is_useless(temp); } -- 1.7.9.5 From 6caab925f9e08e6cd9383ccd519bd0f568e2c86a Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 14:39:57 +0000 Subject: [PATCH 20/22] Rearrange unique vine stalker mutations to maintain save compatibility. --- crawl-ref/source/enum.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 5a07743..cf0f082 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2943,7 +2943,6 @@ enum mutation_type MUT_ACUTE_VISION, MUT_AGILE, - MUT_ANTIMAGIC_BITE, MUT_BERSERK, MUT_BLINK, MUT_BLURRY_VISION, @@ -2980,7 +2979,6 @@ enum mutation_type MUT_MUTATION_RESISTANCE, MUT_NEGATIVE_ENERGY_RESISTANCE, MUT_NIGHTSTALKER, - MUT_NO_DEVICE_HEAL, MUT_PASSIVE_FREEZE, MUT_PASSIVE_MAPPING, MUT_POISON_RESISTANCE, @@ -3033,6 +3031,8 @@ enum mutation_type MUT_FUMES, MUT_JUMP, MUT_EXOSKELETON, + MUT_ANTIMAGIC_BITE, + MUT_NO_DEVICE_HEAL, NUM_MUTATIONS, RANDOM_MUTATION, -- 1.7.9.5 From 5808324aa457aa259f47d3f5fa3371b88808b024 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 16:42:22 +0000 Subject: [PATCH 21/22] Make curing remove negative statuses for vine stalkers. --- crawl-ref/source/potion.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 884cbf2..03d56be 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -81,16 +81,15 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } - if (you.mutation[MUT_NO_DEVICE_HEAL]) + if (you.mutation[MUT_NO_DEVICE_HEAL] + && potion && was_known + && you.duration[DUR_CONF] == 0 + && you.duration[DUR_POISONING] == 0 + && you.rotting == 0 + && you.disease == 0) { - if (potion && was_known && you.duration[DUR_CONF] == 0 - && you.duration[DUR_POISONING] == 0) - { - mpr("You have to ailments to cure."); - return false; - } - mpr("You feel vaguely better."); - break; + mpr("You have no ailments to cure."); + return false; } if (!you.mutation[MUT_NO_DEVICE_HEAL]) -- 1.7.9.5 From 15eec60f80abdb2e90f649a42d05ac2fb3b60c78 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Fri, 20 Dec 2013 19:41:13 +0000 Subject: [PATCH 22/22] Change the vine stalker bite formula. It was overly strong at the start of the game, so now it does not scale with strength, and scales twice as well with xl. --- crawl-ref/source/melee_attack.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index fe099fd..98c1ef5 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1339,8 +1339,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) { //Change formula to fangs_level*3 + str/6 aux_damage -= str_bite_damage; - aux_damage += div_rand_round(you.strength(), 6) + - div_rand_round(you.get_experience_level(), 3); + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; } -- 1.7.9.5 vine_stalker_f.png [^] (800 bytes) 2013-12-21 05:22 vine_stalker_m.png [^] (778 bytes) 2013-12-21 05:23 stalker.png [^] (587 bytes) 2013-12-21 18:31 stalker_fixed.png [^] (552 bytes) 2013-12-21 22:23 vine_stalkers_squashed.patch [^] (29,986 bytes) 2013-12-25 06:16 [Show Content] [Hide Content] From 05528b28d081ea59e96ab3fb4127d98f842f40b2 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 18 Dec 2013 20:32:19 +0000 Subject: [PATCH] Vine stalkers added. Weirdness and Mutations: - Fangs II (Becomes III at xl8) - Antimagic bite (Much stronger than standard bite, bites every turn, applies antimagic brand, and restores your mana) - Potions and wands cannot restore your HP - Regen III - Unbreathing - Spirit shield - HP -3 - MP +1 --- crawl-ref/docs/crawl_manual.reST | 26 +++++++++++ crawl-ref/source/acquire.cc | 4 +- crawl-ref/source/aptitudes.h | 39 ++++++++++++++++ crawl-ref/source/dat/descript/species.txt | 6 +++ crawl-ref/source/describe.cc | 1 + crawl-ref/source/enum.h | 5 +- crawl-ref/source/itemname.cc | 14 ++++-- crawl-ref/source/melee_attack.cc | 49 ++++++++++++++++++-- crawl-ref/source/melee_attack.h | 2 +- crawl-ref/source/mutation-data.h | 20 ++++++++ crawl-ref/source/mutation.cc | 1 + crawl-ref/source/ng-restr.cc | 4 ++ crawl-ref/source/ng-setup.cc | 8 ++++ crawl-ref/source/player.cc | 17 ++++++- crawl-ref/source/potion.cc | 28 ++++++++++- crawl-ref/source/rltiles/dc-player.txt | 2 + .../source/rltiles/player/base/vine_stalker_f.png | Bin 0 -> 800 bytes .../source/rltiles/player/base/vine_stalker_m.png | Bin 0 -> 778 bytes crawl-ref/source/species.cc | 29 +++++++----- crawl-ref/source/spl-goditem.cc | 2 + crawl-ref/source/tilepick-p.cc | 2 + 21 files changed, 234 insertions(+), 25 deletions(-) create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_f.png create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_m.png diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index 0980b75..f501a2d 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1788,6 +1788,32 @@ Gargoyles skilled with blunt weapons and in unarmed combat. They can also be exceptional earth-based conjurers. +Vine Stalkers + Limber in shape, Vine Stalkers are anthropomorphic masses of thick vines. + They possess a once-humanoid core, parasitized moments before death by the + magical vines. Lacking any other discernible features, their faces are + dominated by their disproportionate, vicious maw with which they disrupt and + devour the magical energies of their foes. + + Magic courses freely through their bodies, and they can not only share any + damage taken with their magical reserves, but in fact physically regenerate + at an alarming rate. However these traits come at a price: the dual nature of + their bodies makes them frail to the extreme and they cannot benefit from + potions or wands to heal their wounds. + + Living examples of adaptation, Vine Stalkers level up quickly and lend well + to an all-out offensive style; trusting their stealth to choose their prey + and then their regenerating capabilities to power through the wounds they may + sustain in battle. Many members of the species however, are seen wielding + magic quite competently and then switching to a hybrid style when their + reserves start to run low, thus replenishing their shroud of magic and their + spells' fuel with each voracious bite. + + Their great offensive capabilities and intrinsic regeneration lead some Vine + Stalkers to eschew more traditional defenses such as armour and dodging, + although this proves fatally unwise often times when their judgement of their + prey fails and they bite more than they can possibly chew. + Orcs ======================================== diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index 86b59f8..9ebd7fe 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -712,8 +712,10 @@ static int _acquirement_wand_subtype() // First, weight according to usefulness. switch (type) { - case WAND_HASTING: // each 17.9%, group unknown each 26.3% case WAND_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + w = 0; break; + case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% w = 15; break; diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 2211078..031eb6c 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1451,6 +1451,45 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_POISON_MAGIC, 3), APT(SP_FORMICID, SK_INVOCATIONS, 2), APT(SP_FORMICID, SK_EVOCATIONS, 2), + + // SP_VINE_STALKER + APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), + APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), + APT(SP_VINE_STALKER, SK_AXES, -1), + APT(SP_VINE_STALKER, SK_MACES_FLAILS, -1), + APT(SP_VINE_STALKER, SK_POLEARMS, -1), + APT(SP_VINE_STALKER, SK_STAVES, -1), + APT(SP_VINE_STALKER, SK_SLINGS, -1), + APT(SP_VINE_STALKER, SK_BOWS, -1), + APT(SP_VINE_STALKER, SK_CROSSBOWS, -1), + APT(SP_VINE_STALKER, SK_THROWING, -1), + APT(SP_VINE_STALKER, SK_ARMOUR, -2), + APT(SP_VINE_STALKER, SK_DODGING, -2), + APT(SP_VINE_STALKER, SK_STEALTH, 3), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_STABBING, -99), +#endif + APT(SP_VINE_STALKER, SK_SHIELDS, -1), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_TRAPS, -99), +#endif + APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 0), + APT(SP_VINE_STALKER, SK_SPELLCASTING, 0), + APT(SP_VINE_STALKER, SK_CONJURATIONS, 0), + APT(SP_VINE_STALKER, SK_HEXES, 0), + APT(SP_VINE_STALKER, SK_CHARMS, 0), + APT(SP_VINE_STALKER, SK_SUMMONINGS, 0), + APT(SP_VINE_STALKER, SK_NECROMANCY, 0), + APT(SP_VINE_STALKER, SK_TRANSLOCATIONS, 0), + APT(SP_VINE_STALKER, SK_TRANSMUTATIONS, 0), + APT(SP_VINE_STALKER, SK_FIRE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_ICE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_AIR_MAGIC, 0), + APT(SP_VINE_STALKER, SK_EARTH_MAGIC, 0), + APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0), + APT(SP_VINE_STALKER, SK_INVOCATIONS, 0), + APT(SP_VINE_STALKER, SK_EVOCATIONS, 0), }; #endif diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt index 3b571bd..d404aae 100644 --- a/crawl-ref/source/dat/descript/species.txt +++ b/crawl-ref/source/dat/descript/species.txt @@ -134,3 +134,9 @@ Vampire Shifting between the states of life and undeath, they're accomplished stabbers and casters. %%%% +Vine Stalker + +Frail symbionts, vine stalkers regenerate quickly but cannot regain hp from +devices or potions. They are protected by their magical reserves, and pack a +mean bite that replenishes them. +%%%% diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 3ca0392..bad9d69 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3796,6 +3796,7 @@ string get_ghost_description(const monster_info &mi, bool concise) case SP_MUMMY: case SP_GHOUL: case SP_FORMICID: + case SP_VINE_STALKER: str += 10; break; diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 7879dde..4b37929 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -3031,6 +3031,8 @@ enum mutation_type MUT_FUMES, MUT_JUMP, MUT_EXOSKELETON, + MUT_ANTIMAGIC_BITE, + MUT_NO_DEVICE_HEAL, NUM_MUTATIONS, RANDOM_MUTATION, @@ -3384,7 +3386,8 @@ enum species_type SP_LAVA_ORC, SP_GARGOYLE, SP_FORMICID, - LAST_VALID_SPECIES = SP_FORMICID, + SP_VINE_STALKER, + LAST_VALID_SPECIES = SP_VINE_STALKER, // The high scores viewer still needs enums for removed species. SP_ELF, // (placeholder) SP_HILL_DWARF, // (placeholder) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index bb59aaf..853d3ed 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -2889,7 +2889,8 @@ bool is_emergency_item(const item_def &item) if (you.species == SP_FORMICID) return false; case WAND_HEAL_WOUNDS: - return true; + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + return true; default: return false; } @@ -2915,8 +2916,10 @@ bool is_emergency_item(const item_def &item) case POT_SPEED: if (you_worship(GOD_CHEIBRIADOS) || you.species == SP_FORMICID) return false; - case POT_CURING: case POT_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + return false; + case POT_CURING: case POT_RESISTANCE: case POT_MAGIC: return true; @@ -3209,6 +3212,10 @@ bool is_useless_item(const item_def &item, bool temp) if (you.species == SP_FELID) return true; + if (you.mutation[MUT_NO_DEVICE_HEAL] + && item.sub_type == WAND_HEAL_WOUNDS) + return true; + if (item.sub_type == WAND_INVISIBILITY && item_type_known(item) && _invisibility_is_useless(temp)) @@ -3277,7 +3284,8 @@ bool is_useless_item(const item_def &item, bool temp) case POT_SLOWING: case POT_PARALYSIS: return you.species == SP_FORMICID; - + case POT_HEAL_WOUNDS: + return you.mutation[MUT_NO_DEVICE_HEAL]; case POT_INVISIBILITY: return _invisibility_is_useless(temp); } diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index c504faf..fae014e 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1238,6 +1238,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) aux_verb.clear(); damage_brand = SPWPN_NORMAL; aux_damage = 0; + int str_bite_damage = 0; switch (atk) { @@ -1326,7 +1327,8 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) case UNAT_BITE: aux_attack = aux_verb = "bite"; aux_damage += you.has_usable_fangs() * 2; - aux_damage += div_rand_round(max(you.strength()-10, 0), 5); + str_bite_damage += div_rand_round(max(you.strength()-10, 0), 5); + aux_damage += str_bite_damage; noise_factor = 75; // prob of vampiric bite: @@ -1340,6 +1342,14 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) damage_brand = SPWPN_VAMPIRICISM; } + if (player_mutation_level(MUT_ANTIMAGIC_BITE)) + { + //Change formula to fangs_level*3 + str/6 + aux_damage -= str_bite_damage; + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); + damage_brand = SPWPN_ANTIMAGIC; + } + if (player_mutation_level(MUT_ACIDIC_BITE)) { damage_brand = SPWPN_ACID; @@ -1580,13 +1590,14 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) { mprf("%s is splashed with acid.", defender->name(DESC_THE).c_str()); - corrode_monster(defender->as_monster(), &you); + corrode_monster(defender->as_monster(), &you); } // TODO: remove this? Unarmed poison attacks? if (damage_brand == SPWPN_VENOM && coinflip()) poison_monster(defender->as_monster(), &you); + // Normal vampiric biting attack, not if already got stabbing special. if (damage_brand == SPWPN_VAMPIRICISM && you.species == SP_VAMPIRE && (!stab_attempt || stab_bonus <= 0)) @@ -1594,6 +1605,31 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) _player_vampire_draws_blood(defender->as_monster(), damage_done); } + if (damage_brand == SPWPN_ANTIMAGIC && you.mutation[MUT_ANTIMAGIC_BITE] + && damage_done > 0) + { + bool spell_user = false; + + if (defender->as_monster()->can_use_spells() + && !defender->as_monster()->is_priest() + && !mons_class_flag(defender->type, M_FAKE_SPELLS)) + { + spell_user = true; + } + + antimagic_affects_defender(true); + mprf("You drain %s magic.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + inc_mp(random2(damage_done) + 1); + + if (spell_user) // The mana drain is more effective on spellcasters + { + inc_mp(random2(damage_done) + 1); + } + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } + if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN && grd(you.pos()) == DNGN_DEEP_WATER && feat_is_water(grd(defender->as_monster()->pos()))) @@ -2461,7 +2497,7 @@ bool melee_attack::distortion_affects_defender() return false; } -void melee_attack::antimagic_affects_defender() +void melee_attack::antimagic_affects_defender(bool amplify_effect = false) { if (defender->is_player()) { @@ -2478,6 +2514,8 @@ void melee_attack::antimagic_affects_defender() { int dur = div_rand_round(damage_done * 8, defender->as_monster()->hit_dice); dur = random2(dur + 1) * BASELINE_DELAY; + if (amplify_effect) + dur *= 2; defender->as_monster()->add_ench(mon_enchant(ENCH_ANTIMAGIC, 0, attacker, // doesn't matter dur)); @@ -5423,10 +5461,11 @@ bool melee_attack::_extra_aux_attack(unarmed_attack_type atk, bool is_uc) && !one_chance_in(3); case UNAT_BITE: - return (is_uc + return ((is_uc || you.has_usable_fangs() || player_mutation_level(MUT_ACIDIC_BITE)) - && x_chance_in_y(2, 5); + && x_chance_in_y(2, 5)) + || you.mutation[MUT_ANTIMAGIC_BITE]; case UNAT_PUNCH: return is_uc && !one_chance_in(3); diff --git a/crawl-ref/source/melee_attack.h b/crawl-ref/source/melee_attack.h index c387471..d2ca0f3 100644 --- a/crawl-ref/source/melee_attack.h +++ b/crawl-ref/source/melee_attack.h @@ -125,7 +125,7 @@ private: /* Brand / Attack Effects */ // Returns true if the defender is banished. bool distortion_affects_defender(); - void antimagic_affects_defender(); + void antimagic_affects_defender(bool amplify_effect); void pain_affects_defender(); void chaos_affects_defender(); void chaos_affects_attacker(); diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 33d9907..34f688f 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1247,6 +1247,26 @@ "acidic bite" }, +{ MUT_ANTIMAGIC_BITE, 0, 1, false, true, true, + "antimagic bite", + + {"Your bite disrupts and absorbs the magic of your enemies.", "", ""}, + {"You feel a sudden thirst for magic.", "", ""}, + {"Your magical appetite wanes.", "", ""}, + + "antimagic bite bite" +}, + +{ MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, + "no device heal", + + {"Potions and wands cannot restore your HP.", "", ""}, + {"Your system rejects artificial healing.", "", ""}, + {"Your system accepts artificial healing.", "", ""}, + + "no device heal" +}, + // Scale mutations { MUT_DISTORTION_FIELD, 2, 3, false, false, false, "repulsion field", diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index c4775b9..0c0e2c2 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -1192,6 +1192,7 @@ static int _handle_conflicting_mutations(mutation_type mutation, { MUT_ACUTE_VISION, MUT_BLURRY_VISION, 1}, { MUT_FAST, MUT_SLOW, 1}, { MUT_MUTATION_RESISTANCE, MUT_EVOLUTION, -1}, + { MUT_ANTIMAGIC_BITE, MUT_ACIDIC_BITE, -1}, }; // If we have one of the pair, delete all levels of the other, diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc index e980188..a8aeaad 100644 --- a/crawl-ref/source/ng-restr.cc +++ b/crawl-ref/source/ng-restr.cc @@ -657,6 +657,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_OCTOPODE: case SP_BASE_DRACONIAN: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -682,6 +683,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; case SP_SPRIGGAN: @@ -718,6 +720,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -767,6 +770,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_DJINNI: case SP_FORMICID: case SP_GARGOYLE: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index dc7372a..8249e9b 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -78,6 +78,7 @@ static void _species_stat_init(species_type which_species) case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24 case SP_TENGU: s = 8; i = 8; d = 9; break; // 25 case SP_FORMICID: s = 12; i = 7; d = 6; break; // 25 + case SP_VINE_STALKER: s = 10; i = 8; d = 9; break; // 27 case SP_KOBOLD: s = 7; i = 6; d = 10; break; // 23 case SP_HALFLING: s = 5; i = 8; d = 11; break; // 24 @@ -326,6 +327,13 @@ void give_basic_mutations(species_type speci) case SP_DJINNI: you.mutation[MUT_NEGATIVE_ENERGY_RESISTANCE] = 3; break; + case SP_VINE_STALKER: + you.mutation[MUT_FANGS] = 2; + you.mutation[MUT_ANTIMAGIC_BITE] = 1; + you.mutation[MUT_REGENERATION] = 3; + you.mutation[MUT_MANA_SHIELD] = 1; + you.mutation[MUT_NO_DEVICE_HEAL] = 1; + break; default: break; } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 928943f..e6d370f 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3561,6 +3561,20 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } break; + case SP_VINE_STALKER: + if (!(you.experience_level % 4)) + { + modify_stat((coinflip() ? STAT_STR + : STAT_DEX), 1, false, + "level gain"); + } + + if (you.experience_level == 8) + { + perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } + break; + default: break; } @@ -6784,7 +6798,7 @@ int player::res_rotting(bool temp) const if (temp && (petrified() || form == TRAN_STATUE || form == TRAN_WISP)) return 3; - if (species == SP_GARGOYLE) + if (species == SP_GARGOYLE || species == SP_VINE_STALKER) return 3; if (mutation[MUT_FOUL_STENCH]) @@ -6891,6 +6905,7 @@ int player_res_magic(bool calc_unid, bool temp) break; case SP_NAGA: case SP_MUMMY: + case SP_VINE_STALKER: rm = you.experience_level * 5; break; case SP_PURPLE_DRACONIAN: diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 5d86e99..03d56be 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -81,7 +81,22 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } - inc_hp((5 + random2(7)) / factor); + if (you.mutation[MUT_NO_DEVICE_HEAL] + && potion && was_known + && you.duration[DUR_CONF] == 0 + && you.duration[DUR_POISONING] == 0 + && you.rotting == 0 + && you.disease == 0) + { + mpr("You have no ailments to cure."); + return false; + } + + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + { + inc_hp((5 + random2(7)) / factor); + } + mpr("You feel better."); // Only fix rot when healed to full. @@ -109,6 +124,17 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + if (potion && was_known) + { + mpr("That would not heal you."); + return false; + } + mpr("That seemed strangely inert."); + break; + } + inc_hp((10 + random2avg(28, 3)) / factor); mpr("You feel much better."); diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt index 6158a89..e4a2f62 100644 --- a/crawl-ref/source/rltiles/dc-player.txt +++ b/crawl-ref/source/rltiles/dc-player.txt @@ -75,6 +75,8 @@ djinni_f DJINNI djinni_m %rim 1 formicid FORMICID +vine_stalker_f VINE_STALKER +vine_stalker_m # draconians draconian_f DRACONIAN DRACONIAN_FIRST diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_f.png b/crawl-ref/source/rltiles/player/base/vine_stalker_f.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa47d487bfe7a0c389c6231a13d11c351f93e8 GIT binary patch literal 800 zcmV+*1K<3KP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~AC>O75T9E(%0<B3z zK~z}7#aF#<qd*Y;27@e`lS^OcDmp2J^9FW%Pl4_ouDARS*T)ojhP3z%a1mWZwH1jw z7m<jC&0Mi8EO-fUCdx<%Yj&95Z)e8D%=k*O@Wo`Cm_%e0R@utWxpqcfzi)M*>0?bX z!*hV83j_%u&LAQNKnB_CO2Ev8!Z?l*$1woF`~4RXDKN9){fPhoQ4}GHA`lTeV@ny( zpC%cd1<&Dq81g<084HW`lC<fm*y`heb}kJ|qs8wwU8Zv~8Px07aLxem^Y*sjJw82E zfM^1vNmnZdi0I;h=g>Y33z^Ns1K>FpNh;-r!a$|=>d`UaIb1pGVXL(SHQ)g=8xSY? z)@kO*caQ*n3Uwu~E`jn1fV}tOB;U%QZdjy%IQQy=T{FN~xw)Yu?kA<+;=m9Gsl&e; z<;*j%%`UR=zZr0fNW}>N@M}VaaYg<FW%RRAHFH;HKt?Z4dSoc@kY}afFDzg=mhv?$ z^v!@o^!+z8=m5zNj(Wr;e`ZT3TW*HcXnf^L1tOK4b%JShQ$xO;M_U4K8r`VKB`G}( zPP9)$m3jcLFV9lvVuaa&flwL}Ac(mIf0q?92#%$befNRVxK{JBmb?aIbwK4N_;({< zry+lv$%vOdJ0Sp?e*f`NS7WSPhUc(1x7eFovJ<Y{W_f^fomSnRZE%RGxsh{T&r2+* z8z3X6dJ}tnc_ubogZ?|AGA7ROcNzR$R$^s2Zkr<mETvjQssMHAmcaYetyrYeSlMa` zeky0d#~HZVfpL+6Ah|qMgG!ej*n#(=F_|V_km%j-{c}p7qO7-G)iat}_FxX=Yq(+I zAZ)XG83uJg4kd;7CfdB!htMDkNj?!%<A`l`GzHd4>p1RKu>9{=C)&K#my&^2vig45 et>d+>Wd8tyU;^bM4k$1H0000<MNUMnLSTY-)?@hq literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_m.png b/crawl-ref/source/rltiles/player/base/vine_stalker_m.png new file mode 100644 index 0000000000000000000000000000000000000000..bf616c10aa100944c14bb736e9e7986762866883 GIT binary patch literal 778 zcmV+l1NHogP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~9D<w(ZPFDZ`0+&fd zK~z}7#aFv-+b|S8H<4gyDYDhwI0XSRcaGL>{R5$&P@ub!FX+;}_K<JrD$iZC1T8di zQtK@!0tkUD-wqTXl4(ow10f)oBCqbb&qJD+8Lv4m@X90bEfSGeSVybb=guAt{l3?L zT^~D&8A%Al5s;REtU*K!fIPCtrGS}@!lEcp6a@ev`SJ^p6(9m6-*Nyzp6AH(97Ke{ zwWR^vXP1n-ge2rumhmdf7<U)!rle0#3u}x4&b|Uxpl05u%ePNHKsSFo_89;^+}@hC zACHf%Li81*PgidZ5K;GGBq3H=W@P3M4?q%vh}e}KGI}G>%?7@|QM0tf>hn(kz}v6y z0TBQq1U~(P?uH?4IK}|REK(q{va8*9xds-M*NB5s(DGb^iBJK_wR)Fp3odJ57HtvL zC?@m{?PdA`#84!p*F|8##if!t;aR}AyRcpxPb<ZO8cfzsS}q4iVOR>{iJ@F9H`WLd zG<z=!bh&Aw5Ljc6Fn~?&HJC|9ZH>_2ZUnS^5?VbY4Nw)II2C?hVwzvu5Cb*>4)`>` z)?J{6*0aNi{Y7XzRlk4#{8l>U2I7i<OaVy{<P&4z$e7v?!I52Hy&)$xkWbbjcW&gC z8?_jZY(vfSxG%fFEkJSAOSRPKVE~xEy8#jL)_HLd6{jVVtZoPDW77?)OUTc}OotPZ zOGqNX!fnY}q$)q20LyZJM2^0cx`gDmT^x;Kz{3rYl>)P&CM+6Oj3;L`fK3EaPnhG# zjSQbB0-Bg)y}g%~F8iG+1=>r^gk93=QufIW&`0m~g@dr%bklHB1MF37AHe*%dkCH6 zPS~7?)!ysYwxN|~Q#$^ynZ64Q8T04%iFu-1G50ar5LqAAf2*L&e3r5Ah5!Hn07*qo IM6N<$g8pby1^@s6 literal 0 HcmV?d00001 diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index e0e03ed..dc92323 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,6 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, @@ -67,7 +68,7 @@ static const char * Species_Abbrev_List[NUM_SPECIES] = // the draconians "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Ce", "Dg", "Sp", "Mi", "Ds", "Gh", "Te", "Mf", "Vp", "DD", - "Fe", "Op", "Dj", "LO", "Gr", "Fo", + "Fe", "Op", "Dj", "LO", "Gr", "Fo", "VS", // placeholders "El", "HD", "OM", "GE", "Gn", "MD", #if TAG_MAJOR_VERSION > 34 @@ -192,17 +193,18 @@ string species_name(species_type speci, bool genus, bool adj) default: switch (speci) { - case SP_HUMAN: res = "Human"; break; - case SP_HALFLING: res = "Halfling"; break; - case SP_KOBOLD: res = "Kobold"; break; - case SP_MUMMY: res = "Mummy"; break; - case SP_NAGA: res = "Naga"; break; - case SP_CENTAUR: res = "Centaur"; break; - case SP_SPRIGGAN: res = "Spriggan"; break; - case SP_MINOTAUR: res = "Minotaur"; break; - case SP_TENGU: res = "Tengu"; break; - case SP_GARGOYLE: res = "Gargoyle"; break; - case SP_FORMICID: res = "Formicid"; break; + case SP_HUMAN: res = "Human"; break; + case SP_HALFLING: res = "Halfling"; break; + case SP_KOBOLD: res = "Kobold"; break; + case SP_MUMMY: res = "Mummy"; break; + case SP_NAGA: res = "Naga"; break; + case SP_CENTAUR: res = "Centaur"; break; + case SP_SPRIGGAN: res = "Spriggan"; break; + case SP_MINOTAUR: res = "Minotaur"; break; + case SP_TENGU: res = "Tengu"; break; + case SP_GARGOYLE: res = "Gargoyle"; break; + case SP_FORMICID: res = "Formicid"; break; + case SP_VINE_STALKER: res = "Vine Stalker"; break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); @@ -437,6 +439,7 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: + case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -486,6 +489,7 @@ int species_hp_modifier(species_type species) case SP_FELID: return -4; case SP_SPRIGGAN: + case SP_VINE_STALKER: return -3; case SP_DEEP_ELF: case SP_TENGU: @@ -541,6 +545,7 @@ int species_mp_modifier(species_type species) return 0; case SP_SLUDGE_ELF: case SP_TENGU: + case SP_VINE_STALKER: return 1; case SP_FELID: case SP_HIGH_ELF: diff --git a/crawl-ref/source/spl-goditem.cc b/crawl-ref/source/spl-goditem.cc index 292e9d6..92fb91c 100644 --- a/crawl-ref/source/spl-goditem.cc +++ b/crawl-ref/source/spl-goditem.cc @@ -381,6 +381,8 @@ int cast_healing(int pow, int max_pow, bool divine_ability, { pow = min(50, pow); max_pow = min(50, max_pow); + if (!not_self && !divine_ability && you.mutation[MUT_NO_DEVICE_HEAL]) + return 0; return _healing_spell(pow + roll_dice(2, pow) - 2, (3 * max_pow) - 2, divine_ability, where, not_self, mode); } diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc index 819af2c..0189ae9 100644 --- a/crawl-ref/source/tilepick-p.cc +++ b/crawl-ref/source/tilepick-p.cc @@ -630,6 +630,8 @@ tileidx_t tilep_species_to_base_tile(int sp, int level) return TILEP_BASE_DJINNI; case SP_FORMICID: return TILEP_BASE_FORMICID; + case SP_VINE_STALKER: + return TILEP_BASE_VINE_STALKER; default: return TILEP_BASE_HUMAN; } -- 1.7.9.5 vine-stalker-update.patch [^] (4,399 bytes) 2013-12-31 00:53 [Show Content] [Hide Content] From 63647940e80fa2ccc96862125212dacec91c5280 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 14:45:06 -0800 Subject: [PATCH 1/4] Minor formatting fix. --- crawl-ref/source/acquire.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index 9ebd7fe..3e0a29b 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -714,7 +714,10 @@ static int _acquirement_wand_subtype() { case WAND_HEAL_WOUNDS: if (you.mutation[MUT_NO_DEVICE_HEAL]) - w = 0; break; + { + w = 0; + break; + } case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% -- 1.7.9.5 From 5e91883bbd82f93249ac6a84a3c8f8432c46a544 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:02:24 -0800 Subject: [PATCH 2/4] Prevent unidentified /HW from being grayed out for VS. --- crawl-ref/source/itemname.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index f6e7124..cf47af2 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -3214,6 +3214,7 @@ bool is_useless_item(const item_def &item, bool temp) return true; if (you.mutation[MUT_NO_DEVICE_HEAL] + && item_type_known(item) && item.sub_type == WAND_HEAL_WOUNDS) return true; -- 1.7.9.5 From de8bc04a4babf2cf9891ddcb849e75da771cbaf0 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:34:01 -0800 Subject: [PATCH 3/4] Prevent vine stalker bite from draining firewood or summons. Summons still get antimagic applied, though. --- crawl-ref/source/melee_attack.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index a964894..2c75830 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1620,14 +1620,17 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) antimagic_affects_defender(true); mprf("You drain %s magic.", defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); - inc_mp(random2(damage_done) + 1); - if (spell_user) // The mana drain is more effective on spellcasters + if (!defender->as_monster()->is_summoned() + && !mons_is_firewood(defender->as_monster())) { inc_mp(random2(damage_done) + 1); - } - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + if (spell_user) // The mana drain is more effective on spellcasters + inc_mp(random2(damage_done) + 1); + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } } if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN -- 1.7.9.5 From a199003436e43886ba6641fd0ea0c065b719cdfb Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:37:27 -0800 Subject: [PATCH 4/4] Change 'magic' to 'power' for non-spellcaster manadrain message. In case people are wondering what vine stalkers get when biting e.g. geckos. --- crawl-ref/source/melee_attack.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 2c75830..717acfc 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1618,8 +1618,9 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) } antimagic_affects_defender(true); - mprf("You drain %s magic.", - defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + mprf("You drain %s%s.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str() + spell_user ? " magic" : " power"); if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) -- 1.7.9.5 vine-stalker-complete.patch [^] (34,390 bytes) 2013-12-31 00:53 [Show Content] [Hide Content] From ac18f0c50f6b50ebd92ca3cd7a752bdd8a26ba63 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 18 Dec 2013 20:32:19 +0000 Subject: [PATCH 1/5] Vine stalkers added. Weirdness and Mutations: - Fangs II (Becomes III at xl8) - Antimagic bite (Much stronger than standard bite, bites every turn, applies antimagic brand, and restores your mana) - Potions and wands cannot restore your HP - Regen III - Unbreathing - Spirit shield - HP -3 - MP +1 --- crawl-ref/docs/crawl_manual.reST | 26 +++++++++++ crawl-ref/source/acquire.cc | 4 +- crawl-ref/source/aptitudes.h | 39 ++++++++++++++++ crawl-ref/source/dat/descript/species.txt | 6 +++ crawl-ref/source/describe.cc | 1 + crawl-ref/source/enum.h | 5 +- crawl-ref/source/itemname.cc | 14 ++++-- crawl-ref/source/melee_attack.cc | 49 ++++++++++++++++++-- crawl-ref/source/melee_attack.h | 2 +- crawl-ref/source/mutation-data.h | 20 ++++++++ crawl-ref/source/mutation.cc | 1 + crawl-ref/source/ng-restr.cc | 4 ++ crawl-ref/source/ng-setup.cc | 8 ++++ crawl-ref/source/player.cc | 17 ++++++- crawl-ref/source/potion.cc | 28 ++++++++++- crawl-ref/source/rltiles/dc-player.txt | 2 + .../source/rltiles/player/base/vine_stalker_f.png | Bin 0 -> 800 bytes .../source/rltiles/player/base/vine_stalker_m.png | Bin 0 -> 778 bytes crawl-ref/source/species.cc | 29 +++++++----- crawl-ref/source/spl-goditem.cc | 2 + crawl-ref/source/tilepick-p.cc | 2 + 21 files changed, 234 insertions(+), 25 deletions(-) create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_f.png create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_m.png diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index eadfa25..0c7cf05 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1791,6 +1791,32 @@ Gargoyles skilled with blunt weapons and in unarmed combat. They can also be exceptional earth-based conjurers. +Vine Stalkers + Limber in shape, Vine Stalkers are anthropomorphic masses of thick vines. + They possess a once-humanoid core, parasitized moments before death by the + magical vines. Lacking any other discernible features, their faces are + dominated by their disproportionate, vicious maw with which they disrupt and + devour the magical energies of their foes. + + Magic courses freely through their bodies, and they can not only share any + damage taken with their magical reserves, but in fact physically regenerate + at an alarming rate. However these traits come at a price: the dual nature of + their bodies makes them frail to the extreme and they cannot benefit from + potions or wands to heal their wounds. + + Living examples of adaptation, Vine Stalkers level up quickly and lend well + to an all-out offensive style; trusting their stealth to choose their prey + and then their regenerating capabilities to power through the wounds they may + sustain in battle. Many members of the species however, are seen wielding + magic quite competently and then switching to a hybrid style when their + reserves start to run low, thus replenishing their shroud of magic and their + spells' fuel with each voracious bite. + + Their great offensive capabilities and intrinsic regeneration lead some Vine + Stalkers to eschew more traditional defenses such as armour and dodging, + although this proves fatally unwise often times when their judgement of their + prey fails and they bite more than they can possibly chew. + Orcs ======================================== diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index 86b59f8..9ebd7fe 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -712,8 +712,10 @@ static int _acquirement_wand_subtype() // First, weight according to usefulness. switch (type) { - case WAND_HASTING: // each 17.9%, group unknown each 26.3% case WAND_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + w = 0; break; + case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% w = 15; break; diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 2211078..031eb6c 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1451,6 +1451,45 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_POISON_MAGIC, 3), APT(SP_FORMICID, SK_INVOCATIONS, 2), APT(SP_FORMICID, SK_EVOCATIONS, 2), + + // SP_VINE_STALKER + APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), + APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), + APT(SP_VINE_STALKER, SK_AXES, -1), + APT(SP_VINE_STALKER, SK_MACES_FLAILS, -1), + APT(SP_VINE_STALKER, SK_POLEARMS, -1), + APT(SP_VINE_STALKER, SK_STAVES, -1), + APT(SP_VINE_STALKER, SK_SLINGS, -1), + APT(SP_VINE_STALKER, SK_BOWS, -1), + APT(SP_VINE_STALKER, SK_CROSSBOWS, -1), + APT(SP_VINE_STALKER, SK_THROWING, -1), + APT(SP_VINE_STALKER, SK_ARMOUR, -2), + APT(SP_VINE_STALKER, SK_DODGING, -2), + APT(SP_VINE_STALKER, SK_STEALTH, 3), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_STABBING, -99), +#endif + APT(SP_VINE_STALKER, SK_SHIELDS, -1), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_TRAPS, -99), +#endif + APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 0), + APT(SP_VINE_STALKER, SK_SPELLCASTING, 0), + APT(SP_VINE_STALKER, SK_CONJURATIONS, 0), + APT(SP_VINE_STALKER, SK_HEXES, 0), + APT(SP_VINE_STALKER, SK_CHARMS, 0), + APT(SP_VINE_STALKER, SK_SUMMONINGS, 0), + APT(SP_VINE_STALKER, SK_NECROMANCY, 0), + APT(SP_VINE_STALKER, SK_TRANSLOCATIONS, 0), + APT(SP_VINE_STALKER, SK_TRANSMUTATIONS, 0), + APT(SP_VINE_STALKER, SK_FIRE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_ICE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_AIR_MAGIC, 0), + APT(SP_VINE_STALKER, SK_EARTH_MAGIC, 0), + APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0), + APT(SP_VINE_STALKER, SK_INVOCATIONS, 0), + APT(SP_VINE_STALKER, SK_EVOCATIONS, 0), }; #endif diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt index 3b571bd..d404aae 100644 --- a/crawl-ref/source/dat/descript/species.txt +++ b/crawl-ref/source/dat/descript/species.txt @@ -134,3 +134,9 @@ Vampire Shifting between the states of life and undeath, they're accomplished stabbers and casters. %%%% +Vine Stalker + +Frail symbionts, vine stalkers regenerate quickly but cannot regain hp from +devices or potions. They are protected by their magical reserves, and pack a +mean bite that replenishes them. +%%%% diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 33c8048..51e7474 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3807,6 +3807,7 @@ string get_ghost_description(const monster_info &mi, bool concise) case SP_MUMMY: case SP_GHOUL: case SP_FORMICID: + case SP_VINE_STALKER: str += 10; break; diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 7879dde..4b37929 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -3031,6 +3031,8 @@ enum mutation_type MUT_FUMES, MUT_JUMP, MUT_EXOSKELETON, + MUT_ANTIMAGIC_BITE, + MUT_NO_DEVICE_HEAL, NUM_MUTATIONS, RANDOM_MUTATION, @@ -3384,7 +3386,8 @@ enum species_type SP_LAVA_ORC, SP_GARGOYLE, SP_FORMICID, - LAST_VALID_SPECIES = SP_FORMICID, + SP_VINE_STALKER, + LAST_VALID_SPECIES = SP_VINE_STALKER, // The high scores viewer still needs enums for removed species. SP_ELF, // (placeholder) SP_HILL_DWARF, // (placeholder) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 52a7062..f6e7124 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -2889,7 +2889,8 @@ bool is_emergency_item(const item_def &item) if (you.species == SP_FORMICID) return false; case WAND_HEAL_WOUNDS: - return true; + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + return true; default: return false; } @@ -2915,8 +2916,10 @@ bool is_emergency_item(const item_def &item) case POT_SPEED: if (you_worship(GOD_CHEIBRIADOS) || you.species == SP_FORMICID) return false; - case POT_CURING: case POT_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + return false; + case POT_CURING: case POT_RESISTANCE: case POT_MAGIC: return true; @@ -3210,6 +3213,10 @@ bool is_useless_item(const item_def &item, bool temp) if (you.species == SP_FELID) return true; + if (you.mutation[MUT_NO_DEVICE_HEAL] + && item.sub_type == WAND_HEAL_WOUNDS) + return true; + if (item.sub_type == WAND_INVISIBILITY && item_type_known(item) && _invisibility_is_useless(temp)) @@ -3286,7 +3293,8 @@ bool is_useless_item(const item_def &item, bool temp) case POT_SLOWING: case POT_PARALYSIS: return you.species == SP_FORMICID; - + case POT_HEAL_WOUNDS: + return you.mutation[MUT_NO_DEVICE_HEAL]; case POT_INVISIBILITY: return _invisibility_is_useless(temp); } diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index f723d46..a964894 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1238,6 +1238,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) aux_verb.clear(); damage_brand = SPWPN_NORMAL; aux_damage = 0; + int str_bite_damage = 0; switch (atk) { @@ -1326,7 +1327,8 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) case UNAT_BITE: aux_attack = aux_verb = "bite"; aux_damage += you.has_usable_fangs() * 2; - aux_damage += div_rand_round(max(you.strength()-10, 0), 5); + str_bite_damage += div_rand_round(max(you.strength()-10, 0), 5); + aux_damage += str_bite_damage; noise_factor = 75; // prob of vampiric bite: @@ -1340,6 +1342,14 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) damage_brand = SPWPN_VAMPIRICISM; } + if (player_mutation_level(MUT_ANTIMAGIC_BITE)) + { + //Change formula to fangs_level*3 + str/6 + aux_damage -= str_bite_damage; + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); + damage_brand = SPWPN_ANTIMAGIC; + } + if (player_mutation_level(MUT_ACIDIC_BITE)) { damage_brand = SPWPN_ACID; @@ -1580,13 +1590,14 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) { mprf("%s is splashed with acid.", defender->name(DESC_THE).c_str()); - corrode_monster(defender->as_monster(), &you); + corrode_monster(defender->as_monster(), &you); } // TODO: remove this? Unarmed poison attacks? if (damage_brand == SPWPN_VENOM && coinflip()) poison_monster(defender->as_monster(), &you); + // Normal vampiric biting attack, not if already got stabbing special. if (damage_brand == SPWPN_VAMPIRICISM && you.species == SP_VAMPIRE && (!stab_attempt || stab_bonus <= 0)) @@ -1594,6 +1605,31 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) _player_vampire_draws_blood(defender->as_monster(), damage_done); } + if (damage_brand == SPWPN_ANTIMAGIC && you.mutation[MUT_ANTIMAGIC_BITE] + && damage_done > 0) + { + bool spell_user = false; + + if (defender->as_monster()->can_use_spells() + && !defender->as_monster()->is_priest() + && !mons_class_flag(defender->type, M_FAKE_SPELLS)) + { + spell_user = true; + } + + antimagic_affects_defender(true); + mprf("You drain %s magic.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + inc_mp(random2(damage_done) + 1); + + if (spell_user) // The mana drain is more effective on spellcasters + { + inc_mp(random2(damage_done) + 1); + } + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } + if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN && grd(you.pos()) == DNGN_DEEP_WATER && feat_is_water(grd(defender->as_monster()->pos()))) @@ -2461,7 +2497,7 @@ bool melee_attack::distortion_affects_defender() return false; } -void melee_attack::antimagic_affects_defender() +void melee_attack::antimagic_affects_defender(bool amplify_effect = false) { if (defender->is_player()) { @@ -2478,6 +2514,8 @@ void melee_attack::antimagic_affects_defender() { int dur = div_rand_round(damage_done * 8, defender->as_monster()->hit_dice); dur = random2(dur + 1) * BASELINE_DELAY; + if (amplify_effect) + dur *= 2; defender->as_monster()->add_ench(mon_enchant(ENCH_ANTIMAGIC, 0, attacker, // doesn't matter dur)); @@ -5413,10 +5451,11 @@ bool melee_attack::_extra_aux_attack(unarmed_attack_type atk, bool is_uc) && !one_chance_in(3); case UNAT_BITE: - return (is_uc + return ((is_uc || you.has_usable_fangs() || player_mutation_level(MUT_ACIDIC_BITE)) - && x_chance_in_y(2, 5); + && x_chance_in_y(2, 5)) + || you.mutation[MUT_ANTIMAGIC_BITE]; case UNAT_PUNCH: return is_uc && !one_chance_in(3); diff --git a/crawl-ref/source/melee_attack.h b/crawl-ref/source/melee_attack.h index c387471..d2ca0f3 100644 --- a/crawl-ref/source/melee_attack.h +++ b/crawl-ref/source/melee_attack.h @@ -125,7 +125,7 @@ private: /* Brand / Attack Effects */ // Returns true if the defender is banished. bool distortion_affects_defender(); - void antimagic_affects_defender(); + void antimagic_affects_defender(bool amplify_effect); void pain_affects_defender(); void chaos_affects_defender(); void chaos_affects_attacker(); diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 1310d13..202dc16 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1247,6 +1247,26 @@ "acidic bite" }, +{ MUT_ANTIMAGIC_BITE, 0, 1, false, true, true, + "antimagic bite", + + {"Your bite disrupts and absorbs the magic of your enemies.", "", ""}, + {"You feel a sudden thirst for magic.", "", ""}, + {"Your magical appetite wanes.", "", ""}, + + "antimagic bite bite" +}, + +{ MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, + "no device heal", + + {"Potions and wands cannot restore your HP.", "", ""}, + {"Your system rejects artificial healing.", "", ""}, + {"Your system accepts artificial healing.", "", ""}, + + "no device heal" +}, + // Scale mutations { MUT_DISTORTION_FIELD, 2, 3, false, false, false, "repulsion field", diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index bd60249..a663aa9 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -1190,6 +1190,7 @@ static int _handle_conflicting_mutations(mutation_type mutation, { MUT_ACUTE_VISION, MUT_BLURRY_VISION, 1}, { MUT_FAST, MUT_SLOW, 1}, { MUT_MUTATION_RESISTANCE, MUT_EVOLUTION, -1}, + { MUT_ANTIMAGIC_BITE, MUT_ACIDIC_BITE, -1}, }; // If we have one of the pair, delete all levels of the other, diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc index e980188..a8aeaad 100644 --- a/crawl-ref/source/ng-restr.cc +++ b/crawl-ref/source/ng-restr.cc @@ -657,6 +657,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_OCTOPODE: case SP_BASE_DRACONIAN: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -682,6 +683,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; case SP_SPRIGGAN: @@ -718,6 +720,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -767,6 +770,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_DJINNI: case SP_FORMICID: case SP_GARGOYLE: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index dc7372a..8249e9b 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -78,6 +78,7 @@ static void _species_stat_init(species_type which_species) case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24 case SP_TENGU: s = 8; i = 8; d = 9; break; // 25 case SP_FORMICID: s = 12; i = 7; d = 6; break; // 25 + case SP_VINE_STALKER: s = 10; i = 8; d = 9; break; // 27 case SP_KOBOLD: s = 7; i = 6; d = 10; break; // 23 case SP_HALFLING: s = 5; i = 8; d = 11; break; // 24 @@ -326,6 +327,13 @@ void give_basic_mutations(species_type speci) case SP_DJINNI: you.mutation[MUT_NEGATIVE_ENERGY_RESISTANCE] = 3; break; + case SP_VINE_STALKER: + you.mutation[MUT_FANGS] = 2; + you.mutation[MUT_ANTIMAGIC_BITE] = 1; + you.mutation[MUT_REGENERATION] = 3; + you.mutation[MUT_MANA_SHIELD] = 1; + you.mutation[MUT_NO_DEVICE_HEAL] = 1; + break; default: break; } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index f7b4c9e..295adf2 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3560,6 +3560,20 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } break; + case SP_VINE_STALKER: + if (!(you.experience_level % 4)) + { + modify_stat((coinflip() ? STAT_STR + : STAT_DEX), 1, false, + "level gain"); + } + + if (you.experience_level == 8) + { + perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } + break; + default: break; } @@ -6785,7 +6799,7 @@ int player::res_rotting(bool temp) const if (temp && (petrified() || form == TRAN_STATUE || form == TRAN_WISP)) return 3; - if (species == SP_GARGOYLE) + if (species == SP_GARGOYLE || species == SP_VINE_STALKER) return 3; if (mutation[MUT_FOUL_STENCH]) @@ -6892,6 +6906,7 @@ int player_res_magic(bool calc_unid, bool temp) break; case SP_NAGA: case SP_MUMMY: + case SP_VINE_STALKER: rm = you.experience_level * 5; break; case SP_PURPLE_DRACONIAN: diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 265e497..1ace7ea 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -81,7 +81,22 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } - inc_hp((5 + random2(7)) / factor); + if (you.mutation[MUT_NO_DEVICE_HEAL] + && potion && was_known + && you.duration[DUR_CONF] == 0 + && you.duration[DUR_POISONING] == 0 + && you.rotting == 0 + && you.disease == 0) + { + mpr("You have no ailments to cure."); + return false; + } + + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + { + inc_hp((5 + random2(7)) / factor); + } + mpr("You feel better."); // Only fix rot when healed to full. @@ -109,6 +124,17 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + if (potion && was_known) + { + mpr("That would not heal you."); + return false; + } + mpr("That seemed strangely inert."); + break; + } + inc_hp((10 + random2avg(28, 3)) / factor); mpr("You feel much better."); diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt index a92fdb2..3b488be 100644 --- a/crawl-ref/source/rltiles/dc-player.txt +++ b/crawl-ref/source/rltiles/dc-player.txt @@ -75,6 +75,8 @@ djinni_f DJINNI djinni_m %rim 1 formicid FORMICID +vine_stalker_f VINE_STALKER +vine_stalker_m # draconians draconian_f DRACONIAN DRACONIAN_FIRST diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_f.png b/crawl-ref/source/rltiles/player/base/vine_stalker_f.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa47d487bfe7a0c389c6231a13d11c351f93e8 GIT binary patch literal 800 zcmV+*1K<3KP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~AC>O75T9E(%0<B3z zK~z}7#aF#<qd*Y;27@e`lS^OcDmp2J^9FW%Pl4_ouDARS*T)ojhP3z%a1mWZwH1jw z7m<jC&0Mi8EO-fUCdx<%Yj&95Z)e8D%=k*O@Wo`Cm_%e0R@utWxpqcfzi)M*>0?bX z!*hV83j_%u&LAQNKnB_CO2Ev8!Z?l*$1woF`~4RXDKN9){fPhoQ4}GHA`lTeV@ny( zpC%cd1<&Dq81g<084HW`lC<fm*y`heb}kJ|qs8wwU8Zv~8Px07aLxem^Y*sjJw82E zfM^1vNmnZdi0I;h=g>Y33z^Ns1K>FpNh;-r!a$|=>d`UaIb1pGVXL(SHQ)g=8xSY? z)@kO*caQ*n3Uwu~E`jn1fV}tOB;U%QZdjy%IQQy=T{FN~xw)Yu?kA<+;=m9Gsl&e; z<;*j%%`UR=zZr0fNW}>N@M}VaaYg<FW%RRAHFH;HKt?Z4dSoc@kY}afFDzg=mhv?$ z^v!@o^!+z8=m5zNj(Wr;e`ZT3TW*HcXnf^L1tOK4b%JShQ$xO;M_U4K8r`VKB`G}( zPP9)$m3jcLFV9lvVuaa&flwL}Ac(mIf0q?92#%$befNRVxK{JBmb?aIbwK4N_;({< zry+lv$%vOdJ0Sp?e*f`NS7WSPhUc(1x7eFovJ<Y{W_f^fomSnRZE%RGxsh{T&r2+* z8z3X6dJ}tnc_ubogZ?|AGA7ROcNzR$R$^s2Zkr<mETvjQssMHAmcaYetyrYeSlMa` zeky0d#~HZVfpL+6Ah|qMgG!ej*n#(=F_|V_km%j-{c}p7qO7-G)iat}_FxX=Yq(+I zAZ)XG83uJg4kd;7CfdB!htMDkNj?!%<A`l`GzHd4>p1RKu>9{=C)&K#my&^2vig45 et>d+>Wd8tyU;^bM4k$1H0000<MNUMnLSTY-)?@hq literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_m.png b/crawl-ref/source/rltiles/player/base/vine_stalker_m.png new file mode 100644 index 0000000000000000000000000000000000000000..bf616c10aa100944c14bb736e9e7986762866883 GIT binary patch literal 778 zcmV+l1NHogP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~9D<w(ZPFDZ`0+&fd zK~z}7#aFv-+b|S8H<4gyDYDhwI0XSRcaGL>{R5$&P@ub!FX+;}_K<JrD$iZC1T8di zQtK@!0tkUD-wqTXl4(ow10f)oBCqbb&qJD+8Lv4m@X90bEfSGeSVybb=guAt{l3?L zT^~D&8A%Al5s;REtU*K!fIPCtrGS}@!lEcp6a@ev`SJ^p6(9m6-*Nyzp6AH(97Ke{ zwWR^vXP1n-ge2rumhmdf7<U)!rle0#3u}x4&b|Uxpl05u%ePNHKsSFo_89;^+}@hC zACHf%Li81*PgidZ5K;GGBq3H=W@P3M4?q%vh}e}KGI}G>%?7@|QM0tf>hn(kz}v6y z0TBQq1U~(P?uH?4IK}|REK(q{va8*9xds-M*NB5s(DGb^iBJK_wR)Fp3odJ57HtvL zC?@m{?PdA`#84!p*F|8##if!t;aR}AyRcpxPb<ZO8cfzsS}q4iVOR>{iJ@F9H`WLd zG<z=!bh&Aw5Ljc6Fn~?&HJC|9ZH>_2ZUnS^5?VbY4Nw)II2C?hVwzvu5Cb*>4)`>` z)?J{6*0aNi{Y7XzRlk4#{8l>U2I7i<OaVy{<P&4z$e7v?!I52Hy&)$xkWbbjcW&gC z8?_jZY(vfSxG%fFEkJSAOSRPKVE~xEy8#jL)_HLd6{jVVtZoPDW77?)OUTc}OotPZ zOGqNX!fnY}q$)q20LyZJM2^0cx`gDmT^x;Kz{3rYl>)P&CM+6Oj3;L`fK3EaPnhG# zjSQbB0-Bg)y}g%~F8iG+1=>r^gk93=QufIW&`0m~g@dr%bklHB1MF37AHe*%dkCH6 zPS~7?)!ysYwxN|~Q#$^ynZ64Q8T04%iFu-1G50ar5LqAAf2*L&e3r5Ah5!Hn07*qo IM6N<$g8pby1^@s6 literal 0 HcmV?d00001 diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index e0e03ed..dc92323 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,6 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, @@ -67,7 +68,7 @@ static const char * Species_Abbrev_List[NUM_SPECIES] = // the draconians "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Ce", "Dg", "Sp", "Mi", "Ds", "Gh", "Te", "Mf", "Vp", "DD", - "Fe", "Op", "Dj", "LO", "Gr", "Fo", + "Fe", "Op", "Dj", "LO", "Gr", "Fo", "VS", // placeholders "El", "HD", "OM", "GE", "Gn", "MD", #if TAG_MAJOR_VERSION > 34 @@ -192,17 +193,18 @@ string species_name(species_type speci, bool genus, bool adj) default: switch (speci) { - case SP_HUMAN: res = "Human"; break; - case SP_HALFLING: res = "Halfling"; break; - case SP_KOBOLD: res = "Kobold"; break; - case SP_MUMMY: res = "Mummy"; break; - case SP_NAGA: res = "Naga"; break; - case SP_CENTAUR: res = "Centaur"; break; - case SP_SPRIGGAN: res = "Spriggan"; break; - case SP_MINOTAUR: res = "Minotaur"; break; - case SP_TENGU: res = "Tengu"; break; - case SP_GARGOYLE: res = "Gargoyle"; break; - case SP_FORMICID: res = "Formicid"; break; + case SP_HUMAN: res = "Human"; break; + case SP_HALFLING: res = "Halfling"; break; + case SP_KOBOLD: res = "Kobold"; break; + case SP_MUMMY: res = "Mummy"; break; + case SP_NAGA: res = "Naga"; break; + case SP_CENTAUR: res = "Centaur"; break; + case SP_SPRIGGAN: res = "Spriggan"; break; + case SP_MINOTAUR: res = "Minotaur"; break; + case SP_TENGU: res = "Tengu"; break; + case SP_GARGOYLE: res = "Gargoyle"; break; + case SP_FORMICID: res = "Formicid"; break; + case SP_VINE_STALKER: res = "Vine Stalker"; break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); @@ -437,6 +439,7 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: + case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -486,6 +489,7 @@ int species_hp_modifier(species_type species) case SP_FELID: return -4; case SP_SPRIGGAN: + case SP_VINE_STALKER: return -3; case SP_DEEP_ELF: case SP_TENGU: @@ -541,6 +545,7 @@ int species_mp_modifier(species_type species) return 0; case SP_SLUDGE_ELF: case SP_TENGU: + case SP_VINE_STALKER: return 1; case SP_FELID: case SP_HIGH_ELF: diff --git a/crawl-ref/source/spl-goditem.cc b/crawl-ref/source/spl-goditem.cc index 292e9d6..92fb91c 100644 --- a/crawl-ref/source/spl-goditem.cc +++ b/crawl-ref/source/spl-goditem.cc @@ -381,6 +381,8 @@ int cast_healing(int pow, int max_pow, bool divine_ability, { pow = min(50, pow); max_pow = min(50, max_pow); + if (!not_self && !divine_ability && you.mutation[MUT_NO_DEVICE_HEAL]) + return 0; return _healing_spell(pow + roll_dice(2, pow) - 2, (3 * max_pow) - 2, divine_ability, where, not_self, mode); } diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc index e0e9749..ae9a5eb 100644 --- a/crawl-ref/source/tilepick-p.cc +++ b/crawl-ref/source/tilepick-p.cc @@ -630,6 +630,8 @@ tileidx_t tilep_species_to_base_tile(int sp, int level) return TILEP_BASE_DJINNI; case SP_FORMICID: return TILEP_BASE_FORMICID; + case SP_VINE_STALKER: + return TILEP_BASE_VINE_STALKER; default: return TILEP_BASE_HUMAN; } -- 1.7.9.5 From 63647940e80fa2ccc96862125212dacec91c5280 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 14:45:06 -0800 Subject: [PATCH 2/5] Minor formatting fix. --- crawl-ref/source/acquire.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index 9ebd7fe..3e0a29b 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -714,7 +714,10 @@ static int _acquirement_wand_subtype() { case WAND_HEAL_WOUNDS: if (you.mutation[MUT_NO_DEVICE_HEAL]) - w = 0; break; + { + w = 0; + break; + } case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% -- 1.7.9.5 From 5e91883bbd82f93249ac6a84a3c8f8432c46a544 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:02:24 -0800 Subject: [PATCH 3/5] Prevent unidentified /HW from being grayed out for VS. --- crawl-ref/source/itemname.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index f6e7124..cf47af2 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -3214,6 +3214,7 @@ bool is_useless_item(const item_def &item, bool temp) return true; if (you.mutation[MUT_NO_DEVICE_HEAL] + && item_type_known(item) && item.sub_type == WAND_HEAL_WOUNDS) return true; -- 1.7.9.5 From de8bc04a4babf2cf9891ddcb849e75da771cbaf0 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:34:01 -0800 Subject: [PATCH 4/5] Prevent vine stalker bite from draining firewood or summons. Summons still get antimagic applied, though. --- crawl-ref/source/melee_attack.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index a964894..2c75830 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1620,14 +1620,17 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) antimagic_affects_defender(true); mprf("You drain %s magic.", defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); - inc_mp(random2(damage_done) + 1); - if (spell_user) // The mana drain is more effective on spellcasters + if (!defender->as_monster()->is_summoned() + && !mons_is_firewood(defender->as_monster())) { inc_mp(random2(damage_done) + 1); - } - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + if (spell_user) // The mana drain is more effective on spellcasters + inc_mp(random2(damage_done) + 1); + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } } if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN -- 1.7.9.5 From a199003436e43886ba6641fd0ea0c065b719cdfb Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:37:27 -0800 Subject: [PATCH 5/5] Change 'magic' to 'power' for non-spellcaster manadrain message. In case people are wondering what vine stalkers get when biting e.g. geckos. --- crawl-ref/source/melee_attack.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 2c75830..717acfc 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1618,8 +1618,9 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) } antimagic_affects_defender(true); - mprf("You drain %s magic.", - defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + mprf("You drain %s%s.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str() + spell_user ? " magic" : " power"); if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) -- 1.7.9.5 vine-stalker-update-2.patch [^] (6,204 bytes) 2013-12-31 02:58 [Show Content] [Hide Content] From ca0a0513ac2d4bde5383ed7bd9864bd58472069e Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:28:27 -0800 Subject: [PATCH 1/3] Add MONS_VINE_STALKER. This shouldn't place. Mainly it is for the player vine stalker glyph. --- crawl-ref/source/enum.h | 1 + crawl-ref/source/melee_attack.cc | 2 +- crawl-ref/source/mon-data.h | 12 ++++++++++++ crawl-ref/source/potion.cc | 4 ++-- crawl-ref/source/species.cc | 4 +++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 4b37929..aa09328 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2826,6 +2826,7 @@ enum monster_type // menv[].type MONS_DRAGON, // genus MONS_SNAKE, // genus #endif + MONS_VINE_STALKER, NUM_MONSTERS, // used for polymorph diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 717acfc..c73d51b 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1619,7 +1619,7 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) antimagic_affects_defender(true); mprf("You drain %s%s.", - defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str() + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str(), spell_user ? " magic" : " power"); if (!defender->as_monster()->is_summoned() diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 714c914..45b40ae 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -4922,6 +4922,18 @@ static monsterentry mondata[] = MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM }, +{ + MONS_VINE_STALKER, 'P', MAGENTA, "vine stalker", + M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO | M_FAST_REGEN | M_CANT_SPAWN, + MR_NO_FLAGS, + 550, 10, MONS_PLANT, MONS_VINE_STALKER, MH_PLANT, -4, + { {AT_HIT, AF_ANTIMAGIC, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, + { 5, 3, 3, 0 }, + 2, 12, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT, + I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY, + MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM +}, + { // dummy... literally; single vault MONS_HALFLING, '@', LIGHTGREY, "halfling", M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO, diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 1ace7ea..f23eea3 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -83,7 +83,7 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know if (you.mutation[MUT_NO_DEVICE_HEAL] && potion && was_known - && you.duration[DUR_CONF] == 0 + && you.duration[DUR_CONF] == 0 && you.duration[DUR_POISONING] == 0 && you.rotting == 0 && you.disease == 0) @@ -92,7 +92,7 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know return false; } - if (!you.mutation[MUT_NO_DEVICE_HEAL]) + if (!you.mutation[MUT_NO_DEVICE_HEAL]) { inc_hp((5 + random2(7)) / factor); } diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index dc92323..ce27781 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,7 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, - SP_VINE_STALKER, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, @@ -392,6 +392,8 @@ monster_type player_species_to_mons_species(species_type species) return MONS_DJINNI; case SP_FORMICID: return MONS_FORMICID; + case SP_VINE_STALKER: + return MONS_VINE_STALKER; case SP_ELF: case SP_HILL_DWARF: case SP_MOUNTAIN_DWARF: -- 1.7.9.5 From de8c5da63aa393439abce7e0de10b2c3ef47e121 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:43:32 -0800 Subject: [PATCH 2/3] Add adjective and genus for vine stalker naming. --- crawl-ref/source/species.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index ce27781..bf89bdc 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -204,8 +204,10 @@ string species_name(species_type speci, bool genus, bool adj) case SP_TENGU: res = "Tengu"; break; case SP_GARGOYLE: res = "Gargoyle"; break; case SP_FORMICID: res = "Formicid"; break; - case SP_VINE_STALKER: res = "Vine Stalker"; break; + case SP_VINE_STALKER: + res = (adj ? "Vine" : genus ? "Vine" : "Vine Stalker"); + break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); break; -- 1.7.9.5 From 5b08d8ce6421417fd53800cf129439cba2596aef Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:47:27 -0800 Subject: [PATCH 3/3] Reduce vine stalker experience apt by 1. --- crawl-ref/source/species.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index bf89bdc..31733df 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -443,7 +443,6 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: - case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -454,6 +453,7 @@ int species_exp_modifier(species_type species) case SP_OCTOPODE: case SP_TENGU: case SP_GARGOYLE: + case SP_VINE_STALKER: return 0; case SP_SPRIGGAN: case SP_DEEP_DWARF: -- 1.7.9.5 plane-stalker.patch [^] (1,218 bytes) 2013-12-31 03:54 [Show Content] [Hide Content] From c8b4f1aac99653f2a5033e2cae88429d1c07a14f Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 18:51:32 -0800 Subject: [PATCH] Add Plane Stalker. --- crawl-ref/source/skills2.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc index 3e5a790..03c4d1f 100644 --- a/crawl-ref/source/skills2.cc +++ b/crawl-ref/source/skills2.cc @@ -212,11 +212,12 @@ static string _stk_genus_short_cap() static string _stk_walker() { - return Skill_Species == SP_NAGA ? "Slider" : - Skill_Species == SP_TENGU ? "Glider" : - Skill_Species == SP_DJINNI ? "Floater" : - Skill_Species == SP_OCTOPODE ? "Wriggler" - : "Walker"; + return Skill_Species == SP_NAGA ? "Slider" : + Skill_Species == SP_TENGU ? "Glider" : + Skill_Species == SP_DJINNI ? "Floater" : + Skill_Species == SP_OCTOPODE ? "Wriggler" : + Skill_Species == SP_VINE_STALKER ? "Stalker" + : "Walker"; } static string _stk_weight() -- 1.7.9.5 mutation-name.patch [^] (741 bytes) 2013-12-31 05:11 [Show Content] [Hide Content] From cf3a7fff113c5f909036b5de33bdb0b2e0a051fc Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 20:10:14 -0800 Subject: [PATCH] antimagic bite bite -> antimagic bite. --- crawl-ref/source/mutation-data.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 202dc16..9f5d056 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1254,7 +1254,7 @@ {"You feel a sudden thirst for magic.", "", ""}, {"Your magical appetite wanes.", "", ""}, - "antimagic bite bite" + "antimagic bite" }, { MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, -- 1.7.9.5 vine-stalker-update-3.patch [^] (5,377 bytes) 2013-12-31 06:49 [Show Content] [Hide Content] From 60dfa01c3faaf40b0104496831f50b92890e5fdb Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:31:57 -0800 Subject: [PATCH 1/5] Fix incorrect comment. --- crawl-ref/source/melee_attack.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index c73d51b..69e47b2 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1344,7 +1344,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*3 + str/6 + //Change formula to fangs_level*2 + str/6 aux_damage -= str_bite_damage; aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; -- 1.7.9.5 From 4e3f25eb74ed104fe658f1cd75add582912b6725 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:33:59 -0800 Subject: [PATCH 2/5] Reduce vine stalker starting regen to II, upgrades to III at xl8. --- crawl-ref/source/ng-setup.cc | 2 +- crawl-ref/source/player.cc | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index 8249e9b..dc4d45b 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -330,7 +330,7 @@ void give_basic_mutations(species_type speci) case SP_VINE_STALKER: you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; - you.mutation[MUT_REGENERATION] = 3; + you.mutation[MUT_REGENERATION] = 2; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; break; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index f1da7ab..14f2988 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3570,6 +3570,7 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) if (you.experience_level == 8) perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); break; default: -- 1.7.9.5 From a4cd44efc5957f287877b2a19bcc09fe9f2c0221 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:36:47 -0800 Subject: [PATCH 3/5] Halve vine stalker manavamp across the board. --- crawl-ref/source/melee_attack.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 69e47b2..74ef544 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1625,10 +1625,11 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - inc_mp(random2(damage_done) + 1); + //1dDamage, halve that, cast to int. + inc_mp((int)((random2(damage_done) + 1)/2)); if (spell_user) // The mana drain is more effective on spellcasters - inc_mp(random2(damage_done) + 1); + inc_mp((int)((random2(damage_done) + 1)/2)); mprf("You feel%sinvigorated.", spell_user ? " very " : " "); } -- 1.7.9.5 From be10938386a041a63092f6e27acb4d02fa55e8dc Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:39:14 -0800 Subject: [PATCH 4/5] Fix incorrect comment, again. --- crawl-ref/source/melee_attack.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 74ef544..77af831 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1344,7 +1344,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*2 + str/6 + //Change formula to fangs_level*2 + 2*XL/3 aux_damage -= str_bite_damage; aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; -- 1.7.9.5 From 4a7478b1816ba962300cbb8ece5698d2acc246c5 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:44:09 -0800 Subject: [PATCH 5/5] Add brackets around an if statement. --- crawl-ref/source/player.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 14f2988..150581a 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3569,8 +3569,10 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } if (you.experience_level == 8) + { perma_mutate(MUT_FANGS, 1, "vine stalker growth"); perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); + } break; default: -- 1.7.9.5 suppress-invig.patch [^] (1,438 bytes) 2013-12-31 22:43 [Show Content] [Hide Content] From d99c628ae8105581a5440f90d563a1705f915aab Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Tue, 31 Dec 2013 13:21:43 -0800 Subject: [PATCH] Don't display 'you feel invigorated' when draining mana at max mana. --- crawl-ref/source/melee_attack.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 77af831..df70937 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1622,6 +1622,8 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str(), spell_user ? " magic" : " power"); + bool mana_leeched = you.max_magic_points != you.magic_points ? true : false; + if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { @@ -1631,7 +1633,8 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (spell_user) // The mana drain is more effective on spellcasters inc_mp((int)((random2(damage_done) + 1)/2)); - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + if (mana_leeched) + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); } } -- 1.7.9.5 vine-stalker-update-4.patch [^] (3,319 bytes) 2014-01-01 13:14 [Show Content] [Hide Content] From 2251d210d0cf4f2f2a0976ee65cfb648f4afb61b Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 1 Jan 2014 03:52:52 -0800 Subject: [PATCH 1/2] Make antimagic bite only replenish mana when biting spell users. --- crawl-ref/source/melee_attack.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index df70937..4f23a83 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1618,23 +1618,20 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) } antimagic_affects_defender(true); - mprf("You drain %s%s.", - defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str(), - spell_user ? " magic" : " power"); + if (spell_user) + mprf("You drain %s magic.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); - bool mana_leeched = you.max_magic_points != you.magic_points ? true : false; + bool mana_leeched = you.max_magic_points != you.magic_points && damage_done > 0 ? true : false; if (!defender->as_monster()->is_summoned() - && !mons_is_firewood(defender->as_monster())) + && !mons_is_firewood(defender->as_monster()) + && spell_user) { - //1dDamage, halve that, cast to int. - inc_mp((int)((random2(damage_done) + 1)/2)); - - if (spell_user) // The mana drain is more effective on spellcasters - inc_mp((int)((random2(damage_done) + 1)/2)); + inc_mp(random2(damage_done) + 1); if (mana_leeched) - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + mpr("You feel invigorated."); } } -- 1.7.9.5 From 1947677d0e692de80704710ab3d70357380fdfd0 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 1 Jan 2014 04:04:02 -0800 Subject: [PATCH 2/2] Grant mana regeneration to vine stalkers at xl10, delay fangs III to xl12. Fangs were delayed mostly to avoid granting three mutations at xl8, which seemed a little awkward. --- crawl-ref/source/player.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index eb5c710..1bf0068 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3570,9 +3570,18 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) if (you.experience_level == 8) { - perma_mutate(MUT_FANGS, 1, "vine stalker growth"); perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); } + + if (you.experience_level == 10) + { + perma_mutate(MUT_MANA_REGENERATION, 1, "vine stalker growth"); + } + + if (you.experience_level == 12) + { + perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } break; default: -- 1.7.9.5 vine-stalker-update-5.patch [^] (5,667 bytes) 2014-01-05 01:57 [Show Content] [Hide Content] From f761abc61996f7ba613294c60576e49389a1d7ae Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:52:13 -0800 Subject: [PATCH 1/4] Add 'int/2 - 6' to vine stalker bite formula, and cap damage to 24. This should make it more attractive as a way to replenish mana for book backgrounds, and somewhat less powerful with melee backgrounds. Specifically: Fi gets -2 damage, Mo -1, *K +0, Ne +1.5, Wz +3. --- crawl-ref/source/melee_attack.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 77af831..d779309 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1344,9 +1344,13 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*2 + 2*XL/3 + //Change formula to max(24, fangs_level*2 + 2*XL/3 + int/2 - 6) aux_damage -= str_bite_damage; - aux_damage += div_rand_round(2 * you.get_experience_level(), 3); + aux_damage += div_rand_round(2 * you.get_experience_level(), + 3) + + div_rand_round(you.intel(), 2) + - 6; + aux_damage = min(24, aux_damage); damage_brand = SPWPN_ANTIMAGIC; } -- 1.7.9.5 From 334725e1d23383a43e0bb63021ccc20b6d8a1660 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:57:34 -0800 Subject: [PATCH 2/4] Make vine stalker bite manadrain all creatures for 1dDamage. --- crawl-ref/source/melee_attack.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index d779309..bc428b8 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1629,13 +1629,8 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - //1dDamage, halve that, cast to int. - inc_mp((int)((random2(damage_done) + 1)/2)); - - if (spell_user) // The mana drain is more effective on spellcasters - inc_mp((int)((random2(damage_done) + 1)/2)); - - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + inc_mp(random2(damage_done) + 1); + mpr("You feel invigorated."); } } -- 1.7.9.5 From a49916fc26b66fcc794da9b655b0dc3de7811bf3 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:59:23 -0800 Subject: [PATCH 3/4] Reduce vine stalker Fighting aptitude by 1. --- crawl-ref/source/aptitudes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 031eb6c..1b1ab9f 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1453,7 +1453,7 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_EVOCATIONS, 2), // SP_VINE_STALKER - APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_FIGHTING, -1), APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), APT(SP_VINE_STALKER, SK_AXES, -1), -- 1.7.9.5 From ea9e5d81873a9c516013dfd94ea325d2987d3d29 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 16:06:17 -0800 Subject: [PATCH 4/4] Delay regen II to xl6, and regen III to xl12. The early game should be harder now that creatures can damage vine stalkers through their regeneration, and this shouldn't contribute to run- regeneration tedium since, if a vine stalker tangles with an orc warrior or ogre early on, they'll likely be smashed. --- crawl-ref/source/ng-setup.cc | 2 +- crawl-ref/source/player.cc | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index dc4d45b..0ce8ee3 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -330,7 +330,7 @@ void give_basic_mutations(species_type speci) case SP_VINE_STALKER: you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; - you.mutation[MUT_REGENERATION] = 2; + you.mutation[MUT_REGENERATION] = 1; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; break; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index eb5c710..a4ca4be 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3568,9 +3568,18 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) "level gain"); } + if (you.experience_level() == 6) + { + perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); + } + if (you.experience_level == 8) { perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } + + if (you.experience_level() == 12) + { perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); } break; -- 1.7.9.5 vine-stalker-update-6.patch [^] (2,413 bytes) 2014-01-10 05:35 [Show Content] [Hide Content] From 326a18a28247ba89b869f1540136e150338b929e Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sun, 25 Mar 2007 21:25:26 +0000 Subject: [PATCH] Make vine stalker bite's mana drain key off of current mana. ...and remove int's effect on vine stalker bite damage. 0.25 * 1dDamage at mp == max_mp, 1.25 * 1dDamage at 0 mp. This should solve the problem that vine stalker bite was more useful for melee backgrounds solely as a source of extra hp than it was for magical backgrounds as a source of mana replenishment. --- crawl-ref/source/melee_attack.cc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index bc428b8..db1ce76 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1344,13 +1344,9 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to max(24, fangs_level*2 + 2*XL/3 + int/2 - 6) + //Change formula to fangs_level*2 + 2*XL/3 aux_damage -= str_bite_damage; - aux_damage += div_rand_round(2 * you.get_experience_level(), - 3) - + div_rand_round(you.intel(), 2) - - 6; - aux_damage = min(24, aux_damage); + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; } @@ -1629,8 +1625,16 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - inc_mp(random2(damage_done) + 1); - mpr("You feel invigorated."); + int drain = random2(damage_done) + 1; + //Augment mana drain--1.25 "standard" effectiveness at 0 mp, + //.25 at mana == max_mana + drain = (int)((1.25 - you.magic_points / you.max_magic_points) + * drain); + if (drain && you.magic_points != you.max_magic_points) + { + mpr("You feel invigorated."); + inc_mp(drain); + } } } -- 1.7.9.5 vs.patch [^] (55,690 bytes) 2014-01-25 08:44 [Show Content] [Hide Content] From d97f69d02ac46ef8af5058cd34b10565a8b5ebeb Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Wed, 18 Dec 2013 20:32:19 +0000 Subject: [PATCH 01/15] Vine stalkers added. Weirdness and Mutations: - Fangs II (Becomes III at xl8) - Antimagic bite (Much stronger than standard bite, bites every turn, applies antimagic brand, and restores your mana) - Potions and wands cannot restore your HP - Regen III - Unbreathing - Spirit shield - HP -3 - MP +1 --- crawl-ref/docs/crawl_manual.reST | 26 +++++++++++ crawl-ref/source/acquire.cc | 7 ++- crawl-ref/source/aptitudes.h | 39 ++++++++++++++++ crawl-ref/source/dat/descript/species.txt | 6 +++ crawl-ref/source/describe.cc | 1 + crawl-ref/source/enum.h | 5 +- crawl-ref/source/itemname.cc | 15 ++++-- crawl-ref/source/melee_attack.cc | 49 ++++++++++++++++++-- crawl-ref/source/melee_attack.h | 2 +- crawl-ref/source/mutation-data.h | 20 ++++++++ crawl-ref/source/mutation.cc | 1 + crawl-ref/source/ng-restr.cc | 4 ++ crawl-ref/source/ng-setup.cc | 8 ++++ crawl-ref/source/player.cc | 17 ++++++- crawl-ref/source/potion.cc | 28 ++++++++++- crawl-ref/source/rltiles/dc-player.txt | 2 + .../source/rltiles/player/base/vine_stalker_f.png | Bin 0 -> 800 bytes .../source/rltiles/player/base/vine_stalker_m.png | Bin 0 -> 778 bytes crawl-ref/source/species.cc | 29 +++++++----- crawl-ref/source/spl-goditem.cc | 2 + crawl-ref/source/tilepick-p.cc | 2 + 21 files changed, 238 insertions(+), 25 deletions(-) create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_f.png create mode 100644 crawl-ref/source/rltiles/player/base/vine_stalker_m.png diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST index e74545d..85b1da3 100644 --- a/crawl-ref/docs/crawl_manual.reST +++ b/crawl-ref/docs/crawl_manual.reST @@ -1788,6 +1788,32 @@ Gargoyles skilled with blunt weapons and in unarmed combat. They can also be exceptional earth-based conjurers. +Vine Stalkers + Limber in shape, Vine Stalkers are anthropomorphic masses of thick vines. + They possess a once-humanoid core, parasitized moments before death by the + magical vines. Lacking any other discernible features, their faces are + dominated by their disproportionate, vicious maw with which they disrupt and + devour the magical energies of their foes. + + Magic courses freely through their bodies, and they can not only share any + damage taken with their magical reserves, but in fact physically regenerate + at an alarming rate. However these traits come at a price: the dual nature of + their bodies makes them frail to the extreme and they cannot benefit from + potions or wands to heal their wounds. + + Living examples of adaptation, Vine Stalkers level up quickly and lend well + to an all-out offensive style; trusting their stealth to choose their prey + and then their regenerating capabilities to power through the wounds they may + sustain in battle. Many members of the species however, are seen wielding + magic quite competently and then switching to a hybrid style when their + reserves start to run low, thus replenishing their shroud of magic and their + spells' fuel with each voracious bite. + + Their great offensive capabilities and intrinsic regeneration lead some Vine + Stalkers to eschew more traditional defenses such as armour and dodging, + although this proves fatally unwise often times when their judgement of their + prey fails and they bite more than they can possibly chew. + Orcs ======================================== diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc index d7b3105..da2662d 100644 --- a/crawl-ref/source/acquire.cc +++ b/crawl-ref/source/acquire.cc @@ -712,8 +712,13 @@ static int _acquirement_wand_subtype() // First, weight according to usefulness. switch (type) { - case WAND_HASTING: // each 17.9%, group unknown each 26.3% case WAND_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + w = 0; + break; + } + case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; case WAND_TELEPORTATION: // each 10.7%, group unknown each 17.6% w = 15; break; diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 02a724e..195f6cb 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1451,6 +1451,45 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_POISON_MAGIC, 3), APT(SP_FORMICID, SK_INVOCATIONS, 2), APT(SP_FORMICID, SK_EVOCATIONS, 2), + + // SP_VINE_STALKER + APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), + APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), + APT(SP_VINE_STALKER, SK_AXES, -1), + APT(SP_VINE_STALKER, SK_MACES_FLAILS, -1), + APT(SP_VINE_STALKER, SK_POLEARMS, -1), + APT(SP_VINE_STALKER, SK_STAVES, -1), + APT(SP_VINE_STALKER, SK_SLINGS, -1), + APT(SP_VINE_STALKER, SK_BOWS, -1), + APT(SP_VINE_STALKER, SK_CROSSBOWS, -1), + APT(SP_VINE_STALKER, SK_THROWING, -1), + APT(SP_VINE_STALKER, SK_ARMOUR, -2), + APT(SP_VINE_STALKER, SK_DODGING, -2), + APT(SP_VINE_STALKER, SK_STEALTH, 3), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_STABBING, -99), +#endif + APT(SP_VINE_STALKER, SK_SHIELDS, -1), +#if TAG_MAJOR_VERSION == 34 + APT(SP_VINE_STALKER, SK_TRAPS, -99), +#endif + APT(SP_VINE_STALKER, SK_UNARMED_COMBAT, 0), + APT(SP_VINE_STALKER, SK_SPELLCASTING, 0), + APT(SP_VINE_STALKER, SK_CONJURATIONS, 0), + APT(SP_VINE_STALKER, SK_HEXES, 0), + APT(SP_VINE_STALKER, SK_CHARMS, 0), + APT(SP_VINE_STALKER, SK_SUMMONINGS, 0), + APT(SP_VINE_STALKER, SK_NECROMANCY, 0), + APT(SP_VINE_STALKER, SK_TRANSLOCATIONS, 0), + APT(SP_VINE_STALKER, SK_TRANSMUTATIONS, 0), + APT(SP_VINE_STALKER, SK_FIRE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_ICE_MAGIC, 0), + APT(SP_VINE_STALKER, SK_AIR_MAGIC, 0), + APT(SP_VINE_STALKER, SK_EARTH_MAGIC, 0), + APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0), + APT(SP_VINE_STALKER, SK_INVOCATIONS, 0), + APT(SP_VINE_STALKER, SK_EVOCATIONS, 0), }; #endif diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt index 9d80476..e9afb3f 100644 --- a/crawl-ref/source/dat/descript/species.txt +++ b/crawl-ref/source/dat/descript/species.txt @@ -129,3 +129,9 @@ Vampire Shifting between the states of life and undeath, they're accomplished stabbers and casters. %%%% +Vine Stalker + +Frail symbionts, vine stalkers regenerate quickly but cannot regain hp from +devices or potions. They are protected by their magical reserves, and pack a +mean bite that replenishes them. +%%%% diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index bcc7b61..5804d65 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3829,6 +3829,7 @@ string get_ghost_description(const monster_info &mi, bool concise) case SP_MUMMY: case SP_GHOUL: case SP_FORMICID: + case SP_VINE_STALKER: str += 10; break; diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 953997e..e929091 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -3051,6 +3051,8 @@ enum mutation_type MUT_FUMES, MUT_JUMP, MUT_EXOSKELETON, + MUT_ANTIMAGIC_BITE, + MUT_NO_DEVICE_HEAL, NUM_MUTATIONS, RANDOM_MUTATION, @@ -3404,7 +3406,8 @@ enum species_type SP_LAVA_ORC, SP_GARGOYLE, SP_FORMICID, - LAST_VALID_SPECIES = SP_FORMICID, + SP_VINE_STALKER, + LAST_VALID_SPECIES = SP_VINE_STALKER, // The high scores viewer still needs enums for removed species. SP_ELF, // (placeholder) SP_HILL_DWARF, // (placeholder) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index bf471a6..6179a13 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -2904,7 +2904,8 @@ bool is_emergency_item(const item_def &item) if (you.species == SP_FORMICID) return false; case WAND_HEAL_WOUNDS: - return true; + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + return true; default: return false; } @@ -2930,8 +2931,10 @@ bool is_emergency_item(const item_def &item) case POT_SPEED: if (you_worship(GOD_CHEIBRIADOS) || you.species == SP_FORMICID) return false; - case POT_CURING: case POT_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + return false; + case POT_CURING: case POT_RESISTANCE: case POT_MAGIC: return true; @@ -3225,6 +3228,11 @@ bool is_useless_item(const item_def &item, bool temp) if (you.species == SP_FELID) return true; + if (you.mutation[MUT_NO_DEVICE_HEAL] + && item_type_known(item) + && item.sub_type == WAND_HEAL_WOUNDS) + return true; + if (item.sub_type == WAND_INVISIBILITY && item_type_known(item) && _invisibility_is_useless(temp)) @@ -3301,7 +3309,8 @@ bool is_useless_item(const item_def &item, bool temp) case POT_SLOWING: case POT_PARALYSIS: return you.species == SP_FORMICID; - + case POT_HEAL_WOUNDS: + return you.mutation[MUT_NO_DEVICE_HEAL]; case POT_INVISIBILITY: return _invisibility_is_useless(temp); } diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 8808b33..4491823 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1237,6 +1237,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) aux_verb.clear(); damage_brand = SPWPN_NORMAL; aux_damage = 0; + int str_bite_damage = 0; switch (atk) { @@ -1325,7 +1326,8 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) case UNAT_BITE: aux_attack = aux_verb = "bite"; aux_damage += you.has_usable_fangs() * 2; - aux_damage += div_rand_round(max(you.strength()-10, 0), 5); + str_bite_damage += div_rand_round(max(you.strength()-10, 0), 5); + aux_damage += str_bite_damage; noise_factor = 75; // prob of vampiric bite: @@ -1339,6 +1341,14 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) damage_brand = SPWPN_VAMPIRICISM; } + if (player_mutation_level(MUT_ANTIMAGIC_BITE)) + { + //Change formula to fangs_level*3 + str/6 + aux_damage -= str_bite_damage; + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); + damage_brand = SPWPN_ANTIMAGIC; + } + if (player_mutation_level(MUT_ACIDIC_BITE)) { damage_brand = SPWPN_ACID; @@ -1579,13 +1589,14 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) { mprf("%s is splashed with acid.", defender->name(DESC_THE).c_str()); - corrode_monster(defender->as_monster(), &you); + corrode_monster(defender->as_monster(), &you); } // TODO: remove this? Unarmed poison attacks? if (damage_brand == SPWPN_VENOM && coinflip()) poison_monster(defender->as_monster(), &you); + // Normal vampiric biting attack, not if already got stabbing special. if (damage_brand == SPWPN_VAMPIRICISM && you.species == SP_VAMPIRE && (!stab_attempt || stab_bonus <= 0)) @@ -1593,6 +1604,31 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) _player_vampire_draws_blood(defender->as_monster(), damage_done); } + if (damage_brand == SPWPN_ANTIMAGIC && you.mutation[MUT_ANTIMAGIC_BITE] + && damage_done > 0) + { + bool spell_user = false; + + if (defender->as_monster()->can_use_spells() + && !defender->as_monster()->is_priest() + && !mons_class_flag(defender->type, M_FAKE_SPELLS)) + { + spell_user = true; + } + + antimagic_affects_defender(true); + mprf("You drain %s magic.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + inc_mp(random2(damage_done) + 1); + + if (spell_user) // The mana drain is more effective on spellcasters + { + inc_mp(random2(damage_done) + 1); + } + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } + if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN && grd(you.pos()) == DNGN_DEEP_WATER && feat_is_water(grd(defender->as_monster()->pos()))) @@ -2474,7 +2510,7 @@ bool melee_attack::distortion_affects_defender() return false; } -void melee_attack::antimagic_affects_defender() +void melee_attack::antimagic_affects_defender(bool amplify_effect = false) { if (defender->is_player()) { @@ -2491,6 +2527,8 @@ void melee_attack::antimagic_affects_defender() { int dur = div_rand_round(damage_done * 8, defender->as_monster()->hit_dice); dur = random2(dur + 1) * BASELINE_DELAY; + if (amplify_effect) + dur *= 2; defender->as_monster()->add_ench(mon_enchant(ENCH_ANTIMAGIC, 0, attacker, // doesn't matter dur)); @@ -5425,10 +5463,11 @@ bool melee_attack::_extra_aux_attack(unarmed_attack_type atk, bool is_uc) && !one_chance_in(3); case UNAT_BITE: - return (is_uc + return ((is_uc || you.has_usable_fangs() || player_mutation_level(MUT_ACIDIC_BITE)) - && x_chance_in_y(2, 5); + && x_chance_in_y(2, 5)) + || you.mutation[MUT_ANTIMAGIC_BITE]; case UNAT_PUNCH: return is_uc && !one_chance_in(3); diff --git a/crawl-ref/source/melee_attack.h b/crawl-ref/source/melee_attack.h index c387471..d2ca0f3 100644 --- a/crawl-ref/source/melee_attack.h +++ b/crawl-ref/source/melee_attack.h @@ -125,7 +125,7 @@ private: /* Brand / Attack Effects */ // Returns true if the defender is banished. bool distortion_affects_defender(); - void antimagic_affects_defender(); + void antimagic_affects_defender(bool amplify_effect); void pain_affects_defender(); void chaos_affects_defender(); void chaos_affects_attacker(); diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 0ac886e..0000dd9 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1247,6 +1247,26 @@ "acidic bite" }, +{ MUT_ANTIMAGIC_BITE, 0, 1, false, true, true, + "antimagic bite", + + {"Your bite disrupts and absorbs the magic of your enemies.", "", ""}, + {"You feel a sudden thirst for magic.", "", ""}, + {"Your magical appetite wanes.", "", ""}, + + "antimagic bite bite" +}, + +{ MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, + "no device heal", + + {"Potions and wands cannot restore your HP.", "", ""}, + {"Your system rejects artificial healing.", "", ""}, + {"Your system accepts artificial healing.", "", ""}, + + "no device heal" +}, + // Scale mutations { MUT_DISTORTION_FIELD, 2, 3, false, false, false, "repulsion field", diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index 695d1fb..7b7f8e7 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -1193,6 +1193,7 @@ static int _handle_conflicting_mutations(mutation_type mutation, { MUT_ACUTE_VISION, MUT_BLURRY_VISION, 1}, { MUT_FAST, MUT_SLOW, 1}, { MUT_MUTATION_RESISTANCE, MUT_EVOLUTION, -1}, + { MUT_ANTIMAGIC_BITE, MUT_ACIDIC_BITE, -1}, }; // If we have one of the pair, delete all levels of the other, diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc index e980188..a8aeaad 100644 --- a/crawl-ref/source/ng-restr.cc +++ b/crawl-ref/source/ng-restr.cc @@ -657,6 +657,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_OCTOPODE: case SP_BASE_DRACONIAN: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -682,6 +683,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; case SP_SPRIGGAN: @@ -718,6 +720,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_BASE_DRACONIAN: case SP_DJINNI: case SP_FORMICID: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: @@ -767,6 +770,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn, case SP_DJINNI: case SP_FORMICID: case SP_GARGOYLE: + case SP_VINE_STALKER: return CC_UNRESTRICTED; default: diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index b1d9816..41758fa 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -78,6 +78,7 @@ static void _species_stat_init(species_type which_species) case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24 case SP_TENGU: s = 8; i = 8; d = 9; break; // 25 case SP_FORMICID: s = 12; i = 7; d = 6; break; // 25 + case SP_VINE_STALKER: s = 10; i = 8; d = 9; break; // 27 case SP_KOBOLD: s = 7; i = 6; d = 10; break; // 23 case SP_HALFLING: s = 5; i = 8; d = 11; break; // 24 @@ -326,6 +327,13 @@ void give_basic_mutations(species_type speci) case SP_DJINNI: you.mutation[MUT_NEGATIVE_ENERGY_RESISTANCE] = 3; break; + case SP_VINE_STALKER: + you.mutation[MUT_FANGS] = 2; + you.mutation[MUT_ANTIMAGIC_BITE] = 1; + you.mutation[MUT_REGENERATION] = 3; + you.mutation[MUT_MANA_SHIELD] = 1; + you.mutation[MUT_NO_DEVICE_HEAL] = 1; + break; default: break; } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 86de633..93e2e31 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3569,6 +3569,20 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } break; + case SP_VINE_STALKER: + if (!(you.experience_level % 4)) + { + modify_stat((coinflip() ? STAT_STR + : STAT_DEX), 1, false, + "level gain"); + } + + if (you.experience_level == 8) + { + perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + } + break; + default: break; } @@ -6794,7 +6808,7 @@ int player::res_rotting(bool temp) const return 3; } - if (species == SP_GARGOYLE) + if (species == SP_GARGOYLE || species == SP_VINE_STALKER) return 3; if (mutation[MUT_FOUL_STENCH]) @@ -6904,6 +6918,7 @@ int player_res_magic(bool calc_unid, bool temp) break; case SP_NAGA: case SP_MUMMY: + case SP_VINE_STALKER: rm = you.experience_level * 5; break; case SP_PURPLE_DRACONIAN: diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index 10d1335..b0193c5 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -81,7 +81,22 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } - inc_hp((5 + random2(7)) / factor); + if (you.mutation[MUT_NO_DEVICE_HEAL] + && potion && was_known + && you.duration[DUR_CONF] == 0 + && you.duration[DUR_POISONING] == 0 + && you.rotting == 0 + && you.disease == 0) + { + mpr("You have no ailments to cure."); + return false; + } + + if (!you.mutation[MUT_NO_DEVICE_HEAL]) + { + inc_hp((5 + random2(7)) / factor); + } + mpr("You feel better."); // Only fix rot when healed to full. @@ -109,6 +124,17 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know break; } + if (you.mutation[MUT_NO_DEVICE_HEAL]) + { + if (potion && was_known) + { + mpr("That would not heal you."); + return false; + } + mpr("That seemed strangely inert."); + break; + } + inc_hp((10 + random2avg(28, 3)) / factor); mpr("You feel much better."); diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt index b1ba880..ff6e934 100644 --- a/crawl-ref/source/rltiles/dc-player.txt +++ b/crawl-ref/source/rltiles/dc-player.txt @@ -75,6 +75,8 @@ djinni_f DJINNI djinni_m %rim 1 formicid FORMICID +vine_stalker_f VINE_STALKER +vine_stalker_m # draconians draconian_f DRACONIAN DRACONIAN_FIRST diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_f.png b/crawl-ref/source/rltiles/player/base/vine_stalker_f.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa47d487bfe7a0c389c6231a13d11c351f93e8 GIT binary patch literal 800 zcmV+*1K<3KP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~AC>O75T9E(%0<B3z zK~z}7#aF#<qd*Y;27@e`lS^OcDmp2J^9FW%Pl4_ouDARS*T)ojhP3z%a1mWZwH1jw z7m<jC&0Mi8EO-fUCdx<%Yj&95Z)e8D%=k*O@Wo`Cm_%e0R@utWxpqcfzi)M*>0?bX z!*hV83j_%u&LAQNKnB_CO2Ev8!Z?l*$1woF`~4RXDKN9){fPhoQ4}GHA`lTeV@ny( zpC%cd1<&Dq81g<084HW`lC<fm*y`heb}kJ|qs8wwU8Zv~8Px07aLxem^Y*sjJw82E zfM^1vNmnZdi0I;h=g>Y33z^Ns1K>FpNh;-r!a$|=>d`UaIb1pGVXL(SHQ)g=8xSY? z)@kO*caQ*n3Uwu~E`jn1fV}tOB;U%QZdjy%IQQy=T{FN~xw)Yu?kA<+;=m9Gsl&e; z<;*j%%`UR=zZr0fNW}>N@M}VaaYg<FW%RRAHFH;HKt?Z4dSoc@kY}afFDzg=mhv?$ z^v!@o^!+z8=m5zNj(Wr;e`ZT3TW*HcXnf^L1tOK4b%JShQ$xO;M_U4K8r`VKB`G}( zPP9)$m3jcLFV9lvVuaa&flwL}Ac(mIf0q?92#%$befNRVxK{JBmb?aIbwK4N_;({< zry+lv$%vOdJ0Sp?e*f`NS7WSPhUc(1x7eFovJ<Y{W_f^fomSnRZE%RGxsh{T&r2+* z8z3X6dJ}tnc_ubogZ?|AGA7ROcNzR$R$^s2Zkr<mETvjQssMHAmcaYetyrYeSlMa` zeky0d#~HZVfpL+6Ah|qMgG!ej*n#(=F_|V_km%j-{c}p7qO7-G)iat}_FxX=Yq(+I zAZ)XG83uJg4kd;7CfdB!htMDkNj?!%<A`l`GzHd4>p1RKu>9{=C)&K#my&^2vig45 et>d+>Wd8tyU;^bM4k$1H0000<MNUMnLSTY-)?@hq literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/player/base/vine_stalker_m.png b/crawl-ref/source/rltiles/player/base/vine_stalker_m.png new file mode 100644 index 0000000000000000000000000000000000000000..bf616c10aa100944c14bb736e9e7986762866883 GIT binary patch literal 778 zcmV+l1NHogP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$~9D<w(ZPFDZ`0+&fd zK~z}7#aFv-+b|S8H<4gyDYDhwI0XSRcaGL>{R5$&P@ub!FX+;}_K<JrD$iZC1T8di zQtK@!0tkUD-wqTXl4(ow10f)oBCqbb&qJD+8Lv4m@X90bEfSGeSVybb=guAt{l3?L zT^~D&8A%Al5s;REtU*K!fIPCtrGS}@!lEcp6a@ev`SJ^p6(9m6-*Nyzp6AH(97Ke{ zwWR^vXP1n-ge2rumhmdf7<U)!rle0#3u}x4&b|Uxpl05u%ePNHKsSFo_89;^+}@hC zACHf%Li81*PgidZ5K;GGBq3H=W@P3M4?q%vh}e}KGI}G>%?7@|QM0tf>hn(kz}v6y z0TBQq1U~(P?uH?4IK}|REK(q{va8*9xds-M*NB5s(DGb^iBJK_wR)Fp3odJ57HtvL zC?@m{?PdA`#84!p*F|8##if!t;aR}AyRcpxPb<ZO8cfzsS}q4iVOR>{iJ@F9H`WLd zG<z=!bh&Aw5Ljc6Fn~?&HJC|9ZH>_2ZUnS^5?VbY4Nw)II2C?hVwzvu5Cb*>4)`>` z)?J{6*0aNi{Y7XzRlk4#{8l>U2I7i<OaVy{<P&4z$e7v?!I52Hy&)$xkWbbjcW&gC z8?_jZY(vfSxG%fFEkJSAOSRPKVE~xEy8#jL)_HLd6{jVVtZoPDW77?)OUTc}OotPZ zOGqNX!fnY}q$)q20LyZJM2^0cx`gDmT^x;Kz{3rYl>)P&CM+6Oj3;L`fK3EaPnhG# zjSQbB0-Bg)y}g%~F8iG+1=>r^gk93=QufIW&`0m~g@dr%bklHB1MF37AHe*%dkCH6 zPS~7?)!ysYwxN|~Q#$^ynZ64Q8T04%iFu-1G50ar5LqAAf2*L&e3r5Ah5!Hn07*qo IM6N<$g8pby1^@s6 literal 0 HcmV?d00001 diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index e4a3626..cf3cce6 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,6 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, @@ -67,7 +68,7 @@ static const char * Species_Abbrev_List[NUM_SPECIES] = // the draconians "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Dr", "Ce", "Dg", "Sp", "Mi", "Ds", "Gh", "Te", "Mf", "Vp", "DD", - "Fe", "Op", "Dj", "LO", "Gr", "Fo", + "Fe", "Op", "Dj", "LO", "Gr", "Fo", "VS", // placeholders "El", "HD", "OM", "GE", "Gn", "MD", #if TAG_MAJOR_VERSION > 34 @@ -192,17 +193,18 @@ string species_name(species_type speci, bool genus, bool adj) default: switch (speci) { - case SP_HUMAN: res = "Human"; break; - case SP_HALFLING: res = "Halfling"; break; - case SP_KOBOLD: res = "Kobold"; break; - case SP_MUMMY: res = "Mummy"; break; - case SP_NAGA: res = "Naga"; break; - case SP_CENTAUR: res = "Centaur"; break; - case SP_SPRIGGAN: res = "Spriggan"; break; - case SP_MINOTAUR: res = "Minotaur"; break; - case SP_TENGU: res = "Tengu"; break; - case SP_GARGOYLE: res = "Gargoyle"; break; - case SP_FORMICID: res = "Formicid"; break; + case SP_HUMAN: res = "Human"; break; + case SP_HALFLING: res = "Halfling"; break; + case SP_KOBOLD: res = "Kobold"; break; + case SP_MUMMY: res = "Mummy"; break; + case SP_NAGA: res = "Naga"; break; + case SP_CENTAUR: res = "Centaur"; break; + case SP_SPRIGGAN: res = "Spriggan"; break; + case SP_MINOTAUR: res = "Minotaur"; break; + case SP_TENGU: res = "Tengu"; break; + case SP_GARGOYLE: res = "Gargoyle"; break; + case SP_FORMICID: res = "Formicid"; break; + case SP_VINE_STALKER: res = "Vine Stalker"; break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); @@ -437,6 +439,7 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: + case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -486,6 +489,7 @@ int species_hp_modifier(species_type species) case SP_FELID: return -4; case SP_SPRIGGAN: + case SP_VINE_STALKER: return -3; case SP_DEEP_ELF: case SP_TENGU: @@ -541,6 +545,7 @@ int species_mp_modifier(species_type species) return 0; case SP_SLUDGE_ELF: case SP_TENGU: + case SP_VINE_STALKER: return 1; case SP_FELID: case SP_HIGH_ELF: diff --git a/crawl-ref/source/spl-goditem.cc b/crawl-ref/source/spl-goditem.cc index 292e9d6..92fb91c 100644 --- a/crawl-ref/source/spl-goditem.cc +++ b/crawl-ref/source/spl-goditem.cc @@ -381,6 +381,8 @@ int cast_healing(int pow, int max_pow, bool divine_ability, { pow = min(50, pow); max_pow = min(50, max_pow); + if (!not_self && !divine_ability && you.mutation[MUT_NO_DEVICE_HEAL]) + return 0; return _healing_spell(pow + roll_dice(2, pow) - 2, (3 * max_pow) - 2, divine_ability, where, not_self, mode); } diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc index 0a50160..a718529 100644 --- a/crawl-ref/source/tilepick-p.cc +++ b/crawl-ref/source/tilepick-p.cc @@ -630,6 +630,8 @@ tileidx_t tilep_species_to_base_tile(int sp, int level) return TILEP_BASE_DJINNI; case SP_FORMICID: return TILEP_BASE_FORMICID; + case SP_VINE_STALKER: + return TILEP_BASE_VINE_STALKER; default: return TILEP_BASE_HUMAN; } -- 1.7.9.5 From 3f178df27d2e10f37bc9d9256e8552b5c4eef05a Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:34:01 -0800 Subject: [PATCH 02/15] Prevent vine stalker bite from draining firewood or summons. Summons still get antimagic applied, though. --- crawl-ref/source/melee_attack.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 4491823..e86d0d1 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1619,14 +1619,17 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) antimagic_affects_defender(true); mprf("You drain %s magic.", defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); - inc_mp(random2(damage_done) + 1); - if (spell_user) // The mana drain is more effective on spellcasters + if (!defender->as_monster()->is_summoned() + && !mons_is_firewood(defender->as_monster())) { inc_mp(random2(damage_done) + 1); - } - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + if (spell_user) // The mana drain is more effective on spellcasters + inc_mp(random2(damage_done) + 1); + + mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + } } if (atk == UNAT_TAILSLAP && you.species == SP_GREY_DRACONIAN -- 1.7.9.5 From d9ed4c1b9719dc1c2e9177c8d88de4d3d819f797 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 15:37:27 -0800 Subject: [PATCH 03/15] Change 'magic' to 'power' for non-spellcaster manadrain message. In case people are wondering what vine stalkers get when biting e.g. geckos. --- crawl-ref/source/itemname.cc | 2 ++ crawl-ref/source/melee_attack.cc | 5 +++-- crawl-ref/source/player.cc | 2 -- crawl-ref/source/potion.cc | 6 ++---- crawl-ref/source/species.cc | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 6179a13..727e75d 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -3231,7 +3231,9 @@ bool is_useless_item(const item_def &item, bool temp) if (you.mutation[MUT_NO_DEVICE_HEAL] && item_type_known(item) && item.sub_type == WAND_HEAL_WOUNDS) + { return true; + } if (item.sub_type == WAND_INVISIBILITY && item_type_known(item) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index e86d0d1..bc89332 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1617,8 +1617,9 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) } antimagic_affects_defender(true); - mprf("You drain %s magic.", - defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str()); + mprf("You drain %s%s.", + defender->as_monster()->pronoun(PRONOUN_POSSESSIVE).c_str(), + spell_user ? " magic" : " power"); if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 93e2e31..ba4b012 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3578,9 +3578,7 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } if (you.experience_level == 8) - { perma_mutate(MUT_FANGS, 1, "vine stalker growth"); - } break; default: diff --git a/crawl-ref/source/potion.cc b/crawl-ref/source/potion.cc index b0193c5..b6d2134 100644 --- a/crawl-ref/source/potion.cc +++ b/crawl-ref/source/potion.cc @@ -83,7 +83,7 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know if (you.mutation[MUT_NO_DEVICE_HEAL] && potion && was_known - && you.duration[DUR_CONF] == 0 + && you.duration[DUR_CONF] == 0 && you.duration[DUR_POISONING] == 0 && you.rotting == 0 && you.disease == 0) @@ -92,10 +92,8 @@ bool potion_effect(potion_type pot_eff, int pow, item_def *potion, bool was_know return false; } - if (!you.mutation[MUT_NO_DEVICE_HEAL]) - { + if (!you.mutation[MUT_NO_DEVICE_HEAL]) inc_hp((5 + random2(7)) / factor); - } mpr("You feel better."); diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index cf3cce6..3e230fb 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -25,7 +25,7 @@ static species_type species_order[] = SP_DEEP_ELF, SP_DEEP_DWARF, SP_HILL_ORC, SP_LAVA_ORC, SP_MERFOLK, SP_FORMICID, - SP_VINE_STALKER, + SP_VINE_STALKER, // small species SP_HALFLING, SP_KOBOLD, SP_SPRIGGAN, -- 1.7.9.5 From 2bc8bcd8e9c5ae0d307e67ab32c8b9aadaedc80e Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:28:27 -0800 Subject: [PATCH 04/15] Add MONS_VINE_STALKER. This shouldn't place. Mainly it is for the player vine stalker glyph. --- crawl-ref/source/enum.h | 1 + crawl-ref/source/mon-data.h | 12 ++++++++++++ crawl-ref/source/species.cc | 2 ++ 3 files changed, 15 insertions(+) diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index e929091..47c5cef 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2843,6 +2843,7 @@ enum monster_type // menv[].type MONS_DRAGON, // genus MONS_SNAKE, // genus #endif + MONS_VINE_STALKER, NUM_MONSTERS, // used for polymorph diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 2ea68e5..8c700aa 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -4924,6 +4924,18 @@ static monsterentry mondata[] = MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM }, +{ + MONS_VINE_STALKER, 'P', MAGENTA, "vine stalker", + M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO | M_FAST_REGEN | M_CANT_SPAWN, + MR_NO_FLAGS, + 550, 10, MONS_PLANT, MONS_VINE_STALKER, MH_PLANT, -4, + { {AT_HIT, AF_ANTIMAGIC, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, + { 5, 3, 3, 0 }, + 2, 12, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT, + I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY, + MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM +}, + { // dummy... literally; single vault MONS_HALFLING, '@', LIGHTGREY, "halfling", M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO, diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index 3e230fb..18c5402 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -392,6 +392,8 @@ monster_type player_species_to_mons_species(species_type species) return MONS_DJINNI; case SP_FORMICID: return MONS_FORMICID; + case SP_VINE_STALKER: + return MONS_VINE_STALKER; case SP_ELF: case SP_HILL_DWARF: case SP_MOUNTAIN_DWARF: -- 1.7.9.5 From ffc709280dce565b94392a3c4e3d55cbfc4d8574 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:43:32 -0800 Subject: [PATCH 05/15] Add adjective and genus for vine stalker naming. --- crawl-ref/source/species.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index 18c5402..a959436 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -204,8 +204,10 @@ string species_name(species_type speci, bool genus, bool adj) case SP_TENGU: res = "Tengu"; break; case SP_GARGOYLE: res = "Gargoyle"; break; case SP_FORMICID: res = "Formicid"; break; - case SP_VINE_STALKER: res = "Vine Stalker"; break; + case SP_VINE_STALKER: + res = (adj ? "Vine" : genus ? "Vine" : "Vine Stalker"); + break; case SP_DEEP_DWARF: res = (adj ? "Dwarven" : genus ? "Dwarf" : "Deep Dwarf"); break; -- 1.7.9.5 From 91125c777ff17e44abee574454d890def6d0b494 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 17:47:27 -0800 Subject: [PATCH 06/15] Reduce vine stalker experience apt by 1. --- crawl-ref/source/species.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc index a959436..ee1c95e 100644 --- a/crawl-ref/source/species.cc +++ b/crawl-ref/source/species.cc @@ -443,7 +443,6 @@ int species_exp_modifier(species_type species) case SP_HUMAN: case SP_HALFLING: case SP_KOBOLD: - case SP_VINE_STALKER: return 1; case SP_HILL_ORC: case SP_OGRE: @@ -454,6 +453,7 @@ int species_exp_modifier(species_type species) case SP_OCTOPODE: case SP_TENGU: case SP_GARGOYLE: + case SP_VINE_STALKER: return 0; case SP_SPRIGGAN: case SP_DEEP_DWARF: -- 1.7.9.5 From 0cf952bad042b9d7131e70bea2263ed877861db3 Mon Sep 17 00:00:00 2001 From: Neil Moore <neil@s-z.org> Date: Mon, 30 Dec 2013 21:32:45 -0500 Subject: [PATCH 07/15] A few tweaks to VS monster. No corpse or zombie, and no blood. Also move it to the Ps. --- crawl-ref/source/mon-data.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 8c700aa..e47e85e 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -3903,6 +3903,18 @@ static monsterentry mondata[] = MONUSE_NOTHING, MONEAT_NOTHING, SIZE_SMALL }, +{ // dummy for show_player_species + MONS_VINE_STALKER, 'P', MAGENTA, "vine stalker", + M_SPEAKS | M_NO_POLY_TO | M_FAST_REGEN | M_CANT_SPAWN, + MR_NO_FLAGS, + 0, 10, MONS_PLANT, MONS_VINE_STALKER, MH_PLANT, -4, + { {AT_HIT, AF_ANTIMAGIC, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, + { 5, 3, 3, 0 }, + 2, 12, MST_NO_SPELLS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, + I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY, + MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM +}, + // genies and rakshasas ('R') { MONS_EFREET, 'R', RED, "efreet", @@ -4924,18 +4936,6 @@ static monsterentry mondata[] = MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM }, -{ - MONS_VINE_STALKER, 'P', MAGENTA, "vine stalker", - M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO | M_FAST_REGEN | M_CANT_SPAWN, - MR_NO_FLAGS, - 550, 10, MONS_PLANT, MONS_VINE_STALKER, MH_PLANT, -4, - { {AT_HIT, AF_ANTIMAGIC, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, - { 5, 3, 3, 0 }, - 2, 12, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT, - I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY, - MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM -}, - { // dummy... literally; single vault MONS_HALFLING, '@', LIGHTGREY, "halfling", M_WARM_BLOOD | M_SPEAKS | M_NO_POLY_TO, -- 1.7.9.5 From 91332761464c8ccc98e156fb8be388c2dcee9d5e Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 18:51:32 -0800 Subject: [PATCH 08/15] Add Plane Stalker. --- crawl-ref/source/melee_attack.cc | 2 +- crawl-ref/source/mutation-data.h | 2 +- crawl-ref/source/skills2.cc | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index bc89332..4f584fe 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1343,7 +1343,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*3 + str/6 + //Change formula to fangs_level*2 + str/6 aux_damage -= str_bite_damage; aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; diff --git a/crawl-ref/source/mutation-data.h b/crawl-ref/source/mutation-data.h index 0000dd9..a866c67 100644 --- a/crawl-ref/source/mutation-data.h +++ b/crawl-ref/source/mutation-data.h @@ -1254,7 +1254,7 @@ {"You feel a sudden thirst for magic.", "", ""}, {"Your magical appetite wanes.", "", ""}, - "antimagic bite bite" + "antimagic bite" }, { MUT_NO_DEVICE_HEAL, 0, 1, true, false, false, diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc index 3e5a790..03c4d1f 100644 --- a/crawl-ref/source/skills2.cc +++ b/crawl-ref/source/skills2.cc @@ -212,11 +212,12 @@ static string _stk_genus_short_cap() static string _stk_walker() { - return Skill_Species == SP_NAGA ? "Slider" : - Skill_Species == SP_TENGU ? "Glider" : - Skill_Species == SP_DJINNI ? "Floater" : - Skill_Species == SP_OCTOPODE ? "Wriggler" - : "Walker"; + return Skill_Species == SP_NAGA ? "Slider" : + Skill_Species == SP_TENGU ? "Glider" : + Skill_Species == SP_DJINNI ? "Floater" : + Skill_Species == SP_OCTOPODE ? "Wriggler" : + Skill_Species == SP_VINE_STALKER ? "Stalker" + : "Walker"; } static string _stk_weight() -- 1.7.9.5 From 9e5b2a04e65cf817e1a377e7b0e5156217309f50 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:33:59 -0800 Subject: [PATCH 09/15] Reduce vine stalker starting regen to II, upgrades to III at xl8. --- crawl-ref/source/ng-setup.cc | 2 +- crawl-ref/source/player.cc | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index 41758fa..fe6e068 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -330,7 +330,7 @@ void give_basic_mutations(species_type speci) case SP_VINE_STALKER: you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; - you.mutation[MUT_REGENERATION] = 3; + you.mutation[MUT_REGENERATION] = 2; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; break; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index ba4b012..bf63e4c 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3579,6 +3579,7 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) if (you.experience_level == 8) perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); break; default: -- 1.7.9.5 From 4620eb882679039f96ef1936ca826ee881c681c2 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Mon, 30 Dec 2013 21:36:47 -0800 Subject: [PATCH 10/15] Halve vine stalker manavamp across the board. --- crawl-ref/source/melee_attack.cc | 7 ++++--- crawl-ref/source/player.cc | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 4f584fe..5db770c 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1343,7 +1343,7 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*2 + str/6 + //Change formula to fangs_level*2 + 2*XL/3 aux_damage -= str_bite_damage; aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; @@ -1624,10 +1624,11 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - inc_mp(random2(damage_done) + 1); + //1dDamage, halve that, cast to int. + inc_mp((int)((random2(damage_done) + 1)/2)); if (spell_user) // The mana drain is more effective on spellcasters - inc_mp(random2(damage_done) + 1); + inc_mp((int)((random2(damage_done) + 1)/2)); mprf("You feel%sinvigorated.", spell_user ? " very " : " "); } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index bf63e4c..4fb0427 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3578,8 +3578,10 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) } if (you.experience_level == 8) + { perma_mutate(MUT_FANGS, 1, "vine stalker growth"); perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); + } break; default: -- 1.7.9.5 From 2d21670966ca6c19f0ebe4f377cd8a3f9d12bd83 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:52:13 -0800 Subject: [PATCH 11/15] Add 'int/2 - 6' to vine stalker bite formula, and cap damage to 24. This should make it more attractive as a way to replenish mana for book backgrounds, and somewhat less powerful with melee backgrounds. Specifically: Fi gets -2 damage, Mo -1, *K +0, Ne +1.5, Wz +3. --- crawl-ref/source/melee_attack.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 5db770c..6a99a65 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1343,9 +1343,13 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to fangs_level*2 + 2*XL/3 + //Change formula to max(24, fangs_level*2 + 2*XL/3 + int/2 - 6) aux_damage -= str_bite_damage; - aux_damage += div_rand_round(2 * you.get_experience_level(), 3); + aux_damage += div_rand_round(2 * you.get_experience_level(), + 3) + + div_rand_round(you.intel(), 2) + - 6; + aux_damage = min(24, aux_damage); damage_brand = SPWPN_ANTIMAGIC; } -- 1.7.9.5 From eff8384fd2623eb168d86e8963560f46d89f6717 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:57:34 -0800 Subject: [PATCH 12/15] Make vine stalker bite manadrain all creatures for 1dDamage. --- crawl-ref/source/melee_attack.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 6a99a65..a46c1bc 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1628,13 +1628,8 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - //1dDamage, halve that, cast to int. - inc_mp((int)((random2(damage_done) + 1)/2)); - - if (spell_user) // The mana drain is more effective on spellcasters - inc_mp((int)((random2(damage_done) + 1)/2)); - - mprf("You feel%sinvigorated.", spell_user ? " very " : " "); + inc_mp(random2(damage_done) + 1); + mpr("You feel invigorated."); } } -- 1.7.9.5 From a4ce22614dfc9d5429d04e224830d97ef4194d0d Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 15:59:23 -0800 Subject: [PATCH 13/15] Reduce vine stalker Fighting aptitude by 1. --- crawl-ref/source/aptitudes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h index 195f6cb..1f2da7f 100644 --- a/crawl-ref/source/aptitudes.h +++ b/crawl-ref/source/aptitudes.h @@ -1453,7 +1453,7 @@ static const species_skill_aptitude species_skill_aptitudes[] = APT(SP_FORMICID, SK_EVOCATIONS, 2), // SP_VINE_STALKER - APT(SP_VINE_STALKER, SK_FIGHTING, 0), + APT(SP_VINE_STALKER, SK_FIGHTING, -1), APT(SP_VINE_STALKER, SK_SHORT_BLADES, -1), APT(SP_VINE_STALKER, SK_LONG_BLADES, -1), APT(SP_VINE_STALKER, SK_AXES, -1), -- 1.7.9.5 From 62d8bfd3b59413aadd334d2c03a8e9bfbad4507f Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sat, 4 Jan 2014 16:06:17 -0800 Subject: [PATCH 14/15] Delay regen II to xl6, and regen III to xl12. The early game should be harder now that creatures can damage vine stalkers through their regeneration, and this shouldn't contribute to run- regeneration tedium since, if a vine stalker tangles with an orc warrior or ogre early on, they'll likely be smashed. --- crawl-ref/source/ng-setup.cc | 2 +- crawl-ref/source/player.cc | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc index fe6e068..a8e1109 100644 --- a/crawl-ref/source/ng-setup.cc +++ b/crawl-ref/source/ng-setup.cc @@ -330,7 +330,7 @@ void give_basic_mutations(species_type speci) case SP_VINE_STALKER: you.mutation[MUT_FANGS] = 2; you.mutation[MUT_ANTIMAGIC_BITE] = 1; - you.mutation[MUT_REGENERATION] = 2; + you.mutation[MUT_REGENERATION] = 1; you.mutation[MUT_MANA_SHIELD] = 1; you.mutation[MUT_NO_DEVICE_HEAL] = 1; break; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 4fb0427..061219d 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -3577,11 +3577,14 @@ void level_change(int source, const char* aux, bool skip_attribute_increase) "level gain"); } + if (you.experience_level == 6) + perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); + if (you.experience_level == 8) - { perma_mutate(MUT_FANGS, 1, "vine stalker growth"); + + if (you.experience_level == 12) perma_mutate(MUT_REGENERATION, 1, "vine stalker growth"); - } break; default: -- 1.7.9.5 From f4c8788c1ede5bfa477224bb7530b84672b14c48 Mon Sep 17 00:00:00 2001 From: Sage <SageBasilMint@gmail.com> Date: Sun, 25 Mar 2007 21:25:26 +0000 Subject: [PATCH 15/15] Make vine stalker bite's mana drain key off of current mana. ...and remove int's effect on vine stalker bite damage. 0.25 * 1dDamage at mp == max_mp, 1.25 * 1dDamage at 0 mp. This should solve the problem that vine stalker bite was more useful for melee backgrounds solely as a source of extra hp than it was for magical backgrounds as a source of mana replenishment. --- crawl-ref/source/melee_attack.cc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index a46c1bc..da1fce2 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -1343,13 +1343,9 @@ void melee_attack::player_aux_setup(unarmed_attack_type atk) if (player_mutation_level(MUT_ANTIMAGIC_BITE)) { - //Change formula to max(24, fangs_level*2 + 2*XL/3 + int/2 - 6) + //Change formula to fangs_level*2 + 2*XL/3 aux_damage -= str_bite_damage; - aux_damage += div_rand_round(2 * you.get_experience_level(), - 3) - + div_rand_round(you.intel(), 2) - - 6; - aux_damage = min(24, aux_damage); + aux_damage += div_rand_round(2 * you.get_experience_level(), 3); damage_brand = SPWPN_ANTIMAGIC; } @@ -1628,8 +1624,16 @@ bool melee_attack::player_aux_apply(unarmed_attack_type atk) if (!defender->as_monster()->is_summoned() && !mons_is_firewood(defender->as_monster())) { - inc_mp(random2(damage_done) + 1); - mpr("You feel invigorated."); + int drain = random2(damage_done) + 1; + //Augment mana drain--1.25 "standard" effectiveness at 0 mp, + //.25 at mana == max_mana + drain = (int)((1.25 - you.magic_points / you.max_magic_points) + * drain); + if (drain && you.magic_points != you.max_magic_points) + { + mpr("You feel invigorated."); + inc_mp(drain); + } } } -- 1.7.9.5 |
||||||
|
Notes | |
(0024799) Bloax (reporter) 2013-12-21 18:32 |
How about this doll? |
(0024800) dck (reporter) 2013-12-21 19:13 |
Knew I could count on ya bloax, gj. |
(0024801) Bloax (reporter) 2013-12-21 19:55 edited on: 2013-12-21 20:12 |
Say, what if the bite damage is always somewhat equally relevant? https://docs.google.com/spreadsheet/pub?key=0AsKF0KRvqPwidGlVaXZpMzNIclF5V2pSWW5kTUNnSXc&output=html [^] "(mutlevel*3) + (mutlevel*3)*(xl/27)*(1+(str/30))" Seems to do the trick, and provides quite a bunch of knobs to turn instead of a single one. |
(0024802) Bloax (reporter) 2013-12-21 22:23 |
Fixed the damn border. |
(0024803) dck (reporter) 2013-12-21 22:50 |
Initially factoring in str was not so much a reasoned decision but more of a leftover from the original aux bite formula. It doesn't add much more than breakpoints. In the current revision it is (mutlevel*3) + XL*2/3 which by and large seems be providing a good damage curve and allowing the bite to remain relevant (as the core mechanic to the race it is). Numbers can (and likely will) be tweaked later down the road based on feedback on the strength of the bite, but as we stand right now it's good for testing purposes, it seems. |
(0024804) Bloax (reporter) 2013-12-22 00:46 |
The reason I added strength in there is because I like strength affecting something beyond your weapon's damage, since it's in such an abstract form that it really ought to do so. |
(0024835) Sage (reporter) 2013-12-25 06:39 |
Added the squashed patch; sorry about not doing it before. |
(0024878) neil (administrator) 2013-12-30 18:37 |
This is an experimental branch on CSZO now: T)runk -> X)perimental -> V)ine Stalker (or choose it from the webtiles lobby). |
(0024883) johlstei (reporter) 2013-12-30 22:59 |
Copy pasting from tavern - sorry in advance for ugly code formatting. - case WAND_HASTING: // each 17.9%, group unknown each 26.3% case WAND_HEAL_WOUNDS: + if (you.mutation[MUT_NO_DEVICE_HEAL]) + w = 0; break; + case WAND_HASTING: // each 17.9%, group unknown each 26.3% w = 25; break; Is this a bug? It looks like you don't assign w if you are not a vine stalker. Did you mean to put braces around the "w = 0; break;"? Sorry if this isn't the place for this, it just happened to catch my eye and its just subtle enough that I don't think it would be easily noticed. |
(0024885) Sage (reporter) 2013-12-31 00:58 |
Another couple files. vine-stalker-update has a few patches for issues I've been informed of: Now /HW should not be gray for VS when not identified; VS shouldn't get mana from summons or firewood; and the antimagic bite message has been tweaked for non-spellcasting creatures. vine-stalker-complete has everything from "Vine stalkers added" to the new patches, and has unneeded whitespaces removed--I used checkwhite incorrectly in the old patches. Sorry about that. |
(0024886) neil (administrator) 2013-12-31 02:55 |
Applied the second patch in vinestalker branch and updated CSZO. |
(0024887) neil (administrator) 2013-12-31 03:38 |
Applied update-2. |
(0024888) Sage (reporter) 2013-12-31 06:50 |
Another nerf. Postpone regen III until xl8, halve manavamp across the board, and a couple fixes for my errors. |
(0024892) neil (administrator) 2013-12-31 18:24 |
Applied patches up to and including -update-3. Also merged in trunk. |
(0024925) neil (administrator) 2014-01-05 02:10 |
Applied update-5 |
(0024959) neil (administrator) 2014-01-10 07:14 |
Applied update-6 |
(0025078) Sage (reporter) 2014-01-25 08:48 |
Added vs.patch--I (hopefully) resolved conflicts, so it should be ready for trunk. |
(0025096) neil (administrator) 2014-01-26 17:54 |
In trunk (0.14-a0-2115-g202e82eb), thanks! |
Mantis 1.1.8[^] Copyright © 2000 - 2009 Mantis Group |