diff options
-rw-r--r-- | crawl-ref/source/abl-show.cc | 11 | ||||
-rw-r--r-- | crawl-ref/source/debug.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/dungeon.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 29 | ||||
-rw-r--r-- | crawl-ref/source/it_use3.cc | 6 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/monplace.cc | 3 | ||||
-rw-r--r-- | crawl-ref/source/monplace.h | 29 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/religion.cc | 44 | ||||
-rw-r--r-- | crawl-ref/source/spells2.cc | 71 | ||||
-rw-r--r-- | crawl-ref/source/spells2.h | 30 | ||||
-rw-r--r-- | crawl-ref/source/spells3.cc | 86 | ||||
-rw-r--r-- | crawl-ref/source/spells3.h | 35 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 94 | ||||
-rw-r--r-- | crawl-ref/source/xom.cc | 10 |
17 files changed, 249 insertions, 225 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc index c462265d16..3ce63a4a6b 100644 --- a/crawl-ref/source/abl-show.cc +++ b/crawl-ref/source/abl-show.cc @@ -1458,14 +1458,15 @@ static bool _do_ability(const ability_def& abil) case ABIL_KIKU_INVOKE_DEATH: summon_demon_type(MONS_REAPER, - 20 + you.skills[SK_INVOCATIONS] * 3, true); + 20 + you.skills[SK_INVOCATIONS] * 3, + GOD_KIKUBAAQUDGHA); exercise(SK_INVOCATIONS, 10 + random2(14)); break; case ABIL_YRED_ANIMATE_CORPSE: mpr("You call on the dead to walk for you..."); animate_a_corpse(you.x_pos, you.y_pos, CORPSE_BODY, BEH_FRIENDLY, - you.pet_target, true); + you.pet_target, GOD_YREDELEMNUL); exercise(SK_INVOCATIONS, 2 + random2(4)); break; @@ -1477,7 +1478,7 @@ static bool _do_ability(const ability_def& abil) case ABIL_YRED_ANIMATE_DEAD: mpr("You call on the dead to walk for you..."); animate_dead(&you, 1 + you.skills[SK_INVOCATIONS], BEH_FRIENDLY, - you.pet_target, true); + you.pet_target, GOD_YREDELEMNUL); exercise(SK_INVOCATIONS, 2 + random2(4)); break; @@ -1535,7 +1536,7 @@ static bool _do_ability(const ability_def& abil) case ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB: summon_demon_type(static_cast<monster_type>(MONS_NEQOXEC + random2(5)), - 20 + you.skills[SK_INVOCATIONS] * 3, true); + 20 + you.skills[SK_INVOCATIONS] * 3, GOD_MAKHLEB); exercise(SK_INVOCATIONS, 2 + random2(3)); break; @@ -1594,7 +1595,7 @@ static bool _do_ability(const ability_def& abil) case ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB: summon_demon_type(static_cast<monster_type>(MONS_EXECUTIONER + random2(5)), - 20 + you.skills[SK_INVOCATIONS] * 3, true); + 20 + you.skills[SK_INVOCATIONS] * 3, GOD_MAKHLEB); exercise(SK_INVOCATIONS, 6 + random2(6)); break; diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc index ce2e5f254a..29bba0cff6 100644 --- a/crawl-ref/source/debug.cc +++ b/crawl-ref/source/debug.cc @@ -1698,7 +1698,7 @@ void stethoscope(int mwh) const habitat_type hab = mons_habitat( &menv[i] ); mprf(MSGCH_DIAGNOSTICS, - "hab=%s beh=%s(%d) foe=%s(%d) mem=%d target=(%d,%d)", + "hab=%s beh=%s(%d) foe=%s(%d) mem=%d target=(%d,%d) god=%s", ((hab == HT_WATER) ? "water" : (hab == HT_LAVA) ? "lava" : (hab == HT_ROCK) ? "rock" : @@ -1717,7 +1717,8 @@ void stethoscope(int mwh) : menv[menv[i].foe].name(DESC_PLAIN, true).c_str()), menv[i].foe, menv[i].foe_memory, - menv[i].target_x, menv[i].target_y ); + menv[i].target_x, menv[i].target_y, + god_name(menv[i].god).c_str() ); // print resistances mprf(MSGCH_DIAGNOSTICS, "resist: fire=%d cold=%d elec=%d pois=%d neg=%d", diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index 0fb14bb8e6..53af68600b 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -2870,7 +2870,7 @@ static int _place_uniques(int level_number, char level_type) mgen_data mg( which_unique, BEH_SLEEP, 0, coord_def(), MHITNOT, MG_PERMIT_BANDS, - MONS_PROGRAM_BUG, 0, BLACK, + GOD_NO_GOD, MONS_PROGRAM_BUG, 0, BLACK, level_number, PROX_ANYWHERE ); mg.map_mask = MMT_NO_MONS; diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 6dc9dca27e..09e084eb4b 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -1898,27 +1898,26 @@ enum mon_flight_type enum monster_flag_type { MF_CREATED_FRIENDLY = 0x01, // no benefit from killing - MF_GOD_GIFT = 0x02, // player not penalized by its death - MF_BATTY = 0x04, // flutters like a bat - MF_JUST_SUMMONED = 0x08, // monster skips next available action - MF_TAKING_STAIRS = 0x10, // is following player through stairs + MF_BATTY = 0x02, // flutters like a bat + MF_JUST_SUMMONED = 0x04, // monster skips next available action + MF_TAKING_STAIRS = 0x08, // is following player through stairs - MF_INTERESTING = 0x20, // Player finds monster interesting - MF_SEEN = 0x40, // Player already seen monster - MF_DIVINE_PROTECTION = 0x80, // Monster has divine protection. + MF_INTERESTING = 0x10, // Player finds monster interesting + MF_SEEN = 0x20, // Player already seen monster + MF_DIVINE_PROTECTION = 0x40, // Monster has divine protection. - MF_KNOWN_MIMIC = 0x100, // Mimic that has taken a swing at the PC, + MF_KNOWN_MIMIC = 0x80, // Mimic that has taken a swing at the PC, // or that the player has inspected with ? - MF_BANISHED = 0x200, // Monster that has been banished. - MF_HARD_RESET = 0x400, // Summoned, should not drop gear on reset - MF_WAS_NEUTRAL = 0x800, // mirror to CREATED_FRIENDLY for neutrals - MF_ATT_CHANGE_ATTEMPT = 0x1000, // Saw player and attitude changed (or + MF_BANISHED = 0x100, // Monster that has been banished. + MF_HARD_RESET = 0x200, // Summoned, should not drop gear on reset + MF_WAS_NEUTRAL = 0x400, // mirror to CREATED_FRIENDLY for neutrals + MF_ATT_CHANGE_ATTEMPT = 0x800, // Saw player and attitude changed (or // not); currently used for holy beings // (good god worshippers -> neutral) // and orcs (Beogh worshippers -> friendly) - MF_WAS_IN_VIEW = 0x2000, // Was in view during previous turn - MF_BAND_MEMBER = 0x4000, // Created as a member of a band - MF_GOT_HALF_XP = 0x8000 // Player already got half xp value earlier + MF_WAS_IN_VIEW = 0x1000, // Was in view during previous turn + MF_BAND_MEMBER = 0x2000, // Created as a member of a band + MF_GOT_HALF_XP = 0x4000 // Player already got half xp value earlier }; // Adding slots breaks saves. YHBW. diff --git a/crawl-ref/source/it_use3.cc b/crawl-ref/source/it_use3.cc index 5f257fb335..f7fc48e9cb 100644 --- a/crawl-ref/source/it_use3.cc +++ b/crawl-ref/source/it_use3.cc @@ -621,7 +621,7 @@ bool evoke_wielded() canned_msg(MSG_NOTHING_HAPPENS); else { - cast_summon_elemental(100, false, MONS_AIR_ELEMENTAL, 4); + cast_summon_elemental(100, GOD_NO_GOD, MONS_AIR_ELEMENTAL, 4); pract = (one_chance_in(5) ? 1 : 0); } break; @@ -631,7 +631,7 @@ bool evoke_wielded() canned_msg(MSG_NOTHING_HAPPENS); else { - cast_summon_elemental(100, false, MONS_FIRE_ELEMENTAL, 4); + cast_summon_elemental(100, GOD_NO_GOD, MONS_FIRE_ELEMENTAL, 4); pract = (one_chance_in(5) ? 1 : 0); } break; @@ -641,7 +641,7 @@ bool evoke_wielded() canned_msg(MSG_NOTHING_HAPPENS); else { - cast_summon_elemental(100, false, MONS_EARTH_ELEMENTAL, 4); + cast_summon_elemental(100, GOD_NO_GOD, MONS_EARTH_ELEMENTAL, 4); pract = (one_chance_in(5) ? 1 : 0); } break; diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index 9d87f166eb..7d780b0c54 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -490,6 +490,11 @@ bool mons_is_native_in_branch(const monsters *monster, } } +bool mons_is_god_gift(const monsters *mon) +{ + return (mon->god != GOD_NO_GOD); +} + bool mons_is_icy(const monsters *mon) { return (mons_is_icy(mon->type)); @@ -5133,10 +5138,10 @@ void monsters::remove_enchantment_effect(const mon_enchant &me, bool quiet) add_ench(mon_enchant(ENCH_ABJ)); // Just for flavour. - if (testbits(this->flags, MF_GOD_GIFT) && this->has_ench(ENCH_BERSERK)) + if (mons_is_god_gift(this) && this->has_ench(ENCH_BERSERK)) simple_monster_message(this, " is no longer berserk."); - monster_die( this, quiet? KILL_DISMISSED : KILL_RESET, 0 ); + monster_die( this, quiet ? KILL_DISMISSED : KILL_RESET, 0 ); break; case ENCH_SUBMERGED: diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index b5bc41741b..24b978b3a1 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -638,6 +638,7 @@ mon_attitude_type mons_attitude(const monsters *m); bool mons_behaviour_perceptible(const monsters *mon); bool mons_is_native_in_branch(const monsters *monster, const branch_type branch); +bool mons_is_god_gift(const monsters *mon); bool mons_is_confused(const monsters *m); bool mons_is_caught(const monsters *m); bool mons_is_fleeing(const monsters *m); diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc index b007d5374b..3b0c2bab3c 100644 --- a/crawl-ref/source/monplace.cc +++ b/crawl-ref/source/monplace.cc @@ -1874,8 +1874,7 @@ int mons_place( mgen_data mg ) monsters *creation = &menv[mid]; - if (mg.flags & MG_GOD_GIFT) - creation->flags |= MF_GOD_GIFT; + creation->god = mg.god; // Look at special cases: CHARMED, FRIENDLY, NEUTRAL, GOOD_NEUTRAL, // HOSTILE. diff --git a/crawl-ref/source/monplace.h b/crawl-ref/source/monplace.h index ddc2d01458..9a8cbbf33d 100644 --- a/crawl-ref/source/monplace.h +++ b/crawl-ref/source/monplace.h @@ -101,12 +101,11 @@ enum proximity_type // proximity to player to create monster enum mgen_flag_type { - MG_GOD_GIFT = 0x01, - MG_PERMIT_BANDS = 0x02, - MG_FORCE_PLACE = 0x04, - MG_FORCE_BEH = 0x08, - MG_PLAYER_MADE = 0x10, - MG_PATROLLING = 0x20 + MG_PERMIT_BANDS = 0x01, + MG_FORCE_PLACE = 0x02, + MG_FORCE_BEH = 0x04, + MG_PLAYER_MADE = 0x08, + MG_PATROLLING = 0x10 }; // A structure with all the data needed to whip up a new monster. @@ -144,11 +143,16 @@ struct mgen_data // Generation flags from mgen_flag_type. unsigned flags; + // What god the monster worships, if any. This is currently only + // used for monsters that are god gifts, to indicate which god sent + // them. + god_type god; + // The number of hydra heads or manticore attack volleys. Note: // in older version this field was used for both this and for base_type. int number; - // The colour of the monster + // The colour of the monster. int colour; // A measure of how powerful the generated monster should be (for @@ -179,6 +183,7 @@ struct mgen_data const coord_def &p = coord_def(-1, -1), unsigned short mfoe = MHITNOT, unsigned monflags = 0, + god_type which_god = GOD_NO_GOD, monster_type base = MONS_PROGRAM_BUG, int monnumber = 0, int moncolour = BLACK, @@ -188,8 +193,8 @@ struct mgen_data : cls(mt), base_type(base), behaviour(beh), abjuration_duration(abj), pos(p), foe(mfoe), flags(monflags), - number(monnumber), colour(moncolour), power(monpower), - proximity(prox), level_type(ltype), map_mask(0) + god(which_god), number(monnumber), colour(moncolour), + power(monpower), proximity(prox), level_type(ltype), map_mask(0) { } @@ -219,9 +224,11 @@ struct mgen_data static mgen_data alert_hostile_at(monster_type what, const coord_def &where, int abj_deg = 0, - unsigned flags = 0) + unsigned flags = 0, + god_type god = GOD_NO_GOD) { - return mgen_data(what, BEH_HOSTILE, abj_deg, where, MHITYOU, flags); + return mgen_data(what, BEH_HOSTILE, abj_deg, where, MHITYOU, flags, + god); } }; diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index d6a0f29e54..7f8506f0a6 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -1003,14 +1003,13 @@ void monster_die(monsters *monster, killer_type killer, int i, bool silent) && mons_weight(mons_species(monster->type))) { const monster_type spectre = mons_species(monster->type); - const bool god_gift = you.attribute[ATTR_DIVINE_DEATH_CHANNEL]; // Don't allow 0-headed hydras to become spectral hydras. if ((spectre != MONS_HYDRA || monster->number != 0) && create_monster( mgen_data( MONS_SPECTRAL_THING, BEH_FRIENDLY, 0, monster->pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0, + 0, static_cast<god_type>(you.attribute[ATTR_DIVINE_DEATH_CHANNEL]), spectre, monster->number )) != -1) { if (death_message) @@ -1032,7 +1031,7 @@ void monster_die(monsters *monster, killer_type killer, int i, bool silent) } // No piety loss if god gifts killed by other monsters. - if (mons_friendly(monster) && !testbits(monster->flags, MF_GOD_GIFT)) + if (mons_friendly(monster) && !mons_is_god_gift(monster)) { did_god_conduct(DID_FRIEND_DIED, 1 + (monster->hit_dice / 2), true, monster); @@ -1076,7 +1075,7 @@ void monster_die(monsters *monster, killer_type killer, int i, bool silent) else if (you.religion == GOD_VEHUMET || you.religion == GOD_MAKHLEB || you.religion == GOD_SHINING_ONE - || !anon && testbits(menv[i].flags, MF_GOD_GIFT)) + || !anon && mons_is_god_gift(&menv[i])) { // Yes, we are splitting undead pets from the others // as a way to focus Necromancy vs Summoning (ignoring @@ -5130,7 +5129,7 @@ static bool _handle_spell( monsters *monster, bolt & beem ) // Try to animate dead: if nothing rises, pretend we didn't cast it. if (spell_cast == SPELL_ANIMATE_DEAD && !animate_dead(monster, 100, SAME_ATTITUDE(monster), - monster->foe, false, false)) + monster->foe, GOD_NO_GOD, false)) { return (false); } diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index acb6b3ae94..7a362bbf0c 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -829,8 +829,7 @@ bool is_good_follower(const monsters* mon) bool is_orcish_follower(const monsters* mon) { return (mon->alive() && mons_species(mon->type) == MONS_ORC - && mon->attitude == ATT_FRIENDLY - && testbits(mon->flags, MF_GOD_GIFT)); + && mon->attitude == ATT_FRIENDLY && mons_is_god_gift(mon)); } bool is_follower(const monsters* mon) @@ -1063,7 +1062,7 @@ static bool _tso_blessing_friendliness(monsters* mon) // become hostile later on, it won't count as a good kill. mon->flags |= MF_CREATED_FRIENDLY; - mon->flags |= MF_GOD_GIFT; + mon->god = GOD_SHINING_ONE; // If the monster is charmed, make it permanently friendly. Note // that we have to delete the enchantment without removing the @@ -1108,7 +1107,7 @@ static bool _beogh_blessing_reinforcement() int monster = create_monster( mgen_data(follower_type, BEH_FRIENDLY, 0, - you.pos(), you.pet_target, MG_GOD_GIFT)); + you.pos(), you.pet_target, 0, GOD_BEOGH)); if (monster != -1) { @@ -1543,7 +1542,7 @@ static void _do_god_gift(bool prayed_for) if (create_monster( mgen_data(mon, BEH_FRIENDLY, 0, you.pos(), you.pet_target, - MG_GOD_GIFT)) != -1) + 0, GOD_YREDELEMNUL)) != -1) { simple_god_message(" grants you an undead servant!"); more(); @@ -3027,7 +3026,7 @@ static bool _tso_retribution() { if (create_monster( mgen_data::alert_hostile_at(MONS_DAEVA, - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_SHINING_ONE)) != -1) { success = true; } @@ -3128,7 +3127,7 @@ static bool _zin_retribution() { if (create_monster( mgen_data::alert_hostile_at(MONS_ANGEL, - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_ZIN)) != -1) { success = true; } @@ -3143,7 +3142,7 @@ static bool _zin_retribution() else { bool success = cast_summon_swarm(you.experience_level * 20, - true, true); + GOD_ZIN, true); simple_god_message(success ? " sends a plague down upon you!" : "'s plague fails to arrive.", @@ -3292,7 +3291,7 @@ static bool _makhleb_retribution() mgen_data::alert_hostile_at( static_cast<monster_type>( MONS_EXECUTIONER + random2(5)), - you.pos(), 0, MG_GOD_GIFT)) != -1); + you.pos(), 0, 0, GOD_MAKHLEB)) != -1); simple_god_message(success ? " sends a greater servant after you!" : @@ -3310,7 +3309,7 @@ static bool _makhleb_retribution() mgen_data::alert_hostile_at( static_cast<monster_type>( MONS_NEQOXEC + random2(5)), - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_MAKHLEB)) != -1) { count++; } @@ -3338,7 +3337,7 @@ static bool _kikubaaqudgha_retribution() { if (create_monster( mgen_data::alert_hostile_at(MONS_REAPER, - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_KIKUBAAQUDGHA)) != -1) { success = true; } @@ -3377,7 +3376,7 @@ static bool _yredelemnul_retribution() if (create_monster( mgen_data::alert_hostile_at(punisher, - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_YREDELEMNUL)) != -1) { count++; } @@ -3426,7 +3425,7 @@ static bool _trog_retribution() points -= cost; - if (summon_berserker(cost * 20, true, true)) + if (summon_berserker(cost * 20, GOD_TROG, true)) count++; } } @@ -3542,7 +3541,7 @@ static bool _beogh_retribution() int mons = create_monster( mgen_data::alert_hostile_at(MONS_DANCING_WEAPON, - you.pos(), 0, MG_GOD_GIFT)); + you.pos(), 0, 0, GOD_BEOGH)); // Hand item information over to monster. if (mons != -1) @@ -3597,7 +3596,7 @@ static bool _beogh_retribution() int mons = create_monster( mgen_data::alert_hostile_at(punisher, - you.pos(), 0, MG_GOD_GIFT | MG_PERMIT_BANDS)); + you.pos(), 0, MG_PERMIT_BANDS, GOD_BEOGH)); // sometimes name band leader if (mons != -1 && one_chance_in(3)) @@ -3627,7 +3626,7 @@ static bool _okawaru_retribution() if (create_monster( mgen_data::alert_hostile_at(punisher, - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_OKAWARU)) != -1) { success = true; } @@ -3720,7 +3719,7 @@ static bool _lugonu_retribution() mgen_data::alert_hostile_at( static_cast<monster_type>( MONS_GREEN_DEATH + random2(3)), - you.pos(), 0, MG_GOD_GIFT)) != -1); + you.pos(), 0, 0, GOD_LUGONU)) != -1); simple_god_message(success ? " sends a demon after you!" : @@ -3738,7 +3737,7 @@ static bool _lugonu_retribution() mgen_data::alert_hostile_at( static_cast<monster_type>( MONS_NEQOXEC + random2(5)), - you.pos(), 0, MG_GOD_GIFT)) != -1) + you.pos(), 0, 0, GOD_LUGONU)) != -1) { success = true; } @@ -3993,7 +3992,7 @@ static bool _make_god_gifts_on_level_disappear(bool seen = false) if (monster->type != -1 && monster->attitude == ATT_FRIENDLY && monster->has_ench(ENCH_ABJ) - && testbits(monster->flags, MF_GOD_GIFT)) + && mons_is_god_gift(monster)) { if (!seen || simple_monster_message(monster, " abandons you!")) count++; @@ -4034,7 +4033,7 @@ static bool _make_holy_god_gifts_on_level_good_neutral(bool seen = false) if (monster->type != -1 && mons_is_holy(monster) && monster->attitude == ATT_FRIENDLY - && testbits(monster->flags, MF_GOD_GIFT)) + && mons_is_god_gift(monster)) { // monster changes attitude monster->attitude = ATT_GOOD_NEUTRAL; @@ -4074,7 +4073,7 @@ static bool _make_god_gifts_on_level_hostile(bool seen = false) monsters *monster = &menv[i]; if (monster->type != -1 && monster->attitude == ATT_FRIENDLY - && testbits(monster->flags, MF_GOD_GIFT)) + && mons_is_god_gift(monster)) { // monster changes attitude and behaviour monster->attitude = ATT_HOSTILE; @@ -4363,7 +4362,8 @@ void beogh_convert_orc(monsters *orc, bool emergency, // The monster is not really *created* friendly, but should it // become hostile later on, it won't count as a good kill. orc->flags |= MF_CREATED_FRIENDLY; - orc->flags |= MF_GOD_GIFT; + + orc->god = GOD_BEOGH; if (orc->is_patrolling()) { diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc index 0a54720815..19a89f2919 100644 --- a/crawl-ref/source/spells2.cc +++ b/crawl-ref/source/spells2.cc @@ -1025,7 +1025,7 @@ bool summon_animals(int pow) return (success); } -bool cast_summon_butterflies(int pow, bool god_gift) +bool cast_summon_butterflies(int pow, god_type god) { bool success = false; @@ -1036,7 +1036,7 @@ bool cast_summon_butterflies(int pow, bool god_gift) if (create_monster( mgen_data(MONS_BUTTERFLY, BEH_FRIENDLY, 3, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; } @@ -1049,7 +1049,7 @@ bool cast_summon_butterflies(int pow, bool god_gift) } //jmf: beefed up higher-level casting of this (formerly lame) spell -bool cast_summon_small_mammals(int pow, bool god_gift) +bool cast_summon_small_mammals(int pow, god_type god) { bool success = false; @@ -1095,7 +1095,7 @@ bool cast_summon_small_mammals(int pow, bool god_gift) if (create_monster( mgen_data(mon, BEH_FRIENDLY, 3, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; } @@ -1104,7 +1104,7 @@ bool cast_summon_small_mammals(int pow, bool god_gift) return (success); } -bool cast_sticks_to_snakes(int pow, bool god_gift) +bool cast_sticks_to_snakes(int pow, god_type god) { const int wpn = you.equip[EQ_WEAPON]; @@ -1158,7 +1158,7 @@ bool cast_sticks_to_snakes(int pow, bool god_gift) if (create_monster( mgen_data(mon, beha, dur, you.pos(), hitting, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { count++; } @@ -1205,7 +1205,7 @@ bool cast_sticks_to_snakes(int pow, bool god_gift) if (create_monster( mgen_data(mon, beha, dur, you.pos(), hitting, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { count++; } @@ -1229,7 +1229,7 @@ bool cast_sticks_to_snakes(int pow, bool god_gift) return (false); } -bool cast_summon_scorpions(int pow, bool god_gift) +bool cast_summon_scorpions(int pow, god_type god) { bool success = false; @@ -1245,7 +1245,7 @@ bool cast_summon_scorpions(int pow, bool god_gift) friendly ? BEH_FRIENDLY : BEH_HOSTILE, 3, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; } @@ -1259,7 +1259,7 @@ bool cast_summon_scorpions(int pow, bool god_gift) // Creates a mixed swarm of typical swarming animals. // Number, duration and friendlinesss depend on spell power. -bool cast_summon_swarm(int pow, bool god_gift, bool force_hostile) +bool cast_summon_swarm(int pow, god_type god, bool force_hostile) { bool success = false; @@ -1327,7 +1327,7 @@ bool cast_summon_swarm(int pow, bool god_gift, bool force_hostile) friendly ? BEH_FRIENDLY : BEH_HOSTILE, dur, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; } @@ -1339,7 +1339,7 @@ bool cast_summon_swarm(int pow, bool god_gift, bool force_hostile) return (success); } -bool cast_call_canine_familiar(int pow, bool god_gift) +bool cast_call_canine_familiar(int pow, god_type god) { bool success = false; @@ -1386,7 +1386,7 @@ bool cast_call_canine_familiar(int pow, bool god_gift) friendly ? BEH_FRIENDLY : BEH_HOSTILE, dur, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; @@ -1405,7 +1405,7 @@ bool cast_call_canine_familiar(int pow, bool god_gift) // postal on the caster (after taking into account // chance of that happening to unskilled casters // anyway). -bool cast_summon_elemental(int pow, bool god_gift, +bool cast_summon_elemental(int pow, god_type god, monster_type restricted_type, int unfriendly) { @@ -1419,6 +1419,7 @@ bool cast_summon_elemental(int pow, bool god_gift, int targ_y; const int dur = std::min(2 + (random2(pow) / 5), 6); + const bool any_elemental = (restricted_type == MONS_PROGRAM_BUG); while (true) @@ -1533,7 +1534,7 @@ bool cast_summon_elemental(int pow, bool god_gift, friendly ? BEH_FRIENDLY : BEH_HOSTILE, dur, coord_def(targ_x, targ_y), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { canned_msg(MSG_NOTHING_HAPPENS); return (false); @@ -1547,7 +1548,7 @@ bool cast_summon_elemental(int pow, bool god_gift, return (true); } -bool cast_summon_ice_beast(int pow, bool god_gift) +bool cast_summon_ice_beast(int pow, god_type god) { bool success = false; @@ -1558,7 +1559,7 @@ bool cast_summon_ice_beast(int pow, bool god_gift) if (create_monster( mgen_data(mon, BEH_FRIENDLY, dur, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; @@ -1570,7 +1571,7 @@ bool cast_summon_ice_beast(int pow, bool god_gift) return (success); } -bool cast_summon_ugly_thing(int pow, bool god_gift) +bool cast_summon_ugly_thing(int pow, god_type god) { bool success = false; @@ -1587,7 +1588,7 @@ bool cast_summon_ugly_thing(int pow, bool god_gift) friendly ? BEH_FRIENDLY : BEH_HOSTILE, dur, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; @@ -1603,7 +1604,7 @@ bool cast_summon_ugly_thing(int pow, bool god_gift) return (success); } -bool cast_summon_dragon(int pow, bool god_gift) +bool cast_summon_dragon(int pow, god_type god) { // Removed the chance of multiple dragons... one should be more // than enough, and if it isn't, the player can cast again... @@ -1619,7 +1620,7 @@ bool cast_summon_dragon(int pow, bool god_gift) friendly ? BEH_FRIENDLY : BEH_HOSTILE, 3, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { success = true; @@ -1635,7 +1636,7 @@ bool cast_summon_dragon(int pow, bool god_gift) } // Trog sends a fighting buddy (or enemy) for a follower. -bool summon_berserker(int pow, bool god_gift, bool force_hostile) +bool summon_berserker(int pow, god_type god, bool force_hostile) { bool success = false; @@ -1689,7 +1690,7 @@ bool summon_berserker(int pow, bool god_gift, bool force_hostile) !force_hostile ? BEH_FRIENDLY : BEH_HOSTILE, dur, you.pos(), !force_hostile ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)); + 0, god)); if (monster != -1) { @@ -1713,7 +1714,7 @@ bool summon_berserker(int pow, bool god_gift, bool force_hostile) return (success); } -static bool _summon_holy_being_wrapper(int pow, bool god_gift, +static bool _summon_holy_being_wrapper(int pow, god_type god, monster_type mon, bool quiet) { bool success = false; @@ -1722,9 +1723,9 @@ static bool _summon_holy_being_wrapper(int pow, bool god_gift, const int monster = create_monster( - mgen_data(mon, BEH_FRIENDLY, dur, you.pos(), - you.pet_target, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH)); + mgen_data(mon, BEH_FRIENDLY, dur, + you.pos(), you.pet_target, + MG_FORCE_BEH, god)); if (monster != -1) { @@ -1747,18 +1748,18 @@ static bool _summon_holy_being_wrapper(int pow, bool god_gift, } // Zin sends an angel for a follower. -bool summon_guardian(int pow, bool god_gift, bool quiet) +bool summon_guardian(int pow, god_type god, bool quiet) { - return _summon_holy_being_wrapper(pow, god_gift, MONS_ANGEL, quiet); + return _summon_holy_being_wrapper(pow, god, MONS_ANGEL, quiet); } // TSO sends a daeva for a follower. -bool summon_daeva(int pow, bool god_gift, bool quiet) +bool summon_daeva(int pow, god_type god, bool quiet) { - return _summon_holy_being_wrapper(pow, god_gift, MONS_DAEVA, quiet); + return _summon_holy_being_wrapper(pow, god, MONS_DAEVA, quiet); } -bool cast_tukimas_dance(int pow, bool god_gift, +bool cast_tukimas_dance(int pow, god_type god, bool force_hostile, bool quiet_failure) { bool success = true; @@ -1795,7 +1796,7 @@ bool cast_tukimas_dance(int pow, bool god_gift, friendly ? BEH_FRIENDLY : BEH_HOSTILE, dur, you.pos(), friendly ? you.pet_target : MHITYOU, - god_gift ? MG_GOD_GIFT : 0)); + 0, god)); if (monster == -1) success = false; @@ -1842,7 +1843,7 @@ bool cast_tukimas_dance(int pow, bool god_gift, return (true); } -bool cast_conjure_ball_lightning(int pow, bool god_gift) +bool cast_conjure_ball_lightning(int pow, god_type god) { bool success = false; @@ -1874,7 +1875,7 @@ bool cast_conjure_ball_lightning(int pow, bool god_gift) mons_place( mgen_data(MONS_BALL_LIGHTNING, BEH_FRIENDLY, 0, coord_def(tx, ty), MHITNOT, - god_gift ? MG_GOD_GIFT : 0)); + 0, god)); if (monster != -1) { diff --git a/crawl-ref/source/spells2.h b/crawl-ref/source/spells2.h index 12db20b0bc..8cd5b9cfb9 100644 --- a/crawl-ref/source/spells2.h +++ b/crawl-ref/source/spells2.h @@ -108,29 +108,29 @@ bool summon_animals(int pow); /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -bool cast_summon_butterflies(int pow, bool god_gift = false); -bool cast_summon_small_mammals(int pow, bool god_gift = false); -bool cast_sticks_to_snakes(int pow, bool god_gift = false); -bool cast_summon_scorpions(int pow, bool god_gift = false); +bool cast_summon_butterflies(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_small_mammals(int pow, god_type god = GOD_NO_GOD); +bool cast_sticks_to_snakes(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_scorpions(int pow, god_type god = GOD_NO_GOD); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: ability - religion - spell * *********************************************************************** */ -bool cast_summon_swarm(int pow, bool god_gift = false, +bool cast_summon_swarm(int pow, god_type god = GOD_NO_GOD, bool force_hostile = false); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -bool cast_call_canine_familiar(int pow, bool god_gift = false); +bool cast_call_canine_familiar(int pow, god_type god = GOD_NO_GOD); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: it_use3 - spell * *********************************************************************** */ -bool cast_summon_elemental(int pow, bool god_gift = false, +bool cast_summon_elemental(int pow, god_type god = GOD_NO_GOD, monster_type restricted_type = MONS_PROGRAM_BUG, int unfriendly = 2); @@ -138,31 +138,31 @@ bool cast_summon_elemental(int pow, bool god_gift = false, /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -bool cast_summon_ice_beast(int pow, bool god_gift = false); -bool cast_summon_ugly_thing(int pow, bool god_gift = false); -bool cast_summon_dragon(int pow, bool god_gift = false); +bool cast_summon_ice_beast(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_ugly_thing(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_dragon(int pow, god_type god = GOD_NO_GOD); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -bool summon_berserker(int pow, bool god_gift = false, +bool summon_berserker(int pow, god_type god = GOD_NO_GOD, bool force_hostile = false); -bool summon_guardian(int pow, bool god_gift = false, bool quiet = false); -bool summon_daeva(int pow, bool god_gift = false, bool quiet = false); +bool summon_guardian(int pow, god_type god = GOD_NO_GOD, bool quiet = false); +bool summon_daeva(int pow, god_type god = GOD_NO_GOD, bool quiet = false); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: ability - religion - spell * *********************************************************************** */ -bool cast_tukimas_dance(int pow, bool god_gift = false, +bool cast_tukimas_dance(int pow, god_type god = GOD_NO_GOD, bool force_hostile = false, bool quiet_failure = false); // last updated 24may2000 {dlb} /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -bool cast_conjure_ball_lightning(int pow, bool god_gift = false); +bool cast_conjure_ball_lightning(int pow, god_type god = GOD_NO_GOD); // last updated 24may2000 {dlb} /* *********************************************************************** diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index 130d46ff3a..57750b8e1c 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -413,7 +413,7 @@ bool cast_sublimation_of_blood(int pow) return (success); } -bool cast_call_imp(int pow, bool god_gift) +bool cast_call_imp(int pow, god_type god) { bool success = false; @@ -427,7 +427,7 @@ bool cast_call_imp(int pow, bool god_gift) create_monster( mgen_data(mon, BEH_FRIENDLY, dur, you.pos(), you.pet_target, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH)); + MG_FORCE_BEH, god)); if (monster != -1) { @@ -445,7 +445,7 @@ bool cast_call_imp(int pow, bool god_gift) return (success); } -static bool _summon_demon_wrapper(int pow, bool god_gift, monster_type mon, +static bool _summon_demon_wrapper(int pow, god_type god, monster_type mon, int dur, bool friendly, bool charmed, bool quiet) { @@ -458,7 +458,7 @@ static bool _summon_demon_wrapper(int pow, bool god_gift, monster_type mon, charmed ? BEH_CHARMED : BEH_HOSTILE, dur, you.pos(), friendly ? you.pet_target : MHITYOU, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH)); + MG_FORCE_BEH, god)); if (monster != -1) { @@ -476,50 +476,52 @@ static bool _summon_demon_wrapper(int pow, bool god_gift, monster_type mon, return (success); } -static bool _summon_demon_wrapper(int pow, bool god_gift, demon_class_type dct, +static bool _summon_demon_wrapper(int pow, god_type god, demon_class_type dct, int dur, bool friendly, bool charmed, bool quiet) { monster_type mon = summon_any_demon(dct); - return _summon_demon_wrapper(pow, god_gift, mon, dur, friendly, charmed, - quiet); + return _summon_demon_wrapper(pow, god, mon, dur, friendly, charmed, quiet); } -bool summon_lesser_demon(int pow, bool god_gift, bool quiet) +bool summon_lesser_demon(int pow, god_type god, + bool quiet) { - return _summon_demon_wrapper(pow, god_gift, DEMON_LESSER, + return _summon_demon_wrapper(pow, god, DEMON_LESSER, std::min(2 + (random2(pow) / 4), 6), random2(pow) > 3, false, quiet); } -bool summon_common_demon(int pow, bool god_gift, bool quiet) +bool summon_common_demon(int pow, god_type god, + bool quiet) { - return _summon_demon_wrapper(pow, god_gift, DEMON_COMMON, + return _summon_demon_wrapper(pow, god, DEMON_COMMON, std::min(2 + (random2(pow) / 4), 6), random2(pow) > 3, false, quiet); } -bool summon_greater_demon(int pow, bool god_gift, bool quiet) +bool summon_greater_demon(int pow, god_type god, + bool quiet) { - return _summon_demon_wrapper(pow, god_gift, DEMON_GREATER, + return _summon_demon_wrapper(pow, god, DEMON_GREATER, 5, false, random2(pow) > 5, quiet); } // Makhleb or Kikubaaqudgha sends a demonic buddy (or enemy) for a // follower. -bool summon_demon_type(monster_type mon, int pow, bool god_gift) +bool summon_demon_type(monster_type mon, int pow, god_type god) { - return _summon_demon_wrapper(pow, god_gift, mon, + return _summon_demon_wrapper(pow, god, mon, std::min(2 + (random2(pow) / 4), 6), false, random2(pow) > 3, false); } -bool cast_summon_demon(int pow, bool god_gift) +bool cast_summon_demon(int pow, god_type god) { mpr("You open a gate to Pandemonium!"); - bool success = summon_common_demon(pow, god_gift); + bool success = summon_common_demon(pow, god); if (!success) canned_msg(MSG_NOTHING_HAPPENS); @@ -527,7 +529,7 @@ bool cast_summon_demon(int pow, bool god_gift) return (success); } -bool cast_demonic_horde(int pow, bool god_gift) +bool cast_demonic_horde(int pow, god_type god) { bool success = false; @@ -537,7 +539,7 @@ bool cast_demonic_horde(int pow, bool god_gift) for (int i = 0; i < how_many; ++i) { - if (summon_lesser_demon(pow, god_gift, true)) + if (summon_lesser_demon(pow, god, true)) success = true; } @@ -547,11 +549,11 @@ bool cast_demonic_horde(int pow, bool god_gift) return (success); } -bool cast_summon_greater_demon(int pow, bool god_gift) +bool cast_summon_greater_demon(int pow, god_type god) { mpr("You open a gate to Pandemonium!"); - bool success = summon_greater_demon(pow, god_gift); + bool success = summon_greater_demon(pow, god); if (!success) canned_msg(MSG_NOTHING_HAPPENS); @@ -559,7 +561,7 @@ bool cast_summon_greater_demon(int pow, bool god_gift) return (success); } -bool cast_shadow_creatures(bool god_gift) +bool cast_shadow_creatures(god_type god) { bool success = false; @@ -569,7 +571,7 @@ bool cast_shadow_creatures(bool god_gift) create_monster( mgen_data(RANDOM_MONSTER, BEH_FRIENDLY, 2, you.pos(), you.pet_target, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH)); + MG_FORCE_BEH, god)); if (monster != -1) { @@ -583,7 +585,7 @@ bool cast_shadow_creatures(bool god_gift) return (success); } -bool cast_summon_horrible_things(int pow, bool god_gift) +bool cast_summon_horrible_things(int pow, god_type god) { if (one_chance_in(3) && !lose_stat(STAT_INTELLIGENCE, 1, true, "summoning horrible things")) @@ -615,7 +617,7 @@ bool cast_summon_horrible_things(int pow, bool god_gift) if (create_monster( mgen_data(MONS_TENTACLED_MONSTROSITY, BEH_FRIENDLY, 6, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { count++; } @@ -628,7 +630,7 @@ bool cast_summon_horrible_things(int pow, bool god_gift) if (create_monster( mgen_data(MONS_ABOMINATION_LARGE, BEH_FRIENDLY, 6, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0)) != -1) + 0, god)) != -1) { count++; } @@ -804,7 +806,7 @@ static void _equip_undead(int x, int y, int corps, int monster, int monnum) } static bool _raise_corpse(int x, int y, int corps, beh_type beha, - unsigned short hitting, bool god_gift, bool actual) + unsigned short hitting, god_type god, bool actual) { const item_def& item = mitm[corps]; @@ -840,7 +842,7 @@ static bool _raise_corpse(int x, int y, int corps, beh_type beha, const int monster = create_monster( mgen_data(mon, beha, 0, coord_def(x, y), hitting, - god_gift ? MG_GOD_GIFT : 0, + 0, god, zombie_type, number)); if (monster != -1) @@ -869,7 +871,7 @@ static bool _raise_corpse(int x, int y, int corps, beh_type beha, bool animate_a_corpse(int x, int y, corpse_type class_allowed, beh_type beha, unsigned short hitting, - bool god_gift, bool actual, + god_type god, bool actual, bool quiet) { bool success = false; @@ -887,8 +889,7 @@ bool animate_a_corpse(int x, int y, corpse_type class_allowed, { const bool was_butchering = is_being_butchered(item); - success = _raise_corpse(x, y, corps, beha, hitting, god_gift, - actual); + success = _raise_corpse(x, y, corps, beha, hitting, god, actual); if (actual && success) { @@ -914,7 +915,7 @@ bool animate_a_corpse(int x, int y, corpse_type class_allowed, } int animate_dead(actor *caster, int pow, beh_type beha, unsigned short hitting, - bool god_gift, bool actual) + god_type god, bool actual) { UNUSED(pow); @@ -976,7 +977,7 @@ int animate_dead(actor *caster, int pow, beh_type beha, unsigned short hitting, was_butchering = true; if (animate_a_corpse(a.x, a.y, CORPSE_BODY, beha, - hitting, god_gift, actual, true)) + hitting, god, actual, true)) { number_raised++; @@ -1019,7 +1020,7 @@ int animate_dead(actor *caster, int pow, beh_type beha, unsigned short hitting, // Hides and other "animal part" items are intentionally left out, it's // unrequired complexity, and fresh flesh makes more "sense" for a spell // reforming the original monster out of ice anyways. -bool cast_simulacrum(int pow, bool god_gift) +bool cast_simulacrum(int pow, god_type god) { int how_many_max = std::min(8, 4 + random2(pow) / 20); @@ -1047,8 +1048,7 @@ bool cast_simulacrum(int pow, bool god_gift) if (create_monster( mgen_data(MONS_SIMULACRUM_SMALL, BEH_FRIENDLY, 6, you.pos(), you.pet_target, - god_gift ? MG_GOD_GIFT : 0, - mon)) != -1) + 0, god, mon)) != -1) { count++; } @@ -1071,7 +1071,7 @@ bool cast_simulacrum(int pow, bool god_gift) return (false); } -bool cast_twisted_resurrection(int pow, bool god_gift) +bool cast_twisted_resurrection(int pow, god_type god) { if (igrd[you.x_pos][you.y_pos] == NON_ITEM) { @@ -1143,7 +1143,7 @@ bool cast_twisted_resurrection(int pow, bool god_gift) create_monster( mgen_data(mon, BEH_FRIENDLY, 0, you.pos(), you.pet_target, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH, + MG_FORCE_BEH, god, MONS_PROGRAM_BUG, 0, colour)); if (monster == -1) @@ -1178,7 +1178,7 @@ bool cast_twisted_resurrection(int pow, bool god_gift) return (true); } -bool cast_summon_wraiths(int pow, bool god_gift) +bool cast_summon_wraiths(int pow, god_type god) { bool success = false; @@ -1195,7 +1195,7 @@ bool cast_summon_wraiths(int pow, bool god_gift) friendly ? BEH_FRIENDLY : BEH_HOSTILE, 5, you.pos(), friendly ? you.pet_target : MHITYOU, - (god_gift ? MG_GOD_GIFT : 0) | MG_FORCE_BEH)); + MG_FORCE_BEH, god)); if (monster != -1) { @@ -1221,7 +1221,7 @@ bool cast_summon_wraiths(int pow, bool god_gift) return (success); } -bool cast_death_channel(int pow, bool god_gift) +bool cast_death_channel(int pow, god_type god) { bool success = false; @@ -1236,8 +1236,8 @@ bool cast_death_channel(int pow, bool god_gift) if (you.duration[DUR_DEATH_CHANNEL] > 100) you.duration[DUR_DEATH_CHANNEL] = 100; - if (god_gift) - you.attribute[ATTR_DIVINE_DEATH_CHANNEL] = 1; + if (god != GOD_NO_GOD) + you.attribute[ATTR_DIVINE_DEATH_CHANNEL] = static_cast<int>(god); } else canned_msg(MSG_NOTHING_HAPPENS); diff --git a/crawl-ref/source/spells3.h b/crawl-ref/source/spells3.h index 854438e4bd..58ffefcbe5 100644 --- a/crawl-ref/source/spells3.h +++ b/crawl-ref/source/spells3.h @@ -113,16 +113,19 @@ bool remove_curse(bool suppress_msg); * *********************************************************************** */ bool cast_sublimation_of_blood(int pow); -bool cast_call_imp(int pow, bool god_gift = false); -bool summon_lesser_demon(int pow, bool god_gift = false, bool quiet = false); -bool summon_common_demon(int pow, bool god_gift = false, bool quiet = false); -bool summon_greater_demon(int pow, bool god_gift = false, bool quiet = false); -bool summon_demon_type(monster_type mon, int pow, bool god_gift = false); -bool cast_summon_demon(int pow, bool god_gift = false); -bool cast_demonic_horde(int pow, bool god_gift = false); -bool cast_summon_greater_demon(int pow, bool god_gift = false); -bool cast_shadow_creatures(bool god_gift = false); -bool cast_summon_horrible_things(int pow, bool god_gift = false); +bool cast_call_imp(int pow, god_type god = GOD_NO_GOD); +bool summon_lesser_demon(int pow, god_type god = GOD_NO_GOD, + bool quiet = false); +bool summon_common_demon(int pow, god_type god = GOD_NO_GOD, + bool quiet = false); +bool summon_greater_demon(int pow, god_type god = GOD_NO_GOD, + bool quiet = false); +bool summon_demon_type(monster_type mon, int pow, god_type god = GOD_NO_GOD); +bool cast_summon_demon(int pow, god_type god = GOD_NO_GOD); +bool cast_demonic_horde(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_greater_demon(int pow, god_type god = GOD_NO_GOD); +bool cast_shadow_creatures(god_type god = GOD_NO_GOD); +bool cast_summon_horrible_things(int pow, god_type god = GOD_NO_GOD); // last updated 24may2000 {dlb} /* *********************************************************************** @@ -130,7 +133,7 @@ bool cast_summon_horrible_things(int pow, bool god_gift = false); * *********************************************************************** */ bool animate_a_corpse(int x, int y, corpse_type class_allowed, beh_type beha, unsigned short hitting, - bool god_gift = false, bool actual = true, + god_type god = GOD_NO_GOD, bool actual = true, bool quiet = false); // last updated 24may2000 {dlb} @@ -138,16 +141,16 @@ bool animate_a_corpse(int x, int y, corpse_type class_allowed, * called from: ability - it_use3 - monstuff - mstuff2 - spell * *********************************************************************** */ int animate_dead(actor *caster, int pow, beh_type beha, unsigned short hitting, - bool god_gift = false, bool actual = true); + god_type god = GOD_NO_GOD, bool actual = true); // updated 24may2000 {dlb} /* *********************************************************************** * called from: spell * *********************************************************************** */ -bool cast_simulacrum(int pow, bool god_gift = false); -bool cast_twisted_resurrection(int pow, bool god_gift = false); -bool cast_summon_wraiths(int pow, bool god_gift = false); -bool cast_death_channel(int pow, bool god_gift = false); +bool cast_simulacrum(int pow, god_type god = GOD_NO_GOD); +bool cast_twisted_resurrection(int pow, god_type god = GOD_NO_GOD); +bool cast_summon_wraiths(int pow, god_type god = GOD_NO_GOD); +bool cast_death_channel(int pow, god_type god = GOD_NO_GOD); // updated 24may2000 {dlb} diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 4a8bed7ba3..5f84cf81cc 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -1071,7 +1071,9 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) mprf(MSGCH_DIAGNOSTICS, "Spell #%d, power=%d", spell, powc ); #endif - const bool god_gift = crawl_state.is_god_acting(); + const god_type god = + (crawl_state.is_god_acting()) ? crawl_state.which_god_acting() + : GOD_NO_GOD; switch (spell) { @@ -1421,113 +1423,113 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) // If a god is making you cast one of these spells, any monsters // produced will count as god gifts. case SPELL_SUMMON_BUTTERFLIES: - cast_summon_butterflies(powc, god_gift); + cast_summon_butterflies(powc, god); break; case SPELL_SUMMON_SMALL_MAMMALS: - cast_summon_small_mammals(powc, god_gift); + cast_summon_small_mammals(powc, god); break; case SPELL_STICKS_TO_SNAKES: - cast_sticks_to_snakes(powc, god_gift); + cast_sticks_to_snakes(powc, god); break; case SPELL_SUMMON_SCORPIONS: - cast_summon_scorpions(powc, god_gift); + cast_summon_scorpions(powc, god); break; case SPELL_SUMMON_SWARM: - cast_summon_swarm(powc, god_gift); + cast_summon_swarm(powc, god); break; case SPELL_CALL_CANINE_FAMILIAR: - cast_call_canine_familiar(powc, god_gift); + cast_call_canine_familiar(powc, god); break; case SPELL_SUMMON_ELEMENTAL: - if (!cast_summon_elemental(powc, god_gift)) + if (!cast_summon_elemental(powc, god)) return (SPRET_ABORT); break; case SPELL_SUMMON_ICE_BEAST: - cast_summon_ice_beast(powc, god_gift); + cast_summon_ice_beast(powc, god); break; case SPELL_SUMMON_UGLY_THING: - cast_summon_ugly_thing(powc, god_gift); + cast_summon_ugly_thing(powc, god); break; case SPELL_SUMMON_DRAGON: - cast_summon_dragon(powc, god_gift); + cast_summon_dragon(powc, god); break; case SPELL_SUMMON_GUARDIAN: - summon_guardian(powc, god_gift); + summon_guardian(powc, god); break; case SPELL_SUMMON_DAEVA: - summon_daeva(powc, god_gift); + summon_daeva(powc, god); break; case SPELL_TUKIMAS_DANCE: // Temporarily turn a wielded weapon into a dancing weapon. crawl_state.cant_cmd_repeat("You can't repeat Tukima's Dance."); - cast_tukimas_dance(powc, god_gift); + cast_tukimas_dance(powc, god); break; case SPELL_CONJURE_BALL_LIGHTNING: - cast_conjure_ball_lightning(powc, god_gift); + cast_conjure_ball_lightning(powc, god); break; case SPELL_CALL_IMP: - cast_call_imp(powc, god_gift); + cast_call_imp(powc, god); break; case SPELL_SUMMON_DEMON: - cast_summon_demon(powc, god_gift); + cast_summon_demon(powc, god); break; case SPELL_DEMONIC_HORDE: - cast_demonic_horde(powc, god_gift); + cast_demonic_horde(powc, god); break; case SPELL_SUMMON_GREATER_DEMON: - cast_summon_greater_demon(powc, god_gift); + cast_summon_greater_demon(powc, god); break; case SPELL_SHADOW_CREATURES: - cast_shadow_creatures(god_gift); + cast_shadow_creatures(god); break; case SPELL_SUMMON_HORRIBLE_THINGS: - cast_summon_horrible_things(powc, god_gift); + cast_summon_horrible_things(powc, god); break; case SPELL_ANIMATE_SKELETON: mpr("You attempt to give life to the dead..."); animate_a_corpse(you.x_pos, you.y_pos, CORPSE_SKELETON, BEH_FRIENDLY, - you.pet_target, god_gift); + you.pet_target, god); break; case SPELL_ANIMATE_DEAD: mpr("You call on the dead to walk for you."); - animate_dead(&you, powc + 1, BEH_FRIENDLY, you.pet_target, god_gift); + animate_dead(&you, powc + 1, BEH_FRIENDLY, you.pet_target, god); break; case SPELL_SIMULACRUM: - cast_simulacrum(powc, god_gift); + cast_simulacrum(powc, god); break; case SPELL_TWISTED_RESURRECTION: - cast_twisted_resurrection(powc, god_gift); + cast_twisted_resurrection(powc, god); break; case SPELL_SUMMON_WRAITHS: - cast_summon_wraiths(powc, god_gift); + cast_summon_wraiths(powc, god); break; case SPELL_DEATH_CHANNEL: - cast_death_channel(powc, god_gift); + cast_death_channel(powc, god); break; // Enchantments. @@ -2338,7 +2340,9 @@ static void _miscast_enchantment(int severity, const char* cause) static void _miscast_translocation(int severity, const char* cause) { - const unsigned flags = (crawl_state.is_god_acting()) ? MG_GOD_GIFT : 0; + const god_type god = + (crawl_state.is_god_acting()) ? crawl_state.which_god_acting() + : GOD_NO_GOD; switch (severity) { @@ -2396,7 +2400,7 @@ static void _miscast_translocation(int severity, const char* cause) case 5: if (create_monster( mgen_data::alert_hostile_at(MONS_SPATIAL_VORTEX, - you.pos(), 3, flags)) != -1) + you.pos(), 3, 0, god)) != -1) { mpr("Space twists in upon itself!"); } @@ -2435,7 +2439,7 @@ static void _miscast_translocation(int severity, const char* cause) { if (create_monster( mgen_data::alert_hostile_at(MONS_SPATIAL_VORTEX, - you.pos(), 3, flags)) != -1) + you.pos(), 3, 0, god)) != -1) { success = true; } @@ -2481,7 +2485,9 @@ static void _miscast_translocation(int severity, const char* cause) static void _miscast_summoning(int severity, const char* cause) { - const unsigned flags = (crawl_state.is_god_acting()) ? MG_GOD_GIFT : 0; + const god_type god = + (crawl_state.is_god_acting()) ? crawl_state.which_god_acting() + : GOD_NO_GOD; switch (severity) { @@ -2536,7 +2542,7 @@ static void _miscast_summoning(int severity, const char* cause) case 3: if (create_monster( mgen_data::alert_hostile_at(MONS_SPATIAL_VORTEX, - you.pos(), 3, flags)) != -1) + you.pos(), 3, 0, god)) != -1) { mpr("Space twists in upon itself!"); } @@ -2548,7 +2554,7 @@ static void _miscast_summoning(int severity, const char* cause) if (create_monster( mgen_data::alert_hostile_at( summon_any_demon(DEMON_LESSER), - you.pos(), 5, flags)) != -1) + you.pos(), 5, 0, god)) != -1) { mpr("Something appears in a flash of light!"); } @@ -2569,7 +2575,7 @@ static void _miscast_summoning(int severity, const char* cause) { if (create_monster( mgen_data::alert_hostile_at(MONS_SPATIAL_VORTEX, - you.pos(), 3, flags)) != -1) + you.pos(), 3, 0, god)) != -1) { success = true; } @@ -2587,7 +2593,7 @@ static void _miscast_summoning(int severity, const char* cause) if (create_monster( mgen_data::alert_hostile_at( summon_any_demon(DEMON_COMMON), - you.pos(), 5, flags)) != -1) + you.pos(), 5, 0, god)) != -1) { mpr("Something forms out of thin air!"); } @@ -2606,7 +2612,7 @@ static void _miscast_summoning(int severity, const char* cause) if (create_monster( mgen_data::alert_hostile_at( summon_any_demon(DEMON_LESSER), - you.pos(), 5, flags)) != -1) + you.pos(), 5, 0, god)) != -1) { success = true; } @@ -2627,7 +2633,7 @@ static void _miscast_summoning(int severity, const char* cause) case 0: if (create_monster( mgen_data::alert_hostile_at(MONS_ABOMINATION_SMALL, - you.pos(), 0, flags)) != -1) + you.pos(), 0, 0, god)) != -1) { mpr("Something forms out of thin air."); } @@ -2639,7 +2645,7 @@ static void _miscast_summoning(int severity, const char* cause) if (create_monster( mgen_data::alert_hostile_at( summon_any_demon(DEMON_GREATER), - you.pos(), 0, flags)) != -1) + you.pos(), 0, 0, god)) != -1) { mpr("You sense a hostile presence."); } @@ -2656,7 +2662,7 @@ static void _miscast_summoning(int severity, const char* cause) if (create_monster( mgen_data::alert_hostile_at( summon_any_demon(DEMON_COMMON), - you.pos(), 3, flags)) != -1) + you.pos(), 3, 0, god)) != -1) { success = true; } @@ -2795,7 +2801,9 @@ static void _miscast_necromancy(int severity, const char* cause) return; } - const unsigned flags = (crawl_state.is_god_acting()) ? MG_GOD_GIFT : 0; + const god_type god = + (crawl_state.is_god_acting()) ? crawl_state.which_god_acting() + : GOD_NO_GOD; switch (severity) { @@ -2885,7 +2893,7 @@ static void _miscast_necromancy(int severity, const char* cause) { if (create_monster( mgen_data::alert_hostile_at(MONS_SHADOW, - you.pos(), 2, flags)) != -1) + you.pos(), 2, 0, god)) != -1) { success = true; } @@ -2950,7 +2958,7 @@ static void _miscast_necromancy(int severity, const char* cause) case 4: if (create_monster( mgen_data::alert_hostile_at(MONS_SOUL_EATER, - you.pos(), 4, flags)) != -1) + you.pos(), 4, 0, god)) != -1) { mpr("Something reaches out for you..."); } @@ -2961,7 +2969,7 @@ static void _miscast_necromancy(int severity, const char* cause) case 5: if (create_monster( mgen_data::alert_hostile_at(MONS_REAPER, - you.pos(), 4, flags)) != -1) + you.pos(), 4, 0, god)) != -1) { mpr("Death has come for you..."); } diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc index 8b681c21eb..18de3e6075 100644 --- a/crawl-ref/source/xom.cc +++ b/crawl-ref/source/xom.cc @@ -498,7 +498,7 @@ static bool xom_is_good(int sever) summons[i] = create_monster( mgen_data(mon, BEH_FRIENDLY, 3, - you.pos(), you.pet_target, MG_GOD_GIFT)); + you.pos(), you.pet_target, 0, GOD_XOM)); if (summons[i] != -1) success = true; @@ -587,7 +587,7 @@ static bool xom_is_good(int sever) if (create_monster( mgen_data(mon, beha, 6, - you.pos(), hitting, MG_GOD_GIFT)) != -1) + you.pos(), hitting, 0, GOD_XOM)) != -1) { if (different) god_speaks(GOD_XOM, _get_xom_speech("single holy summon")); @@ -683,7 +683,7 @@ static bool xom_is_good(int sever) if (create_monster( mgen_data(xom_random_demon(sever, one_chance_in(8)), beha, 0, - you.pos(), hitting, MG_GOD_GIFT)) != -1) + you.pos(), hitting, 0, GOD_XOM)) != -1) { if (different) god_speaks(GOD_XOM, _get_xom_speech("single major holy summon")); @@ -849,7 +849,7 @@ static bool xom_is_bad(int sever) // Nasty, but fun. if (one_chance_in(4)) - success = cast_tukimas_dance(100, true, true, true); + success = cast_tukimas_dance(100, GOD_XOM, true, true); else { const int numdemons = @@ -860,7 +860,7 @@ static bool xom_is_bad(int sever) if (create_monster( mgen_data::alert_hostile_at( xom_random_punishment_demon(sever), - you.pos(), 4, MG_GOD_GIFT)) != -1) + you.pos(), 4, 0, GOD_XOM)) != -1) { success = true; } |