diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-20 10:07:45 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-20 10:07:45 +0000 |
commit | 82abef2e72f839e3d3b75ec771cdfe8219761b20 (patch) | |
tree | 242d406f409e94f250fc2f3af1d60e9599dd7268 /crawl-ref/source | |
parent | d7f1dd21aacab1548caf9315b035a5cedab29c5f (diff) | |
download | crawl-ref-82abef2e72f839e3d3b75ec771cdfe8219761b20.tar.gz crawl-ref-82abef2e72f839e3d3b75ec771cdfe8219761b20.zip |
Fix monsters capable of LOS attack behind glass walls being ignored.
Fix monsters behind glass walls being autotargetted for spells that
need a path.
Fix spacing in spl-data.h, and add some comments about commenting
to coding_conventions.txt.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5148 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r-- | crawl-ref/source/directn.cc | 90 | ||||
-rw-r--r-- | crawl-ref/source/misc.cc | 3 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 39 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.h | 24 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 46 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 12 | ||||
-rw-r--r-- | crawl-ref/source/spl-data.h | 674 | ||||
-rw-r--r-- | crawl-ref/source/spl-util.cc | 30 |
8 files changed, 465 insertions, 453 deletions
diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc index 3d544e6ba7..1c14c2e8f6 100644 --- a/crawl-ref/source/directn.cc +++ b/crawl-ref/source/directn.cc @@ -86,23 +86,22 @@ enum LOSSelect static void describe_feature(int mx, int my, bool oos); static void describe_cell(int mx, int my); -static bool find_object( int x, int y, int mode, int range ); -static bool find_monster( int x, int y, int mode, int range ); -static bool find_feature( int x, int y, int mode, int range ); +static bool find_object( int x, int y, int mode, bool need_path, int range ); +static bool find_monster( int x, int y, int mode, bool need_path, int range ); +static bool find_feature( int x, int y, int mode, bool need_path, int range ); static char find_square_wrapper( int tx, int ty, FixedVector<char, 2> &mfp, char direction, - bool (*targ)(int, int, int, int), - int mode = TARG_ANY, int range = -1, - bool wrap = false, + bool (*targ)(int, int, int, bool, int), + bool need_path = false, int mode = TARG_ANY, + int range = -1, bool wrap = false, int los = LOS_ANY); static char find_square( int xps, int yps, FixedVector<char, 2> &mfp, int direction, - bool (*targ)(int, int, int, int), - int mode = TARG_ANY, int range = -1, - bool wrap = false, - int los = LOS_ANY); + bool (*targ)(int, int, int, bool, int), + bool need_path, int mode = TARG_ANY, int range = -1, + bool wrap = false, int los = LOS_ANY); static int targeting_cmd_to_compass( command_type command ); static void describe_oos_square(int x, int y); @@ -457,7 +456,7 @@ void direction(dist& moves, targeting_type restricts, // NOTE: Even if just_looking is set, moves is still interesting, // because we can travel there! - if ( restricts == DIR_DIR ) + if (restricts == DIR_DIR) { direction_choose_compass( moves, beh ); return; @@ -478,7 +477,7 @@ void direction(dist& moves, targeting_type restricts, moves.ty = you.y_pos; // If we show the beam on startup, we have to initialise it. - if ( show_beam ) + if (show_beam) find_ray(you.x_pos, you.y_pos, moves.tx, moves.ty, true, ray); bool skip_iter = false; @@ -629,7 +628,7 @@ void direction(dist& moves, targeting_type restricts, case CMD_TARGET_DIR_UP_RIGHT: i = targeting_cmd_to_compass(key_command); - if ( restricts != DIR_TARGET ) + if (restricts != DIR_TARGET) { // A direction is allowed, and we've selected it. moves.dx = Compass[i].x; @@ -704,9 +703,9 @@ void direction(dist& moves, targeting_type restricts, { const int thing_to_find = targeting_cmd_to_feature(key_command); if (find_square_wrapper(moves.tx, moves.ty, objfind_pos, 1, - find_feature, thing_to_find, range, true, - Options.target_los_first ? - LOS_FLIPVH : LOS_ANY)) + find_feature, needs_path, thing_to_find, + range, true, Options.target_los_first ? + LOS_FLIPVH : LOS_ANY)) { moves.tx = objfind_pos[0]; moves.ty = objfind_pos[1]; @@ -798,10 +797,10 @@ void direction(dist& moves, targeting_type restricts, case CMD_TARGET_OBJ_CYCLE_FORWARD: dir = (key_command == CMD_TARGET_OBJ_CYCLE_BACK) ? -1 : 1; if (find_square_wrapper( moves.tx, moves.ty, objfind_pos, dir, - find_object, 0, range, true, - Options.target_los_first - ? (dir == 1? LOS_FLIPVH : LOS_FLIPHV) - : LOS_ANY)) + find_object, needs_path, TARG_ANY, range, + true, Options.target_los_first ? + (dir == 1? LOS_FLIPVH : LOS_FLIPHV) + : LOS_ANY)) { moves.tx = objfind_pos[0]; moves.ty = objfind_pos[1]; @@ -815,7 +814,7 @@ void direction(dist& moves, targeting_type restricts, case CMD_TARGET_CYCLE_BACK: dir = (key_command == CMD_TARGET_CYCLE_BACK) ? -1 : 1; if (find_square_wrapper( moves.tx, moves.ty, monsfind_pos, dir, - find_monster, mode, range, + find_monster, needs_path, mode, range, Options.target_wrap)) { moves.tx = monsfind_pos[0]; @@ -1141,7 +1140,8 @@ bool in_los(int x, int y) return (in_vlos(grid2view(coord_def(x, y)))); } -static bool find_monster( int x, int y, int mode, int range = -1) +static bool find_monster( int x, int y, int mode, bool need_path, + int range = -1) { // target the player for friendly and general spells if ((mode == TARG_FRIEND || mode == TARG_ANY) @@ -1160,6 +1160,10 @@ static bool find_monster( int x, int y, int mode, int range = -1) if (targ_mon == NON_MONSTER || !in_los(x,y)) return (false); + // Monster in LOS but only via glass walls, so no direct path. + if (need_path && !see_grid_no_trans(x,y)) + return (false); + monsters *mon = &menv[targ_mon]; // Unknown mimics don't count as monsters, either. @@ -1197,7 +1201,8 @@ static bool find_monster( int x, int y, int mode, int range = -1) || !mons_class_flag( menv[targ_mon].type, M_NO_EXP_GAIN )); } -static bool find_feature( int x, int y, int mode, int /* range */) +static bool find_feature( int x, int y, int mode, + bool /* need_path */, int /* range */) { // The stair need not be in LOS if the square is mapped. if (!in_los(x, y) && (!Options.target_oos || !is_terrain_seen(x, y))) @@ -1206,7 +1211,8 @@ static bool find_feature( int x, int y, int mode, int /* range */) return is_feature(mode, x, y); } -static bool find_object(int x, int y, int mode, int /* range */) +static bool find_object(int x, int y, int mode, + bool /* need_path */, int /* range */) { // First, check for mimics. bool is_mimic = false; @@ -1299,8 +1305,10 @@ bool in_los_bounds(int x, int y) //--------------------------------------------------------------- static char find_square( int xps, int yps, FixedVector<char, 2> &mfp, int direction, - bool (*find_targ)( int x, int y, int mode, int range ), - int mode, int range, bool wrap, int los ) + bool (*find_targ)( int x, int y, int mode, + bool need_path, int range ), + bool need_path, int mode, int range, bool wrap, + int los ) { // the day will come when [unsigned] chars will be consigned to // the fires of Gehenna. Not quite yet, though. @@ -1364,19 +1372,21 @@ static char find_square( int xps, int yps, { if (direction == 1 && temp_xps == minx && temp_yps == maxy) { - if (find_targ(you.x_pos, you.y_pos, mode, range)) + if (find_targ(you.x_pos, you.y_pos, mode, need_path, range)) { mfp[0] = ctrx; mfp[1] = ctry; return (1); } - return find_square(ctrx, ctry, mfp, direction, find_targ, mode, - range, false, next_los(direction, los, wrap)); + return find_square(ctrx, ctry, mfp, direction, find_targ, + need_path, mode, range, false, + next_los(direction, los, wrap)); } if (direction == -1 && temp_xps == ctrx && temp_yps == ctry) { - return find_square(minx, maxy, mfp, direction, find_targ, mode, - range, false, next_los(direction, los, wrap)); + return find_square(minx, maxy, mfp, direction, find_targ, + need_path, mode, range, false, + next_los(direction, los, wrap)); } if (direction == 1) @@ -1500,7 +1510,7 @@ static char find_square( int xps, int yps, if ((onlyVis || onlyHidden) && onlyVis != in_los(targ_x, targ_y)) continue; - if (find_targ(targ_x, targ_y, mode, range)) + if (find_targ(targ_x, targ_y, mode, need_path, range)) { mfp[0] = temp_xps; mfp[1] = temp_yps; @@ -1509,10 +1519,10 @@ static char find_square( int xps, int yps, } return (direction == 1? - find_square(ctrx, ctry, mfp, direction, find_targ, mode, range, false, - next_los(direction, los, wrap)) - : find_square(minx, maxy, mfp, direction, find_targ, mode, range, false, - next_los(direction, los, wrap))); + find_square(ctrx, ctry, mfp, direction, find_targ, need_path, mode, + range, false, next_los(direction, los, wrap)) + : find_square(minx, maxy, mfp, direction, find_targ, need_path, mode, + range, false, next_los(direction, los, wrap))); } // XXX Unbelievably hacky. And to think that my goal was to clean up the code. @@ -1521,11 +1531,13 @@ static char find_square( int xps, int yps, static char find_square_wrapper( int tx, int ty, FixedVector<char, 2> &mfp, char direction, bool (*find_targ)( int x, int y, int mode, - int range ), - int mode, int range, bool wrap, int los ) + bool need_path, int range ), + bool need_path, int mode, int range, bool wrap, + int los ) { const char r = find_square(grid2viewX(tx), grid2viewY(ty), mfp, - direction, find_targ, mode, range, wrap, los); + direction, find_targ, need_path, mode, range, + wrap, los); mfp[0] = view2gridX(mfp[0]); mfp[1] = view2gridY(mfp[1]); return r; diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc index a3e8006ab6..f96865f093 100644 --- a/crawl-ref/source/misc.cc +++ b/crawl-ref/source/misc.cc @@ -2584,7 +2584,8 @@ bool mons_is_safe(const struct monsters *mon, bool want_move) || mons_class_flag(mon->type, M_NO_EXP_GAIN) // only seen through glass walls || !see_grid_no_trans(mon->x, mon->y) - && !mons_has_ranged_spell(mon)); + && !mons_has_ranged_spell(mon) + && !mons_has_los_ability(mon->type)); #ifdef CLUA_BINDINGS bool moving = (!you.delay_queue.empty() diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index 0906dbd7e9..df192c7a9b 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -2075,18 +2075,6 @@ bool mons_should_fire(struct bolt &beam) 100)); } -// used to determine whether or not a monster should always -// fire this spell if selected. If not, we should use a -// tracer. - -// note - this function assumes that the monster is "nearby" -// its target! - -bool ms_requires_tracer(spell_type monspell) -{ - return (spell_needs_tracer(monspell)); -} - // returns true if the spell is something you wouldn't want done if // you had a friendly target.. only returns a meaningful value for // non-beam spells @@ -2362,12 +2350,35 @@ bool mons_is_magic_user( const monsters *mon ) return (false); } +// Returns true if the monster has an ability that only needs LOS to +// affect the target. +bool mons_has_los_ability( int mclass ) +{ + // These two have Torment, but are handled specially. + if (mclass == MONS_FIEND || mclass == MONS_PIT_FIEND) + return (true); + + // These eyes only need LOS, as well. (The other eyes use spells.) + if (mclass == MONS_GIANT_EYEBALL || mclass == MONS_EYE_OF_DRAINING) + return (true); + + // Although not using spells, these are exceedingly dangerous. + if (mclass == MONS_SILVER_STATUE || mclass == MONS_ORANGE_STATUE) + return (true); + + // Beholding just needs LOS. + if (mclass == MONS_MERMAID) + return (true); + + return (false); +} + bool mons_has_ranged_spell( const monsters *mon ) { const int mclass = mon->type; - // These two have Torment, but are handled specially. - if (mclass == MONS_FIEND || mclass == MONS_PIT_FIEND) + // Monsters may have spell like abilities. + if (mons_has_los_ability(mclass)) return (true); if (mons_class_flag( mclass, M_SPELLCASTER )) diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index d2b50087a4..2a75ff66c6 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -19,16 +19,16 @@ enum corpse_effect_type { - CE_NOCORPSE, // 0 - CE_CLEAN, // 1 - CE_CONTAMINATED, // 2 - CE_POISONOUS, // 3 - CE_HCL, // 4 - CE_MUTAGEN_RANDOM, // 5 - CE_MUTAGEN_GOOD, // 6 - may be worth implementing {dlb} - CE_MUTAGEN_BAD, // 7 - may be worth implementing {dlb} - CE_RANDOM, // 8 - not used, but may be worth implementing {dlb} - CE_ROTTEN = 50 // 50 - must remain at 50 for now {dlb} + CE_NOCORPSE, // 0 + CE_CLEAN, // 1 + CE_CONTAMINATED, // 2 + CE_POISONOUS, // 3 + CE_HCL, // 4 + CE_MUTAGEN_RANDOM, // 5 + CE_MUTAGEN_GOOD, // 6 - may be worth implementing {dlb} + CE_MUTAGEN_BAD, // 7 - may be worth implementing {dlb} + CE_RANDOM, // 8 - not used, but may be worth implementing {dlb} + CE_ROTTEN = 50 // 50 - must remain at 50 for now {dlb} }; enum gender_type @@ -596,16 +596,16 @@ bool ms_direct_nasty(spell_type monspell); /* *********************************************************************** * called from: monstuff * *********************************************************************** */ -bool ms_requires_tracer(spell_type mons_spell); bool ms_useful_fleeing_out_of_sight( const monsters *mon, spell_type monspell ); bool ms_quick_get_away( const monsters *mon, spell_type monspell ); bool ms_waste_of_time( const monsters *mon, spell_type monspell ); bool ms_low_hitpoint_cast( const monsters *mon, spell_type monspell ); +bool mons_is_magic_user( const monsters *mon ); +bool mons_has_los_ability( int mclass ); bool mons_has_ranged_spell( const monsters *mon ); bool mons_has_ranged_attack( const monsters *mon ); -bool mons_is_magic_user( const monsters *mon ); // last updated 06mar2001 (gdl) /* *********************************************************************** diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index 6ab7630b0c..acdf66aef3 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -3028,17 +3028,17 @@ static bool _handle_special_ability(monsters *monster, bolt & beem) break; // setup tracer - beem.name = "glob of lava"; - beem.range = 4; - beem.rangeMax = 13; - beem.damage = dice_def( 3, 10 ); - beem.colour = RED; - beem.type = dchar_glyph(DCHAR_FIRED_ZAP); - beem.flavour = BEAM_LAVA; - beem.hit = 20; + beem.name = "glob of lava"; + beem.aux_source = "glob of lava"; + beem.range = 4; + beem.rangeMax = 13; + beem.damage = dice_def( 3, 10 ); + beem.hit = 20; + beem.colour = RED; + beem.type = dchar_glyph(DCHAR_FIRED_ZAP); + beem.flavour = BEAM_LAVA; beem.beam_source = monster_index(monster); - beem.thrower = KILL_MON; - beem.aux_source = "glob of lava"; + beem.thrower = KILL_MON; // fire tracer fire_tracer(monster, beem); @@ -3069,18 +3069,18 @@ static bool _handle_special_ability(monsters *monster, bolt & beem) break; // setup tracer - beem.name = "bolt of electricity"; - beem.damage = dice_def( 3, 6 ); - beem.colour = LIGHTCYAN; - beem.type = dchar_glyph(DCHAR_FIRED_ZAP); - beem.flavour = BEAM_ELECTRICITY; - beem.hit = 50; + beem.name = "bolt of electricity"; + beem.aux_source = "bolt of electricity"; + beem.range = 4; + beem.rangeMax = 13; + beem.damage = dice_def( 3, 6 ); + beem.hit = 50; + beem.colour = LIGHTCYAN; + beem.type = dchar_glyph(DCHAR_FIRED_ZAP); + beem.flavour = BEAM_ELECTRICITY; beem.beam_source = monster_index(monster); - beem.thrower = KILL_MON; - beem.aux_source = "bolt of electricity"; - beem.range = 4; - beem.rangeMax = 13; - beem.is_beam = true; + beem.thrower = KILL_MON; + beem.is_beam = true; // fire tracer fire_tracer(monster, beem); @@ -3211,6 +3211,7 @@ static bool _handle_special_ability(monsters *monster, bolt & beem) // set up the beam beem.name = "volley of spikes"; + beem.aux_source = "volley of spikes"; beem.range = 9; beem.rangeMax = 9; beem.hit = 14; @@ -3220,7 +3221,6 @@ static bool _handle_special_ability(monsters *monster, bolt & beem) beem.colour = LIGHTGREY; beem.flavour = BEAM_MISSILE; beem.thrower = KILL_MON; - beem.aux_source = "volley of spikes"; beem.is_beam = false; // fire tracer @@ -4290,7 +4290,7 @@ static bool _handle_spell( monsters *monster, bolt & beem ) setup_mons_cast(monster, beem, spell_cast); // beam-type spells requiring tracers - if (ms_requires_tracer(spell_cast)) + if (spell_needs_tracer(spell_cast)) { fire_tracer(monster, beem); // good idea? diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 718efc2675..6f69da5c9e 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -976,16 +976,16 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail ) else if (dir == DIR_DIR) mpr(prompt? prompt : "Which direction? ", MSGCH_PROMPT); - const bool needs_path = - !(testbits(flags, SPFLAG_GRID) || testbits(flags, SPFLAG_TARGET)); + const bool needs_path = (!testbits(flags, SPFLAG_GRID) + && !testbits(flags, SPFLAG_TARGET)); - if ( !spell_direction( spd, beam, dir, targ, needs_path, prompt ) ) + if (!spell_direction( spd, beam, dir, targ, needs_path, prompt )) return (SPRET_ABORT); if (testbits( flags, SPFLAG_NOT_SELF ) && spd.isMe) { if (spell == SPELL_TELEPORT_OTHER || spell == SPELL_HEAL_OTHER - || spell == SPELL_POLYMORPH_OTHER) + || spell == SPELL_POLYMORPH_OTHER) { mpr( "Sorry, this spell works on others only." ); } @@ -2188,7 +2188,7 @@ static void _miscast_conjuration(int severity, const char* cause) beam.aux_source.clear(); if (cause) beam.aux_source = cause; - beam.ex_size = coinflip()?1:2; + beam.ex_size = coinflip() ? 1 : 2; beam.is_explosion = true; explosion(beam); @@ -2689,7 +2689,7 @@ static void _miscast_divination(int severity, const char* cause) { case 0: mpr( forget_spell() ? "You have forgotten a spell!" - : "You get a splitting headache." ); + : "You get a splitting headache." ); break; case 1: mpr("You feel completely lost."); diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index d065a80862..7a1b0fa4cf 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -108,16 +108,7 @@ I don't plan to implement a 'Poisoner' class, as it would become unplayable deep in the dungeon where most monsters are poison resistant. - Many spells use magic from two types. These spells are equally - available to either type; a conjurer is no worse at a fire/conjuration than - at a pure conjuration. I guess a spell could be of three types, but they - would have to be types with short names (limited space in the spell - windows). - - Note : this is no longer true, with the implementation of magic skills. - Your skill for a spell is effectively the average of all types used in it. - Poison has no skills, but still has a staff - - + Your skill for a spell is effectively the average of all schools used in it. */ /* @@ -140,13 +131,13 @@ { SPELL_IDENTIFY, "Identify", - SPTYP_DIVINATION, - SPFLAG_NONE, - 6, - 0, - NULL, - false, - true + SPTYP_DIVINATION, + SPFLAG_NONE, + 6, + 0, + NULL, + false, + true }, { @@ -216,66 +207,66 @@ }, { - SPELL_SWAP, "Swap", - SPTYP_TRANSLOCATION, - SPFLAG_NONE, - 4, - 0, - NULL, - false, - false + SPELL_SWAP, "Swap", + SPTYP_TRANSLOCATION, + SPFLAG_NONE, + 4, + 0, + NULL, + false, + false }, { - SPELL_APPORTATION, "Apportation", - SPTYP_TRANSLOCATION, - SPFLAG_NONE, - 1, - 1000, - NULL, - false, - false + SPELL_APPORTATION, "Apportation", + SPTYP_TRANSLOCATION, + SPFLAG_NONE, + 1, + 1000, + NULL, + false, + false }, { - SPELL_TWIST, "Twist", - SPTYP_TRANSLOCATION, - SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF, - 1, - 25, - NULL, - true + SPELL_TWIST, "Twist", + SPTYP_TRANSLOCATION, + SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF, + 1, + 25, + NULL, + true }, { - SPELL_FAR_STRIKE, "Far Strike", - SPTYP_TRANSLOCATION, - SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF, - 3, - 100, - NULL, - true + SPELL_FAR_STRIKE, "Far Strike", + SPTYP_TRANSLOCATION, + SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF, + 3, + 100, + NULL, + true }, { - SPELL_DELAYED_FIREBALL, "Delayed Fireball", - SPTYP_FIRE | SPTYP_CONJURATION, - SPFLAG_NONE, - 7, - 0, + SPELL_DELAYED_FIREBALL, "Delayed Fireball", + SPTYP_FIRE | SPTYP_CONJURATION, + SPFLAG_NONE, + 7, + 0, NULL, false, - false + false }, { - SPELL_STRIKING, "Striking", - 0, - SPFLAG_DIR_OR_TARGET, - 1, - 25, - NULL, - true + SPELL_STRIKING, "Striking", + 0, + SPFLAG_DIR_OR_TARGET, + 1, + 25, + NULL, + true }, { @@ -286,7 +277,7 @@ 100, NULL, false, - false + false }, { @@ -365,8 +356,8 @@ SPTYP_ENCHANTMENT, SPFLAG_DIR_OR_TARGET | SPFLAG_HELPFUL, 6, // lowered to 6 from 8, since it's easily available from various items - // and Swiftness is level 2 (and gives a similar effect). It's also - // not that much better than Invisibility. -- bwr + // and Swiftness is level 2 (and gives a similar effect). It's also + // not that much better than Invisibility. -- bwr 200, NULL, false, @@ -432,7 +423,7 @@ 0, NULL, false, - false + false }, { @@ -463,7 +454,7 @@ 200, NULL, false, - false + false }, { @@ -474,7 +465,7 @@ 0, NULL, false, - false + false }, { @@ -485,7 +476,7 @@ 0, NULL, false, - false + false }, { @@ -496,7 +487,7 @@ 0, NULL, false, - false + false }, { @@ -548,7 +539,7 @@ 0, NULL, false, - false + false }, { @@ -559,7 +550,7 @@ 200, NULL, false, - false + false }, { @@ -570,7 +561,7 @@ 0, NULL, false, - false + false }, { @@ -581,7 +572,7 @@ 200, NULL, false, - false + false }, { @@ -592,7 +583,7 @@ 0, NULL, false, - false + false }, { @@ -603,7 +594,7 @@ 200, NULL, false, - false + false }, { @@ -614,7 +605,7 @@ 200, "Smite whom?", false, - false + false }, { @@ -625,7 +616,7 @@ 0, NULL, false, - false + false }, { @@ -636,7 +627,7 @@ 0, NULL, false, - false + false }, { @@ -647,7 +638,7 @@ 0, NULL, false, - false + false }, { @@ -658,7 +649,7 @@ 80, NULL, false, - false + false }, { @@ -669,7 +660,7 @@ 200, NULL, false, - false + false }, { @@ -680,7 +671,7 @@ 200, NULL, false, - false + false }, { @@ -691,7 +682,7 @@ 150, NULL, false, - false + false }, { @@ -732,8 +723,7 @@ 200, "Where do you want to put it?", true -} -, +}, { SPELL_FIRE_STORM, "Fire Storm", @@ -753,7 +743,7 @@ 50, NULL, false, - false + false }, { @@ -767,7 +757,6 @@ true }, - // The following name was found in the hack.exe file of an early version // of PCHACK - credit goes to its creator (whoever that may be): { @@ -788,7 +777,7 @@ 200, NULL, false, - false + false }, { @@ -799,7 +788,7 @@ 200, NULL, false, - false + false }, { @@ -835,7 +824,7 @@ }, { - SPELL_ANIMATE_DEAD, "Animate Dead", + SPELL_ANIMATE_DEAD, "Animate Dead", SPTYP_NECROMANCY, SPFLAG_NONE, 4, @@ -863,7 +852,7 @@ 200, NULL, false, - false + false }, { @@ -884,7 +873,7 @@ 0, NULL, false, - false + false }, { @@ -895,7 +884,7 @@ 200, NULL, false, - false + false }, { @@ -906,7 +895,7 @@ 200, NULL, false, - false + false }, { @@ -917,7 +906,7 @@ 50, NULL, false, - false + false }, { @@ -928,7 +917,7 @@ 200, NULL, false, - false + false }, { @@ -939,7 +928,7 @@ 25, NULL, false, - false + false }, { @@ -950,7 +939,7 @@ 25, NULL, false, - false + false }, { @@ -961,7 +950,7 @@ 200, NULL, false, - false + false }, { @@ -992,7 +981,7 @@ 200, NULL, false, - false + false }, { @@ -1003,7 +992,7 @@ 200, NULL, false, - false + false }, { @@ -1014,7 +1003,7 @@ 200, NULL, false, - false + false }, { @@ -1025,7 +1014,7 @@ 200, NULL, false, - false + false }, { @@ -1036,7 +1025,7 @@ 0, NULL, false, - false + false }, { @@ -1057,7 +1046,7 @@ 200, NULL, false, - false + false }, { @@ -1068,7 +1057,7 @@ 200, NULL, false, - false + false }, { @@ -1100,7 +1089,7 @@ 200, NULL, false, - false + false }, { @@ -1111,7 +1100,7 @@ 200, NULL, false, - false + false }, { @@ -1122,28 +1111,28 @@ 200, NULL, false, - false + false }, { - SPELL_FULSOME_DISTILLATION, "Fulsome Distillation", - SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY, - SPFLAG_NONE, - 1, - 50, + SPELL_FULSOME_DISTILLATION, "Fulsome Distillation", + SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY, + SPFLAG_NONE, + 1, + 50, NULL, false, - false + false }, { - SPELL_POISON_ARROW, "Poison Arrow", - SPTYP_CONJURATION | SPTYP_POISON, - SPFLAG_DIR_OR_TARGET, - 6, - 200, - NULL, - true + SPELL_POISON_ARROW, "Poison Arrow", + SPTYP_CONJURATION | SPTYP_POISON, + SPFLAG_DIR_OR_TARGET, + 6, + 200, + NULL, + true }, { @@ -1154,7 +1143,7 @@ 200, NULL, false, - false + false }, { @@ -1165,7 +1154,7 @@ 200, NULL, false, - false + false }, { @@ -1196,7 +1185,7 @@ 200, NULL, false, - false + false }, { @@ -1217,7 +1206,7 @@ 200, NULL, false, - false + false }, { @@ -1228,7 +1217,7 @@ 200, NULL, false, - false + false }, { @@ -1238,7 +1227,7 @@ 9, 200, NULL, - true + true }, { @@ -1249,7 +1238,7 @@ 200, NULL, false, - false + false }, { @@ -1260,7 +1249,7 @@ 200, NULL, false, - false + false }, { @@ -1271,7 +1260,7 @@ 200, NULL, false, - false + false }, { @@ -1282,7 +1271,7 @@ 0, NULL, false, - false + false }, { @@ -1293,7 +1282,7 @@ 200, NULL, false, - false + false }, { @@ -1304,7 +1293,7 @@ 200, NULL, false, - false + false }, { @@ -1315,7 +1304,7 @@ 200, NULL, false, - false + false }, { @@ -1326,7 +1315,7 @@ 200, NULL, false, - false + false }, { @@ -1337,7 +1326,7 @@ 25, NULL, false, - false + false }, { @@ -1368,7 +1357,7 @@ 0, NULL, false, - false + false } , @@ -1380,7 +1369,7 @@ 200, NULL, false, - false + false }, { @@ -1401,7 +1390,7 @@ 200, NULL, false, - false + false }, { @@ -1412,7 +1401,7 @@ 200, NULL, false, - false + false }, { @@ -1423,7 +1412,7 @@ 200, NULL, false, - false + false }, { @@ -1444,7 +1433,7 @@ 60, // not 50, note the fuzz NULL, false, - false + false }, { @@ -1455,9 +1444,8 @@ 200, NULL, false, - false -} -, + false +}, { SPELL_CONTROL_TELEPORT, "Control Teleport", @@ -1467,7 +1455,7 @@ 200, NULL, false, - false + false }, { @@ -1478,9 +1466,8 @@ 0, NULL, false, - false -} -, + false +}, { SPELL_POISON_WEAPON, "Poison Weapon", @@ -1490,7 +1477,7 @@ 0, NULL, false, - false + false }, { @@ -1501,7 +1488,7 @@ 200, NULL, false, - false + false }, { @@ -1512,7 +1499,7 @@ 0, NULL, false, - false + false }, { @@ -1523,7 +1510,7 @@ 0, NULL, false, - false + false }, { @@ -1534,7 +1521,7 @@ 100, NULL, false, - false + false }, { @@ -1545,7 +1532,7 @@ 0, NULL, false, - false + false }, { @@ -1556,7 +1543,7 @@ 0, NULL, false, - false + false }, { @@ -1567,7 +1554,7 @@ 200, NULL, false, - false + false }, { @@ -1578,7 +1565,7 @@ 200, NULL, false, - false + false }, { @@ -1589,7 +1576,7 @@ 25, NULL, false, - false + false }, { @@ -1610,7 +1597,7 @@ 200, NULL, false, - false + false }, { @@ -1621,7 +1608,7 @@ 200, NULL, false, - false + false }, { @@ -1632,7 +1619,7 @@ 200, NULL, false, - false + false }, { @@ -1643,7 +1630,7 @@ 200, NULL, false, - false + false }, { @@ -1654,7 +1641,7 @@ 200, NULL, false, - false + false }, { @@ -1665,7 +1652,7 @@ 200, NULL, false, - false + false }, { @@ -1676,7 +1663,7 @@ 0, NULL, false, - false + false }, { @@ -1687,7 +1674,7 @@ 200, NULL, false, - false + false }, { @@ -1728,7 +1715,7 @@ 25, NULL, false, - false + false }, { @@ -1739,7 +1726,7 @@ 200, NULL, false, - false + false }, { @@ -1750,8 +1737,7 @@ 0, NULL, false -} -, +}, { SPELL_CONFUSING_TOUCH, "Confusing Touch", @@ -1761,7 +1747,7 @@ 200, NULL, false, - false + false }, { @@ -1772,11 +1758,9 @@ 200, NULL, false, - false + false }, - //jmf: new spells - { SPELL_FLAME_TONGUE, "Flame Tongue", SPTYP_CONJURATION | SPTYP_FIRE, @@ -1785,7 +1769,7 @@ 25, NULL, false, - false + false }, { @@ -1796,7 +1780,7 @@ 200, NULL, false, - false + false }, { @@ -1807,7 +1791,7 @@ 200, NULL, false, - false + false }, { @@ -1818,7 +1802,7 @@ 200, NULL, false, - false + false }, { @@ -1829,7 +1813,7 @@ 200, NULL, false, - false + false }, { @@ -1840,7 +1824,7 @@ 200, NULL, false, - false + false }, { @@ -1851,7 +1835,7 @@ 200, NULL, false, - false + false }, { @@ -1872,7 +1856,7 @@ 200, NULL, false, - false + false }, { @@ -1883,7 +1867,7 @@ 0, NULL, false, - false + false }, { @@ -1894,7 +1878,7 @@ 200, NULL, false, - false + false }, { @@ -1905,7 +1889,7 @@ 200, NULL, false, - false + false }, { @@ -1916,7 +1900,7 @@ 200, NULL, false, - false + false }, { @@ -1927,7 +1911,7 @@ 200, NULL, false, - false + false }, { @@ -1938,7 +1922,7 @@ 0, NULL, false, - false + false }, { @@ -1949,7 +1933,7 @@ 200, NULL, false, - false + false }, { @@ -1960,7 +1944,7 @@ 200, NULL, false, - false + false }, { @@ -1971,7 +1955,7 @@ 200, NULL, false, - false + false }, { @@ -1982,7 +1966,7 @@ 200, NULL, false, - false + false }, { @@ -1993,7 +1977,7 @@ 100, NULL, false, - false + false }, { @@ -2014,7 +1998,7 @@ 0, NULL, false, - false + false }, { @@ -2035,7 +2019,7 @@ 0, NULL, false, - false + false }, { @@ -2046,7 +2030,7 @@ 200, NULL, false, - false + false }, { @@ -2057,7 +2041,7 @@ 200, NULL, false, - false + false }, { @@ -2078,7 +2062,7 @@ 200, NULL, false, - false + false }, { @@ -2089,7 +2073,7 @@ 200, NULL, false, - false + false }, { @@ -2100,7 +2084,7 @@ 200, NULL, false, - false + false }, { @@ -2111,51 +2095,51 @@ 100, NULL, false, - false + false }, { - SPELL_STONESKIN, "Stoneskin", - SPTYP_EARTH | SPTYP_TRANSMIGRATION, // was ench -- bwr - SPFLAG_NONE, - 2, - 200, + SPELL_STONESKIN, "Stoneskin", + SPTYP_EARTH | SPTYP_TRANSMIGRATION, // was ench -- bwr + SPFLAG_NONE, + 2, + 200, NULL, false, - false + false }, { - SPELL_SIMULACRUM, "Simulacrum", - SPTYP_ICE | SPTYP_NECROMANCY, - SPFLAG_NONE, - 6, - 200, + SPELL_SIMULACRUM, "Simulacrum", + SPTYP_ICE | SPTYP_NECROMANCY, + SPFLAG_NONE, + 6, + 200, NULL, false, - false + false }, { - SPELL_CONJURE_BALL_LIGHTNING, "Conjure Ball Lightning", - SPTYP_AIR | SPTYP_CONJURATION, - SPFLAG_NONE, - 7, - 200, + SPELL_CONJURE_BALL_LIGHTNING, "Conjure Ball Lightning", + SPTYP_AIR | SPTYP_CONJURATION, + SPFLAG_NONE, + 7, + 200, NULL, false, - false + false }, { - SPELL_CHAIN_LIGHTNING, "Chain Lightning", - SPTYP_AIR | SPTYP_CONJURATION, - SPFLAG_NONE, - 8, - 200, + SPELL_CHAIN_LIGHTNING, "Chain Lightning", + SPTYP_AIR | SPTYP_CONJURATION, + SPFLAG_NONE, + 8, + 200, NULL, false, - false + false }, { @@ -2166,29 +2150,29 @@ 200, NULL, false, - false + false }, { SPELL_PORTAL_PROJECTILE, "Portal Projectile", - SPTYP_TRANSLOCATION, - SPFLAG_TARGET, - 2, - 50, - NULL, - false, - false + SPTYP_TRANSLOCATION, + SPFLAG_TARGET, + 2, + 50, + NULL, + false, + false }, { SPELL_SUMMON_UGLY_THING, "Summon Ugly Thing", - SPTYP_SUMMONING, - SPFLAG_NONE, - 5, - 200, - NULL, - false, - false + SPTYP_SUMMONING, + SPFLAG_NONE, + 5, + 200, + NULL, + false, + false }, { @@ -2199,174 +2183,174 @@ 200, NULL, false, - false + false }, { SPELL_VAMPIRE_SUMMON, "Vampire Summon", - SPTYP_SUMMONING, - SPFLAG_UNHOLY, - 3, - 0, - NULL, - false, - false + SPTYP_SUMMONING, + SPFLAG_UNHOLY, + 3, + 0, + NULL, + false, + false }, { SPELL_BRAIN_FEED, "Brain Feed", - SPTYP_NECROMANCY, - SPFLAG_UNHOLY, - 3, - 0, - NULL, - false, - false + SPTYP_NECROMANCY, + SPFLAG_UNHOLY, + 3, + 0, + NULL, + false, + false }, { SPELL_FAKE_RAKSHASA_SUMMON, "Rakshasa Summon", - SPTYP_SUMMONING | SPTYP_NECROMANCY, - SPFLAG_UNHOLY, - 3, - 0, - NULL, - false + SPTYP_SUMMONING | SPTYP_NECROMANCY, + SPFLAG_UNHOLY, + 3, + 0, + NULL, + false }, { SPELL_STEAM_BALL, "Steam Ball", - SPTYP_CONJURATION | SPTYP_FIRE, - SPFLAG_DIR_OR_TARGET, - 4, - 0, - NULL, - true + SPTYP_CONJURATION | SPTYP_FIRE, + SPFLAG_DIR_OR_TARGET, + 4, + 0, + NULL, + true }, { SPELL_SUMMON_UFETUBUS, "Summon Ufetubus", - SPTYP_SUMMONING, - SPFLAG_UNHOLY, - 4, - 0, - NULL, - false, - false + SPTYP_SUMMONING, + SPFLAG_UNHOLY, + 4, + 0, + NULL, + false, + false }, { SPELL_SUMMON_BEAST, "Summon Beast", - SPTYP_SUMMONING, - SPFLAG_UNHOLY, - 4, - 0, - NULL, - false + SPTYP_SUMMONING, + SPFLAG_UNHOLY, + 4, + 0, + NULL, + false }, { SPELL_ENERGY_BOLT, "Energy Bolt", - SPTYP_CONJURATION, - SPFLAG_DIR_OR_TARGET, - 4, - 0, - NULL, - true + SPTYP_CONJURATION, + SPFLAG_DIR_OR_TARGET, + 4, + 0, + NULL, + true }, { SPELL_POISON_SPLASH, "Poison Splash", - SPTYP_POISON, - SPFLAG_DIR_OR_TARGET, - 2, - 0, - NULL, - true + SPTYP_POISON, + SPFLAG_DIR_OR_TARGET, + 2, + 0, + NULL, + true }, { SPELL_SUMMON_UNDEAD, "Summon Undead", - SPTYP_SUMMONING | SPTYP_NECROMANCY, - SPFLAG_NONE, - 7, - 0, - NULL, - false, - false, + SPTYP_SUMMONING | SPTYP_NECROMANCY, + SPFLAG_NONE, + 7, + 0, + NULL, + false, + false, }, { SPELL_CANTRIP, "Cantrip", - SPTYP_NONE, - SPFLAG_NONE, - 1, - 0, - NULL, - false, - false + SPTYP_NONE, + SPFLAG_NONE, + 1, + 0, + NULL, + false, + false }, { SPELL_QUICKSILVER_BOLT, "Quicksilver Bolt", - SPTYP_CONJURATION, - SPFLAG_DIR_OR_TARGET, - 5, - 0, - NULL, - true + SPTYP_CONJURATION, + SPFLAG_DIR_OR_TARGET, + 5, + 0, + NULL, + true }, { SPELL_METAL_SPLINTERS, "Metal Splinters", - SPTYP_CONJURATION, - SPFLAG_DIR_OR_TARGET, - 5, - 0, - NULL, - true + SPTYP_CONJURATION, + SPFLAG_DIR_OR_TARGET, + 5, + 0, + NULL, + true }, { SPELL_MIASMA, "Miasma", - SPTYP_CONJURATION | SPTYP_NECROMANCY, - SPFLAG_DIR_OR_TARGET, - 6, - 0, - NULL, - true + SPTYP_CONJURATION | SPTYP_NECROMANCY, + SPFLAG_DIR_OR_TARGET, + 6, + 0, + NULL, + true }, { SPELL_SUMMON_DRAKES, "Summon Drakes", - SPTYP_SUMMONING, - SPFLAG_NONE, - 6, - 0, - NULL, - false, - false + SPTYP_SUMMONING, + SPFLAG_NONE, + 6, + 0, + NULL, + false, + false }, { SPELL_BLINK_OTHER, "Blink Other", - SPTYP_TRANSLOCATION, - SPFLAG_NONE, - 2, - 0, - NULL, - true + SPTYP_TRANSLOCATION, + SPFLAG_NONE, + 2, + 0, + NULL, + true }, { SPELL_SUMMON_MUSHROOMS, "Summon Mushrooms", - SPTYP_SUMMONING, - SPFLAG_NONE, - 4, - 0, - NULL, - false, - false + SPTYP_SUMMONING, + SPFLAG_NONE, + 4, + 0, + NULL, + false, + false }, { diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index f590cfdab9..13622f1e73 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -69,7 +69,7 @@ void init_spell_descs(void) spell_list[i] = -1; // can only use up to SPELLDATASIZE _MINUS ONE_, or the - // last entry tries to set spell_list[SPELL_NO_SPELL] + // last entry tries to set spell_list[SPELL_NO_SPELL] // which corrupts the heap. for (unsigned int i = 0; i < SPELLDATASIZE - 1; i++) spell_list[spelldata[i].id] = i; @@ -86,7 +86,7 @@ void init_spell_name_cache() if (!is_valid_spell(type)) continue; - + const char *sptitle = spell_title(type); ASSERT(sptitle); const std::string spell_name = lowercase_string(sptitle); @@ -116,7 +116,7 @@ spell_type spell_by_name(std::string name, bool partial_match) spell_type type = static_cast<spell_type>(i); if (!is_valid_spell(type)) continue; - + const char *sptitle = spell_title(type); const std::string spell_name = lowercase_string(sptitle); @@ -220,6 +220,10 @@ int spell_hunger(spell_type which_spell) return hunger; } +// Used to determine whether or not a monster should always fire this spell +// if selected. If not, we should use a tracer. + +// Note - this function assumes that the monster is "nearby" its target! bool spell_needs_tracer(spell_type spell) { return (_seekspell(spell)->ms_needs_tracer); @@ -333,7 +337,7 @@ int apply_area_visible( int (*func) (int, int, int, int), int power, // Applies the effect to all nine squares around/including the target. // Returns summation of return values from passed in function. -int apply_area_square( int (*func) (int, int, int, int), int cx, int cy, +int apply_area_square( int (*func) (int, int, int, int), int cx, int cy, int power ) { int x, y; @@ -353,7 +357,7 @@ int apply_area_square( int (*func) (int, int, int, int), int cx, int cy, // Applies the effect to the eight squares beside the target. // Returns summation of return values from passed in function. -int apply_area_around_square( int (*func) (int, int, int, int), +int apply_area_around_square( int (*func) (int, int, int, int), int targ_x, int targ_y, int power) { int x, y; @@ -375,7 +379,7 @@ int apply_area_around_square( int (*func) (int, int, int, int), // Effect up to max_targs monsters around a point, chosen randomly // Return varies with the function called; return values will be added up. int apply_random_around_square( int (*func) (int, int, int, int), - int targ_x, int targ_y, + int targ_x, int targ_y, bool hole_in_middle, int power, int max_targs ) { int rv = 0; @@ -400,15 +404,15 @@ int apply_random_around_square( int (*func) (int, int, int, int), { for (int y = targ_y - 1; y <= targ_y + 1; y++) { - if (hole_in_middle && (x == targ_x && y == targ_y)) + if (hole_in_middle && (x == targ_x && y == targ_y)) continue; - if (mgrd[x][y] == NON_MONSTER + if (mgrd[x][y] == NON_MONSTER && !(x == you.x_pos && y == you.y_pos)) { continue; } - + // Found target count++; @@ -486,7 +490,7 @@ int apply_random_around_square( int (*func) (int, int, int, int), } else if (random2( count ) < max_targs) { - const int pick = random2( max_targs ); + const int pick = random2( max_targs ); targs[ pick ].x = x; targs[ pick ].y = y; } @@ -749,7 +753,7 @@ void apply_area_cloud( int (*func) (int, int, int, int, cloud_type, // Select a spell direction and fill dist and pbolt appropriately. // Return false if the user canceled, true otherwise. -bool spell_direction( dist &spelld, bolt &pbolt, +bool spell_direction( dist &spelld, bolt &pbolt, targeting_type restrict, targ_mode_type mode, bool needs_path, const char *prompt ) { @@ -762,14 +766,14 @@ bool spell_direction( dist &spelld, bolt &pbolt, { // check for user cancel canned_msg(MSG_OK); - return false; + return (false); } pbolt.set_target(spelld); pbolt.source_x = you.x_pos; pbolt.source_y = you.y_pos; - return true; + return (true); } // end spell_direction() const char* spelltype_short_name( int which_spelltype ) |