Attached Files:
|
smithgod3.patch [^] (98,954 bytes) 2014-02-23 21:44 [Show Content] [Hide Content]From 1295ac2bbbd032eea6fefcb735af1ca6849894aa Mon Sep 17 00:00:00 2001
From: pubby <pubby8@gmail.com>
Date: Fri, 14 Feb 2014 11:50:40 -0600
Subject: [PATCH 1/2] Smith and fire god: Igni
Original idea was based on a tavern thread, which is where the name
"Igni" comes from, although very few of the tavern ideas are in this
implementation.
I haven't playtested much, and so the god likely needs balancing and
additional work. I'm not even sure if it's fun or interesting.
Grunt mentioned something about running out of space for altar enums.
I inserted the new altar feature in the middle of the enum, so that
probably needs to be looked at.
Features and rationale:
A defensive-oriented god whose abilities have a gold cost.
The flavour is a god of fire, but one who uses fire for creation rather
than destruction.
This is manifested as a smith god reminiscent of Ptah and Hephaestus.
Piety is gained from reading enchant scrolls and exploring.
The enchant scroll conduct is intended to pressure players into reading
scrolls early rather than stockpiling them, which I consider
interesting.
Exploration piety exists so that you can gain piety even when the game
generates very little scrolls.
Abilities:
(*) Boosts the AC of metal body armour. (~8 extra AC at
max piety in plate armour)
This ability synergizes nicely with the enchant conduct.
(**) Reforge an enemy weapon into a mundane hammer.
This is a defensive ability that can cripple enemies such as hill giants,
orc warlords, and certain uniques.
(***) Add the flaming brand to your weapon. (costs lots of gold)
This is the only god given brand that can be applied multiple times.
The piety breakpoint for this ability was chosen to be *** because that
allows players to have a flaming weapon by the time hydras appear.
(****) Divine bellows ability.
This is the same effect as a fan of gales, except it doesn't summon any
elementals.
It creates some distance between you and other monsters.
(*****) Fire-immune magma form with eruption ability.
Magma form is a very powerful effect that makes you immune to fire, but
is extremely unstable and prone to spontaneous erupting.
The eruption effect deals fire-based AoE damage, but ends your
transformation and "magma-exhausts" you.
---
crawl-ref/source/ability.cc | 378 +++++++++++++--------
crawl-ref/source/ability.h | 1 +
crawl-ref/source/areas.cc | 10 +-
crawl-ref/source/beam.cc | 34 ++
crawl-ref/source/chardump.cc | 3 +
crawl-ref/source/dat/database/godname.txt | 4 +
crawl-ref/source/dat/database/godspeak.txt | 4 +
crawl-ref/source/dat/descript/ability.txt | 34 ++
crawl-ref/source/dat/descript/features.txt | 5 +
crawl-ref/source/dat/descript/gods.txt | 11 +
crawl-ref/source/describe.cc | 4 +
crawl-ref/source/directn.cc | 2 +
crawl-ref/source/enum.h | 19 +-
crawl-ref/source/evoke.cc | 7 +-
crawl-ref/source/feature.cc | 1 +
crawl-ref/source/godabil.cc | 228 +++++++++++++
crawl-ref/source/godabil.h | 6 +
crawl-ref/source/godconduct.cc | 17 +
crawl-ref/source/godpassive.cc | 21 ++
crawl-ref/source/godpassive.h | 1 +
crawl-ref/source/godwrath.cc | 96 ++++++
crawl-ref/source/hiscores.cc | 1 +
crawl-ref/source/item_use.cc | 10 +-
crawl-ref/source/main.cc | 28 +-
crawl-ref/source/melee_attack.cc | 3 +
crawl-ref/source/misc.cc | 3 +
crawl-ref/source/ouch.cc | 27 +-
crawl-ref/source/output.cc | 3 +
crawl-ref/source/player-act.cc | 10 +
crawl-ref/source/player.cc | 76 ++++-
crawl-ref/source/player.h | 3 +
crawl-ref/source/religion.cc | 71 +++-
crawl-ref/source/rltiles/dc-feat.txt | 1 +
crawl-ref/source/rltiles/dc-mon.txt | 1 +
crawl-ref/source/rltiles/dngn/altars/igni.png | Bin 0 -> 786 bytes
.../source/rltiles/player/transform/magma_form.png | Bin 0 -> 372 bytes
crawl-ref/source/spl-other.cc | 4 +-
crawl-ref/source/spl-selfench.cc | 6 +
crawl-ref/source/status.cc | 7 +
crawl-ref/source/terrain.cc | 2 +-
crawl-ref/source/tilepick-p.cc | 1 +
crawl-ref/source/tilepick.cc | 2 +
crawl-ref/source/transform.cc | 53 ++-
crawl-ref/source/wiz-you.cc | 1 +
44 files changed, 1032 insertions(+), 167 deletions(-)
create mode 100644 crawl-ref/source/rltiles/dngn/altars/igni.png
create mode 100644 crawl-ref/source/rltiles/player/transform/magma_form.png
diff --git a/crawl-ref/source/ability.cc b/crawl-ref/source/ability.cc
index 343cc3c..079efa8 100644
--- a/crawl-ref/source/ability.cc
+++ b/crawl-ref/source/ability.cc
@@ -194,55 +194,62 @@ ability_type god_abilities[NUM_GODS][MAX_GOD_ABILITIES] =
// Dithmenos
{ ABIL_NON_ABILITY, ABIL_DITHMENOS_SHADOW_STEP, ABIL_NON_ABILITY,
ABIL_NON_ABILITY, ABIL_DITHMENOS_SHADOW_FORM },
+ // Igni Ipthes
+ { ABIL_IGNI_REFORGE_WEAPON, ABIL_NON_ABILITY,
+ ABIL_IGNI_FIREBRAND_WEAPON, ABIL_IGNI_DIVINE_BELLOWS,
+ ABIL_IGNI_TRAN_MAGMA },
};
// The description screen was way out of date with the actual costs.
// This table puts all the information in one place... -- bwr
//
-// The five numerical fields are: MP, HP, food, piety and ZP.
+// The six numerical fields are: MP, HP, food, piety, ZP, and gold.
// Note: food_cost = val + random2avg(val, 2)
// piety_cost = val + random2((val + 1) / 2 + 1);
// hp cost is in per-mil of maxhp (i.e. 20 = 2% of hp, rounded up)
static const ability_def Ability_List[] =
{
// NON_ABILITY should always come first
- { ABIL_NON_ABILITY, "No ability", 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_SPIT_POISON, "Spit Poison", 0, 0, 40, 0, 0, ABFLAG_BREATH},
+ { ABIL_NON_ABILITY, "No ability", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_SPIT_POISON, "Spit Poison", 0, 0, 40, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_BLINK, "Blink", 0, 50, 50, 0, 0, ABFLAG_NONE},
- { ABIL_WISP_BLINK, "Blink", 2, 0, 0, 0, 0, ABFLAG_CONF_OK},
+ { ABIL_BLINK, "Blink", 0, 50, 50, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_WISP_BLINK, "Blink", 2, 0, 0, 0, 0, 0, ABFLAG_CONF_OK},
- { ABIL_BREATHE_FIRE, "Breathe Fire", 0, 0, 125, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_FROST, "Breathe Frost", 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_FIRE, "Breathe Fire", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_FROST, "Breathe Frost", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_POISON, "Breathe Poison Gas",
- 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_MEPHITIC, "Breathe Noxious Fumes",
- 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_LIGHTNING, "Breathe Lightning",
- 0, 0, 125, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_POWER, "Breathe Dispelling Energy", 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_POWER, "Breathe Dispelling Energy", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_STICKY_FLAME, "Breathe Sticky Flame",
- 0, 0, 125, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_STEAM, "Breathe Steam", 0, 0, 75, 0, 0, ABFLAG_BREATH},
- { ABIL_TRAN_BAT, "Bat Form", 2, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_BOTTLE_BLOOD, "Bottle Blood", 0, 0, 0, 0, 0, ABFLAG_NONE}, // no costs
+ 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_STEAM, "Breathe Steam", 0, 0, 75, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_TRAN_BAT, "Bat Form", 2, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_BOTTLE_BLOOD, "Bottle Blood", 0, 0, 0, 0, 0, 0, ABFLAG_NONE}, // no costs
- { ABIL_SPIT_ACID, "Spit Acid", 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ { ABIL_SPIT_ACID, "Spit Acid", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_FLY, "Fly", 3, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_STOP_FLYING, "Stop Flying", 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_JUMP, "Jump Attack", 0, 0, 125, 0, 0, ABFLAG_EXHAUSTION},
- { ABIL_HELLFIRE, "Hellfire", 0, 150, 200, 0, 0, ABFLAG_NONE},
+ { ABIL_FLY, "Fly", 3, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_STOP_FLYING, "Stop Flying", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_JUMP, "Jump Attack", 0, 0, 125, 0, 0, 0, ABFLAG_EXHAUSTION},
+ { ABIL_HELLFIRE, "Hellfire", 0, 150, 200, 0, 0, 0, ABFLAG_NONE},
{ ABIL_DELAYED_FIREBALL, "Release Delayed Fireball",
- 0, 0, 0, 0, 0, ABFLAG_INSTANT},
+ 0, 0, 0, 0, 0, 0, ABFLAG_INSTANT},
{ ABIL_STOP_SINGING, "Stop Singing",
- 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_MUMMY_RESTORATION, "Self-Restoration",
- 1, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
+ 1, 0, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
- { ABIL_DIG, "Dig", 0, 0, 0, 0, 0, ABFLAG_INSTANT},
- { ABIL_SHAFT_SELF, "Shaft Self", 0, 0, 250, 0, 0, ABFLAG_DELAY},
+ { ABIL_DIG, "Dig", 0, 0, 0, 0, 0, 0, ABFLAG_INSTANT},
+ { ABIL_SHAFT_SELF, "Shaft Self", 0, 0, 250, 0, 0, 0, ABFLAG_DELAY},
+
+ // Igni magma form ability
+ { ABIL_ERUPTION, "Eruption", 0, 0, 250, 0, 0, 0, ABFLAG_PAIN },
// EVOKE abilities use Evocations and come from items.
// Teleportation and Blink can also come from mutations
@@ -253,199 +260,209 @@ static const ability_def Ability_List[] =
// any reason to label them as "Evoke" in the text, they don't
// use or train Evocations (the others do). -- bwr
{ ABIL_EVOKE_TELEPORTATION, "Evoke Teleportation",
- 3, 0, 200, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_BLINK, "Evoke Blink", 1, 0, 50, 0, 0, ABFLAG_NONE},
- { ABIL_RECHARGING, "Device Recharging", 1, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
+ 3, 0, 200, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_BLINK, "Evoke Blink", 1, 0, 50, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_RECHARGING, "Device Recharging", 1, 0, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
- { ABIL_EVOKE_BERSERK, "Evoke Berserk Rage", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_BERSERK, "Evoke Berserk Rage", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_EVOKE_TURN_INVISIBLE, "Evoke Invisibility",
- 2, 0, 250, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_TURN_VISIBLE, "Turn Visible", 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_JUMP, "Evoke Jump Attack", 2, 0, 125, 0, 0, ABFLAG_EXHAUSTION},
- { ABIL_EVOKE_FLIGHT, "Evoke Flight", 1, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_FOG, "Evoke Fog", 2, 0, 250, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_TELEPORT_CONTROL, "Evoke Teleport Control", 4, 0, 200, 0, 0, ABFLAG_NONE},
+ 2, 0, 250, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_TURN_VISIBLE, "Turn Visible", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_JUMP, "Evoke Jump Attack", 2, 0, 125, 0, 0, 0, ABFLAG_EXHAUSTION},
+ { ABIL_EVOKE_FLIGHT, "Evoke Flight", 1, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_FOG, "Evoke Fog", 2, 0, 250, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_TELEPORT_CONTROL, "Evoke Teleport Control", 4, 0, 200, 0, 0, 0, ABFLAG_NONE},
- { ABIL_END_TRANSFORMATION, "End Transformation", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_END_TRANSFORMATION, "End Transformation", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
// INVOCATIONS:
// Zin
- { ABIL_ZIN_RECITE, "Recite", 0, 0, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_ZIN_VITALISATION, "Vitalisation", 0, 0, 0, 1, 0, ABFLAG_NONE},
- { ABIL_ZIN_IMPRISON, "Imprison", 5, 0, 125, 4, 0, ABFLAG_NONE},
- { ABIL_ZIN_SANCTUARY, "Sanctuary", 7, 0, 150, 15, 0, ABFLAG_NONE},
+ { ABIL_ZIN_RECITE, "Recite", 0, 0, 0, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_ZIN_VITALISATION, "Vitalisation", 0, 0, 0, 1, 0, 0, ABFLAG_NONE},
+ { ABIL_ZIN_IMPRISON, "Imprison", 5, 0, 125, 4, 0, 0, ABFLAG_NONE},
+ { ABIL_ZIN_SANCTUARY, "Sanctuary", 7, 0, 150, 15, 0, 0, ABFLAG_NONE},
{ ABIL_ZIN_CURE_ALL_MUTATIONS, "Cure All Mutations",
- 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
// The Shining One
- { ABIL_TSO_DIVINE_SHIELD, "Divine Shield", 3, 0, 50, 2, 0, ABFLAG_NONE},
+ { ABIL_TSO_DIVINE_SHIELD, "Divine Shield", 3, 0, 50, 2, 0, 0, ABFLAG_NONE},
{ ABIL_TSO_CLEANSING_FLAME, "Cleansing Flame",
- 5, 0, 100, 2, 0, ABFLAG_NONE},
+ 5, 0, 100, 2, 0, 0, ABFLAG_NONE},
{ ABIL_TSO_SUMMON_DIVINE_WARRIOR, "Summon Divine Warrior",
- 8, 0, 150, 6, 0, ABFLAG_NONE},
+ 8, 0, 150, 6, 0, 0, ABFLAG_NONE},
// Kikubaaqudgha
{ ABIL_KIKU_RECEIVE_CORPSES, "Receive Corpses",
- 3, 0, 50, 2, 0, ABFLAG_NONE},
- { ABIL_KIKU_TORMENT, "Torment", 4, 0, 0, 8, 0, ABFLAG_NONE},
+ 3, 0, 50, 2, 0, 0, ABFLAG_NONE},
+ { ABIL_KIKU_TORMENT, "Torment", 4, 0, 0, 8, 0, 0, ABFLAG_NONE},
// Yredelemnul
- { ABIL_YRED_INJURY_MIRROR, "Injury Mirror", 0, 0, 0, 0, 0, ABFLAG_PIETY},
+ { ABIL_YRED_INJURY_MIRROR, "Injury Mirror", 0, 0, 0, 0, 0, 0, ABFLAG_PIETY},
{ ABIL_YRED_ANIMATE_REMAINS, "Animate Remains",
- 2, 0, 100, 0, 0, ABFLAG_NONE},
+ 2, 0, 100, 0, 0, 0, ABFLAG_NONE},
{ ABIL_YRED_RECALL_UNDEAD_SLAVES, "Recall Undead Slaves",
- 2, 0, 50, 0, 0, ABFLAG_NONE},
- { ABIL_YRED_ANIMATE_DEAD, "Animate Dead", 2, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_YRED_DRAIN_LIFE, "Drain Life", 6, 0, 200, 2, 0, ABFLAG_NONE},
- { ABIL_YRED_ENSLAVE_SOUL, "Enslave Soul", 8, 0, 150, 4, 0, ABFLAG_NONE},
+ 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_YRED_ANIMATE_DEAD, "Animate Dead", 2, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_YRED_DRAIN_LIFE, "Drain Life", 6, 0, 200, 2, 0, 0, ABFLAG_NONE},
+ { ABIL_YRED_ENSLAVE_SOUL, "Enslave Soul", 8, 0, 150, 4, 0, 0, ABFLAG_NONE},
// Placeholder for Animate Remains or Animate Dead.
{ ABIL_YRED_ANIMATE_REMAINS_OR_DEAD, "Animate Remains or Dead",
- 2, 0, 100, 0, 0, ABFLAG_NONE},
+ 2, 0, 100, 0, 0, 0, ABFLAG_NONE},
// Okawaru
- { ABIL_OKAWARU_HEROISM, "Heroism", 2, 0, 50, 1, 0, ABFLAG_NONE},
- { ABIL_OKAWARU_FINESSE, "Finesse", 5, 0, 100, 4, 0, ABFLAG_NONE},
+ { ABIL_OKAWARU_HEROISM, "Heroism", 2, 0, 50, 1, 0, 0, ABFLAG_NONE},
+ { ABIL_OKAWARU_FINESSE, "Finesse", 5, 0, 100, 4, 0, 0, ABFLAG_NONE},
// Makhleb
{ ABIL_MAKHLEB_MINOR_DESTRUCTION, "Minor Destruction",
- 0, scaling_cost::fixed(1), 20, 0, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(1), 20, 0, 0, 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB, "Lesser Servant of Makhleb",
- 0, scaling_cost::fixed(4), 50, 1, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(4), 50, 1, 0, 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_MAJOR_DESTRUCTION, "Major Destruction",
- 0, scaling_cost::fixed(6), 100, generic_cost::range(0, 1), 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(6), 100, generic_cost::range(0, 1), 0, 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB, "Greater Servant of Makhleb",
- 0, scaling_cost::fixed(10), 100, 5, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(10), 100, 5, 0, 0, ABFLAG_NONE},
// Sif Muna
{ ABIL_SIF_MUNA_CHANNEL_ENERGY, "Channel Energy",
- 0, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_SIF_MUNA_FORGET_SPELL, "Forget Spell", 5, 0, 0, 8, 0, ABFLAG_NONE},
+ 0, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_SIF_MUNA_FORGET_SPELL, "Forget Spell", 5, 0, 0, 8, 0, 0, ABFLAG_NONE},
// Trog
{ ABIL_TROG_BURN_SPELLBOOKS, "Burn Spellbooks",
- 0, 0, 10, 0, 0, ABFLAG_NONE},
- { ABIL_TROG_BERSERK, "Berserk", 0, 0, 200, 0, 0, ABFLAG_NONE},
+ 0, 0, 10, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_TROG_BERSERK, "Berserk", 0, 0, 200, 0, 0, 0, ABFLAG_NONE},
{ ABIL_TROG_REGEN_MR, "Trog's Hand",
- 0, 0, 50, generic_cost::range(2, 3), 0, ABFLAG_NONE},
+ 0, 0, 50, generic_cost::range(2, 3), 0, 0, ABFLAG_NONE},
{ ABIL_TROG_BROTHERS_IN_ARMS, "Brothers in Arms",
- 0, 0, 100, generic_cost::range(5, 6), 0, ABFLAG_NONE},
+ 0, 0, 100, generic_cost::range(5, 6), 0, 0, ABFLAG_NONE},
// Elyvilon
{ ABIL_ELYVILON_LIFESAVING, "Divine Protection",
- 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_ELYVILON_LESSER_HEALING_SELF, "Lesser Self-Healing",
- 1, 0, 100, generic_cost::range(0, 1), 0, ABFLAG_CONF_OK},
+ 1, 0, 100, generic_cost::range(0, 1), 0, 0, ABFLAG_CONF_OK},
{ ABIL_ELYVILON_LESSER_HEALING_OTHERS, "Lesser Healing",
- 1, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_ELYVILON_PURIFICATION, "Purification", 3, 0, 300, 3, 0,
+ 1, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_ELYVILON_PURIFICATION, "Purification", 3, 0, 300, 3, 0, 0,
ABFLAG_CONF_OK},
{ ABIL_ELYVILON_GREATER_HEALING_SELF, "Greater Self-Healing",
- 2, 0, 250, 2, 0, ABFLAG_CONF_OK},
+ 2, 0, 250, 2, 0, 0, ABFLAG_CONF_OK},
{ ABIL_ELYVILON_GREATER_HEALING_OTHERS, "Greater Healing",
- 2, 0, 250, 2, 0, ABFLAG_NONE},
- { ABIL_ELYVILON_DIVINE_VIGOUR, "Divine Vigour", 0, 0, 600, 6, 0,
+ 2, 0, 250, 2, 0, 0, ABFLAG_NONE},
+ { ABIL_ELYVILON_DIVINE_VIGOUR, "Divine Vigour", 0, 0, 600, 6, 0, 0,
ABFLAG_CONF_OK},
// Lugonu
{ ABIL_LUGONU_ABYSS_EXIT, "Depart the Abyss",
- 1, 0, 150, 10, 0, ABFLAG_NONE},
- { ABIL_LUGONU_BEND_SPACE, "Bend Space", 1, 0, 50, 0, 0, ABFLAG_PAIN},
+ 1, 0, 150, 10, 0, 0, ABFLAG_NONE},
+ { ABIL_LUGONU_BEND_SPACE, "Bend Space", 1, 0, 50, 0, 0, 0, ABFLAG_PAIN},
{ ABIL_LUGONU_BANISH, "Banish",
- 4, 0, 200, generic_cost::range(3, 4), 0, ABFLAG_NONE},
+ 4, 0, 200, generic_cost::range(3, 4), 0, 0, ABFLAG_NONE},
{ ABIL_LUGONU_CORRUPT, "Corrupt",
- 7, scaling_cost::fixed(5), 500, generic_cost::range(10, 14), 0, ABFLAG_NONE},
+ 7, scaling_cost::fixed(5), 500, generic_cost::range(10, 14), 0, 0, ABFLAG_NONE},
{ ABIL_LUGONU_ABYSS_ENTER, "Enter the Abyss",
- 9, 0, 500, generic_cost::fixed(35), 0, ABFLAG_PAIN},
+ 9, 0, 500, generic_cost::fixed(35), 0, 0, ABFLAG_PAIN},
// Nemelex
- { ABIL_NEMELEX_DRAW_ONE, "Draw One", 2, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_PEEK_TWO, "Peek at Two", 3, 0, 0, 1, 0, ABFLAG_INSTANT},
- { ABIL_NEMELEX_TRIPLE_DRAW, "Triple Draw", 2, 0, 100, 2, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_DEAL_FOUR, "Deal Four", 8, 0, 200, 10, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_STACK_FIVE, "Stack Five", 5, 0, 250, 10, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_DRAW_ONE, "Draw One", 2, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_PEEK_TWO, "Peek at Two", 3, 0, 0, 1, 0, 0, ABFLAG_INSTANT},
+ { ABIL_NEMELEX_TRIPLE_DRAW, "Triple Draw", 2, 0, 100, 2, 0, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_DEAL_FOUR, "Deal Four", 8, 0, 200, 10, 0, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_STACK_FIVE, "Stack Five", 5, 0, 250, 10, 0, 0, ABFLAG_NONE},
// Beogh
{ ABIL_BEOGH_SMITING, "Smiting",
- 3, 0, 80, generic_cost::fixed(3), 0, ABFLAG_NONE},
+ 3, 0, 80, generic_cost::fixed(3), 0, 0, ABFLAG_NONE},
{ ABIL_BEOGH_RECALL_ORCISH_FOLLOWERS, "Recall Orcish Followers",
- 2, 0, 50, 0, 0, ABFLAG_NONE},
+ 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
// Jiyva
- { ABIL_JIYVA_CALL_JELLY, "Request Jelly", 2, 0, 20, 1, 0, ABFLAG_NONE},
- { ABIL_JIYVA_JELLY_PARALYSE, "Jelly Paralyse", 0, 0, 0, 0, 0, ABFLAG_PIETY},
- { ABIL_JIYVA_SLIMIFY, "Slimify", 4, 0, 100, 8, 0, ABFLAG_NONE},
+ { ABIL_JIYVA_CALL_JELLY, "Request Jelly", 2, 0, 20, 1, 0, 0, ABFLAG_NONE},
+ { ABIL_JIYVA_JELLY_PARALYSE, "Jelly Paralyse", 0, 0, 0, 0, 0, 0, ABFLAG_PIETY},
+ { ABIL_JIYVA_SLIMIFY, "Slimify", 4, 0, 100, 8, 0, 0, ABFLAG_NONE},
{ ABIL_JIYVA_CURE_BAD_MUTATION, "Cure Bad Mutation",
- 8, 0, 200, 15, 0, ABFLAG_NONE},
+ 8, 0, 200, 15, 0, 0, ABFLAG_NONE},
// Fedhas
- { ABIL_FEDHAS_EVOLUTION, "Evolution", 2, 0, 0, 0, 0, ABFLAG_VARIABLE_FRUIT},
- { ABIL_FEDHAS_SUNLIGHT, "Sunlight", 2, 0, 50, 0, 0, ABFLAG_NONE},
- { ABIL_FEDHAS_PLANT_RING, "Growth", 2, 0, 0, 0, 0, ABFLAG_FRUIT},
- { ABIL_FEDHAS_SPAWN_SPORES, "Reproduction", 4, 0, 100, 0, 0, ABFLAG_NONE},
- { ABIL_FEDHAS_RAIN, "Rain", 4, 0, 150, 4, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_EVOLUTION, "Evolution", 2, 0, 0, 0, 0, 0, ABFLAG_VARIABLE_FRUIT},
+ { ABIL_FEDHAS_SUNLIGHT, "Sunlight", 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_PLANT_RING, "Growth", 2, 0, 0, 0, 0, 0, ABFLAG_FRUIT},
+ { ABIL_FEDHAS_SPAWN_SPORES, "Reproduction", 4, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_RAIN, "Rain", 4, 0, 150, 4, 0, 0, ABFLAG_NONE},
// Cheibriados
- { ABIL_CHEIBRIADOS_TIME_BEND, "Bend Time", 3, 0, 50, 1, 0, ABFLAG_NONE},
+ { ABIL_CHEIBRIADOS_TIME_BEND, "Bend Time", 3, 0, 50, 1, 0, 0, ABFLAG_NONE},
{ ABIL_CHEIBRIADOS_DISTORTION, "Temporal Distortion",
- 4, 0, 200, 3, 0, ABFLAG_INSTANT},
- { ABIL_CHEIBRIADOS_SLOUCH, "Slouch", 5, 0, 100, 8, 0, ABFLAG_NONE},
+ 4, 0, 200, 3, 0, 0, ABFLAG_INSTANT},
+ { ABIL_CHEIBRIADOS_SLOUCH, "Slouch", 5, 0, 100, 8, 0, 0, ABFLAG_NONE},
{ ABIL_CHEIBRIADOS_TIME_STEP, "Step From Time",
- 10, 0, 200, 10, 0, ABFLAG_NONE},
+ 10, 0, 200, 10, 0, 0, ABFLAG_NONE},
// Ashenzari
{ ABIL_ASHENZARI_SCRYING, "Scrying",
- 4, 0, 50, generic_cost::range(2, 3), 0, ABFLAG_INSTANT},
+ 4, 0, 50, generic_cost::range(2, 3), 0, 0, ABFLAG_INSTANT},
{ ABIL_ASHENZARI_TRANSFER_KNOWLEDGE, "Transfer Knowledge",
- 0, 0, 0, 20, 0, ABFLAG_NONE},
+ 0, 0, 0, 20, 0, 0, ABFLAG_NONE},
{ ABIL_ASHENZARI_END_TRANSFER, "End Transfer Knowledge",
- 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
// Dithmenos
{ ABIL_DITHMENOS_SHADOW_STEP, "Shadow Step",
- 4, 0, 0, 4, 0, ABFLAG_NONE },
+ 4, 0, 0, 4, 0, 0, ABFLAG_NONE },
{ ABIL_DITHMENOS_SHADOW_FORM, "Shadow Form",
- 9, 0, 0, 10, 0, ABFLAG_SKILL_DRAIN },
+ 9, 0, 0, 10, 0, 0, ABFLAG_SKILL_DRAIN },
+
+ // Igni Ipthes
+ { ABIL_IGNI_REFORGE_WEAPON, "Reforge Weapon",
+ 0, 0, 0, 1, 0, 50, ABFLAG_NONE },
+ { ABIL_IGNI_FIREBRAND_WEAPON, "Firebrand Weapon",
+ 0, 0, 0, 0, 0, 500, ABFLAG_NONE },
+ { ABIL_IGNI_DIVINE_BELLOWS, "Divine Bellows",
+ 0, 0, 100, 3, 0, 100, ABFLAG_NONE },
+ { ABIL_IGNI_TRAN_MAGMA, "Magma Form",
+ 0, 0, 250, 3, 0, 50, ABFLAG_NONE },
- { ABIL_STOP_RECALL, "Stop Recall", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_STOP_RECALL, "Stop Recall", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
// zot defence abilities
- { ABIL_MAKE_FUNGUS, "Make mushroom circle", 0, 0, 0, 0, 10, ABFLAG_ZOTDEF},
- { ABIL_MAKE_DART_TRAP, "Make dart trap", 0, 0, 0, 0, 5, ABFLAG_ZOTDEF},
- { ABIL_MAKE_PLANT, "Make plant", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_SAPLING, "Make oklob sapling", 0, 0, 0, 0, 60, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BURNING_BUSH, "Make burning bush", 0, 0, 0, 0, 200, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_PLANT, "Make oklob plant", 0, 0, 0, 0, 250, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ICE_STATUE, "Make ice statue", 0, 0, 0, 0, 2000, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OCS, "Make crystal statue", 0, 0, 0, 0, 2000, ABFLAG_ZOTDEF},
- { ABIL_MAKE_SILVER_STATUE, "Make silver statue", 0, 0, 0, 0, 3000, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_FUNGUS, "Make mushroom circle", 0, 0, 0, 0, 10, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_DART_TRAP, "Make dart trap", 0, 0, 0, 0, 5, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_PLANT, "Make plant", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_SAPLING, "Make oklob sapling", 0, 0, 0, 0, 60, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BURNING_BUSH, "Make burning bush", 0, 0, 0, 0, 200, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_PLANT, "Make oklob plant", 0, 0, 0, 0, 250, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ICE_STATUE, "Make ice statue", 0, 0, 0, 0, 2000, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OCS, "Make crystal statue", 0, 0, 0, 0, 2000, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_SILVER_STATUE, "Make silver statue", 0, 0, 0, 0, 3000, 0, ABFLAG_ZOTDEF},
{ ABIL_MAKE_CURSE_SKULL, "Make curse skull",
- 0, 0, 600, 0, 10000, ABFLAG_ZOTDEF|ABFLAG_NECRO_MISCAST_MINOR},
- { ABIL_MAKE_TELEPORT, "Zot-teleport", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ARROW_TRAP, "Make arrow trap", 0, 0, 0, 0, 30, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BOLT_TRAP, "Make bolt trap", 0, 0, 0, 0, 300, ABFLAG_ZOTDEF},
- { ABIL_MAKE_SPEAR_TRAP, "Make spear trap", 0, 0, 0, 0, 50, ABFLAG_ZOTDEF},
- { ABIL_MAKE_NEEDLE_TRAP, "Make needle trap", 0, 0, 0, 0, 30, ABFLAG_ZOTDEF},
- { ABIL_MAKE_NET_TRAP, "Make net trap", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ALARM_TRAP, "Make alarm trap", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BLADE_TRAP, "Make blade trap", 0, 0, 0, 0, 3000, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_CIRCLE, "Make oklob circle", 0, 0, 0, 0, 1000, ABFLAG_ZOTDEF},
+ 0, 0, 600, 0, 10000, 0, ABFLAG_ZOTDEF|ABFLAG_NECRO_MISCAST_MINOR},
+ { ABIL_MAKE_TELEPORT, "Zot-teleport", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ARROW_TRAP, "Make arrow trap", 0, 0, 0, 0, 30, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BOLT_TRAP, "Make bolt trap", 0, 0, 0, 0, 300, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_SPEAR_TRAP, "Make spear trap", 0, 0, 0, 0, 50, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_NEEDLE_TRAP, "Make needle trap", 0, 0, 0, 0, 30, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_NET_TRAP, "Make net trap", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ALARM_TRAP, "Make alarm trap", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BLADE_TRAP, "Make blade trap", 0, 0, 0, 0, 3000, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_CIRCLE, "Make oklob circle", 0, 0, 0, 0, 1000, 0, ABFLAG_ZOTDEF},
{ ABIL_MAKE_ACQUIRE_GOLD, "Acquire gold",
- 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
+ 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
{ ABIL_MAKE_ACQUIREMENT, "Acquirement",
- 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
- { ABIL_MAKE_WATER, "Make water", 0, 0, 0, 0, 10, ABFLAG_ZOTDEF},
- { ABIL_MAKE_LIGHTNING_SPIRE, "Make lightning spire", 0, 0, 0, 0, 100, ABFLAG_ZOTDEF},
+ 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
+ { ABIL_MAKE_WATER, "Make water", 0, 0, 0, 0, 10, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_LIGHTNING_SPIRE, "Make lightning spire", 0, 0, 0, 0, 100, 0, ABFLAG_ZOTDEF},
{ ABIL_MAKE_BAZAAR, "Make bazaar",
- 0, 30, 0, 0, 100, ABFLAG_ZOTDEF|ABFLAG_PERMANENT_HP},
- { ABIL_MAKE_ALTAR, "Make altar", 0, 0, 0, 0, 50, ABFLAG_ZOTDEF},
- { ABIL_MAKE_GRENADES, "Make grenades", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
- { ABIL_MAKE_SAGE, "Sage", 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
+ 0, 30, 0, 0, 100, 0, ABFLAG_ZOTDEF|ABFLAG_PERMANENT_HP},
+ { ABIL_MAKE_ALTAR, "Make altar", 0, 0, 0, 0, 50, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_GRENADES, "Make grenades", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_SAGE, "Sage", 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
{ ABIL_REMOVE_CURSE, "Remove Curse",
- 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
+ 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
- { ABIL_RENOUNCE_RELIGION, "Renounce Religion", 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_CONVERT_TO_BEOGH, "Convert to Beogh", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_RENOUNCE_RELIGION, "Renounce Religion", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_CONVERT_TO_BEOGH, "Convert to Beogh", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
};
const ability_def& get_ability_def(ability_type abil)
@@ -690,6 +707,9 @@ const string make_cost_description(ability_type ability)
if (abil.piety_cost || abil.flags & ABFLAG_PIETY)
ret += ", Piety"; // randomised and exact amount hidden from player
+ if (abil.gold_cost)
+ ret += make_stringf(", %d Gold", ep + abil.gold_cost);
+
if (abil.flags & ABFLAG_BREATH)
ret += ", Breath";
@@ -790,6 +810,13 @@ static const string _detailed_cost_description(ability_type ability)
ret << _get_piety_amount_str(avgcost);
}
+ if (abil.gold_cost)
+ {
+ have_cost = true;
+ ret << "\nGold : ";
+ ret << abil.gold_cost;
+ }
+
if (!have_cost)
ret << "nothing.";
@@ -865,6 +892,12 @@ static ability_type _fixup_ability(ability_type ability)
else
return ability;
+ case ABIL_IGNI_FIREBRAND_WEAPON:
+ if (you.species == SP_FELID)
+ return ABIL_NON_ABILITY;
+ else
+ return ability;
+
default:
return ability;
}
@@ -1615,6 +1648,24 @@ static bool _check_ability_possible(const ability_def& abil,
}
return true;
+ case ABIL_ERUPTION:
+ if (you.duration[DUR_DEATHS_DOOR])
+ {
+ if (!quiet)
+ mpr("You can't errupt while in Death's Door");
+ return false;
+ }
+
+ // intentional fall-through
+ case ABIL_IGNI_TRAN_MAGMA:
+ if (you.duration[DUR_MAGMA_DEPLETED])
+ {
+ if (!quiet)
+ mpr("Your magma is depleted.");
+ return false;
+ }
+ return true;
+
default:
return true;
}
@@ -1730,6 +1781,15 @@ bool activate_talent(const talent& tal)
const ability_def& abil = get_ability_def(tal.which);
// Check that we can afford to pay the costs.
+
+ // Check gold first because while MP and HP can vary wildly within a few
+ // turns, gold cannot.
+ if (abil.gold_cost > 0 && !enough_gold(abil.gold_cost, false))
+ {
+ crawl_state.zero_turns_taken();
+ return false;
+ }
+
// Note that mutation shenanigans might leave us with negative MP,
// so don't fail in that case if there's no MP cost.
if (abil.mp_cost > 0 && !enough_mp(abil.mp_cost, false, true))
@@ -2880,6 +2940,47 @@ static bool _do_ability(const ability_def& abil)
}
break;
+ case ABIL_IGNI_REFORGE_WEAPON:
+ {
+ beam.range = LOS_RADIUS;
+
+ if (!spell_direction(spd, beam))
+ return false;
+
+ if (beam.target == you.pos())
+ {
+ if (!igni_reforge_player_weapon())
+ return false;
+ }
+ else
+ {
+ if (!igni_reforge_monster_weapon(monster_at(beam.target)))
+ return false;
+ }
+ break;
+ }
+
+ case ABIL_IGNI_FIREBRAND_WEAPON:
+ if (!igni_firebrand_weapon())
+ return false;
+ break;
+
+ case ABIL_IGNI_DIVINE_BELLOWS:
+ igni_divine_bellows();
+ break;
+
+ case ABIL_IGNI_TRAN_MAGMA:
+ if (!transform(100, TRAN_MAGMA))
+ {
+ crawl_state.zero_turns_taken();
+ return false;
+ }
+ break;
+
+ case ABIL_ERUPTION:
+ magma_form_eruption();
+ break;
+
case ABIL_RENOUNCE_RELIGION:
if (yesno("Really renounce your faith, foregoing its fabulous benefits?",
false, 'n')
@@ -2946,8 +3047,8 @@ static void _pay_ability_costs(const ability_def& abil, int zpcost)
_scale_piety_cost(abil.ability, abil.piety_cost.cost());
const int hp_cost = abil.hp_cost.cost(you.hp_max);
- dprf("Cost: mp=%d; hp=%d; food=%d; piety=%d",
- abil.mp_cost, hp_cost, food_cost, piety_cost);
+ dprf("Cost: mp=%d; hp=%d; food=%d; piety=%d; gold=%d",
+ abil.mp_cost, hp_cost, food_cost, piety_cost, abil.gold_cost);
if (abil.mp_cost)
{
@@ -2969,6 +3070,9 @@ static void _pay_ability_costs(const ability_def& abil, int zpcost)
you.redraw_experience = true;
}
+ if (abil.gold_cost)
+ you.gold -= abil.gold_cost;
+
if (abil.flags & ABFLAG_HEX_MISCAST)
{
MiscastEffect(&you, NON_MONSTER, SPTYP_HEXES, 10, 90,
@@ -3352,6 +3456,10 @@ vector<talent> your_talents(bool check_confused, bool include_unusable)
for (unsigned int i = 0; i < abilities.size(); ++i)
_add_talent(talents, abilities[i], check_confused);
+ // Igni eruption ability
+ if (you.form == TRAN_MAGMA)
+ _add_talent(talents, ABIL_ERUPTION, check_confused);
+
// And finally, the ability to opt-out of your faith {dlb}:
if (!you_worship(GOD_NO_GOD)
&& (include_unusable || !silenced(you.pos())))
diff --git a/crawl-ref/source/ability.h b/crawl-ref/source/ability.h
index a07ba12..dfb616c 100644
--- a/crawl-ref/source/ability.h
+++ b/crawl-ref/source/ability.h
@@ -63,6 +63,7 @@ struct ability_def
unsigned int food_cost; // + rand2avg(food_cost, 2)
generic_cost piety_cost; // + random2((piety_cost + 1) / 2 + 1)
unsigned int zp_cost; // zot point cost of ability
+ unsigned int gold_cost;
unsigned int flags; // used for additional cost notices
};
diff --git a/crawl-ref/source/areas.cc b/crawl-ref/source/areas.cc
index 5f954ca..e52b198 100644
--- a/crawl-ref/source/areas.cc
+++ b/crawl-ref/source/areas.cc
@@ -743,13 +743,13 @@ int monster::umbra_radius2() const
// Player radius
int player::heat_radius2() const
{
- if (species != SP_LAVA_ORC)
- return -1;
+ if (you.form == TRAN_MAGMA)
+ return 4;
- if (!temperature_effect(LORC_HEAT_AURA))
- return -1;
+ if (species == SP_LAVA_ORC && temperature_effect(LORC_HEAT_AURA))
+ return 2; // Surrounds you to radius of 1.
- return 2; // Surrounds you to radius of 1.
+ return -1;
}
// Stub for monster radius
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 0aea06f..88ba252 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -2791,6 +2791,7 @@ bool bolt::is_superhot() const
|| name == "bolt of magma"
|| name == "fireball"
|| name == "bolt of lightning"
+ || name == "blast of magma"
|| name.find("hellfire") != string::npos
&& in_explosion_phase;
}
@@ -2919,6 +2920,12 @@ void bolt::affect_place_clouds()
if (name == "trail of fire")
place_cloud(CLOUD_FIRE, p, random2(ench_power) + ench_power, agent());
+ if (name == "blast of magma")
+ place_cloud(CLOUD_FIRE, p, random2(5) + 3, agent());
+
+ if (name == "plume of ash" && one_chance_in(2))
+ place_cloud(CLOUD_PETRIFY, p, random2(8) + 3, agent());
+
if (origin_spell == SPELL_GHOSTLY_FLAMES)
place_cloud(CLOUD_GHOSTLY_FLAME, p, random2(6) + 5, agent());
}
@@ -5900,6 +5907,33 @@ void bolt::refine_for_explosion()
ex_size = 1;
}
+ if (name == "blast of magma")
+ {
+ seeMsg = "The blast of magma explodes!";
+ hearMsg = "You hear an explosion!";
+
+ glyph = dchar_glyph(DCHAR_FIRED_BURST);
+ flavour = BEAM_FIRE;
+ if (is_tracer)
+ ex_size = 3;
+ else
+ {
+ ex_size = 1;
+ ex_size += random2(ench_power) > 50;
+ ex_size += random2(ench_power) > 75;
+ }
+ }
+
+ if (name == "plume of ash")
+ {
+ seeMsg = "The plume of ash settles!";
+ hearMsg = "You hear an explosion!";
+
+ glyph = dchar_glyph(DCHAR_CLOUD);
+ flavour = BEAM_FIRE;
+ ex_size = 1;
+ }
+
if (seeMsg == NULL)
{
seeMsg = "The beam explodes into a cloud of software bugs!";
diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc
index 6ad593e..b631ba4 100644
--- a/crawl-ref/source/chardump.cc
+++ b/crawl-ref/source/chardump.cc
@@ -312,6 +312,9 @@ static void _sdump_transform(dump_params &par)
case TRAN_SHADOW:
text += "You " + verb + " a swirling mass of dark shadows.";
break;
+ case TRAN_MAGMA:
+ text += "You " + verb + " a fiery being of magma.";
+ break;
case TRAN_NONE:
break;
}
diff --git a/crawl-ref/source/dat/database/godname.txt b/crawl-ref/source/dat/database/godname.txt
index d035144..5502d52 100644
--- a/crawl-ref/source/dat/database/godname.txt
+++ b/crawl-ref/source/dat/database/godname.txt
@@ -47,6 +47,10 @@ Ashenzari lastname
Ashenzari the Shackled
%%%%
+Igni Ipthes lastname
+
+Igni Ipthes the Firesmith
+%%%%
Xom lastname
w:280
diff --git a/crawl-ref/source/dat/database/godspeak.txt b/crawl-ref/source/dat/database/godspeak.txt
index f9041a7..5da73ac 100644
--- a/crawl-ref/source/dat/database/godspeak.txt
+++ b/crawl-ref/source/dat/database/godspeak.txt
@@ -667,6 +667,10 @@ Fedhas welcome
Fedhas says: Spread life and death.
%%%%
+Igni Ipthes welcome
+
+Igni Ipthes says: Sculpt the inferno!
+%%%%
Jiyva welcome
Slime for the Slime God!
diff --git a/crawl-ref/source/dat/descript/ability.txt b/crawl-ref/source/dat/descript/ability.txt
index 499c880..c7ff646 100644
--- a/crawl-ref/source/dat/descript/ability.txt
+++ b/crawl-ref/source/dat/descript/ability.txt
@@ -608,6 +608,40 @@ hostile enchantments; all incoming damage is halved, and you bleed smoke on all
incoming attacks. However, your ability to deal damage in melee is halved, and
your spellcasting power is greatly hampered.
%%%%
+# Igni
+Divine Bellows ability
+
+This ability releases a great gust of air around you that will push away
+nearby monsters and clouds.
+%%%%
+Firebrand Weapon ability
+
+Using the great forges beneath the earth, Igni will permanently imbue your
+weapon with a brand of flaming.
+%%%%
+Reforge Weapon ability
+
+This ability transforms a non-artefact weapon into a mundane hammer.
+%%%%
+Magma Form ability
+
+Gain the power of the volcano by transforming your flesh into magma. This
+transformation will render your immune to the effects of fire and
+petrification, but weak to cold. While in this form, you radiate a damaging
+heat aura, and your fire and earth magic will be enhanced. Your scrolls will
+be safely stored underneath your magma covering, which means that you won't
+be able to read them while transformed. Unfortunately, this form is extremely
+unstable; taking high amounts of damage may cause you to erupt catastrophically
+into clouds of petrifying ash and fire.
+%%%%
+Erupt ability
+
+While eruption is normally an unpredictable event, it can also be triggered
+at a moment's notice by those in magma form. This ability releases large
+amounts of fire and petrifying ash, but with it comes great pain to yourself.
+After erupting, your transformation will end, and your magma will be
+temporarily depleted.
+%%%%
Renounce Religion ability
Renounce your faith. This will make your character leave your god (and usually
diff --git a/crawl-ref/source/dat/descript/features.txt b/crawl-ref/source/dat/descript/features.txt
index a41bf97..8602cf1 100644
--- a/crawl-ref/source/dat/descript/features.txt
+++ b/crawl-ref/source/dat/descript/features.txt
@@ -266,6 +266,11 @@ A radiant altar of Vehumet
An altar, ablaze in the lights of Iskenderun and promising great destructive
powers to those who would follow Vehumet.
%%%%
+A red-hot altar of Igni Ipthes
+
+An anvil that is serving as an altar to Igni Ipthes the Firesmith. An inferno
+appears to be contained inside of it.
+%%%%
A rock wall
This wall consists of simple rock.
diff --git a/crawl-ref/source/dat/descript/gods.txt b/crawl-ref/source/dat/descript/gods.txt
index 1ad95e6..96689af 100644
--- a/crawl-ref/source/dat/descript/gods.txt
+++ b/crawl-ref/source/dat/descript/gods.txt
@@ -156,6 +156,17 @@ Dithmenos despises fire, the ancient enemy of the shadows, and forbids its use
by worshippers; Dithmenos favours those who would instead destroy sources of
light.
%%%%
+Igni Ipthes
+
+Igni Ipthes controls the fire beneath the earth, understanding that the element
+is more useful for creation than destruction. As a patron of blacksmiths and
+craftsmen, Igni appreciates those who enchant their equipment, along with those
+who explore the world. Followers gain access to Igni's smithy, providing them
+with a number of metalworking abilities. Additionally, the most pious
+worshipers gain knowledge of magma transformation, granting them immunity
+from the effects of fire. Unlike other gods, Igni's abilities require a payment
+in gold.
+%%%%
Zin powers
Zin grants followers the ability to preach to the unenlightened masses, and
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 60957c5..6f971b9 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -4345,6 +4345,10 @@ static const char *divine_title[NUM_GODS][8] =
// Dithmenos -- darkness theme
{"Illuminated", "Gloomy", "Aphotic", "Caliginous",
"Darkened", "Shadowed", "Eclipsing", "Eternal Night"},
+
+ // Igni Ipthes -- hephaestus/ptah inspiration
+ {"Shrewd", "Crafty %s", "Molten Fury", "Coppersmith",
+ "Ironworker", "Golden", "Vindictive Volcano", "Fiery Creator"},
};
static int _piety_level(int piety)
diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc
index 9906da5..060abb7 100644
--- a/crawl-ref/source/directn.cc
+++ b/crawl-ref/source/directn.cc
@@ -3246,6 +3246,8 @@ static string _base_feature_desc(dungeon_feature_type grid, trap_type trap)
return "shattered altar of Ashenzari";
case DNGN_ALTAR_DITHMENOS:
return "shadowy altar of Dithmenos";
+ case DNGN_ALTAR_IGNI_IPTHES:
+ return "red-hot altar of Igni Ipthes";
case DNGN_FOUNTAIN_BLUE:
return "fountain of clear blue water";
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 3c332a8..4b06e8a 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -77,7 +77,9 @@ enum ability_type
// Formicids
ABIL_DIG,
ABIL_SHAFT_SELF,
- ABIL_MAX_INTRINSIC = ABIL_SHAFT_SELF,
+ // Magma Form
+ ABIL_ERUPTION,
+ ABIL_MAX_INTRINSIC = ABIL_ERUPTION,
// Evoking items.
ABIL_EVOKE_BERSERK = 40,
@@ -182,6 +184,11 @@ enum ability_type
// Dithmenos
ABIL_DITHMENOS_SHADOW_STEP = 1170,
ABIL_DITHMENOS_SHADOW_FORM,
+ // Igni Ipthes
+ ABIL_IGNI_REFORGE_WEAPON = 1180,
+ ABIL_IGNI_FIREBRAND_WEAPON,
+ ABIL_IGNI_DIVINE_BELLOWS,
+ ABIL_IGNI_TRAN_MAGMA,
// For both Yred and Beogh
ABIL_STOP_RECALL = 1500,
@@ -320,6 +327,7 @@ enum attribute_type
ATTR_PORTAL_PROJECTILE, // Accuracy bonus during portal projectile
ATTR_GOD_WRATH_XP, // How much XP before our next god wrath check?
ATTR_GOD_WRATH_COUNT, // Number of stored retributions
+ ATTR_ERUPT_DAMAGE, // Amount of damage taken in magma form
NUM_ATTRIBUTES
};
@@ -341,8 +349,9 @@ enum transformation_type
TRAN_JELLY,
TRAN_FUNGUS,
TRAN_SHADOW,
+ TRAN_MAGMA,
// no NUM_TRANSFORMS due to too many switch statements
- LAST_FORM = TRAN_SHADOW,
+ LAST_FORM = TRAN_MAGMA,
};
enum beam_type // bolt::flavour
@@ -1045,6 +1054,7 @@ enum conduct_type
DID_KILL_ILLUMINATING, // Dithmenos
DID_FIRE, // Dithmenos
DID_KILL_FIERY, // Dithmenos
+ DID_ENCHANT_GEAR, // Igni Ipthes
NUM_CONDUCTS
};
@@ -1438,7 +1448,8 @@ enum dungeon_feature_type
DNGN_ALTAR_CHEIBRIADOS,
DNGN_ALTAR_ASHENZARI,
DNGN_ALTAR_DITHMENOS,
- DNGN_ALTAR_LAST_GOD = DNGN_ALTAR_DITHMENOS,
+ DNGN_ALTAR_IGNI_IPTHES,
+ DNGN_ALTAR_LAST_GOD = DNGN_ALTAR_IGNI_IPTHES,
DNGN_FOUNTAIN_BLUE,
DNGN_FOUNTAIN_SPARKLING, // aka 'Magic Fountain' {dlb}
@@ -1637,6 +1648,7 @@ enum duration_type
DUR_MAGIC_SAPPED,
DUR_PORTAL_PROJECTILE,
DUR_FORESTED,
+ DUR_MAGMA_DEPLETED,
NUM_DURATIONS
};
@@ -1891,6 +1903,7 @@ enum god_type
GOD_CHEIBRIADOS,
GOD_ASHENZARI,
GOD_DITHMENOS,
+ GOD_IGNI_IPTHES,
NUM_GODS, // always after last god
GOD_RANDOM = 100,
diff --git a/crawl-ref/source/evoke.cc b/crawl-ref/source/evoke.cc
index c39034b..e38b276 100644
--- a/crawl-ref/source/evoke.cc
+++ b/crawl-ref/source/evoke.cc
@@ -1237,12 +1237,15 @@ void wind_blast(actor* agent, int pow, coord_def target)
}
}
+ // Remove the cloud where the blast originates from.
+ delete_cloud_at(agent->pos());
+
if (agent->is_player())
{
if (pow > 120)
- mpr("A mighty gale blasts forth from the fan!");
+ mpr("A mighty gale blasts forth!");
else
- mpr("A fierce wind blows from the fan.");
+ mpr("A fierce wind blows.");
}
noisy(8, agent->pos());
diff --git a/crawl-ref/source/feature.cc b/crawl-ref/source/feature.cc
index c5dddeb..7be8e13 100644
--- a/crawl-ref/source/feature.cc
+++ b/crawl-ref/source/feature.cc
@@ -135,6 +135,7 @@ static colour_t _feat_colour(dungeon_feature_type feat)
case DNGN_ALTAR_CHEIBRIADOS: return LIGHTCYAN;
case DNGN_ALTAR_ASHENZARI: return LIGHTRED;
case DNGN_ALTAR_DITHMENOS: return ETC_DITHMENOS;
+ case DNGN_ALTAR_IGNI_IPTHES: return ETC_EARTH;
default: return 0;
}
}
diff --git a/crawl-ref/source/godabil.cc b/crawl-ref/source/godabil.cc
index a9d6c22..37f5633 100644
--- a/crawl-ref/source/godabil.cc
+++ b/crawl-ref/source/godabil.cc
@@ -19,6 +19,7 @@
#include "dactions.h"
#include "effects.h"
#include "env.h"
+#include "evoke.h"
#include "fight.h"
#include "files.h"
#include "food.h"
@@ -50,6 +51,8 @@
#include "shopping.h"
#include "shout.h"
#include "spl-book.h"
+#include "spl-clouds.h"
+#include "spl-goditem.h"
#include "spl-monench.h"
#include "spl-summoning.h"
#include "spl-transloc.h"
@@ -60,6 +63,7 @@
#include "target.h"
#include "terrain.h"
#include "throw.h"
+#include "transform.h"
#include "traps.h"
#include "unwind.h"
#include "view.h"
@@ -3709,3 +3713,227 @@ void dithmenos_shadow_spell(bolt* orig_beam, spell_type spell)
shadow_monster_reset(mon);
}
+
+void igni_divine_bellows()
+{
+ wind_blast(&you, 100, coord_def());
+}
+
+// XXX: combine this and _bless_weapon and _rebrand_weapon into a single
+// function rather than duplicating code everywhere.
+bool igni_firebrand_weapon()
+{
+ if (!you.weapon())
+ {
+ mpr("You need to wield a weapon if you want to firebrand it.");
+ return false;
+ }
+
+ item_def& wpn = *you.weapon();
+
+ // Only TSO allows blessing ranged weapons.
+ if (!is_brandable_weapon(wpn, true) || is_blessed(wpn))
+ {
+ mpr("That is not a suitable weapon for branding.");
+ return false;
+ }
+
+ const int new_brand = is_range_weapon(wpn) ? SPWPN_FLAME : SPWPN_FLAMING;
+ if (get_weapon_brand(wpn) == new_brand)
+ {
+ mpr("That weapon is already burning!");
+ return false;
+ }
+
+ string prompt = "Do you wish to have " + wpn.name(DESC_YOUR)
+ + " coated with flames?";
+
+ if (!yesno(prompt.c_str(), true, 'n'))
+ {
+ canned_msg(MSG_OK);
+ return false;
+ }
+
+ you.duration[DUR_WEAPON_BRAND] = 0; // just in case
+
+ string old_name = wpn.name(DESC_A);
+ set_equip_desc(wpn, ISFLAG_GLOWING);
+ set_item_ego_type(wpn, OBJ_WEAPONS, new_brand);
+
+ if (wpn.cursed())
+ do_uncurse_item(wpn, false);
+
+ you.wield_change = true;
+ calc_mp(); // in case the old brand was antimagic
+ string desc = old_name + " coated with flames by Igni Ipthes";
+
+ take_note(Note(NOTE_ID_ITEM, 0, 0,
+ wpn.name(DESC_A).c_str(), desc.c_str()));
+ wpn.flags |= ISFLAG_NOTED_ID;
+
+ mprf(MSGCH_GOD, "The weapon ignites!");
+
+ flash_view_delay(RED, 1000);
+
+ return true;
+}
+
+static item_def* _reforge_check_weapon(item_def* wpn)
+{
+ if (!wpn)
+ return NULL;
+
+ if (!is_weapon(*wpn) || is_artefact(*wpn) || wpn->sub_type == WPN_HAMMER)
+ return NULL;
+
+ return wpn;
+}
+
+static void _reforge_weapon(item_def& wpn, bool friendly)
+{
+ const string old_name(wpn.name(DESC_THE));
+
+ wpn.sub_type = WPN_HAMMER;
+ set_item_ego_type(wpn, OBJ_WEAPONS, SPWPN_NORMAL);
+ if (!friendly)
+ do_curse_item(wpn, true);
+
+ const string new_name(wpn.name(DESC_A));
+
+ mprf(MSGCH_GOD, "%s is reforged into %s!",
+ old_name.c_str(), new_name.c_str());
+}
+
+bool igni_reforge_player_weapon()
+{
+ item_def* wpn = _reforge_check_weapon(you.weapon());
+
+ if (!wpn)
+ {
+ mpr("You're not holding a weapon that can be reforged.");
+ return false;
+ }
+
+ if (!yes_or_no("Are you sure you want to reforge your %s "
+ "into a hammer?",
+ wpn->name(DESC_PLAIN).c_str()))
+ {
+ return false;
+ }
+
+ _reforge_weapon(*wpn, true);
+ you.wield_change = true;
+ place_cloud(CLOUD_GREY_SMOKE, you.pos(), 3, &you);
+
+ return true;
+}
+
+bool igni_reforge_monster_weapon(monster* mons)
+{
+ if (mons == NULL || !you.can_see(mons))
+ {
+ mpr("There's no monster there!");
+ return false;
+ }
+
+ if (mons_is_firewood(mons) || mons_is_conjured(mons->type))
+ {
+ mpr("That's not a suitable target!");
+ return false;
+ }
+
+ if ((mons->friendly() || mons->good_neutral())
+ && !yesno("That monster isn't hostile. Reforge anyways?",
+ true, 'n'))
+ {
+ return false;
+ }
+
+ item_def* wpn1 = _reforge_check_weapon(mons->mslot_item(MSLOT_WEAPON));
+ item_def* wpn2 = _reforge_check_weapon(mons->mslot_item(MSLOT_ALT_WEAPON));
+
+ if (!wpn1 && !wpn2)
+ {
+ mprf("%s isn't holding a weapon that can be reforged.",
+ mons->full_name(DESC_THE).c_str());
+ return false;
+ }
+
+ if (wpn1)
+ _reforge_weapon(*wpn1, mons->friendly());
+ if (wpn2)
+ _reforge_weapon(*wpn2, mons->friendly());
+
+ place_cloud(CLOUD_GREY_SMOKE, mons->pos(), 3, &you);
+
+ return true;
+}
+
+void magma_form_eruption()
+{
+ ASSERT(you.form == TRAN_MAGMA);
+
+ mpr("You erupt!");
+
+ const int predam = you.attribute[ATTR_ERUPT_DAMAGE];
+ const int nowdam = max(0, min(you.hp * 2 / 3, you.hp_max/3 - predam));
+ const int total_dam = predam + nowdam;
+
+ if (nowdam)
+ ouch(nowdam, MHITNOT, KILLED_BY_SOMETHING, "erupting");
+
+ int pow = min(100, random2avg(total_dam * 2, 3) + you.experience_level);
+
+ const int magma_beams = 2 + random2avg(pow / 10, 3);
+ for (int i = 0; i < magma_beams; ++i)
+ {
+ bolt beam;
+ beam.source = you.pos();
+ beam.range = random_range(4, 4 + min(4, random2(pow / 10)));
+ beam.damage = dice_def(3, 7 + pow / 5);
+ beam.hit = 40;
+ beam.is_explosion = true;
+ beam.ench_power = pow;
+ beam.beam_source = MHITYOU;
+ beam.loudness = 14;
+
+ // Attempt to find a position that isn't close to the player
+ beam.is_tracer = true;
+ const int attempts = 20;
+ for (int j = 0; j != attempts; ++j)
+ {
+ beam.target = you.pos() + coord_def(random2(13)-6, random2(13)-6);
+ if (beam.target == you.pos())
+ continue;
+ beam.fire();
+ if (beam.path_taken.size() >= 2)
+ break;
+ }
+ beam.is_tracer = false;
+
+ if (beam.target == you.pos())
+ continue;
+
+ beam.name = "plume of ash";
+ beam.colour = LIGHTGREY;
+ beam.flavour = BEAM_FIRE;
+
+ beam.fire();
+
+ beam.name = "blast of magma";
+ beam.range /= 2;
+ beam.colour = RED;
+ beam.flavour = BEAM_LAVA;
+
+ beam.fire();
+ }
+
+ if (grd(you.pos()) != DNGN_LAVA)
+ {
+ untransform();
+ you.set_duration(DUR_MAGMA_DEPLETED, 30);
+ }
+
+ you.attribute[ATTR_ERUPT_DAMAGE] = 0;
+ you.erupt = false; // just in case
+}
diff --git a/crawl-ref/source/godabil.h b/crawl-ref/source/godabil.h
index 65c736d..b0ee44a 100644
--- a/crawl-ref/source/godabil.h
+++ b/crawl-ref/source/godabil.h
@@ -83,4 +83,10 @@ void shadow_monster_reset(monster *mon);
void dithmenos_shadow_melee(actor* target);
void dithmenos_shadow_throw(coord_def target);
void dithmenos_shadow_spell(bolt* orig_beam, spell_type spell);
+
+void igni_divine_bellows();
+bool igni_firebrand_weapon();
+bool igni_reforge_player_weapon();
+bool igni_reforge_monster_weapon(monster* mons);
+void magma_form_eruption();
#endif
diff --git a/crawl-ref/source/godconduct.cc b/crawl-ref/source/godconduct.cc
index e90906a..b5f0023 100644
--- a/crawl-ref/source/godconduct.cc
+++ b/crawl-ref/source/godconduct.cc
@@ -965,6 +965,13 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
piety_denom = level;
retval = true;
}
+
+ if (you_worship(GOD_IGNI_IPTHES))
+ {
+ piety_change = 4;
+ piety_denom = level;
+ retval = true;
+ }
break;
case DID_SEE_MONSTER:
@@ -1038,6 +1045,15 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
}
break;
+ case DID_ENCHANT_GEAR:
+ if (you_worship(GOD_IGNI_IPTHES))
+ {
+ simple_god_message(" appreciates your attempt.");
+ retval = true;
+ piety_change = 1 + random2avg(level * 7, 3);
+ }
+ break;
+
case DID_NOTHING:
case NUM_CONDUCTS:
break;
@@ -1107,6 +1123,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
"Servant Kill Artificial", "Destroy Spellbook",
"Exploration", "Desecrate Holy Remains", "Seen Monster",
"Illuminate", "Kill Illuminating", "Fire", "Kill Fiery",
+ "Enchant Gear",
};
COMPILE_CHECK(ARRAYSZ(conducts) == NUM_CONDUCTS);
diff --git a/crawl-ref/source/godpassive.cc b/crawl-ref/source/godpassive.cc
index ff20d5d..67a51ff 100644
--- a/crawl-ref/source/godpassive.cc
+++ b/crawl-ref/source/godpassive.cc
@@ -720,3 +720,24 @@ int ash_skill_boost(skill_type sk, int scale)
return min(level, 27 * scale);
}
+
+int igni_armour_bonus(const item_def& item)
+{
+ if (item.base_type != OBJ_ARMOUR)
+ return 0;
+
+ if (you_worship(GOD_IGNI_IPTHES)
+ && you.piety >= piety_breakpoint(0)
+ && !player_under_penance())
+ {
+ if (item.sub_type == ARM_RING_MAIL
+ || item.sub_type == ARM_SCALE_MAIL
+ || item.sub_type == ARM_CHAIN_MAIL
+ || item.sub_type == ARM_PLATE_ARMOUR)
+ {
+ return 4 + max(1, min(32, you.piety * you.experience_level / 130));
+ }
+ }
+
+ return 0;
+}
diff --git a/crawl-ref/source/godpassive.h b/crawl-ref/source/godpassive.h
index 9b25613..5124803 100644
--- a/crawl-ref/source/godpassive.h
+++ b/crawl-ref/source/godpassive.h
@@ -32,5 +32,6 @@ int ash_detect_portals(bool all);
monster_type ash_monster_tier(const monster *mon);
int ash_skill_boost(skill_type sk, int scale);
map<skill_type, int8_t> ash_get_boosted_skills(eq_type type);
+int igni_armour_bonus(const item_def& item);
#endif
diff --git a/crawl-ref/source/godwrath.cc b/crawl-ref/source/godwrath.cc
index be145b4..d882f66 100644
--- a/crawl-ref/source/godwrath.cc
+++ b/crawl-ref/source/godwrath.cc
@@ -150,6 +150,39 @@ static bool _dithmenos_random_shadow(const int count, const int tier)
return create_monster(temp, false);
}
+static int _igni_random_summon(int availible_cost)
+{
+ monster_type mon_type = coinflip() ? MONS_FIRE_ELEMENTAL
+ : MONS_STONE_GOLEM;
+ int ret_cost = 1;
+
+ if (availible_cost > 3
+ && coinflip()
+ && x_chance_in_y(sqr(you.experience_level), 300))
+ {
+ mon_type = MONS_IRON_GOLEM;
+ ret_cost = 3;
+ }
+
+ if (availible_cost > 8 && x_chance_in_y(sqr(you.experience_level), 1000))
+ {
+ mon_type = MONS_ORB_OF_FIRE;
+ ret_cost = 8;
+ }
+
+ mgen_data temp = mgen_data::hostile_at(mon_type,
+ "the wrath of Igni Ipthes",
+ true, 0, 0, you.pos(), 0,
+ GOD_IGNI_IPTHES);
+
+ temp.extra_flags |= (MF_NO_REWARD | MF_HARD_RESET);
+
+ if (create_monster(temp, false))
+ return ret_cost;
+ else
+ return 0;
+}
+
static bool _tso_retribution()
{
// holy warriors/cleansing theme
@@ -1432,6 +1465,68 @@ static bool _dithmenos_retribution()
return true;
}
+static bool _igni_retribution()
+{
+ const god_type god = GOD_IGNI_IPTHES;
+
+ switch(random2(4))
+ {
+ case 0:
+ {
+ int c = 1 + random2avg(div_rand_round(you.experience_level, 2), 2);
+ int max_summon = 5;
+ bool success = false;
+ while (c > 0 && max_summon-- > 0)
+ {
+ const int spent_c = _igni_random_summon(c);
+ c -= spent_c;
+ if (spent_c)
+ success = true;
+ }
+
+ if (success)
+ {
+ simple_god_message(" summons his creations to punish you!",
+ god);
+ break;
+ }
+ }
+ // intentional fall-through
+ case 1:
+ {
+ bool had_effect = false;
+ for (monster_near_iterator mi(you.pos(), LOS_NO_TRANS); mi; ++mi)
+ {
+ if (mons_immune_magic(*mi) || mi->is_summoned())
+ continue;
+
+ if (mi->add_ench(ENCH_INNER_FLAME))
+ had_effect = true;
+ }
+
+ if (had_effect)
+ {
+ god_speaks(god, "The flame burns in all of us!");
+ break;
+ }
+ }
+ // intentional fall-through
+ case 2:
+ case 3:
+ // fire miscast, 20% chance of additional miscast
+ do
+ {
+ MiscastEffect(&you, -god, SPTYP_FIRE,
+ 1 + div_rand_round(you.experience_level, 9),
+ random2avg(80, 3),
+ "the disappointment of Igni Ipthes");
+ }
+ while (one_chance_in(5));
+ break;
+ }
+ return true;
+}
+
bool divine_retribution(god_type god, bool no_bonus, bool force)
{
ASSERT(god != GOD_NO_GOD);
@@ -1474,6 +1569,7 @@ bool divine_retribution(god_type god, bool no_bonus, bool force)
case GOD_FEDHAS: do_more = _fedhas_retribution(); break;
case GOD_CHEIBRIADOS: do_more = _cheibriados_retribution(); break;
case GOD_DITHMENOS: do_more = _dithmenos_retribution(); break;
+ case GOD_IGNI_IPTHES: do_more = _igni_retribution(); break;
case GOD_ASHENZARI:
// No reduction with time.
diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc
index 7b8021a..b61f8f6 100644
--- a/crawl-ref/source/hiscores.cc
+++ b/crawl-ref/source/hiscores.cc
@@ -1577,6 +1577,7 @@ void scorefile_entry::init(time_t dt)
DUR_SAP_MAGIC,
STATUS_MAGIC_SAPPED,
DUR_PORTAL_PROJECTILE,
+ DUR_MAGMA_DEPLETED,
};
status_info inf;
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 749c019..166b1f1 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -2471,6 +2471,8 @@ bool enchant_weapon(item_def &wpn, int acc, int dam, const char *colour)
string iname = wpn.name(DESC_YOUR);
const char *s = wpn.quantity == 1 ? "s" : "";
+ const int acc_dam_sum = acc + dam;
+
// Blowguns only have one stat.
if (wpn.base_type == OBJ_WEAPONS && wpn.sub_type == WPN_BLOWGUN)
{
@@ -2518,6 +2520,8 @@ bool enchant_weapon(item_def &wpn, int acc, int dam, const char *colour)
if (success)
you.wield_change = true;
+ did_god_conduct(DID_ENCHANT_GEAR, max(1, acc_dam_sum));
+
return success;
}
@@ -2564,6 +2568,8 @@ bool enchant_armour(int &ac_change, bool quiet, item_def &arm)
do_uncurse_item(arm, true, true);
+ did_god_conduct(DID_ENCHANT_GEAR, 1);
+
// No additional enchantment.
return true;
}
@@ -2601,6 +2607,7 @@ bool enchant_armour(int &ac_change, bool quiet, item_def &arm)
arm.plus++;
ac_change++;
do_uncurse_item(arm, true, true);
+ did_god_conduct(DID_ENCHANT_GEAR, 1);
return true;
}
@@ -2900,7 +2907,8 @@ void read_scroll(int slot)
}
// Prevent hot lava orcs reading scrolls
- if (you.species == SP_LAVA_ORC && temperature_effect(LORC_NO_SCROLLS))
+ if (you.species == SP_LAVA_ORC && temperature_effect(LORC_NO_SCROLLS)
+ || you.form == TRAN_MAGMA)
{
crawl_state.zero_turns_taken();
return mpr("You'd burn any scroll you tried to read!");
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 20e9f7a..e1a8628 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -2397,7 +2397,7 @@ static void _decrement_durations()
else
you.duration[DUR_GOURMAND] = 0;
- if (you.duration[DUR_ICEMAIL_DEPLETED] > 0)
+ if (you.duration[DUR_ICEMAIL_DEPLETED] > 0 && you.form != TRAN_MAGMA)
{
if (delay > you.duration[DUR_ICEMAIL_DEPLETED])
you.duration[DUR_ICEMAIL_DEPLETED] = 0;
@@ -2558,8 +2558,10 @@ static void _decrement_durations()
}
// Vampire bat transformations are permanent (until ended).
- if (you.species != SP_VAMPIRE || you.form != TRAN_BAT
- || you.duration[DUR_TRANSFORMATION] <= 5 * BASELINE_DELAY)
+ if ((you.species != SP_VAMPIRE || you.form != TRAN_BAT
+ || you.duration[DUR_TRANSFORMATION] <= 5 * BASELINE_DELAY)
+ // Don't decrement magma form in lava
+ && (you.form != TRAN_MAGMA || grd(you.pos()) != DNGN_LAVA))
{
if (_decrement_a_duration(DUR_TRANSFORMATION, delay, NULL, random2(3),
"Your transformation is almost over."))
@@ -3072,6 +3074,9 @@ static void _decrement_durations()
you.attribute[ATTR_PORTAL_PROJECTILE] = 0;
}
+ _decrement_a_duration(DUR_MAGMA_DEPLETED, delay,
+ "Your magma supply has returned.");
+
dec_elixir_player(delay);
if (!env.sunlight.empty())
@@ -3096,6 +3101,22 @@ static void _check_banished()
}
}
+static void _check_erupt()
+{
+ if (you.form == TRAN_MAGMA && !you.duration[DUR_DEATHS_DOOR])
+ {
+ if (you.erupt)
+ {
+ magma_form_eruption();
+ you.attribute[ATTR_ERUPT_DAMAGE] = 0;
+ }
+ }
+ else
+ you.attribute[ATTR_ERUPT_DAMAGE] = 0;
+
+ you.erupt = false;
+}
+
static void _check_shafts()
{
for (int i = 0; i < MAX_TRAPS; ++i)
@@ -3490,6 +3511,7 @@ void world_reacts()
#endif
_check_banished();
+ _check_erupt();
_check_shafts();
_check_sanctuary();
diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc
index 752d8cc..02e2410 100644
--- a/crawl-ref/source/melee_attack.cc
+++ b/crawl-ref/source/melee_attack.cc
@@ -2170,6 +2170,7 @@ void melee_attack::set_attack_verb()
break;
case TRAN_STATUE:
case TRAN_LICH:
+ case TRAN_MAGMA:
if (you.has_usable_claws())
{
if (damage_done < HIT_WEAK)
@@ -3946,6 +3947,7 @@ int melee_attack::calc_to_hit(bool random)
case TRAN_FUNGUS:
case TRAN_TREE:
case TRAN_WISP:
+ case TRAN_MAGMA:
mhit += maybe_random2(10, random);
break;
case TRAN_BAT:
@@ -5707,6 +5709,7 @@ int melee_attack::calc_base_unarmed_damage()
case TRAN_ICE_BEAST:
case TRAN_FUNGUS:
case TRAN_TREE:
+ case TRAN_MAGMA:
damage = 12;
break;
case TRAN_BLADE_HANDS:
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc
index 550cede..439954f 100644
--- a/crawl-ref/source/misc.cc
+++ b/crawl-ref/source/misc.cc
@@ -1382,6 +1382,9 @@ bool go_berserk(bool intentional, bool potion)
you.temperature = TEMP_MAX;
}
+ if (you.form == TRAN_MAGMA)
+ you.erupt = true;
+
if (player_equip_unrand(UNRAND_JIHAD))
for (monster_near_iterator mi(you.pos(), LOS_NO_TRANS); mi; ++mi)
if (mi->friendly())
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index 93abfa0..02afaf1 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -88,7 +88,8 @@ static void _maybe_melt_player_enchantments(beam_type flavour, int damage)
you.props["melt_shield"] = true;
}
- if (you.mutation[MUT_ICEMAIL])
+ if (you.mutation[MUT_ICEMAIL]
+ && you.duration[DUR_ICEMAIL_DEPLETED] < ICEMAIL_TIME)
{
mprf(MSGCH_DURATION, "Your icy envelope dissipates!");
you.duration[DUR_ICEMAIL_DEPLETED] = ICEMAIL_TIME;
@@ -521,6 +522,9 @@ static bool _expose_invent_to_element(beam_type flavour, int strength)
continue;
}
+ if (target_class == OBJ_SCROLLS && you.form == TRAN_MAGMA)
+ continue;
+
// These stack with conservation; they're supposed to be good.
if (target_class == OBJ_SCROLLS
&& you.mutation[MUT_CONSERVE_SCROLLS]
@@ -959,6 +963,26 @@ static void _maybe_fog(int dam)
}
}
+static void _maybe_erupt(int dam)
+{
+ if (you.form != TRAN_MAGMA)
+ return;
+
+ const int upper_threshold = you.hp_max * 3 / 5;
+ const int lower_threshold = you.hp_max / 7;
+
+ const int test_dam = you.attribute[ATTR_ERUPT_DAMAGE] / 2 + dam;
+ you.attribute[ATTR_ERUPT_DAMAGE] += dam;
+
+ if (test_dam >= lower_threshold
+ && x_chance_in_y(test_dam - lower_threshold,
+ upper_threshold - lower_threshold)
+ || one_chance_in(27))
+ {
+ you.erupt = true;
+ }
+}
+
static void _place_player_corpse(bool explode)
{
if (!in_bounds(you.pos()))
@@ -1147,6 +1171,7 @@ void ouch(int dam, int death_source, kill_method_type death_type,
_yred_mirrors_injury(dam, death_source);
_maybe_spawn_jellies(dam, aux, death_type, death_source);
_maybe_fog(dam);
+ _maybe_erupt(dam);
_powered_by_pain(dam);
if (drain_amount > 0)
drain_exp(true, drain_amount, true);
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index 541c7b7..ab73cb4 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -818,6 +818,8 @@ static void _print_stats_wp(int y)
case TRAN_JELLY:
col = LIGHTRED;
break;
+ case TRAN_MAGMA:
+ col = RED;
default:
break;
}
@@ -1020,6 +1022,7 @@ static void _get_status_lights(vector<status_light>& out)
DUR_POISON_VULN,
DUR_PORTAL_PROJECTILE,
DUR_FORESTED,
+ DUR_MAGMA_DEPLETED,
};
status_info inf;
diff --git a/crawl-ref/source/player-act.cc b/crawl-ref/source/player-act.cc
index f95f869..24840c3 100644
--- a/crawl-ref/source/player-act.cc
+++ b/crawl-ref/source/player-act.cc
@@ -193,6 +193,7 @@ int player::body_weight(bool base) const
switch (form)
{
case TRAN_STATUE:
+ case TRAN_MAGMA:
weight *= 2;
break;
case TRAN_LICH:
@@ -262,6 +263,10 @@ brand_type player::damage_brand(int)
ret = SPWPN_ACID;
break;
+ case TRAN_MAGMA:
+ ret = SPWPN_FLAMING;
+ break;
+
default:
break;
}
@@ -533,6 +538,8 @@ string player::arm_name(bool plural, bool *can_plural) const
adj = "bony";
else if (form == TRAN_SHADOW)
adj = "shadowy";
+ else if (form == TRAN_MAGMA)
+ adj = "fiery";
if (!adj.empty())
str = adj + " " + str;
@@ -579,6 +586,9 @@ string player::unarmed_attack_name() const
case TRAN_LICH:
text += " (drain)";
break;
+ case TRAN_MAGMA:
+ text += " (flame)";
+ break;
case TRAN_BAT:
case TRAN_PIG:
case TRAN_PORCUPINE:
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 21f797d..d2f9bbe 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -435,6 +435,14 @@ void moveto_location_effects(dungeon_feature_type old_feat,
mpr("...and don't expect to remain undetected.");
}
}
+
+ if (feat_is_water(new_grid) && you.form == TRAN_MAGMA)
+ {
+ mpr("The water cools you down.");
+ you.duration[DUR_TRANSFORMATION] /= 2;
+ you.duration[DUR_TRANSFORMATION]++;
+ }
+
}
const bool was_clinging = you.is_wall_clinging();
@@ -579,6 +587,7 @@ bool is_player_same_genus(const monster_type mon, bool transform)
return mons_genus(mon) == MONS_HOG;
case TRAN_JELLY:
return mons_genus(mon) == MONS_JELLY;
+ case TRAN_MAGMA: // XXX: give magma form a MONS?
case TRAN_STATUE:
case TRAN_BLADE_HANDS:
case TRAN_NONE:
@@ -1517,7 +1526,7 @@ int player_likes_chunks(bool permanently)
// If temp is set to false, temporary sources or resistance won't be counted.
int player_res_fire(bool calc_unid, bool temp, bool items)
{
- if (you.species == SP_DJINNI)
+ if (you.species == SP_DJINNI || you.form == TRAN_MAGMA)
return 4; // full immunity
int rf = 0;
@@ -1586,6 +1595,7 @@ int player_res_fire(bool calc_unid, bool temp, bool items)
rf += 2;
// transformations:
+ // (magma form handled earlier)
switch (you.form)
{
case TRAN_ICE_BEAST:
@@ -1608,6 +1618,9 @@ int player_res_fire(bool calc_unid, bool temp, bool items)
}
}
+ if (player_under_penance(GOD_IGNI_IPTHES))
+ rf--;
+
if (rf > 3)
rf = 3;
if (temp && you.duration[DUR_FIRE_VULN])
@@ -1674,6 +1687,8 @@ int player_res_cold(bool calc_unid, bool temp, bool items)
case TRAN_LICH:
rc++;
break;
+ case TRAN_MAGMA:
+ rc -= 2;
default:
break;
}
@@ -1732,6 +1747,9 @@ int player_res_cold(bool calc_unid, bool temp, bool items)
rc += player_mutation_level(MUT_ICY_BLUE_SCALES, temp) == 3 ? 1 : 0;
rc += player_mutation_level(MUT_SHAGGY_FUR, temp) == 3 ? 1 : 0;
+ if (player_under_penance(GOD_IGNI_IPTHES))
+ rc--;
+
if (rc < -3)
rc = -3;
else if (rc > 3)
@@ -2042,6 +2060,9 @@ int player_spec_fire()
if (you.duration[DUR_FIRE_SHIELD])
sf++;
+ if (you.form == TRAN_MAGMA)
+ sf++;
+
return sf;
}
@@ -2072,6 +2093,9 @@ int player_spec_earth()
// Staves
se += you.wearing(EQ_STAFF, STAFF_EARTH);
+ if (you.form == TRAN_MAGMA)
+ se++;
+
return se;
}
@@ -2464,7 +2488,8 @@ bool player_is_shapechanged(void)
|| you.form == TRAN_BLADE_HANDS
|| you.form == TRAN_LICH
|| you.form == TRAN_SHADOW
- || you.form == TRAN_APPENDAGE)
+ || you.form == TRAN_APPENDAGE
+ || you.form == TRAN_MAGMA)
{
return false;
}
@@ -2708,12 +2733,14 @@ int player_shield_class(void)
* (item.sub_type - ARM_LARGE_SHIELD);
int base_shield = property(item, PARM_AC) * 2 + size_factor;
- int racial_bonus = _player_armour_racial_bonus(item);
+ const int racial_bonus = _player_armour_racial_bonus(item);
+ const int igni_bonus = igni_armour_bonus(item);
+ const int total_bonus = racial_bonus + igni_bonus;
// bonus applied only to base, see above for effect:
shield += base_shield * 50;
shield += base_shield * you.skill(SK_SHIELDS, 5) / 2;
- shield += base_shield * racial_bonus * 10 / 6;
+ shield += base_shield * total_bonus * 10 / 6;
shield += item.plus * 100;
@@ -3845,6 +3872,7 @@ int check_stealth(void)
race_mod -= 3; // depends on the base race
break;
case TRAN_DRAGON:
+ case TRAN_MAGMA:
race_mod = 6;
break;
case TRAN_PORCUPINE:
@@ -4318,6 +4346,7 @@ void display_char_status()
DUR_SAP_MAGIC,
STATUS_MAGIC_SAPPED,
DUR_PORTAL_PROJECTILE,
+ DUR_MAGMA_DEPLETED,
};
status_info inf;
@@ -4702,6 +4731,25 @@ bool enough_zp(int minimum, bool suppress_msg)
return true;
}
+bool enough_gold(int minimum, bool suppress_msg, bool abort_macros)
+{
+ ASSERT(!crawl_state.game_is_arena());
+
+ if (you.gold < minimum)
+ {
+ if (!suppress_msg)
+ mpr("You haven't enough gold.");
+
+ if (abort_macros)
+ {
+ crawl_state.cancel_cmd_again();
+ crawl_state.cancel_cmd_repeat();
+ }
+ return false;
+ }
+ return true;
+}
+
void inc_mp(int mp_gain, bool silent)
{
ASSERT(!crawl_state.game_is_arena());
@@ -5942,6 +5990,8 @@ void player::init()
banished = false;
banished_by.clear();
+ erupt = false;
+
wield_change = false;
redraw_quiver = false;
redraw_status_flags = 0;
@@ -6440,6 +6490,8 @@ bool player_stoneskin()
return temperature_effect(LORC_STONESKIN);
}
+ else if (you.form == TRAN_MAGMA)
+ return false;
else
return you.duration[DUR_STONESKIN];
}
@@ -6484,10 +6536,12 @@ int player::armour_class() const
const item_def& item = inv[equip[eq]];
const int ac_value = property(item, PARM_AC) * 100;
const int racial_bonus = _player_armour_racial_bonus(item);
+ const int igni_bonus = igni_armour_bonus(item);
+ const int total_bonus = racial_bonus + igni_bonus;
// [ds] effectively: ac_value * (22 + Arm) / 22, where Arm =
// Armour Skill + racial_skill_bonus / 2.
- AC += ac_value * (440 + skill(SK_ARMOUR, 20) + racial_bonus * 10) / 440;
+ AC += ac_value * (440 + skill(SK_ARMOUR, 20) + total_bonus * 10) / 440;
AC += item.plus * 100;
// The deformed don't fit into body armour very well.
@@ -6528,6 +6582,9 @@ int player::armour_class() const
if (form == TRAN_LICH)
AC += 600;
+ if (form == TRAN_MAGMA)
+ AC += 100 * experience_level / 5;
+
if (player_genus(GENPC_DRACONIAN))
{
AC += 400 + 100 * (experience_level / 3); // max 13
@@ -6565,6 +6622,7 @@ int player::armour_class() const
case TRAN_APPENDAGE:
case TRAN_BLADE_HANDS:
case TRAN_LICH: // can wear normal body armour (no bonus)
+ case TRAN_MAGMA:
break;
case TRAN_JELLY: // no bonus
@@ -6920,8 +6978,12 @@ int player::res_petrify(bool temp) const
if (player_mutation_level(MUT_PETRIFICATION_RESISTANCE))
return 1;
- if (temp && (form == TRAN_STATUE || form == TRAN_WISP))
+ if (temp && (form == TRAN_STATUE
+ || form == TRAN_WISP
+ || form == TRAN_MAGMA))
+ {
return 1;
+ }
return 0;
}
@@ -7641,7 +7703,7 @@ bool player::can_bleed(bool allow_tran) const
if (form == TRAN_STATUE || form == TRAN_ICE_BEAST
|| form == TRAN_SPIDER || form == TRAN_TREE
|| form == TRAN_FUNGUS || form == TRAN_PORCUPINE
- || form == TRAN_SHADOW)
+ || form == TRAN_SHADOW || form == TRAN_MAGMA)
{
return false;
}
diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h
index e5e3590..d78e28c 100644
--- a/crawl-ref/source/player.h
+++ b/crawl-ref/source/player.h
@@ -334,6 +334,8 @@ public:
bool banished;
string banished_by;
+ bool erupt;
+
bool wield_change; // redraw weapon
bool redraw_quiver; // redraw quiver
uint64_t redraw_status_flags;
@@ -952,6 +954,7 @@ bool you_tran_can_wear(int eq, bool check_mutation = false);
bool enough_hp(int minimum, bool suppress_msg, bool abort_macros = true);
bool enough_mp(int minimum, bool suppress_msg, bool abort_macros = true);
bool enough_zp(int minimum, bool suppress_msg);
+bool enough_gold(int minimum, bool suppress_msg, bool abort_macros = true);
void dec_hp(int hp_loss, bool fatal, const char *aux = NULL);
void dec_mp(int mp_loss, bool silent = false);
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 5d75396..ed9cf66 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -216,6 +216,12 @@ static const char *_Sacrifice_Messages[NUM_GODS][NUM_PIETY_GAIN] =
" dissolves into the shadows.",
" rapidly dissolves into the shadows.",
},
+ // Igni Ipthes
+ {
+ " slowly dissolves into the earth.",
+ " dissolves into the earth.",
+ " turns red-hot and explodes.",
+ },
};
/**
@@ -340,6 +346,13 @@ const char* god_gain_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
"Your shadow now sometimes tangibly mimics your actions.",
"transform into a swirling mass of shadows"
},
+ // Igni Ipthes
+ { "Igni Ipthes supports the use of metal body armour.",
+ "reforge weapons into hammers",
+ "permanently firebrand a weapon",
+ "release gusts of air using the Divine Bellows",
+ "transform into a being of fiery magma"
+ },
};
/**
@@ -463,7 +476,14 @@ const char* god_lose_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
"You no longer bleed smoke.",
"Your shadow no longer tangibly mimics your actions.",
"transform into a swirling mass of shadows"
- }
+ },
+ // Igni Ipthes
+ { "Igni Ipthes no longer supports the use of metal body armour.",
+ "reforge weapons",
+ "firebrand a weapon",
+ "use the Divine Bellows",
+ "transform into a being of fiery magma"
+ },
};
typedef void (*delayed_callback)(const mgen_data &mg, monster *&mon, int placed);
@@ -618,6 +638,12 @@ string get_god_likes(god_type which_god, bool verbose)
likes.push_back("you banish creatures to the Abyss");
break;
+ case GOD_IGNI_IPTHES:
+ really_likes.push_back("you enchant your weapons and armour");
+ likes.push_back("you explore the world");
+ break;
+
+
default:
break;
}
@@ -1032,8 +1058,8 @@ void dec_penance(god_type god, int val)
if (you_worship(god))
{
- // Orcish bonuses are now once more effective.
- if (god == GOD_BEOGH)
+ // Orcish/metal armour bonuses are now once more effective.
+ if (god == GOD_BEOGH || god == GOD_IGNI_IPTHES)
you.redraw_armour_class = true;
// TSO's halo is once more available.
else if (god == GOD_SHINING_ONE
@@ -1208,6 +1234,10 @@ static void _inc_penance(god_type god, int val)
mprf(MSGCH_GOD, god, "Your aura of darkness fades away.");
invalidate_agrid();
}
+ else if (god == GOD_IGNI_IPTHES)
+ {
+ you.redraw_armour_class = true;
+ }
if (you_worship(god))
{
@@ -2497,6 +2527,7 @@ string god_name(god_type which_god, bool long_name)
case GOD_XOM: return "Xom";
case GOD_ASHENZARI: return "Ashenzari";
case GOD_DITHMENOS: return "Dithmenos";
+ case GOD_IGNI_IPTHES: return "Igni Ipthes";
case GOD_JIYVA: // This is handled at the beginning of the function
case NUM_GODS: return "Buggy";
}
@@ -2868,6 +2899,13 @@ static void _gain_piety_point()
update_player_symbol();
}
+ if (you_worship(GOD_IGNI_IPTHES))
+ {
+ // Every piety level change also affects AC from metal gear.
+ you.redraw_armour_class = true;
+ }
+
+
if (you_worship(GOD_CHEIBRIADOS)
&& chei_stat_boost(old_piety) < chei_stat_boost())
{
@@ -3018,9 +3056,9 @@ void lose_piety(int pgn)
if (you.piety > 0 && you.piety <= 5)
learned_something_new(HINT_GOD_DISPLEASED);
- if (you_worship(GOD_BEOGH))
+ if (you_worship(GOD_BEOGH) || you_worship(GOD_IGNI_IPTHES))
{
- // Every piety level change also affects AC from orcish gear.
+ // Every piety level change also affects AC from orcish/metal gear.
you.redraw_armour_class = true;
}
@@ -3303,6 +3341,13 @@ void excommunication(god_type new_god)
_set_penance(old_god, 25);
break;
+ case GOD_IGNI_IPTHES:
+ if (you.form == TRAN_MAGMA)
+ you.erupt = true;
+
+ _set_penance(old_god, 50);
+ break;
+
case GOD_CHEIBRIADOS:
default:
_set_penance(old_god, 25);
@@ -3526,6 +3571,9 @@ static bool _transformed_player_can_join_god(god_type which_god)
return false;
}
+ if (which_god == GOD_DITHMENOS && you.form == TRAN_MAGMA)
+ return true;
+
return true;
}
@@ -3592,6 +3640,14 @@ static void _god_welcome_identify_gear()
ash_detect_portals(true);
}
+ if (you_worship(GOD_IGNI_IPTHES))
+ {
+ set_ident_type(OBJ_SCROLLS, SCR_ENCHANT_WEAPON_I, ID_KNOWN_TYPE);
+ set_ident_type(OBJ_SCROLLS, SCR_ENCHANT_WEAPON_II, ID_KNOWN_TYPE);
+ set_ident_type(OBJ_SCROLLS, SCR_ENCHANT_WEAPON_III, ID_KNOWN_TYPE);
+ set_ident_type(OBJ_SCROLLS, SCR_ENCHANT_ARMOUR, ID_KNOWN_TYPE);
+ }
+
// detect evil weapons
if (you_worship(GOD_ELYVILON))
auto_id_inventory();
@@ -4197,6 +4253,7 @@ void handle_god_time(int time_delta)
lose_piety(1);
break;
+ case GOD_IGNI_IPTHES:
case GOD_SIF_MUNA:
// [dshaligram] Sif Muna is now very patient - has to be
// to make up for the new spell training requirements, else
@@ -4253,6 +4310,7 @@ int god_colour(god_type god) // mv - added
case GOD_BEOGH:
case GOD_LUGONU:
case GOD_ASHENZARI:
+ case GOD_IGNI_IPTHES:
return LIGHTRED;
case GOD_XOM:
@@ -4350,6 +4408,9 @@ colour_t god_message_altar_colour(god_type god)
case GOD_DITHMENOS:
return MAGENTA;
+ case GOD_IGNI_IPTHES:
+ return LIGHTRED;
+
default:
return YELLOW;
}
diff --git a/crawl-ref/source/rltiles/dc-feat.txt b/crawl-ref/source/rltiles/dc-feat.txt
index 979c668..bed48db 100644
--- a/crawl-ref/source/rltiles/dc-feat.txt
+++ b/crawl-ref/source/rltiles/dc-feat.txt
@@ -612,6 +612,7 @@ ashenzari DNGN_ALTAR_ASHENZARI
dithmenos DNGN_ALTAR_DITHMENOS
dithmenos2
dithmenos3
+igni DNGN_ALTAR_IGNI_IPTHES
unknown DNGN_UNKNOWN_ALTAR
%sdir dngn
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index c5ca010..b791369 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -1096,6 +1096,7 @@ tree_form TRAN_TREE
%rim 0
mushroom_form TRAN_MUSHROOM
shadow_form TRAN_SHADOW
+magma_form TRAN_MAGMA
%rim 1
%sdir misc
diff --git a/crawl-ref/source/rltiles/dngn/altars/igni.png b/crawl-ref/source/rltiles/dngn/altars/igni.png
new file mode 100644
index 0000000000000000000000000000000000000000..40b9f83f8fcafa544eb631c08c308dabf2fcddfa
GIT binary patch
literal 786
zcmV+t1MU2YP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-U1O55E9Xz%2faW0-s4l
zK~z}7?Up}G6JZ#}e;=v*2`L?jfQraaW0iOg7<AxhPB(PwV9TJ5ZWbpu2Ns##46DIK
z<47D_2q|@uK%y7}i6&HxQb1zRkkZrK=TLjz^~zljN{ET?a{1nS^F7b|ynpWCzx`t-
zE1adv+0*L$fTtn}D+!s3B(V4-Kv_&p37~3<36P2;P&LKsqvZ2r0YBLfwuImhfT}4Z
z#_l0!#%%-#TSBBF3C0$mN<h?10aa57#+r$T4OC4bGc}K#8AtRb$xO|oY6|hNK`_?r
zONFWl#KQ)nFA4pf47P+&HHACL7Yv^sGBc;Y6VaC>9yY2bAoef;wY>Y_OzcDEzOVyc
zAjaBrSo#VL(?!S8*q+aIZC7n$C;^NIm*Dzc8~EzO(ftA!l}aE1q-ceKdUDY&0NO*%
z#lVRLX4}uudqMg>uWoK}<o>IQWfwcuT#8lzawB1rgkM|T+@d4Bj7YES*l)tC`J`wi
zHxjm~VOsx<;`8O>ir_nC?RyGrBw{@<nT5;U_NbC?GK-j4aLsx*%fe3L%57+v=Esv>
z0D?nvCJ9UCqL!;z2)RK=dik&9g#m&?b4BpNKv98RSinzkI$g)9C>83S-PcVBAdT0z
zY+05%93U6%vNdR}d%y;61ui!$k!neJj-dm5^h2>6vXN&I6@Y7t8KPp_u{SIveC+`V
z(A3n#`IF~3t9Nr#SvOxknm-Ic=FmI)56jOU07vZG`Yf~W-;mGetJ;L}M8|Qu+K$m!
z->|Eu+SUsWU%s%-(#l6RzJGJz2Fk$!U*MGhOQ0@svix)G2wq<MZ1d^5?n*@erF)X{
z>H(=L7i*Hen<AD{I2CXMuNJIadarwI1U{{QF)whF+$y(UC0t8z5dWjU0ojmAe-qIU
Qb^rhX07*qoM6N<$f}~Gj>i_@%
literal 0
HcmV?d00001
diff --git a/crawl-ref/source/rltiles/player/transform/magma_form.png b/crawl-ref/source/rltiles/player/transform/magma_form.png
new file mode 100644
index 0000000000000000000000000000000000000000..be2f307016c4d131031caa6920abe17ec3d4c926
GIT binary patch
literal 372
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#Q>iWS0HW7$dDkxkfqGh#lo<~
zh3lpj)BRkr|GPx~Kb-mh|Nl4EiNAr07)yfuf*Bm1-ADs*lDyqr7&=&GJ%Aj}0*}aI
z1_o|n5N2eUHAey{$X?><>&kwQNl;i^Z04pJ-9Vu;o-U3d8s~c_I`TCu2)KGaV{y}8
zpuS*k&k;S}`~;16zWxp!Z#?}U9Af^m$n?sq1FP1Yc+AWEx%EeR;~9n|wF?upKI}_%
zc*>T<70`Qf?Si|;D>K&`_Gu=><z4+2l5p&zW<Aqahgk)-*%_I-imi*6J4T&d&=$-1
zUL}vs;@3SUvlFlGT{n<raJ_2MdO)^g?U!5EQ}6tdOX^noDSKx6CG`WoTT~LJJg`_0
z+4PY4<r<cJ$pFVDKAD^<^ABpbH8(OI<#A9x9e7M7LQC-YBz~XOx^I6jz4s01F9uIn
KKbLh*2~7acr;CvQ
literal 0
HcmV?d00001
diff --git a/crawl-ref/source/spl-other.cc b/crawl-ref/source/spl-other.cc
index 8e055cc..7863ba5 100644
--- a/crawl-ref/source/spl-other.cc
+++ b/crawl-ref/source/spl-other.cc
@@ -454,7 +454,9 @@ void remove_condensation_shield()
spret_type cast_condensation_shield(int pow, bool fail)
{
- if (you.shield() || you.duration[DUR_FIRE_SHIELD])
+ if (you.shield()
+ || you.duration[DUR_FIRE_SHIELD]
+ || you.form == TRAN_MAGMA)
{
canned_msg(MSG_SPELL_FIZZLES);
return SPRET_ABORT;
diff --git a/crawl-ref/source/spl-selfench.cc b/crawl-ref/source/spl-selfench.cc
index 7cb0a34..c708e51 100644
--- a/crawl-ref/source/spl-selfench.cc
+++ b/crawl-ref/source/spl-selfench.cc
@@ -83,6 +83,12 @@ spret_type ice_armour(int pow, bool fail)
return SPRET_ABORT;
}
+ if (you.form == TRAN_MAGMA)
+ {
+ mpr("The film of ice would instantly melt.");
+ return SPRET_ABORT;
+ }
+
if (you.duration[DUR_FIRE_SHIELD])
{
mpr("Your ring of flames would instantly melt the ice.");
diff --git a/crawl-ref/source/status.cc b/crawl-ref/source/status.cc
index 776729d..501fdc0 100644
--- a/crawl-ref/source/status.cc
+++ b/crawl-ref/source/status.cc
@@ -163,6 +163,8 @@ static duration_def duration_data[] =
LIGHTBLUE, "PProj", "portal projectile", "You are teleporting projectiles to their destination." },
{ DUR_FORESTED, false,
YELLOW, "Forest", "", "" },
+ { DUR_MAGMA_DEPLETED, false,
+ RED, "-Magma", "depleted magma", "Your magma is depleted." },
};
static int duration_index[NUM_DURATIONS];
@@ -1049,6 +1051,11 @@ static void _describe_transform(status_info* inf)
inf->short_text = "shadow form";
inf->long_text = "You are a swirling mass of dark shadows.";
break;
+ case TRAN_MAGMA:
+ inf->light_text = "Magma",
+ inf->short_text = "magma form";
+ inf->long_text = "You are a fiery being of magma.";
+ break;
case TRAN_NONE:
break;
}
diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc
index 4568574..7d16ce0 100644
--- a/crawl-ref/source/terrain.cc
+++ b/crawl-ref/source/terrain.cc
@@ -1629,7 +1629,7 @@ static const char *dngn_feature_names[] =
"altar_okawaru", "altar_makhleb", "altar_sif_muna", "altar_trog",
"altar_nemelex_xobeh", "altar_elyvilon", "altar_lugonu",
"altar_beogh", "altar_jiyva", "altar_fedhas", "altar_cheibriados",
-"altar_ashenzari", "altar_dithmenos",
+"altar_ashenzari", "altar_dithmenos", "altar_igni_ipthes",
"fountain_blue", "fountain_sparkling", "fountain_blood",
#if TAG_MAJOR_VERSION == 34
diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc
index 88bd3e7..66d3f02 100644
--- a/crawl-ref/source/tilepick-p.cc
+++ b/crawl-ref/source/tilepick-p.cc
@@ -473,6 +473,7 @@ tileidx_t tileidx_player()
case TRAN_JELLY: ch = TILEP_MONS_JELLY; break;
case TRAN_FUNGUS: ch = TILEP_TRAN_MUSHROOM; break;
case TRAN_SHADOW: ch = TILEP_TRAN_SHADOW; break;
+ case TRAN_MAGMA: ch = TILEP_TRAN_MAGMA; break;
case TRAN_DRAGON:
{
switch (you.species)
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 74faed0..a8d2bfd 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -449,6 +449,8 @@ static tileidx_t _tileidx_feature_base(dungeon_feature_type feat)
return TILE_DNGN_ALTAR_ASHENZARI;
case DNGN_ALTAR_DITHMENOS:
return TILE_DNGN_ALTAR_DITHMENOS;
+ case DNGN_ALTAR_IGNI_IPTHES:
+ return TILE_DNGN_ALTAR_IGNI_IPTHES;
case DNGN_FOUNTAIN_BLUE:
return TILE_DNGN_BLUE_FOUNTAIN;
case DNGN_FOUNTAIN_SPARKLING:
diff --git a/crawl-ref/source/transform.cc b/crawl-ref/source/transform.cc
index f061111..f52c969 100644
--- a/crawl-ref/source/transform.cc
+++ b/crawl-ref/source/transform.cc
@@ -12,6 +12,7 @@
#include "externs.h"
+#include "areas.h"
#include "art-enum.h"
#include "artefact.h"
#include "cloud.h"
@@ -34,6 +35,8 @@
#include "random.h"
#include "religion.h"
#include "skills2.h"
+#include "spl-other.h"
+#include "spl-selfench.h"
#include "state.h"
#include "stuff.h"
#include "terrain.h"
@@ -60,6 +63,7 @@ static const char* form_names[] =
"jelly",
"fungus",
"shadow",
+ "magma",
};
const char* transform_name(transformation_type form)
@@ -73,7 +77,7 @@ bool form_can_wield(transformation_type form)
{
return form == TRAN_NONE || form == TRAN_STATUE || form == TRAN_LICH
|| form == TRAN_APPENDAGE || form == TRAN_TREE
- || form == TRAN_SHADOW;
+ || form == TRAN_SHADOW || form == TRAN_MAGMA;
}
bool form_can_wear(transformation_type form)
@@ -142,8 +146,8 @@ bool form_has_mouth(transformation_type form)
bool form_likes_lava(transformation_type form)
{
// Lava orcs can only swim in non-phys-change forms.
- return you.species == SP_LAVA_ORC
- && !form_changed_physiology(form);
+ return you.species == SP_LAVA_ORC && !form_changed_physiology(form)
+ || form == TRAN_MAGMA;
}
bool form_can_butcher(transformation_type form)
@@ -188,6 +192,7 @@ bool form_can_wear_item(const item_def& item, transformation_type form)
case TRAN_NONE:
case TRAN_LICH:
case TRAN_SHADOW:
+ case TRAN_MAGMA:
case TRAN_APPENDAGE: // handled as mutations
return true;
@@ -230,6 +235,7 @@ bool form_keeps_mutations(transformation_type form)
case TRAN_LICH:
case TRAN_SHADOW:
case TRAN_APPENDAGE:
+ case TRAN_MAGMA:
return true;
default:
return false;
@@ -496,6 +502,8 @@ monster_type transform_mons()
return MONS_INSUBSTANTIAL_WISP;
case TRAN_SHADOW:
return MONS_SHADOW; // XXX: should get its own monster?
+ case TRAN_MAGMA:
+ return MONS_FIRE_ELEMENTAL; // XXX: needs a monster
case TRAN_BLADE_HANDS:
case TRAN_APPENDAGE:
case TRAN_NONE:
@@ -723,6 +731,7 @@ static int _transform_duration(transformation_type which_trans, int pow)
case TRAN_LICH:
case TRAN_SHADOW:
case TRAN_BAT:
+ case TRAN_MAGMA:
return min(20 + random2(pow) + random2(pow), 100);
case TRAN_ICE_BEAST:
return min(30 + random2(pow) + random2(pow), 100);
@@ -815,6 +824,7 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
case TRAN_STATUE:
case TRAN_LICH:
case TRAN_SHADOW:
+ case TRAN_MAGMA:
break;
default:
skip_wielding = true;
@@ -1002,6 +1012,11 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
msg += "a swirling mass of dark shadows.";
break;
+ case TRAN_MAGMA:
+ tran_name = "magma";
+ msg += "a fiery being of magma.";
+ break;
+
case TRAN_NONE:
tran_name = "null";
msg += "your old self.";
@@ -1180,6 +1195,31 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
mpr("You feel less conspicuous.");
break;
+ case TRAN_MAGMA:
+ if (you.duration[DUR_STONESKIN])
+ {
+ mprf(MSGCH_DURATION,
+ "Your stone armour melts in the extreme heat.");
+ you.duration[DUR_STONESKIN] = 0;
+ }
+
+ if (you.duration[DUR_CONDENSATION_SHIELD])
+ remove_condensation_shield();
+
+ if (you.duration[DUR_ICY_ARMOUR])
+ remove_ice_armour();
+
+ if (you.mutation[MUT_ICEMAIL])
+ {
+ mprf(MSGCH_DURATION,
+ "Your icy envelope dissipates in the extreme heat.");
+ you.duration[DUR_ICEMAIL_DEPLETED] = ICEMAIL_TIME;
+ }
+
+ you.redraw_armour_class = true;
+ invalidate_agrid(true);
+ break;
+
default:
break;
}
@@ -1391,6 +1431,13 @@ void untransform(bool skip_wielding, bool skip_move)
"losing the tree transformation");
break;
+ case TRAN_MAGMA:
+ mprf(MSGCH_DURATION, "You feel yourself cool down.");
+ invalidate_agrid(true);
+ you.attribute[ATTR_ERUPT_DAMAGE] = 0;
+ you.erupt = false;
+ break;
+
default:
break;
}
diff --git a/crawl-ref/source/wiz-you.cc b/crawl-ref/source/wiz-you.cc
index ac2bce7..9dd0467 100644
--- a/crawl-ref/source/wiz-you.cc
+++ b/crawl-ref/source/wiz-you.cc
@@ -872,6 +872,7 @@ static const char* dur_names[] =
"magic sapped",
"portal projectile",
"forested",
+ "magma depleted",
};
void wizard_edit_durations(void)
--
1.9.0
From bac61ce6826340f20f00cf02701b85991f82fa6f Mon Sep 17 00:00:00 2001
From: pubby <pubby8@gmail.com>
Date: Sun, 23 Feb 2014 14:03:23 -0600
Subject: [PATCH 2/2] Fix Igni save compat.
The fountain enums were shifted down, providing room for 3 altar enums,
one of which is Igni's.
---
crawl-ref/source/enum.h | 18 ++++++++++++++----
crawl-ref/source/tag-version.h | 1 +
crawl-ref/source/tags.cc | 34 ++++++++++++++++++++++++++++++++--
crawl-ref/source/terrain.cc | 4 +---
4 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 4b06e8a..5661202 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -1449,15 +1449,25 @@ enum dungeon_feature_type
DNGN_ALTAR_ASHENZARI,
DNGN_ALTAR_DITHMENOS,
DNGN_ALTAR_IGNI_IPTHES,
+#if TAG_MAJOR_VERSION == 34
+ DNGN_FOUNTAIN_BLUE_OLD = DNGN_ALTAR_IGNI_IPTHES,
+#endif
DNGN_ALTAR_LAST_GOD = DNGN_ALTAR_IGNI_IPTHES,
+ DNGN_UNUSED_ALTAR_1,
+ DNGN_UNUSED_ALTAR_2,
+#if TAG_MAJOR_VERSION == 34
+ DNGN_FOUNTAIN_SPARKLING_OLD = DNGN_UNUSED_ALTAR_1,
+ DNGN_FOUNTAIN_BLOOD_OLD = DNGN_UNUSED_ALTAR_2,
+#endif
+
DNGN_FOUNTAIN_BLUE,
- DNGN_FOUNTAIN_SPARKLING, // aka 'Magic Fountain' {dlb}
+ DNGN_FOUNTAIN_SPARKLING,
DNGN_FOUNTAIN_BLOOD,
#if TAG_MAJOR_VERSION == 34
- DNGN_DRY_FOUNTAIN_BLUE,
- DNGN_DRY_FOUNTAIN_SPARKLING,
- DNGN_DRY_FOUNTAIN_BLOOD,
+ DNGN_DRY_FOUNTAIN_BLUE_OLD = DNGN_FOUNTAIN_BLUE,
+ DNGN_DRY_FOUNTAIN_SPARKLING_OLD = DNGN_FOUNTAIN_SPARKLING,
+ DNGN_DRY_FOUNTAIN_BLOOD_OLD = DNGN_FOUNTAIN_BLOOD,
#endif
DNGN_DRY_FOUNTAIN,
diff --git a/crawl-ref/source/tag-version.h b/crawl-ref/source/tag-version.h
index c955736..efb22a9 100644
--- a/crawl-ref/source/tag-version.h
+++ b/crawl-ref/source/tag-version.h
@@ -80,6 +80,7 @@ enum tag_minor_version
TAG_MINOR_EVENT_TIMERS, // "Every 20 turn" effects are less determinstic.
TAG_MINOR_EVENT_TIMER_FIX, // Correct event timers in transferred games
TAG_MINOR_MONINFO_ENERGY, // Energy usage in monster_info
+ TAG_MINOR_MORE_ALTAR_ENUMS, // Added space for altars in dungeon_feature_type
#endif
NUM_TAG_MINORS,
TAG_MINOR_VERSION = NUM_TAG_MINORS - 1
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index 3da7ee5..8a9003e 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -957,8 +957,22 @@ static dungeon_feature_type unmarshallFeatureType(reader &th)
else if (x >= DNGN_LAVA_SEA && x < 30)
x = (dungeon_feature_type)(x - 1);
}
- if (x >= DNGN_DRY_FOUNTAIN_BLUE && x <= DNGN_DRY_FOUNTAIN_BLOOD)
- x = DNGN_DRY_FOUNTAIN;
+
+ if (th.getMinorVersion() < TAG_MINOR_MORE_ALTAR_ENUMS)
+ {
+ if (x >= DNGN_DRY_FOUNTAIN_BLUE_OLD
+ && x <= DNGN_DRY_FOUNTAIN_BLOOD_OLD)
+ {
+ x = DNGN_DRY_FOUNTAIN;
+ }
+
+ if (x == DNGN_FOUNTAIN_BLUE_OLD)
+ x = DNGN_FOUNTAIN_BLUE;
+ if (x == DNGN_FOUNTAIN_SPARKLING_OLD)
+ x = DNGN_FOUNTAIN_SPARKLING;
+ if (x == DNGN_FOUNTAIN_BLOOD_OLD)
+ x = DNGN_FOUNTAIN_BLOOD;
+ }
#endif
return x;
@@ -978,6 +992,22 @@ static dungeon_feature_type unmarshallFeatureType_Info(reader &th)
x = (dungeon_feature_type)(x - 1);
}
+ if (th.getMinorVersion() < TAG_MINOR_MORE_ALTAR_ENUMS)
+ {
+ if (x >= DNGN_DRY_FOUNTAIN_BLUE_OLD
+ && x <= DNGN_DRY_FOUNTAIN_BLOOD_OLD)
+ {
+ x = DNGN_DRY_FOUNTAIN;
+ }
+
+ if (x == DNGN_FOUNTAIN_BLUE_OLD)
+ x = DNGN_FOUNTAIN_BLUE;
+ if (x == DNGN_FOUNTAIN_SPARKLING_OLD)
+ x = DNGN_FOUNTAIN_SPARKLING;
+ if (x == DNGN_FOUNTAIN_BLOOD_OLD)
+ x = DNGN_FOUNTAIN_BLOOD;
+ }
+
return x;
}
#endif
diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc
index 7d16ce0..6149b9b 100644
--- a/crawl-ref/source/terrain.cc
+++ b/crawl-ref/source/terrain.cc
@@ -1630,11 +1630,9 @@ static const char *dngn_feature_names[] =
"altar_nemelex_xobeh", "altar_elyvilon", "altar_lugonu",
"altar_beogh", "altar_jiyva", "altar_fedhas", "altar_cheibriados",
"altar_ashenzari", "altar_dithmenos", "altar_igni_ipthes",
+"altar_unused_1", "altar_unused_2",
"fountain_blue", "fountain_sparkling", "fountain_blood",
-#if TAG_MAJOR_VERSION == 34
-"non-fountain_blue", "non-fountain_sparkling", "non-fountain_blood",
-#endif
"dry_fountain",
"explore_horizon",
--
1.9.0
0001-Remove-gold-cost-and-the-Cherufe-species-from-smithg.patch [^] (79,126 bytes) 2014-06-23 23:45 [Show Content] [Hide Content]From 63e11917843eee599be70a63e405baf207f4e417 Mon Sep 17 00:00:00 2001
From: drachereborn <kerwin.khu@gmail.com>
Date: Mon, 23 Jun 2014 22:48:10 +0200
Subject: [PATCH] Remove gold cost and the Cherufe species from smithgod
Prep work before actual changes. Some of the old unneeded parts are removed.
Igni's gold costs are unlikely to continue with Gozag now in trunk, plus
Igni's implementation was different from Gozag's anyway. The Cherufe is a
fire based species with Magma form and eruption which was included in
the Igni code. This is unlikely to be included in Igni's final form.
---
crawl-ref/docs/crawl_manual.reST | 3 -
crawl-ref/source/ability.cc | 366 ++++++++++++------------------
crawl-ref/source/ability.h | 1 -
crawl-ref/source/aptitudes.h | 39 ----
crawl-ref/source/areas.cc | 10 +-
crawl-ref/source/attack.cc | 1 -
crawl-ref/source/beam.cc | 34 ---
crawl-ref/source/chardump.cc | 3 -
crawl-ref/source/dat/descript/ability.txt | 19 --
crawl-ref/source/dat/descript/species.txt | 5 -
crawl-ref/source/describe.cc | 1 -
crawl-ref/source/duration-data.h | 4 -
crawl-ref/source/enum.h | 17 +-
crawl-ref/source/evoke.cc | 7 +-
crawl-ref/source/godabil.cc | 75 +-----
crawl-ref/source/godabil.h | 1 -
crawl-ref/source/godconduct.cc | 13 +-
crawl-ref/source/item_use.cc | 3 +-
crawl-ref/source/main.cc | 17 --
crawl-ref/source/melee_attack.cc | 27 ---
crawl-ref/source/mon-act.cc | 4 -
crawl-ref/source/mon-data.h | 12 -
crawl-ref/source/mutation.cc | 5 -
crawl-ref/source/ng-restr.cc | 2 -
crawl-ref/source/ng-setup.cc | 5 -
crawl-ref/source/ouch.cc | 24 +-
crawl-ref/source/output.cc | 2 -
crawl-ref/source/player-act.cc | 13 --
crawl-ref/source/player-equip.cc | 13 --
crawl-ref/source/player-equip.h | 2 -
crawl-ref/source/player-reacts.cc | 3 +-
crawl-ref/source/player.cc | 78 +------
crawl-ref/source/player.h | 3 -
crawl-ref/source/religion.cc | 12 +-
crawl-ref/source/rltiles/dc-mon.txt | 1 -
crawl-ref/source/species.cc | 9 +-
crawl-ref/source/spl-cast.cc | 32 +--
crawl-ref/source/spl-other.cc | 4 +-
crawl-ref/source/spl-selfench.cc | 6 -
crawl-ref/source/status.cc | 5 -
crawl-ref/source/tags.cc | 2 +
crawl-ref/source/tilepick-p.cc | 1 -
crawl-ref/source/transform.cc | 57 +----
43 files changed, 195 insertions(+), 746 deletions(-)
diff --git a/crawl-ref/docs/crawl_manual.reST b/crawl-ref/docs/crawl_manual.reST
index 2c0c647..cae7c46 100644
--- a/crawl-ref/docs/crawl_manual.reST
+++ b/crawl-ref/docs/crawl_manual.reST
@@ -1741,9 +1741,6 @@ Vine Stalkers
reserves start to run low, thus replenishing their shroud of magic and their
spells' fuel with each voracious bite.
-Cherufes
- A combination of LO, Dj, and fire god ideas.
-
Elves
========================================
diff --git a/crawl-ref/source/ability.cc b/crawl-ref/source/ability.cc
index 29c099f..e15d90e 100644
--- a/crawl-ref/source/ability.cc
+++ b/crawl-ref/source/ability.cc
@@ -209,53 +209,49 @@ ability_type god_abilities[NUM_GODS][MAX_GOD_ABILITIES] =
// The description screen was way out of date with the actual costs.
// This table puts all the information in one place... -- bwr
//
-// The six numerical fields are: MP, HP, food, piety, ZP, and gold.
+// The five numerical fields are: MP, HP, food, piety and ZP.
// Note: food_cost = val + random2avg(val, 2)
// piety_cost = val + random2((val + 1) / 2 + 1);
// hp cost is in per-mil of maxhp (i.e. 20 = 2% of hp, rounded up)
static const ability_def Ability_List[] =
{
// NON_ABILITY should always come first
- { ABIL_NON_ABILITY, "No ability", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_SPIT_POISON, "Spit Poison", 0, 0, 40, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_NON_ABILITY, "No ability", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_SPIT_POISON, "Spit Poison", 0, 0, 40, 0, 0, ABFLAG_BREATH},
- { ABIL_BLINK, "Blink", 0, 50, 50, 0, 0, 0, ABFLAG_NONE},
- { ABIL_WISP_BLINK, "Blink", 2, 0, 0, 0, 0, 0, ABFLAG_CONF_OK},
+ { ABIL_BLINK, "Blink", 0, 50, 50, 0, 0, ABFLAG_NONE},
- { ABIL_BREATHE_FIRE, "Breathe Fire", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_FROST, "Breathe Frost", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_FIRE, "Breathe Fire", 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_FROST, "Breathe Frost", 0, 0, 125, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_POISON, "Breathe Poison Gas",
- 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_MEPHITIC, "Breathe Noxious Fumes",
- 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_LIGHTNING, "Breathe Lightning",
- 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_POWER, "Breathe Dispelling Energy", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_POWER, "Breathe Dispelling Energy", 0, 0, 125, 0, 0, ABFLAG_BREATH},
{ ABIL_BREATHE_STICKY_FLAME, "Breathe Sticky Flame",
- 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_BREATHE_STEAM, "Breathe Steam", 0, 0, 75, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_TRAN_BAT, "Bat Form", 2, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_BOTTLE_BLOOD, "Bottle Blood", 0, 0, 0, 0, 0, 0, ABFLAG_NONE}, // no costs
+ 0, 0, 125, 0, 0, ABFLAG_BREATH},
+ { ABIL_BREATHE_STEAM, "Breathe Steam", 0, 0, 75, 0, 0, ABFLAG_BREATH},
+ { ABIL_TRAN_BAT, "Bat Form", 2, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_BOTTLE_BLOOD, "Bottle Blood", 0, 0, 0, 0, 0, ABFLAG_NONE}, // no costs
- { ABIL_SPIT_ACID, "Spit Acid", 0, 0, 125, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_SPIT_ACID, "Spit Acid", 0, 0, 125, 0, 0, ABFLAG_BREATH},
- { ABIL_FLY, "Fly", 3, 0, 100, 0, 0, 0, ABFLAG_NONE},
- { ABIL_STOP_FLYING, "Stop Flying", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_JUMP, "Jump Attack", 0, 0, 125, 0, 0, 0, ABFLAG_EXHAUSTION},
- { ABIL_HELLFIRE, "Hellfire", 0, 150, 200, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_FLY, "Fly", 3, 0, 100, 0, 0, ABFLAG_NONE},
+ { ABIL_STOP_FLYING, "Stop Flying", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_JUMP, "Jump Attack", 0, 0, 125, 0, 0, ABFLAG_EXHAUSTION},
+ { ABIL_HELLFIRE, "Hellfire", 0, 150, 200, 0, 0, ABFLAG_NONE},
{ ABIL_DELAYED_FIREBALL, "Release Delayed Fireball",
- 0, 0, 0, 0, 0, 0, ABFLAG_INSTANT},
+ 0, 0, 0, 0, 0, ABFLAG_INSTANT},
{ ABIL_STOP_SINGING, "Stop Singing",
- 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_MUMMY_RESTORATION, "Self-Restoration",
- 1, 0, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
+ 1, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
- { ABIL_DIG, "Dig", 0, 0, 0, 0, 0, 0, ABFLAG_INSTANT},
- { ABIL_SHAFT_SELF, "Shaft Self", 0, 0, 250, 0, 0, 0, ABFLAG_DELAY},
-
- { ABIL_ERUPTION, "Eruption", 0, 0, 250, 0, 0, 0, ABFLAG_PAIN },
- { ABIL_TRAN_MAGMA, "Magma Form", 0, 0, 250, 0, 0, 0, ABFLAG_NONE },
+ { ABIL_DIG, "Dig", 0, 0, 0, 0, 0, ABFLAG_INSTANT},
+ { ABIL_SHAFT_SELF, "Shaft Self", 0, 0, 250, 0, 0, ABFLAG_DELAY},
// EVOKE abilities use Evocations and come from items.
// Teleportation and Blink can also come from mutations
@@ -266,224 +262,224 @@ static const ability_def Ability_List[] =
// any reason to label them as "Evoke" in the text, they don't
// use or train Evocations (the others do). -- bwr
{ ABIL_EVOKE_TELEPORTATION, "Evoke Teleportation",
- 3, 0, 200, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_BLINK, "Evoke Blink", 1, 0, 50, 0, 0, 0, ABFLAG_NONE},
- { ABIL_RECHARGING, "Device Recharging", 1, 0, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
+ 3, 0, 200, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_BLINK, "Evoke Blink", 1, 0, 50, 0, 0, ABFLAG_NONE},
+ { ABIL_RECHARGING, "Device Recharging", 1, 0, 0, 0, 0, ABFLAG_PERMANENT_MP},
- { ABIL_EVOKE_BERSERK, "Evoke Berserk Rage", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_BERSERK, "Evoke Berserk Rage", 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_EVOKE_TURN_INVISIBLE, "Evoke Invisibility",
- 2, 0, 250, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_TURN_VISIBLE, "Turn Visible", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_JUMP, "Evoke Jump Attack", 2, 0, 125, 0, 0, 0, ABFLAG_EXHAUSTION},
- { ABIL_EVOKE_FLIGHT, "Evoke Flight", 1, 0, 100, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_FOG, "Evoke Fog", 2, 0, 250, 0, 0, 0, ABFLAG_NONE},
- { ABIL_EVOKE_TELEPORT_CONTROL, "Evoke Teleport Control", 4, 0, 200, 0, 0, 0, ABFLAG_NONE},
+ 2, 0, 250, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_TURN_VISIBLE, "Turn Visible", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_JUMP, "Evoke Jump Attack", 2, 0, 125, 0, 0, ABFLAG_EXHAUSTION},
+ { ABIL_EVOKE_FLIGHT, "Evoke Flight", 1, 0, 100, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_FOG, "Evoke Fog", 2, 0, 250, 0, 0, ABFLAG_NONE},
+ { ABIL_EVOKE_TELEPORT_CONTROL, "Evoke Teleport Control", 4, 0, 200, 0, 0, ABFLAG_NONE},
- { ABIL_END_TRANSFORMATION, "End Transformation", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_END_TRANSFORMATION, "End Transformation", 0, 0, 0, 0, 0, ABFLAG_NONE},
// INVOCATIONS:
// Zin
- { ABIL_ZIN_RECITE, "Recite", 0, 0, 0, 0, 0, 0, ABFLAG_BREATH},
- { ABIL_ZIN_VITALISATION, "Vitalisation", 0, 0, 0, 1, 0, 0, ABFLAG_NONE},
- { ABIL_ZIN_IMPRISON, "Imprison", 5, 0, 125, 4, 0, 0, ABFLAG_NONE},
- { ABIL_ZIN_SANCTUARY, "Sanctuary", 7, 0, 150, 15, 0, 0, ABFLAG_NONE},
+ { ABIL_ZIN_RECITE, "Recite", 0, 0, 0, 0, 0, ABFLAG_BREATH},
+ { ABIL_ZIN_VITALISATION, "Vitalisation", 0, 0, 0, 1, 0, ABFLAG_NONE},
+ { ABIL_ZIN_IMPRISON, "Imprison", 5, 0, 125, 4, 0, ABFLAG_NONE},
+ { ABIL_ZIN_SANCTUARY, "Sanctuary", 7, 0, 150, 15, 0, ABFLAG_NONE},
{ ABIL_ZIN_CURE_ALL_MUTATIONS, "Cure All Mutations",
- 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, ABFLAG_NONE},
// The Shining One
- { ABIL_TSO_DIVINE_SHIELD, "Divine Shield", 3, 0, 50, 2, 0, 0, ABFLAG_NONE},
+ { ABIL_TSO_DIVINE_SHIELD, "Divine Shield", 3, 0, 50, 2, 0, ABFLAG_NONE},
{ ABIL_TSO_CLEANSING_FLAME, "Cleansing Flame",
- 5, 0, 100, 2, 0, 0, ABFLAG_NONE},
+ 5, 0, 100, 2, 0, ABFLAG_NONE},
{ ABIL_TSO_SUMMON_DIVINE_WARRIOR, "Summon Divine Warrior",
- 8, 0, 150, 6, 0, 0, ABFLAG_NONE},
+ 8, 0, 150, 6, 0, ABFLAG_NONE},
// Kikubaaqudgha
{ ABIL_KIKU_RECEIVE_CORPSES, "Receive Corpses",
- 3, 0, 50, 2, 0, 0, ABFLAG_NONE},
- { ABIL_KIKU_TORMENT, "Torment", 4, 0, 0, 8, 0, 0, ABFLAG_NONE},
+ 3, 0, 50, 2, 0, ABFLAG_NONE},
+ { ABIL_KIKU_TORMENT, "Torment", 4, 0, 0, 8, 0, ABFLAG_NONE},
// Yredelemnul
- { ABIL_YRED_INJURY_MIRROR, "Injury Mirror", 0, 0, 0, 0, 0, 0, ABFLAG_PIETY},
+ { ABIL_YRED_INJURY_MIRROR, "Injury Mirror", 0, 0, 0, 0, 0, ABFLAG_PIETY},
{ ABIL_YRED_ANIMATE_REMAINS, "Animate Remains",
- 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
+ 2, 0, 50, 0, 0, ABFLAG_NONE},
{ ABIL_YRED_RECALL_UNDEAD_SLAVES, "Recall Undead Slaves",
- 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
- { ABIL_YRED_ANIMATE_DEAD, "Animate Dead", 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
- { ABIL_YRED_DRAIN_LIFE, "Drain Life", 6, 0, 200, 2, 0, 0, ABFLAG_NONE},
- { ABIL_YRED_ENSLAVE_SOUL, "Enslave Soul", 8, 0, 150, 4, 0, 0, ABFLAG_NONE},
+ 2, 0, 50, 0, 0, ABFLAG_NONE},
+ { ABIL_YRED_ANIMATE_DEAD, "Animate Dead", 2, 0, 50, 0, 0, ABFLAG_NONE},
+ { ABIL_YRED_DRAIN_LIFE, "Drain Life", 6, 0, 200, 2, 0, ABFLAG_NONE},
+ { ABIL_YRED_ENSLAVE_SOUL, "Enslave Soul", 8, 0, 150, 4, 0, ABFLAG_NONE},
// Placeholder for Animate Remains or Animate Dead.
{ ABIL_YRED_ANIMATE_REMAINS_OR_DEAD, "Animate Remains or Dead",
- 2, 0, 100, 0, 0, 0, ABFLAG_NONE},
+ 2, 0, 100, 0, 0, ABFLAG_NONE},
// Okawaru
- { ABIL_OKAWARU_HEROISM, "Heroism", 2, 0, 50, 2, 0, 0, ABFLAG_NONE},
- { ABIL_OKAWARU_FINESSE, "Finesse", 5, 0, 100, 4, 0, 0, ABFLAG_NONE},
+ { ABIL_OKAWARU_HEROISM, "Heroism", 2, 0, 50, 2, 0, ABFLAG_NONE},
+ { ABIL_OKAWARU_FINESSE, "Finesse", 5, 0, 100, 4, 0, ABFLAG_NONE},
// Makhleb
{ ABIL_MAKHLEB_MINOR_DESTRUCTION, "Minor Destruction",
- 0, scaling_cost::fixed(1), 20, 0, 0, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(1), 20, 0, 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB, "Lesser Servant of Makhleb",
- 0, scaling_cost::fixed(4), 50, 2, 0, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(4), 50, 2, 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_MAJOR_DESTRUCTION, "Major Destruction",
- 0, scaling_cost::fixed(6), 100, generic_cost::range(0, 1), 0, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(6), 100, generic_cost::range(0, 1), 0, ABFLAG_NONE},
{ ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB, "Greater Servant of Makhleb",
- 0, scaling_cost::fixed(10), 100, 5, 0, 0, ABFLAG_NONE},
+ 0, scaling_cost::fixed(10), 100, 5, 0, ABFLAG_NONE},
// Sif Muna
{ ABIL_SIF_MUNA_CHANNEL_ENERGY, "Channel Energy",
- 0, 0, 100, 0, 0, 0, ABFLAG_NONE},
- { ABIL_SIF_MUNA_FORGET_SPELL, "Forget Spell", 5, 0, 0, 8, 0, 0, ABFLAG_NONE},
+ 0, 0, 100, 0, 0, ABFLAG_NONE},
+ { ABIL_SIF_MUNA_FORGET_SPELL, "Forget Spell", 5, 0, 0, 8, 0, ABFLAG_NONE},
// Trog
{ ABIL_TROG_BURN_SPELLBOOKS, "Burn Spellbooks",
- 0, 0, 10, 0, 0, 0, ABFLAG_NONE},
- { ABIL_TROG_BERSERK, "Berserk", 0, 0, 200, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 10, 0, 0, ABFLAG_NONE},
+ { ABIL_TROG_BERSERK, "Berserk", 0, 0, 200, 0, 0, ABFLAG_NONE},
{ ABIL_TROG_REGEN_MR, "Trog's Hand",
- 0, 0, 50, generic_cost::range(2, 3), 0, 0, ABFLAG_NONE},
+ 0, 0, 50, generic_cost::range(2, 3), 0, ABFLAG_NONE},
{ ABIL_TROG_BROTHERS_IN_ARMS, "Brothers in Arms",
- 0, 0, 100, generic_cost::range(5, 6), 0, 0, ABFLAG_NONE},
+ 0, 0, 100, generic_cost::range(5, 6), 0, ABFLAG_NONE},
// Elyvilon
{ ABIL_ELYVILON_LIFESAVING, "Divine Protection",
- 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, ABFLAG_NONE},
{ ABIL_ELYVILON_LESSER_HEALING_SELF, "Lesser Self-Healing",
- 1, 0, 100, generic_cost::range(0, 1), 0, 0, ABFLAG_CONF_OK},
+ 1, 0, 100, generic_cost::range(0, 1), 0, ABFLAG_CONF_OK},
{ ABIL_ELYVILON_LESSER_HEALING_OTHERS, "Lesser Healing",
- 1, 0, 100, 0, 0, 0, ABFLAG_NONE},
- { ABIL_ELYVILON_PURIFICATION, "Purification", 3, 0, 300, 3, 0, 0,
+ 1, 0, 100, 0, 0, ABFLAG_NONE},
+ { ABIL_ELYVILON_PURIFICATION, "Purification", 3, 0, 300, 3, 0,
ABFLAG_CONF_OK},
{ ABIL_ELYVILON_GREATER_HEALING_SELF, "Greater Self-Healing",
- 2, 0, 250, 3, 0, 0, ABFLAG_CONF_OK},
+ 2, 0, 250, 3, 0, ABFLAG_CONF_OK},
{ ABIL_ELYVILON_GREATER_HEALING_OTHERS, "Greater Healing",
- 2, 0, 250, 2, 0, 0, ABFLAG_NONE},
- { ABIL_ELYVILON_DIVINE_VIGOUR, "Divine Vigour", 0, 0, 600, 6, 0, 0,
+ 2, 0, 250, 2, 0, ABFLAG_NONE},
+ { ABIL_ELYVILON_DIVINE_VIGOUR, "Divine Vigour", 0, 0, 600, 6, 0,
ABFLAG_CONF_OK},
// Lugonu
{ ABIL_LUGONU_ABYSS_EXIT, "Depart the Abyss",
- 1, 0, 150, 10, 0, 0, ABFLAG_NONE},
- { ABIL_LUGONU_BEND_SPACE, "Bend Space", 1, 0, 50, 0, 0, 0, ABFLAG_PAIN},
+ 1, 0, 150, 10, 0, ABFLAG_NONE},
+ { ABIL_LUGONU_BEND_SPACE, "Bend Space", 1, 0, 50, 0, 0, ABFLAG_PAIN},
{ ABIL_LUGONU_BANISH, "Banish",
- 4, 0, 200, generic_cost::range(3, 4), 0, 0, ABFLAG_NONE},
+ 4, 0, 200, generic_cost::range(3, 4), 0, ABFLAG_NONE},
{ ABIL_LUGONU_CORRUPT, "Corrupt",
- 7, scaling_cost::fixed(5), 500, generic_cost::range(10, 14), 0, 0, ABFLAG_NONE},
+ 7, scaling_cost::fixed(5), 500, generic_cost::range(10, 14), 0, ABFLAG_NONE},
{ ABIL_LUGONU_ABYSS_ENTER, "Enter the Abyss",
- 9, 0, 500, generic_cost::fixed(35), 0, 0, ABFLAG_PAIN},
+ 9, 0, 500, generic_cost::fixed(35), 0, ABFLAG_PAIN},
// Nemelex
- { ABIL_NEMELEX_DRAW_ONE, "Draw One", 2, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_PEEK_TWO, "Peek at Two", 3, 0, 0, 1, 0, 0, ABFLAG_INSTANT},
- { ABIL_NEMELEX_TRIPLE_DRAW, "Triple Draw", 2, 0, 100, 2, 0, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_DEAL_FOUR, "Deal Four", 8, 0, 200, 8, 0, 0, ABFLAG_NONE},
- { ABIL_NEMELEX_STACK_FIVE, "Stack Five", 5, 0, 250, 10, 0, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_DRAW_ONE, "Draw One", 2, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_PEEK_TWO, "Peek at Two", 3, 0, 0, 1, 0, ABFLAG_INSTANT},
+ { ABIL_NEMELEX_TRIPLE_DRAW, "Triple Draw", 2, 0, 100, 2, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_DEAL_FOUR, "Deal Four", 8, 0, 200, 8, 0, ABFLAG_NONE},
+ { ABIL_NEMELEX_STACK_FIVE, "Stack Five", 5, 0, 250, 10, 0, ABFLAG_NONE},
// Beogh
{ ABIL_BEOGH_SMITING, "Smiting",
- 3, 0, 80, generic_cost::fixed(3), 0, 0, ABFLAG_NONE},
+ 3, 0, 80, generic_cost::fixed(3), 0, ABFLAG_NONE},
{ ABIL_BEOGH_RECALL_ORCISH_FOLLOWERS, "Recall Orcish Followers",
- 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
+ 2, 0, 50, 0, 0, ABFLAG_NONE},
{ ABIL_BEOGH_GIFT_ITEM, "Give Item to Follower",
- 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, ABFLAG_NONE},
// Jiyva
- { ABIL_JIYVA_CALL_JELLY, "Request Jelly", 2, 0, 20, 1, 0, 0, ABFLAG_NONE},
- { ABIL_JIYVA_JELLY_PARALYSE, "Jelly Paralyse", 0, 0, 0, 0, 0, 0, ABFLAG_PIETY},
- { ABIL_JIYVA_SLIMIFY, "Slimify", 4, 0, 100, 8, 0, 0, ABFLAG_NONE},
+ { ABIL_JIYVA_CALL_JELLY, "Request Jelly", 2, 0, 20, 1, 0, ABFLAG_NONE},
+ { ABIL_JIYVA_JELLY_PARALYSE, "Jelly Paralyse", 0, 0, 0, 0, 0, ABFLAG_PIETY},
+ { ABIL_JIYVA_SLIMIFY, "Slimify", 4, 0, 100, 8, 0, ABFLAG_NONE},
{ ABIL_JIYVA_CURE_BAD_MUTATION, "Cure Bad Mutation",
- 8, 0, 200, 15, 0, 0, ABFLAG_NONE},
+ 8, 0, 200, 15, 0, ABFLAG_NONE},
// Fedhas
- { ABIL_FEDHAS_EVOLUTION, "Evolution", 2, 0, 0, 0, 0, 0, ABFLAG_VARIABLE_FRUIT},
- { ABIL_FEDHAS_SUNLIGHT, "Sunlight", 2, 0, 50, 0, 0, 0, ABFLAG_NONE},
- { ABIL_FEDHAS_PLANT_RING, "Growth", 2, 0, 0, 0, 0, 0, ABFLAG_FRUIT},
- { ABIL_FEDHAS_SPAWN_SPORES, "Reproduction", 4, 0, 100, 1, 0, 0, ABFLAG_NONE},
- { ABIL_FEDHAS_RAIN, "Rain", 4, 0, 150, 4, 0, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_EVOLUTION, "Evolution", 2, 0, 0, 0, 0, ABFLAG_VARIABLE_FRUIT},
+ { ABIL_FEDHAS_SUNLIGHT, "Sunlight", 2, 0, 50, 0, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_PLANT_RING, "Growth", 2, 0, 0, 0, 0, ABFLAG_FRUIT},
+ { ABIL_FEDHAS_SPAWN_SPORES, "Reproduction", 4, 0, 100, 1, 0, ABFLAG_NONE},
+ { ABIL_FEDHAS_RAIN, "Rain", 4, 0, 150, 4, 0, ABFLAG_NONE},
// Cheibriados
- { ABIL_CHEIBRIADOS_TIME_BEND, "Bend Time", 3, 0, 50, 1, 0, 0, ABFLAG_NONE},
+ { ABIL_CHEIBRIADOS_TIME_BEND, "Bend Time", 3, 0, 50, 1, 0, ABFLAG_NONE},
{ ABIL_CHEIBRIADOS_DISTORTION, "Temporal Distortion",
- 4, 0, 200, 3, 0, 0, ABFLAG_INSTANT},
- { ABIL_CHEIBRIADOS_SLOUCH, "Slouch", 5, 0, 100, 8, 0, 0, ABFLAG_NONE},
+ 4, 0, 200, 3, 0, ABFLAG_INSTANT},
+ { ABIL_CHEIBRIADOS_SLOUCH, "Slouch", 5, 0, 100, 8, 0, ABFLAG_NONE},
{ ABIL_CHEIBRIADOS_TIME_STEP, "Step From Time",
- 10, 0, 200, 10, 0, 0, ABFLAG_NONE},
+ 10, 0, 200, 10, 0, ABFLAG_NONE},
// Ashenzari
{ ABIL_ASHENZARI_SCRYING, "Scrying",
- 4, 0, 50, generic_cost::range(2, 3), 0, 0, ABFLAG_INSTANT},
+ 4, 0, 50, generic_cost::range(2, 3), 0, ABFLAG_INSTANT},
{ ABIL_ASHENZARI_TRANSFER_KNOWLEDGE, "Transfer Knowledge",
- 0, 0, 0, 20, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 20, 0, ABFLAG_NONE},
{ ABIL_ASHENZARI_END_TRANSFER, "End Transfer Knowledge",
- 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ 0, 0, 0, 0, 0, ABFLAG_NONE},
// Dithmenos
{ ABIL_DITHMENOS_SHADOW_STEP, "Shadow Step",
- 4, 0, 0, 4, 0, 0, ABFLAG_NONE },
+ 4, 0, 0, 4, 0, ABFLAG_NONE },
{ ABIL_DITHMENOS_SHADOW_FORM, "Shadow Form",
- 9, 0, 0, 10, 0, 0, ABFLAG_SKILL_DRAIN },
-
- // Igni Ipthes
- { ABIL_IGNI_FIREBRAND_WEAPON, "Firebrand Weapon",
- 0, 0, 100, 1, 0, 0, ABFLAG_NONE },
- { ABIL_IGNI_DIVINE_BELLOWS, "Divine Bellows",
- 0, 0, 200, 2, 0, 0, ABFLAG_NONE },
- { ABIL_IGNI_FIRE_FORTRESS, "Fire Fortress",
- 0, 0, 300, 3, 0, 0, ABFLAG_NONE },
- { ABIL_IGNI_ARTEFACTIZE_WEAPON, "Artefactize Weapon",
- 0, 0, 0, 6, 0, 0, ABFLAG_NONE },
+ 9, 0, 0, 10, 0, ABFLAG_SKILL_DRAIN },
// Gozag
{ ABIL_GOZAG_POTION_PETITION, "Potion Petition",
- 0, 0, 0, 0, 0, 0, ABFLAG_GOLD },
+ 0, 0, 0, 0, 0, ABFLAG_GOLD },
{ ABIL_GOZAG_CALL_MERCHANT, "Call Merchant",
- 0, 0, 0, 0, 0, 0, ABFLAG_GOLD },
+ 0, 0, 0, 0, 0, ABFLAG_GOLD },
{ ABIL_GOZAG_BRIBE_BRANCH, "Bribe Branch",
- 0, 0, 0, 0, 0, 0, ABFLAG_GOLD },
+ 0, 0, 0, 0, 0, ABFLAG_GOLD },
// Qazlal
- { ABIL_QAZLAL_UPHEAVAL, "Upheaval", 4, 0, 0, 3, 0, 0, ABFLAG_NONE },
+ { ABIL_QAZLAL_UPHEAVAL, "Upheaval", 4, 0, 0, 3, 0, ABFLAG_NONE },
{ ABIL_QAZLAL_ELEMENTAL_FORCE, "Elemental Force",
- 6, 0, 0, 6, 0, 0, ABFLAG_NONE },
+ 6, 0, 0, 6, 0, ABFLAG_NONE },
{ ABIL_QAZLAL_DISASTER_AREA, "Disaster Area", 7, 0, 0,
- generic_cost::range(10, 14), 0, 0, ABFLAG_NONE },
+ generic_cost::range(10, 14), 0, ABFLAG_NONE },
+
+ // Igni Ipthes
+ { ABIL_IGNI_FIREBRAND_WEAPON, "Firebrand Weapon",
+ 0, 0, 100, 1, 0, ABFLAG_NONE },
+ { ABIL_IGNI_DIVINE_BELLOWS, "Divine Bellows",
+ 0, 0, 200, 2, 0, ABFLAG_NONE },
+ { ABIL_IGNI_FIRE_FORTRESS, "Fire Fortress",
+ 0, 0, 300, 3, 0, ABFLAG_NONE },
+ { ABIL_IGNI_ARTEFACTIZE_WEAPON, "Artefactize Weapon",
+ 0, 0, 0, 6, 0, ABFLAG_NONE },
- { ABIL_STOP_RECALL, "Stop Recall", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_STOP_RECALL, "Stop Recall", 0, 0, 0, 0, 0, ABFLAG_NONE},
// zot defence abilities
- { ABIL_MAKE_FUNGUS, "Make mushroom circle", 0, 0, 0, 0, 10, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_PLANT, "Make plant", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_SAPLING, "Make oklob sapling", 0, 0, 0, 0, 60, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BURNING_BUSH, "Make burning bush", 0, 0, 0, 0, 200, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_PLANT, "Make oklob plant", 0, 0, 0, 0, 250, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ICE_STATUE, "Make ice statue", 0, 0, 0, 0, 2000, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OCS, "Make crystal statue", 0, 0, 0, 0, 2000, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_SILVER_STATUE, "Make silver statue", 0, 0, 0, 0, 3000, 0, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_FUNGUS, "Make mushroom circle", 0, 0, 0, 0, 10, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_PLANT, "Make plant", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_SAPLING, "Make oklob sapling", 0, 0, 0, 0, 60, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BURNING_BUSH, "Make burning bush", 0, 0, 0, 0, 200, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_PLANT, "Make oklob plant", 0, 0, 0, 0, 250, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ICE_STATUE, "Make ice statue", 0, 0, 0, 0, 2000, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OCS, "Make crystal statue", 0, 0, 0, 0, 2000, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_SILVER_STATUE, "Make silver statue", 0, 0, 0, 0, 3000, ABFLAG_ZOTDEF},
{ ABIL_MAKE_CURSE_SKULL, "Make curse skull",
- 0, 0, 600, 0, 10000, 0, ABFLAG_ZOTDEF|ABFLAG_NECRO_MISCAST_MINOR},
- { ABIL_MAKE_TELEPORT, "Zot-teleport", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ARROW_TRAP, "Make arrow trap", 0, 0, 0, 0, 30, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BOLT_TRAP, "Make bolt trap", 0, 0, 0, 0, 300, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_SPEAR_TRAP, "Make spear trap", 0, 0, 0, 0, 50, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_NEEDLE_TRAP, "Make needle trap", 0, 0, 0, 0, 30, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_NET_TRAP, "Make net trap", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_ALARM_TRAP, "Make alarm trap", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_BLADE_TRAP, "Make blade trap", 0, 0, 0, 0, 3000, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_OKLOB_CIRCLE, "Make oklob circle", 0, 0, 0, 0, 1000, 0, ABFLAG_ZOTDEF},
+ 0, 0, 600, 0, 10000, ABFLAG_ZOTDEF|ABFLAG_NECRO_MISCAST_MINOR},
+ { ABIL_MAKE_TELEPORT, "Zot-teleport", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ARROW_TRAP, "Make arrow trap", 0, 0, 0, 0, 30, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BOLT_TRAP, "Make bolt trap", 0, 0, 0, 0, 300, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_SPEAR_TRAP, "Make spear trap", 0, 0, 0, 0, 50, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_NEEDLE_TRAP, "Make needle trap", 0, 0, 0, 0, 30, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_NET_TRAP, "Make net trap", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_ALARM_TRAP, "Make alarm trap", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_BLADE_TRAP, "Make blade trap", 0, 0, 0, 0, 3000, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_OKLOB_CIRCLE, "Make oklob circle", 0, 0, 0, 0, 1000, ABFLAG_ZOTDEF},
{ ABIL_MAKE_ACQUIRE_GOLD, "Acquire gold",
- 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
+ 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
{ ABIL_MAKE_ACQUIREMENT, "Acquirement",
- 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
- { ABIL_MAKE_WATER, "Make water", 0, 0, 0, 0, 10, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_LIGHTNING_SPIRE, "Make lightning spire", 0, 0, 0, 0, 100, 0, ABFLAG_ZOTDEF},
+ 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_LEVEL_DRAIN},
+ { ABIL_MAKE_WATER, "Make water", 0, 0, 0, 0, 10, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_LIGHTNING_SPIRE, "Make lightning spire", 0, 0, 0, 0, 100, ABFLAG_ZOTDEF},
{ ABIL_MAKE_BAZAAR, "Make bazaar",
- 0, 30, 0, 0, 100, 0, ABFLAG_ZOTDEF|ABFLAG_PERMANENT_HP},
- { ABIL_MAKE_ALTAR, "Make altar", 0, 0, 0, 0, 50, 0, ABFLAG_ZOTDEF},
- { ABIL_MAKE_GRENADES, "Make grenades", 0, 0, 0, 0, 2, 0, ABFLAG_ZOTDEF},
+ 0, 30, 0, 0, 100, ABFLAG_ZOTDEF|ABFLAG_PERMANENT_HP},
+ { ABIL_MAKE_ALTAR, "Make altar", 0, 0, 0, 0, 50, ABFLAG_ZOTDEF},
+ { ABIL_MAKE_GRENADES, "Make grenades", 0, 0, 0, 0, 2, ABFLAG_ZOTDEF},
{ ABIL_REMOVE_CURSE, "Remove Curse",
- 0, 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
+ 0, 0, 0, 0, 0, ABFLAG_ZOTDEF|ABFLAG_STAT_DRAIN},
- { ABIL_RENOUNCE_RELIGION, "Renounce Religion", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
- { ABIL_CONVERT_TO_BEOGH, "Convert to Beogh", 0, 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_RENOUNCE_RELIGION, "Renounce Religion", 0, 0, 0, 0, 0, ABFLAG_NONE},
+ { ABIL_CONVERT_TO_BEOGH, "Convert to Beogh", 0, 0, 0, 0, 0, ABFLAG_NONE},
};
const ability_def& get_ability_def(ability_type abil)
@@ -727,9 +723,6 @@ const string make_cost_description(ability_type ability)
if (abil.piety_cost || abil.flags & ABFLAG_PIETY)
ret += ", Piety"; // randomised and exact amount hidden from player
- if (abil.gold_cost)
- ret += make_stringf(", %d Gold", abil.gold_cost);
-
if (abil.flags & ABFLAG_BREATH)
ret += ", Breath";
@@ -852,13 +845,6 @@ static const string _detailed_cost_description(ability_type ability)
ret << "variable";
}
- if (abil.gold_cost)
- {
- have_cost = true;
- ret << "\nGold : ";
- ret << abil.gold_cost;
- }
-
if (!have_cost)
ret << "nothing.";
@@ -1073,9 +1059,6 @@ talent get_talent(ability_type ability, bool check_confused)
case ABIL_SHAFT_SELF:
failure = 0;
break;
-
- case ABIL_TRAN_MAGMA:
- failure = 45 - (2 * you.experience_level);
// end species abilities (some mutagenic)
// begin demonic powers {dlb}
@@ -1724,24 +1707,6 @@ static bool _check_ability_possible(const ability_def& abil,
case ABIL_GOZAG_BRIBE_BRANCH:
return gozag_check_bribe_branch(quiet);
- case ABIL_ERUPTION:
- if (you.duration[DUR_DEATHS_DOOR])
- {
- if (!quiet)
- mpr("You can't errupt while in Death's Door");
- return false;
- }
-
- // intentional fall-through
- case ABIL_TRAN_MAGMA:
- if (you.duration[DUR_MAGMA_DEPLETED])
- {
- if (!quiet)
- mpr("Your magma is depleted.");
- return false;
- }
- return true;
-
default:
return true;
}
@@ -1857,15 +1822,6 @@ bool activate_talent(const talent& tal)
const ability_def& abil = get_ability_def(tal.which);
// Check that we can afford to pay the costs.
-
- // Check gold first because while MP and HP can vary wildly within a few
- // turns, gold cannot.
- if (abil.gold_cost > 0 && !enough_gold(abil.gold_cost, false))
- {
- crawl_state.zero_turns_taken();
- return false;
- }
-
// Note that mutation shenanigans might leave us with negative MP,
// so don't fail in that case if there's no MP cost.
if (abil.mp_cost > 0 && !enough_mp(abil.mp_cost, false, true))
@@ -2936,18 +2892,6 @@ static bool _do_ability(const ability_def& abil)
return false;
break;
- case ABIL_TRAN_MAGMA:
- if (!transform(100, TRAN_MAGMA))
- {
- crawl_state.zero_turns_taken();
- return false;
- }
- break;
-
- case ABIL_ERUPTION:
- magma_form_eruption();
- break;
-
case ABIL_JIYVA_CALL_JELLY:
{
mgen_data mg(MONS_JELLY, BEH_STRICT_NEUTRAL, 0, 0, 0, you.pos(),
@@ -3169,8 +3113,8 @@ static void _pay_ability_costs(const ability_def& abil, int zpcost)
_scale_piety_cost(abil.ability, abil.piety_cost.cost());
const int hp_cost = abil.hp_cost.cost(you.hp_max);
- dprf("Cost: mp=%d; hp=%d; food=%d; piety=%d; gold=%d",
- abil.mp_cost, hp_cost, food_cost, piety_cost, abil.gold_cost);
+ dprf("Cost: mp=%d; hp=%d; food=%d; piety=%d",
+ abil.mp_cost, hp_cost, food_cost, piety_cost);
if (abil.mp_cost)
{
@@ -3192,9 +3136,6 @@ static void _pay_ability_costs(const ability_def& abil, int zpcost)
you.redraw_experience = true;
}
- if (abil.gold_cost)
- you.gold -= abil.gold_cost;
-
if (abil.flags & ABFLAG_HEX_MISCAST)
{
MiscastEffect(&you, NON_MONSTER, SPTYP_HEXES, 10, 90,
@@ -3571,15 +3512,6 @@ vector<talent> your_talents(bool check_confused, bool include_unusable)
_add_talent(talents, ABIL_FLY, check_confused);
}
- if (you.species == SP_CHERUFE && you.experience_level >= 8
- && you.form != TRAN_MAGMA)
- {
- _add_talent(talents, ABIL_TRAN_MAGMA, check_confused);
- }
-
- if (you.form == TRAN_MAGMA)
- _add_talent(talents, ABIL_ERUPTION, check_confused);
-
if (you.attribute[ATTR_PERM_FLIGHT] && you.racial_permanent_flight())
_add_talent(talents, ABIL_STOP_FLYING, check_confused);
diff --git a/crawl-ref/source/ability.h b/crawl-ref/source/ability.h
index 55d8fb4..27af260 100644
--- a/crawl-ref/source/ability.h
+++ b/crawl-ref/source/ability.h
@@ -63,7 +63,6 @@ struct ability_def
unsigned int food_cost; // + rand2avg(food_cost, 2)
generic_cost piety_cost; // + random2((piety_cost + 1) / 2 + 1)
unsigned int zp_cost; // zot point cost of ability
- unsigned int gold_cost;
unsigned int flags; // used for additional cost notices
};
diff --git a/crawl-ref/source/aptitudes.h b/crawl-ref/source/aptitudes.h
index 651f459..6abad71 100644
--- a/crawl-ref/source/aptitudes.h
+++ b/crawl-ref/source/aptitudes.h
@@ -1484,45 +1484,6 @@ static const species_skill_aptitude species_skill_aptitudes[] =
APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0),
APT(SP_VINE_STALKER, SK_INVOCATIONS, 0),
APT(SP_VINE_STALKER, SK_EVOCATIONS, 0),
-
- // SP_CHERUFE
- APT(SP_CHERUFE, SK_FIGHTING, 2),
- APT(SP_CHERUFE, SK_SHORT_BLADES, 0),
- APT(SP_CHERUFE, SK_LONG_BLADES, 0),
- APT(SP_CHERUFE, SK_AXES, 0),
- APT(SP_CHERUFE, SK_MACES_FLAILS, 0),
- APT(SP_CHERUFE, SK_POLEARMS, 0),
- APT(SP_CHERUFE, SK_STAVES, 0),
- APT(SP_CHERUFE, SK_SLINGS, -2),
- APT(SP_CHERUFE, SK_BOWS, -2),
- APT(SP_CHERUFE, SK_CROSSBOWS, -2),
- APT(SP_CHERUFE, SK_THROWING, -2),
- APT(SP_CHERUFE, SK_ARMOUR, 1),
- APT(SP_CHERUFE, SK_DODGING, -2),
- APT(SP_CHERUFE, SK_STEALTH, -4),
-#if TAG_MAJOR_VERSION == 34
- APT(SP_CHERUFE, SK_STABBING, -99),
-#endif
- APT(SP_CHERUFE, SK_SHIELDS, 0),
-#if TAG_MAJOR_VERSION == 34
- APT(SP_CHERUFE, SK_TRAPS, -99),
-#endif
- APT(SP_CHERUFE, SK_UNARMED_COMBAT, 1),
- APT(SP_CHERUFE, SK_SPELLCASTING, -2),
- APT(SP_CHERUFE, SK_CONJURATIONS, -1),
- APT(SP_CHERUFE, SK_HEXES, -1),
- APT(SP_CHERUFE, SK_CHARMS, -1),
- APT(SP_CHERUFE, SK_SUMMONINGS, -1),
- APT(SP_CHERUFE, SK_NECROMANCY, 0),
- APT(SP_CHERUFE, SK_TRANSLOCATIONS, 0),
- APT(SP_CHERUFE, SK_TRANSMUTATIONS, 2),
- APT(SP_CHERUFE, SK_FIRE_MAGIC, 3),
- APT(SP_CHERUFE, SK_ICE_MAGIC, -3),
- APT(SP_CHERUFE, SK_AIR_MAGIC, -1),
- APT(SP_CHERUFE, SK_EARTH_MAGIC, 1),
- APT(SP_CHERUFE, SK_POISON_MAGIC, 0),
- APT(SP_CHERUFE, SK_INVOCATIONS, 1),
- APT(SP_CHERUFE, SK_EVOCATIONS, 1),
};
#endif
diff --git a/crawl-ref/source/areas.cc b/crawl-ref/source/areas.cc
index 8ad38fd..ec663af 100644
--- a/crawl-ref/source/areas.cc
+++ b/crawl-ref/source/areas.cc
@@ -779,13 +779,13 @@ int monster::umbra_radius2() const
// Player radius
int player::heat_radius2() const
{
- if (you.form == TRAN_MAGMA)
- return 4;
+ if (species != SP_LAVA_ORC)
+ return -1;
- if (species == SP_LAVA_ORC && temperature_effect(LORC_HEAT_AURA))
- return 2; // Surrounds you to radius of 1.
+ if (!temperature_effect(LORC_HEAT_AURA))
+ return -1;
- return -1;
+ return 2; // Surrounds you to radius of 1.
}
// Stub for monster radius
diff --git a/crawl-ref/source/attack.cc b/crawl-ref/source/attack.cc
index cc3131c..cebd5f8 100644
--- a/crawl-ref/source/attack.cc
+++ b/crawl-ref/source/attack.cc
@@ -1377,7 +1377,6 @@ int attack::calc_base_unarmed_damage()
case TRAN_ICE_BEAST:
case TRAN_FUNGUS:
case TRAN_TREE:
- case TRAN_MAGMA:
damage = 12;
break;
case TRAN_BLADE_HANDS:
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index fde0176..1acff4d 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -2770,7 +2770,6 @@ bool bolt::is_superhot() const
|| name == "bolt of magma"
|| name == "fireball"
|| name == "bolt of lightning"
- || name == "blast of magma"
|| name.find("hellfire") != string::npos
&& in_explosion_phase;
}
@@ -2899,12 +2898,6 @@ void bolt::affect_place_clouds()
if (name == "trail of fire")
place_cloud(CLOUD_FIRE, p, random2(ench_power) + ench_power, agent());
- if (name == "blast of magma")
- place_cloud(CLOUD_FIRE, p, random2(5) + 3, agent());
-
- if (name == "plume of ash" && one_chance_in(2))
- place_cloud(CLOUD_PETRIFY, p, random2(8) + 3, agent());
-
if (origin_spell == SPELL_GHOSTLY_FLAMES)
place_cloud(CLOUD_GHOSTLY_FLAME, p, random2(6) + 5, agent());
}
@@ -5977,33 +5970,6 @@ void bolt::refine_for_explosion()
ex_size = 1;
}
- if (name == "blast of magma")
- {
- seeMsg = "The blast of magma explodes!";
- hearMsg = "You hear an explosion!";
-
- glyph = dchar_glyph(DCHAR_FIRED_BURST);
- flavour = BEAM_FIRE;
- if (is_tracer)
- ex_size = 3;
- else
- {
- ex_size = 1;
- ex_size += random2(ench_power) > 50;
- ex_size += random2(ench_power) > 75;
- }
- }
-
- if (name == "plume of ash")
- {
- seeMsg = "The plume of ash settles!";
- hearMsg = "You hear an explosion!";
-
- glyph = dchar_glyph(DCHAR_CLOUD);
- flavour = BEAM_FIRE;
- ex_size = 1;
- }
-
if (seeMsg == NULL)
{
seeMsg = "The beam explodes into a cloud of software bugs!";
diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc
index e6f8d71..740f465 100644
--- a/crawl-ref/source/chardump.cc
+++ b/crawl-ref/source/chardump.cc
@@ -295,9 +295,6 @@ static void _sdump_transform(dump_params &par)
case TRAN_SHADOW:
text += "You " + verb + " a swirling mass of dark shadows.";
break;
- case TRAN_MAGMA:
- text += "You " + verb + " a fiery being of magma.";
- break;
case TRAN_NONE:
break;
}
diff --git a/crawl-ref/source/dat/descript/ability.txt b/crawl-ref/source/dat/descript/ability.txt
index 5f68133..3f9fccb 100644
--- a/crawl-ref/source/dat/descript/ability.txt
+++ b/crawl-ref/source/dat/descript/ability.txt
@@ -685,25 +685,6 @@ This ability will transform your weapon into an artefact, adding magical
properties to it in the process. You will be given some choices over what
properties the artefact gains.
%%%%
-Magma Form ability
-
-Gain the power of the volcano by transforming your flesh into magma. This
-transformation will render your immune to the effects of fire and
-petrification, but weak to cold. While in this form, you radiate a damaging
-heat aura, and your fire and earth magic will be enhanced. Your scrolls will
-be safely stored underneath your magma covering, which means that you won't
-be able to read them while transformed. Unfortunately, this form is extremely
-unstable; taking high amounts of damage may cause you to erupt catastrophically
-into clouds of petrifying ash and fire.
-%%%%
-Erupt ability
-
-While eruption is normally an unpredictable event, it can also be triggered
-at a moment's notice by those in magma form. This ability releases large
-amounts of fire and petrifying ash, but with it comes great pain to yourself.
-After erupting, your transformation will end, and your magma will be
-temporarily depleted.
-%%%%
Renounce Religion ability
Renounce your faith. This will make your character leave your god (and usually
diff --git a/crawl-ref/source/dat/descript/species.txt b/crawl-ref/source/dat/descript/species.txt
index 0b61e03..1efc0eb 100644
--- a/crawl-ref/source/dat/descript/species.txt
+++ b/crawl-ref/source/dat/descript/species.txt
@@ -125,8 +125,3 @@ Vine Stalker
Frail symbionts, Vine Stalkers cannot regain health from devices or potions.
Their magical reserves absorb damage, and they pack a magic-restoring bite.
%%%%
-Cherufe
-
-A combination of LO, Dj, and fire god ideas. Spells cost some HP instead of MP.
-Cherufes can transform into magma when they reach maturity.
-%%%%
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 67795b4..d3ce43f 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -4031,7 +4031,6 @@ string get_ghost_description(const monster_info &mi, bool concise)
case SP_HUMAN:
case SP_DEMIGOD:
case SP_DEMONSPAWN:
- case SP_CHERUFE:
str += 5;
break;
diff --git a/crawl-ref/source/duration-data.h b/crawl-ref/source/duration-data.h
index eda5df3..122981f 100644
--- a/crawl-ref/source/duration-data.h
+++ b/crawl-ref/source/duration-data.h
@@ -325,10 +325,6 @@ static const duration_def duration_data[] =
false, LIGHTBLUE, "Fort",
"immense fortitude", "",
"You have immense fortitude and shrug off injury." },
- { DUR_MAGMA_DEPLETED,
- false, RED, "-Magma",
- "depleted magma", "",
- "Your magma is depleted." },
// The following are visible in wizmode only, or are handled
// specially in the status lights and/or the % or @ screens.
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index c506040..a99117c 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -81,10 +81,7 @@ enum ability_type
// Formicids
ABIL_DIG,
ABIL_SHAFT_SELF,
- // Cherufes
- ABIL_ERUPTION,
- ABIL_TRAN_MAGMA,
- ABIL_MAX_INTRINSIC = ABIL_TRAN_MAGMA,
+ ABIL_MAX_INTRINSIC = ABIL_SHAFT_SELF,
// Evoking items.
ABIL_EVOKE_BERSERK = 40,
@@ -190,7 +187,6 @@ enum ability_type
// Dithmenos
ABIL_DITHMENOS_SHADOW_STEP = 1170,
ABIL_DITHMENOS_SHADOW_FORM,
-
// Gozag
ABIL_GOZAG_POTION_PETITION = 1180,
ABIL_GOZAG_CALL_MERCHANT,
@@ -199,7 +195,6 @@ enum ability_type
ABIL_QAZLAL_UPHEAVAL = 1190,
ABIL_QAZLAL_ELEMENTAL_FORCE,
ABIL_QAZLAL_DISASTER_AREA,
-
// Igni Ipthes
ABIL_IGNI_FIREBRAND_WEAPON = 1200,
ABIL_IGNI_DIVINE_BELLOWS,
@@ -356,7 +351,6 @@ enum attribute_type
ATTR_DIVINE_ELEC_RES, // Divine electricity resistance (Qazlal).
ATTR_DIVINE_AC, // Divine AC bonus (Qazlal).
ATTR_GOZAG_GOLD_USED, // Gold spent for Gozag abilities.
- ATTR_ERUPT_DAMAGE, // Amount of damage taken in magma form
ATTR_IGNI_ARTEFACTS_MADE, // Bit flags of which artefacts were made.
NUM_ATTRIBUTES
};
@@ -381,9 +375,8 @@ enum transformation_type
#endif
TRAN_FUNGUS,
TRAN_SHADOW,
- TRAN_MAGMA,
// no NUM_TRANSFORMS due to too many switch statements
- LAST_FORM = TRAN_MAGMA,
+ LAST_FORM = TRAN_SHADOW,
};
enum beam_type // bolt::flavour
@@ -1746,7 +1739,6 @@ enum duration_type
DUR_QAZLAL_AC,
DUR_CORROSION,
DUR_FORTITUDE,
- DUR_MAGMA_DEPLETED,
NUM_DURATIONS
};
@@ -3231,8 +3223,6 @@ enum monster_type // menv[].type
MONS_TORPOR_SNAIL,
#endif
- MONS_CHERUFE,
-
NUM_MONSTERS, // used for polymorph
// MONS_NO_MONSTER can get put in savefiles, so it shouldn't change
@@ -3844,8 +3834,7 @@ enum species_type
SP_GARGOYLE,
SP_FORMICID,
SP_VINE_STALKER,
- SP_CHERUFE,
- LAST_VALID_SPECIES = SP_CHERUFE,
+ 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/evoke.cc b/crawl-ref/source/evoke.cc
index c9ef43d..ed63e5b 100644
--- a/crawl-ref/source/evoke.cc
+++ b/crawl-ref/source/evoke.cc
@@ -1285,15 +1285,12 @@ void wind_blast(actor* agent, int pow, coord_def target)
}
}
- // Remove the cloud where the blast originates from.
- delete_cloud_at(agent->pos());
-
if (agent->is_player())
{
if (pow > 120)
- mpr("A mighty gale blasts forth!");
+ mpr("A mighty gale blasts forth from the fan!");
else
- mpr("A fierce wind blows.");
+ mpr("A fierce wind blows from the fan.");
}
noisy(8, agent->pos());
diff --git a/crawl-ref/source/godabil.cc b/crawl-ref/source/godabil.cc
index d9616cc..bfa4a4a 100644
--- a/crawl-ref/source/godabil.cc
+++ b/crawl-ref/source/godabil.cc
@@ -23,7 +23,6 @@
#include "dungeon.h"
#include "effects.h"
#include "env.h"
-#include "evoke.h"
#include "fight.h"
#include "files.h"
#include "food.h"
@@ -60,8 +59,6 @@
#include "shopping.h"
#include "shout.h"
#include "spl-book.h"
-#include "spl-clouds.h"
-#include "spl-goditem.h"
#include "spl-monench.h"
#include "spl-summoning.h"
#include "spl-transloc.h"
@@ -72,7 +69,6 @@
#include "target.h"
#include "terrain.h"
#include "throw.h"
-#include "transform.h"
#include "traps.h"
#include "unwind.h"
#include "view.h"
@@ -4886,7 +4882,7 @@ bool igni_fire_fortress()
void igni_divine_bellows()
{
- wind_blast(&you, 200, coord_def());
+ //wind_blast(&you, 200, coord_def()); //removed to get rid of evoke.h
}
static item_def* _firebrand_check_weapon(item_def* wpn)
@@ -5103,72 +5099,3 @@ bool igni_artefactize_weapon()
return true;
}
-
-void magma_form_eruption()
-{
- ASSERT(you.form == TRAN_MAGMA);
-
- mpr("You erupt!");
-
- const int predam = you.attribute[ATTR_ERUPT_DAMAGE];
- const int nowdam = max(0, min(you.hp * 2 / 3, you.hp_max/3 - predam));
- const int total_dam = predam + nowdam;
-
- if (nowdam)
- ouch(nowdam, MHITNOT, KILLED_BY_SOMETHING, "erupting");
-
- int pow = min(100, random2avg(total_dam * 2, 3) + you.experience_level);
-
- const int magma_beams = 2 + random2avg(pow / 10, 3);
- for (int i = 0; i < magma_beams; ++i)
- {
- bolt beam;
- beam.source = you.pos();
- beam.range = random_range(4, 4 + min(4, random2(pow / 10)));
- beam.damage = dice_def(3, 7 + pow / 5);
- beam.hit = 40;
- beam.is_explosion = true;
- beam.ench_power = pow;
- beam.beam_source = MHITYOU;
- beam.loudness = 14;
-
- // Attempt to find a position that isn't close to the player
- beam.is_tracer = true;
- const int attempts = 20;
- for (int j = 0; j != attempts; ++j)
- {
- beam.target = you.pos() + coord_def(random2(13)-6, random2(13)-6);
- if (beam.target == you.pos())
- continue;
- beam.fire();
- if (beam.path_taken.size() >= 2)
- break;
- }
- beam.is_tracer = false;
-
- if (beam.target == you.pos())
- continue;
-
- beam.name = "plume of ash";
- beam.colour = LIGHTGREY;
- beam.flavour = BEAM_FIRE;
-
- beam.fire();
-
- beam.name = "blast of magma";
- beam.range /= 2;
- beam.colour = RED;
- beam.flavour = BEAM_LAVA;
-
- beam.fire();
- }
-
- if (grd(you.pos()) != DNGN_LAVA)
- {
- untransform();
- you.set_duration(DUR_MAGMA_DEPLETED, 30);
- }
-
- you.attribute[ATTR_ERUPT_DAMAGE] = 0;
- you.erupt = false; // just in case
-}
diff --git a/crawl-ref/source/godabil.h b/crawl-ref/source/godabil.h
index 1540717..e35c412 100644
--- a/crawl-ref/source/godabil.h
+++ b/crawl-ref/source/godabil.h
@@ -112,5 +112,4 @@ void igni_divine_bellows();
bool igni_firebrand_player_weapon();
bool igni_firebrand_monster_weapon(monster* mons);
bool igni_artefactize_weapon();
-void magma_form_eruption();
#endif
diff --git a/crawl-ref/source/godconduct.cc b/crawl-ref/source/godconduct.cc
index caa452d..304e308 100644
--- a/crawl-ref/source/godconduct.cc
+++ b/crawl-ref/source/godconduct.cc
@@ -961,14 +961,21 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
const int base_gain = 8; // base gain per dungeon level
// levels: x1, x1.25, x1.5, x1.75, x2
piety_change = base_gain + base_gain * you.bondage_level / 4;
+ piety_denom = level;
+ retval = true;
}
else if (you_worship(GOD_NEMELEX_XOBEH))
+ {
piety_change = 14;
+ piety_denom = level;
+ retval = true;
+ }
else if (you_worship(GOD_IGNI_IPTHES))
+ {
piety_change = 6;
-
- piety_denom = level;
- retval = true;
+ piety_denom = level;
+ retval = true;
+ }
break;
case DID_SEE_MONSTER:
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index fd41003..4064adb 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -2731,8 +2731,7 @@ void read_scroll(int slot)
#if TAG_MAJOR_VERSION == 34
// Prevent hot lava orcs reading scrolls
- if (you.species == SP_LAVA_ORC && temperature_effect(LORC_NO_SCROLLS)
- || you.form == TRAN_MAGMA)
+ if (you.species == SP_LAVA_ORC && temperature_effect(LORC_NO_SCROLLS))
{
crawl_state.zero_turns_taken();
return mpr("You'd burn any scroll you tried to read!");
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index b22d655..be6b89c 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -2169,22 +2169,6 @@ static void _check_banished()
}
}
-static void _check_erupt()
-{
- if (you.form == TRAN_MAGMA && !you.duration[DUR_DEATHS_DOOR])
- {
- if (you.erupt)
- {
- magma_form_eruption();
- you.attribute[ATTR_ERUPT_DAMAGE] = 0;
- }
- }
- else
- you.attribute[ATTR_ERUPT_DAMAGE] = 0;
-
- you.erupt = false;
-}
-
static void _check_shafts()
{
for (int i = 0; i < MAX_TRAPS; ++i)
@@ -2314,7 +2298,6 @@ void world_reacts()
#endif
_check_banished();
- _check_erupt();
_check_shafts();
_check_sanctuary();
diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc
index 7ee461a..7a2c868 100644
--- a/crawl-ref/source/melee_attack.cc
+++ b/crawl-ref/source/melee_attack.cc
@@ -1740,32 +1740,6 @@ void melee_attack::set_attack_verb()
break;
case TRAN_STATUE:
case TRAN_LICH:
- case TRAN_MAGMA:
- if (you.has_usable_claws())
- {
- if (damage_to_display < HIT_WEAK)
- attack_verb = "scratch";
- else if (damage_to_display < HIT_MED)
- attack_verb = "claw";
- else if (damage_to_display < HIT_STRONG)
- attack_verb = "mangle";
- else
- attack_verb = "eviscerate";
- break;
- }
- else if (you.has_usable_tentacles())
- {
- if (damage_to_display < HIT_WEAK)
- attack_verb = "tentacle-slap";
- else if (damage_to_display < HIT_MED)
- attack_verb = "bludgeon";
- else if (damage_to_display < HIT_STRONG)
- attack_verb = "batter";
- else
- attack_verb = "thrash";
- break;
- }
- // or fall-through
case TRAN_NONE:
case TRAN_APPENDAGE:
case TRAN_ICE_BEAST:
@@ -2456,7 +2430,6 @@ int melee_attack::calc_to_hit(bool random)
case TRAN_FUNGUS:
case TRAN_TREE:
case TRAN_WISP:
- case TRAN_MAGMA:
mhit += maybe_random2(10, random);
break;
case TRAN_BAT:
diff --git a/crawl-ref/source/mon-act.cc b/crawl-ref/source/mon-act.cc
index a276b9f..b816d0c 100644
--- a/crawl-ref/source/mon-act.cc
+++ b/crawl-ref/source/mon-act.cc
@@ -71,8 +71,6 @@ static void _mons_in_cloud(monster* mons);
static void _heated_area(monster* mons);
#endif
static void _igni_flame_weapon(monster* mons);
-static bool _is_trap_safe(const monster* mons, const coord_def& where,
- bool just_check = false);
static bool _monster_move(monster* mons);
static spell_type _map_wand_to_mspell(wand_type kind);
@@ -1785,7 +1783,6 @@ static void _pre_monster_move(monster* mons)
#if TAG_MAJOR_VERSION == 34
_heated_area(mons);
-
#endif
_igni_flame_weapon(mons);
@@ -2039,7 +2036,6 @@ void handle_monster_move(monster* mons)
_mons_in_cloud(mons);
#if TAG_MAJOR_VERSION == 34
_heated_area(mons);
-
#endif
_igni_flame_weapon(mons);
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index b4ba71f..15176ee 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -3182,18 +3182,6 @@ DUMMY(MONS_ELEMENTAL, 'E', LIGHTGREY, "elemental")
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_MEDIUM, MON_SHAPE_QUADRUPED
},
-{
- MONS_CHERUFE, 'I', RED, "cherufe",
- M_SPEAKS | M_NO_POLY_TO,
- MR_NO_FLAGS,
- 0, 10, MONS_CHERUFE, MONS_CHERUFE, MH_NATURAL, -4,
- { {AT_HIT, AF_PLAIN, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 8, 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
-},
-
// jellies ('J')
{
MONS_OOZE, 'J', LIGHTGREY, "ooze",
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index b70a900..1530dbf 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -591,11 +591,6 @@ string describe_mutations(bool center_title)
break;
}
- case SP_CHERUFE:
- result += "You cast spells using a little HP and little less MP.\n";
- have_any = true;
- break;
-
default:
break;
}
diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc
index f450c7c..8bf8a8b 100644
--- a/crawl-ref/source/ng-restr.cc
+++ b/crawl-ref/source/ng-restr.cc
@@ -836,8 +836,6 @@ char_choice_restriction job_allowed(species_type speci, job_type job)
default:
return CC_RESTRICTED;
}
- case SP_CHERUFE:
- return CC_RESTRICTED;
default:
return CC_BANNED;
}
diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc
index 65ecff1..18c5356 100644
--- a/crawl-ref/source/ng-setup.cc
+++ b/crawl-ref/source/ng-setup.cc
@@ -75,7 +75,6 @@ static void _species_stat_init(species_type which_species)
#endif
case SP_CENTAUR: s = 10; i = 7; d = 4; break; // 21
case SP_NAGA: s = 10; i = 8; d = 6; break; // 24
- case SP_CHERUFE: s = 9; i = 9; d = 8; break; // 26
case SP_MERFOLK: s = 8; i = 7; d = 9; break; // 24
case SP_TENGU: s = 8; i = 8; d = 9; break; // 25
@@ -332,10 +331,6 @@ void give_basic_mutations(species_type speci)
you.mutation[MUT_NO_DEVICE_HEAL] = 3;
you.mutation[MUT_ROT_IMMUNITY] = 1;
break;
- case SP_CHERUFE:
- you.mutation[MUT_CARNIVOROUS] = 1;
- you.mutation[MUT_MOLTEN_SCALES] = 1;
- break;
default:
break;
}
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index 3ea9163..10e030f 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -89,8 +89,7 @@ static void _maybe_melt_player_enchantments(beam_type flavour, int damage)
you.props["melt_shield"] = true;
}
- if (you.mutation[MUT_ICEMAIL]
- && you.duration[DUR_ICEMAIL_DEPLETED] < ICEMAIL_TIME)
+ if (you.mutation[MUT_ICEMAIL])
{
mprf(MSGCH_DURATION, "Your icy envelope dissipates!");
you.duration[DUR_ICEMAIL_DEPLETED] = ICEMAIL_TIME;
@@ -747,26 +746,6 @@ static void _maybe_fog(int dam)
}
}
-static void _maybe_erupt(int dam)
-{
- if (you.form != TRAN_MAGMA)
- return;
-
- const int upper_threshold = you.hp_max * 3 / 5;
- const int lower_threshold = you.hp_max / 7;
-
- const int test_dam = you.attribute[ATTR_ERUPT_DAMAGE] / 2 + dam;
- you.attribute[ATTR_ERUPT_DAMAGE] += dam;
-
- if (test_dam >= lower_threshold
- && x_chance_in_y(test_dam - lower_threshold,
- upper_threshold - lower_threshold)
- || one_chance_in(27))
- {
- you.erupt = true;
- }
-}
-
static void _place_player_corpse(bool explode)
{
if (!in_bounds(you.pos()))
@@ -964,7 +943,6 @@ void ouch(int dam, int death_source, kill_method_type death_type,
_yred_mirrors_injury(dam, death_source);
_maybe_spawn_jellies(dam, aux, death_type, death_source);
_maybe_fog(dam);
- _maybe_erupt(dam);
_powered_by_pain(dam);
if (drain_amount > 0)
drain_exp(true, drain_amount, true);
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index 0a24b2f..1e48dc1 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -871,8 +871,6 @@ static void _print_stats_wp(int y)
case TRAN_TREE:
col = BROWN;
break;
- case TRAN_MAGMA:
- col = RED;
default:
break;
}
diff --git a/crawl-ref/source/player-act.cc b/crawl-ref/source/player-act.cc
index 181e3ab..8d9941c 100644
--- a/crawl-ref/source/player-act.cc
+++ b/crawl-ref/source/player-act.cc
@@ -208,7 +208,6 @@ int player::body_weight(bool base) const
switch (form)
{
case TRAN_STATUE:
- case TRAN_MAGMA:
weight *= 2;
break;
case TRAN_LICH:
@@ -269,10 +268,6 @@ brand_type player::damage_brand(int)
ret = SPWPN_VAMPIRISM;
break;
- case TRAN_MAGMA:
- ret = SPWPN_FLAMING;
- break;
-
default:
break;
}
@@ -623,8 +618,6 @@ string player::arm_name(bool plural, bool *can_plural) const
adj = "bony";
else if (form == TRAN_SHADOW)
adj = "shadowy";
- else if (form == TRAN_MAGMA)
- adj = "fiery";
if (!adj.empty())
str = adj + " " + str;
@@ -671,9 +664,6 @@ string player::unarmed_attack_name() const
case TRAN_LICH:
text += " (drain)";
break;
- case TRAN_MAGMA:
- text += " (flame)";
- break;
case TRAN_BAT:
case TRAN_PIG:
case TRAN_PORCUPINE:
@@ -833,9 +823,6 @@ bool player::go_berserk(bool intentional, bool potion)
}
#endif
- if (you.form == TRAN_MAGMA)
- you.erupt = true;
-
if (player_equip_unrand(UNRAND_JIHAD))
for (monster_near_iterator mi(you.pos(), LOS_NO_TRANS); mi; ++mi)
if (mi->friendly())
diff --git a/crawl-ref/source/player-equip.cc b/crawl-ref/source/player-equip.cc
index 3c4ba9f..94a077c 100644
--- a/crawl-ref/source/player-equip.cc
+++ b/crawl-ref/source/player-equip.cc
@@ -1409,16 +1409,3 @@ static void _mark_unseen_monsters()
}
}
-
-// If you're wearing an armour that doesn't fit because you're the wrong size,
-// then this function will unequip it.
-void unequip_wrong_size_armour()
-{
- for (int i = EQ_MIN_ARMOUR; i <= EQ_MAX_ARMOUR; ++i)
- {
- const equipment_type eq = static_cast<equipment_type>(i);
- item_def* arm = you.slot_item(eq, false);
- if (arm && !player_check_armour_size(*arm))
- remove_one_equip(eq, false, false);
- }
-}
diff --git a/crawl-ref/source/player-equip.h b/crawl-ref/source/player-equip.h
index 593af0c..001f0d3 100644
--- a/crawl-ref/source/player-equip.h
+++ b/crawl-ref/source/player-equip.h
@@ -13,6 +13,4 @@ bool unmeld_slot(equipment_type slot, bool msg=true);
bool unwield_item(bool showMsgs = true);
-void unequip_wrong_size_armour();
-
#endif
diff --git a/crawl-ref/source/player-reacts.cc b/crawl-ref/source/player-reacts.cc
index 46bcc33..4b07148 100644
--- a/crawl-ref/source/player-reacts.cc
+++ b/crawl-ref/source/player-reacts.cc
@@ -1093,8 +1093,7 @@ static void _decrement_durations()
you.redraw_armour_class = true;
}
- _decrement_a_duration(DUR_MAGMA_DEPLETED, delay,
- "Your magma supply has returned.");
+ dec_elixir_player(delay);
if (!env.sunlight.empty())
process_sunlights();
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 8bcb657..dcd6e5a 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -498,14 +498,6 @@ void moveto_location_effects(dungeon_feature_type old_feat,
mpr("...and don't expect to remain undetected.");
}
}
-
- if (feat_is_water(new_grid) && you.form == TRAN_MAGMA)
- {
- mpr("The water cools you down.");
- you.duration[DUR_TRANSFORMATION] /= 2;
- you.duration[DUR_TRANSFORMATION]++;
- }
-
}
// Traps go off.
@@ -646,8 +638,6 @@ bool is_player_same_genus(const monster_type mon, bool transform)
case TRAN_JELLY:
return mons_genus(mon) == MONS_JELLY;
#endif
-
- case TRAN_MAGMA: // XXX: give magma form a MONS?
case TRAN_STATUE:
case TRAN_BLADE_HANDS:
case TRAN_NONE:
@@ -1584,14 +1574,11 @@ int player_likes_chunks(bool permanently)
// If temp is set to false, temporary sources or resistance won't be counted.
int player_res_fire(bool calc_unid, bool temp, bool items)
{
- if (you.form == TRAN_MAGMA
#if TAG_MAJOR_VERSION == 34
- || you.species == SP_DJINNI
-#endif
- )
- {
+ if (you.species == SP_DJINNI)
return 4; // full immunity
- }
+
+#endif
int rf = 0;
if (items)
@@ -1670,7 +1657,6 @@ int player_res_fire(bool calc_unid, bool temp, bool items)
rf++;
// transformations:
- // (magma form handled earlier)
switch (you.form)
{
case TRAN_ICE_BEAST:
@@ -1762,8 +1748,6 @@ int player_res_cold(bool calc_unid, bool temp, bool items)
case TRAN_LICH:
rc++;
break;
- case TRAN_MAGMA:
- rc -= 2;
default:
break;
}
@@ -2132,9 +2116,6 @@ int player_spec_fire()
if (you.duration[DUR_FIRE_SHIELD])
sf++;
- if (you.form == TRAN_MAGMA)
- sf++;
-
return sf;
}
@@ -2167,9 +2148,6 @@ int player_spec_earth()
// Staves
se += you.wearing(EQ_STAFF, STAFF_EARTH);
- if (you.form == TRAN_MAGMA)
- se++;
-
return se;
}
@@ -2520,8 +2498,7 @@ bool player_is_shapechanged()
|| you.form == TRAN_BLADE_HANDS
|| you.form == TRAN_LICH
|| you.form == TRAN_SHADOW
- || you.form == TRAN_APPENDAGE
- || you.form == TRAN_MAGMA)
+ || you.form == TRAN_APPENDAGE)
{
return false;
}
@@ -3559,17 +3536,6 @@ void level_change(int source, const char* aux, bool skip_attribute_increase)
perma_mutate(MUT_REGENERATION, 1, "vine stalker growth");
break;
- case SP_CHERUFE:
- if (!(you.experience_level % 4))
- modify_stat(STAT_RANDOM, 1, false, "level gain");
-
- if (you.experience_level == 8)
- {
- mprf(MSGCH_INTRINSIC_GAIN,
- "You can now transform into magma.");
- }
- break;
-
default:
break;
}
@@ -3812,7 +3778,6 @@ int check_stealth()
race_mod -= 3; // depends on the base race
break;
case TRAN_DRAGON:
- case TRAN_MAGMA:
race_mod = 6;
break;
case TRAN_PORCUPINE:
@@ -4555,25 +4520,6 @@ bool enough_zp(int minimum, bool suppress_msg)
return true;
}
-bool enough_gold(int minimum, bool suppress_msg, bool abort_macros)
-{
- ASSERT(!crawl_state.game_is_arena());
-
- if (you.gold < minimum)
- {
- if (!suppress_msg)
- mpr("You haven't enough gold.");
-
- if (abort_macros)
- {
- crawl_state.cancel_cmd_again();
- crawl_state.cancel_cmd_repeat();
- }
- return false;
- }
- return true;
-}
-
void inc_mp(int mp_gain, bool silent)
{
ASSERT(!crawl_state.game_is_arena());
@@ -5915,8 +5861,6 @@ void player::init()
banished = false;
banished_by.clear();
- erupt = false;
-
wield_change = false;
redraw_quiver = false;
redraw_status_flags = 0;
@@ -6475,8 +6419,6 @@ bool player_stoneskin()
return temperature_effect(LORC_STONESKIN);
}
- else if (you.form == TRAN_MAGMA)
- return false;
else
#endif
return you.duration[DUR_STONESKIN];
@@ -6591,9 +6533,6 @@ int player::armour_class() const
if (form == TRAN_LICH)
AC += 600;
- if (form == TRAN_MAGMA)
- AC += 100 * experience_level / 5;
-
if (player_genus(GENPC_DRACONIAN))
{
AC += 400 + 100 * (experience_level / 3); // max 13
@@ -6631,7 +6570,6 @@ int player::armour_class() const
case TRAN_APPENDAGE:
case TRAN_BLADE_HANDS:
case TRAN_LICH: // can wear normal body armour (no bonus)
- case TRAN_MAGMA:
break;
#if TAG_MAJOR_VERSION == 34
@@ -6983,12 +6921,8 @@ int player::res_petrify(bool temp) const
if (player_mutation_level(MUT_PETRIFICATION_RESISTANCE))
return 1;
- if (temp && (form == TRAN_STATUE
- || form == TRAN_WISP
- || form == TRAN_MAGMA))
- {
+ if (temp && (form == TRAN_STATUE || form == TRAN_WISP))
return 1;
- }
return 0;
}
@@ -7752,7 +7686,7 @@ bool player::can_bleed(bool allow_tran) const
if (form == TRAN_STATUE || form == TRAN_ICE_BEAST
|| form == TRAN_SPIDER || form == TRAN_TREE
|| form == TRAN_FUNGUS || form == TRAN_PORCUPINE
- || form == TRAN_SHADOW || form == TRAN_MAGMA)
+ || form == TRAN_SHADOW)
{
return false;
}
diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h
index 09109b2..52e3ae1 100644
--- a/crawl-ref/source/player.h
+++ b/crawl-ref/source/player.h
@@ -325,8 +325,6 @@ public:
bool banished;
string banished_by;
- bool erupt;
-
bool wield_change; // redraw weapon
bool redraw_quiver; // redraw quiver
uint64_t redraw_status_flags;
@@ -957,7 +955,6 @@ bool you_tran_can_wear(int eq, bool check_mutation = false);
bool enough_hp(int minimum, bool suppress_msg, bool abort_macros = true);
bool enough_mp(int minimum, bool suppress_msg, bool abort_macros = true);
bool enough_zp(int minimum, bool suppress_msg);
-bool enough_gold(int minimum, bool suppress_msg, bool abort_macros = true);
void calc_hp();
void calc_mp();
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 70bd660..3af4ac3 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -64,7 +64,6 @@
#include "options.h"
#include "ouch.h"
#include "player.h"
-#include "player-equip.h"
#include "player-stats.h"
#include "shopping.h"
#include "skills.h"
@@ -3419,7 +3418,7 @@ void lose_piety(int pgn)
if (you_worship(GOD_BEOGH))
{
- // Every piety level change also affects AC from orcish/metal gear.
+ // Every piety level change also affects AC from orcish gear.
you.redraw_armour_class = true;
}
@@ -3427,12 +3426,6 @@ void lose_piety(int pgn)
{
// Every piety level change also affects AC from metal armour.
you.redraw_armour_class = true;
- // In case Igni stops refitting your armour.
- if (old_piety >= piety_breakpoint(0)
- && you.piety < piety_breakpoint(0))
- {
- unequip_wrong_size_armour();
- }
}
if (you_worship(GOD_CHEIBRIADOS)
@@ -4042,9 +4035,6 @@ static bool _transformed_player_can_join_god(god_type which_god)
return false;
}
- if (which_god == GOD_DITHMENOS && you.form == TRAN_MAGMA)
- return true;
-
return true;
}
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index c3887b2..233690b 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -1083,7 +1083,6 @@ tree_form TRAN_TREE
%rim 0
mushroom_form TRAN_MUSHROOM
shadow_form TRAN_SHADOW
-magma_form TRAN_MAGMA
%rim 1
%sdir misc
diff --git a/crawl-ref/source/species.cc b/crawl-ref/source/species.cc
index f47135c..7d94cef 100644
--- a/crawl-ref/source/species.cc
+++ b/crawl-ref/source/species.cc
@@ -27,7 +27,7 @@ static species_type species_order[] =
SP_TENGU, SP_BASE_DRACONIAN,
SP_GARGOYLE, SP_FORMICID,
// mostly human shape but made of a strange substance
- SP_VINE_STALKER, SP_CHERUFE,
+ SP_VINE_STALKER,
// celestial species
SP_DEMIGOD, SP_DEMONSPAWN,
// undead species
@@ -65,7 +65,7 @@ static const char * Species_Abbrev_List[NUM_SPECIES] =
#if TAG_MAJOR_VERSION == 34
"Dj", "LO",
#endif
- "Gr", "Fo", "VS", "Ch",
+ "Gr", "Fo", "VS",
// placeholders
"El", "HD", "OM", "GE", "Gn", "MD",
#if TAG_MAJOR_VERSION > 34
@@ -203,7 +203,6 @@ 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_CHERUFE: res = "Cherufe"; break;
case SP_VINE_STALKER:
res = (adj ? "Vine" : genus ? "Vine" : "Vine Stalker");
@@ -411,8 +410,6 @@ monster_type player_species_to_mons_species(species_type species)
return MONS_FORMICID;
case SP_VINE_STALKER:
return MONS_VINE_STALKER;
- case SP_CHERUFE:
- return MONS_CHERUFE;
case SP_ELF:
case SP_HILL_DWARF:
case SP_MOUNTAIN_DWARF:
@@ -500,7 +497,6 @@ int species_exp_modifier(species_type species)
#if TAG_MAJOR_VERSION == 34
case SP_DJINNI:
case SP_LAVA_ORC:
- case SP_CHERUFE:
return -1;
#endif
case SP_DEMIGOD:
@@ -552,7 +548,6 @@ int species_hp_modifier(species_type species)
case SP_LAVA_ORC:
#endif
case SP_MINOTAUR:
- case SP_CHERUFE:
return 1;
case SP_DEEP_DWARF:
case SP_NAGA:
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index f760251..9eea4f5 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -726,29 +726,14 @@ bool cast_a_spell(bool check_range, spell_type spell)
return false;
}
- int mp_cost = spell_mana(spell);
- int hp_cost = 0;
-
- if (you.species == SP_CHERUFE)
- {
- mp_cost -= mp_cost / 3;
- hp_cost += (spell_mana(spell) - mp_cost) * 2;
- }
-
- if (!enough_mp(mp_cost, true))
+ const int cost = spell_mana(spell);
+ if (!enough_mp(cost, true))
{
mpr("You don't have enough magic to cast that spell.");
crawl_state.zero_turns_taken();
return false;
}
- if (!enough_hp(hp_cost, true))
- {
- mpr("You don't have enough vitality to cast that spell.");
- crawl_state.zero_turns_taken();
- return false;
- }
-
if (check_range && spell_no_hostile_in_range(spell))
{
// Abort if there are no hostiles within range, but flash the range
@@ -799,18 +784,15 @@ bool cast_a_spell(bool check_range, spell_type spell)
const bool staff_energy = player_energy();
you.last_cast_spell = spell;
+ // Silently take MP before the spell.
+ dec_mp(cost, true);
- // Silently take MP and HP before the spell.
- dec_mp(mp_cost, true);
- dec_hp(hp_cost, false);
const spret_type cast_result = your_spells(spell, 0, true);
-
if (cast_result == SPRET_ABORT)
{
crawl_state.zero_turns_taken();
- // Return the MP and HP since the spell is aborted.
- inc_mp(mp_cost, true);
- inc_hp(hp_cost);
+ // Return the MP since the spell is aborted.
+ inc_mp(cost, true);
return false;
}
@@ -833,7 +815,7 @@ bool cast_a_spell(bool check_range, spell_type spell)
|| spell == SPELL_SUBLIMATION_OF_BLOOD && you.hp == you.hp_max))
{
// These spells have replenished essence to full.
- inc_mp(mp_cost, true);
+ inc_mp(cost, true);
}
else // Redraw MP
#endif
diff --git a/crawl-ref/source/spl-other.cc b/crawl-ref/source/spl-other.cc
index 122bd1a..56f3775 100644
--- a/crawl-ref/source/spl-other.cc
+++ b/crawl-ref/source/spl-other.cc
@@ -459,9 +459,7 @@ void remove_condensation_shield()
spret_type cast_condensation_shield(int pow, bool fail)
{
- if (you.shield()
- || you.duration[DUR_FIRE_SHIELD]
- || you.form == TRAN_MAGMA)
+ if (you.shield() || you.duration[DUR_FIRE_SHIELD])
{
canned_msg(MSG_SPELL_FIZZLES);
return SPRET_ABORT;
diff --git a/crawl-ref/source/spl-selfench.cc b/crawl-ref/source/spl-selfench.cc
index 65ba8e8..9a3e129 100644
--- a/crawl-ref/source/spl-selfench.cc
+++ b/crawl-ref/source/spl-selfench.cc
@@ -84,12 +84,6 @@ spret_type ice_armour(int pow, bool fail)
return SPRET_ABORT;
}
- if (you.form == TRAN_MAGMA)
- {
- mpr("The film of ice would instantly melt.");
- return SPRET_ABORT;
- }
-
if (you.duration[DUR_FIRE_SHIELD])
{
mpr("Your ring of flames would instantly melt the ice.");
diff --git a/crawl-ref/source/status.cc b/crawl-ref/source/status.cc
index 1a25206..633c953 100644
--- a/crawl-ref/source/status.cc
+++ b/crawl-ref/source/status.cc
@@ -892,11 +892,6 @@ static void _describe_transform(status_info* inf)
inf->short_text = "shadow form";
inf->long_text = "You are a swirling mass of dark shadows.";
break;
- case TRAN_MAGMA:
- inf->light_text = "Magma",
- inf->short_text = "magma form";
- inf->long_text = "You are a fiery being of magma.";
- break;
case TRAN_NONE:
break;
}
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index 0392774..dc903ab 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -969,6 +969,8 @@ static dungeon_feature_type unmarshallFeatureType(reader &th)
x = static_cast<dungeon_feature_type>(x - 1);
}
+ if (x >= DNGN_DRY_FOUNTAIN_BLUE && x <= DNGN_DRY_FOUNTAIN_BLOOD)
+ x = DNGN_DRY_FOUNTAIN;
#endif
return x;
diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc
index 567cd89..8522261 100644
--- a/crawl-ref/source/tilepick-p.cc
+++ b/crawl-ref/source/tilepick-p.cc
@@ -477,7 +477,6 @@ tileidx_t tileidx_player()
#endif
case TRAN_FUNGUS: ch = TILEP_TRAN_MUSHROOM; break;
case TRAN_SHADOW: ch = TILEP_TRAN_SHADOW; break;
- case TRAN_MAGMA: ch = TILEP_TRAN_MAGMA; break;
case TRAN_DRAGON:
{
switch (you.species)
diff --git a/crawl-ref/source/transform.cc b/crawl-ref/source/transform.cc
index 922b1a7..35cdbec 100644
--- a/crawl-ref/source/transform.cc
+++ b/crawl-ref/source/transform.cc
@@ -12,7 +12,6 @@
#include "externs.h"
-#include "areas.h"
#include "art-enum.h"
#include "artefact.h"
#include "cloud.h"
@@ -35,8 +34,6 @@
#include "random.h"
#include "religion.h"
#include "skills2.h"
-#include "spl-other.h"
-#include "spl-selfench.h"
#include "state.h"
#include "stuff.h"
#include "terrain.h"
@@ -65,7 +62,6 @@ static const char* form_names[] =
#endif
"fungus",
"shadow",
- "magma",
};
const char* transform_name(transformation_type form)
@@ -79,7 +75,7 @@ bool form_can_wield(transformation_type form)
{
return form == TRAN_NONE || form == TRAN_STATUE || form == TRAN_LICH
|| form == TRAN_APPENDAGE || form == TRAN_TREE
- || form == TRAN_SHADOW || form == TRAN_MAGMA;
+ || form == TRAN_SHADOW;
}
bool form_can_wear(transformation_type form)
@@ -145,10 +141,9 @@ bool form_likes_lava(transformation_type form)
return you.species == SP_LAVA_ORC
&& (!form_changed_physiology(form)
|| form == TRAN_ICE_BEAST
- || form == TRAN_STATUE)
- || form == TRAN_MAGMA;
+ || form == TRAN_STATUE);
#else
- return form == TRAN_MAGMA;
+ return false;
#endif
}
@@ -193,7 +188,6 @@ bool form_can_wear_item(const item_def& item, transformation_type form)
case TRAN_NONE:
case TRAN_LICH:
case TRAN_SHADOW:
- case TRAN_MAGMA:
case TRAN_APPENDAGE: // handled as mutations
return true;
@@ -236,7 +230,6 @@ bool form_keeps_mutations(transformation_type form)
case TRAN_LICH:
case TRAN_SHADOW:
case TRAN_APPENDAGE:
- case TRAN_MAGMA:
return true;
default:
return false;
@@ -415,9 +408,6 @@ static void _unmeld_equipment(const set<equipment_type>& melded)
_unmeld_equipment_type(e);
}
-
- // In case armour size changed while transformed
- unequip_wrong_size_armour();
}
void unmeld_one_equip(equipment_type eq)
@@ -506,8 +496,6 @@ monster_type transform_mons()
return MONS_INSUBSTANTIAL_WISP;
case TRAN_SHADOW:
return MONS_PLAYER_SHADOW;
- case TRAN_MAGMA:
- return MONS_FIRE_ELEMENTAL; // XXX: needs a monster
case TRAN_BLADE_HANDS:
case TRAN_APPENDAGE:
case TRAN_NONE:
@@ -747,7 +735,6 @@ static int _transform_duration(transformation_type which_trans, int pow)
case TRAN_LICH:
case TRAN_SHADOW:
case TRAN_BAT:
- case TRAN_MAGMA:
return min(20 + random2(pow) + random2(pow), 100);
case TRAN_ICE_BEAST:
return min(30 + random2(pow) + random2(pow), 100);
@@ -839,7 +826,6 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
case TRAN_STATUE:
case TRAN_LICH:
case TRAN_SHADOW:
- case TRAN_MAGMA:
break;
default:
skip_wielding = true;
@@ -1017,11 +1003,6 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
msg += "a swirling mass of dark shadows.";
break;
- case TRAN_MAGMA:
- tran_name = "magma";
- msg += "a fiery being of magma.";
- break;
-
case TRAN_NONE:
tran_name = "null";
msg += "your old self.";
@@ -1186,31 +1167,6 @@ bool transform(int pow, transformation_type which_trans, bool involuntary,
mpr("You feel less conspicuous.");
break;
- case TRAN_MAGMA:
- if (you.duration[DUR_STONESKIN])
- {
- mprf(MSGCH_DURATION,
- "Your stone armour melts in the extreme heat.");
- you.duration[DUR_STONESKIN] = 0;
- }
-
- if (you.duration[DUR_CONDENSATION_SHIELD])
- remove_condensation_shield();
-
- if (you.duration[DUR_ICY_ARMOUR])
- remove_ice_armour();
-
- if (you.mutation[MUT_ICEMAIL])
- {
- mprf(MSGCH_DURATION,
- "Your icy envelope dissipates in the extreme heat.");
- you.duration[DUR_ICEMAIL_DEPLETED] = ICEMAIL_TIME;
- }
-
- you.redraw_armour_class = true;
- invalidate_agrid(true);
- break;
-
default:
break;
}
@@ -1413,13 +1369,6 @@ void untransform(bool skip_wielding, bool skip_move)
"losing the tree transformation");
break;
- case TRAN_MAGMA:
- mprf(MSGCH_DURATION, "You feel yourself cool down.");
- invalidate_agrid(true);
- you.attribute[ATTR_ERUPT_DAMAGE] = 0;
- you.erupt = false;
- break;
-
default:
break;
}
--
1.8.1.2
|