I chose ranges more or less arbitrarily; better suggestions welcome.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8301 c06c8d41-db1a-0410-9941-cceddc491573
LFPHI3TJK5V4HPJJHCG5XATY23P25OVIZ4ITQVG354DJHPEPKU4AC POKOLCFPHHPP2CZE62SHPXKPU7ECALS4P2VKJLFOGBN2U66EWEPQC UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC CDFS7Z74W5HKPQIHQICOG442KQFXUSBGGLDDQLE3MG74T44YU6AQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC 5LIWCQ5G74WIMISKX3SBMZFPVVYEDNUIREAK55XYR5RTNSHVGDYQC WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC SUWIERONPDATHPDMZRYO6GYIXSW6XIS5V5MK5IV23DWQH2LL7VIAC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC DAVTHXRQBYQKWHKUKJVJ5EJXIFGVWMEHINLM3JE4FMV6AAYIBOVAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC OYANFNGKCXG2NLQMYW4TNFU3LFK3533XQ3HFGI3LNMY4JGMDMK5QC BNRY5YIXLFE2TDNU2JQHWWXJQVWNSEWQ52DU7XUWIT5DZWKGBDDAC 5P6MEKBISK6NI4MULM75HHFBQW5MXITSZJDGLLIDKJ7G24F7XYNAC }int _calc_breath_ability_range(ability_type ability){// Following monster draconian abilities.switch (ability){case ABIL_BREATHE_FIRE: return 6;case ABIL_BREATHE_FROST: return 6;case ABIL_BREATHE_POISON: return 7;case ABIL_BREATHE_LIGHTNING: return 8;case ABIL_SPIT_ACID: return 8;case ABIL_BREATHE_POWER: return 8;case ABIL_BREATHE_STICKY_FLAME: return 5;case ABIL_BREATHE_STEAM: return 7;default:ASSERT("Bad breath type!");break;}return (-2);
if (!spell_direction(spd, beam, DIR_NONE, TARG_ENEMY))return (false);
{// Note: power level of ball calculated at release -- bwrconst int pow = calc_spell_power(SPELL_DELAYED_FIREBALL, true);const int fake_range = spell_range(SPELL_FIREBALL, pow, false);
// Note: power level of ball calculated at release -- bwrfireball(calc_spell_power( SPELL_DELAYED_FIREBALL, true ), beam);
if (!spell_direction(spd, beam, DIR_NONE, TARG_ENEMY, fake_range))return (false);beam.range = spell_range(SPELL_FIREBALL, pow, true);fireball(pow, beam);}
else if (!spell_direction(abild, beam))return (false);
else{beam.range = _calc_breath_ability_range(abil.ability);if (!spell_direction(abild, beam, DIR_NONE, TARG_ENEMY, beam.range))return (false);}
case 0: zapping( ZAP_FLAME, power, beam ); break;case 1: zapping( ZAP_PAIN, power, beam ); break;case 2: zapping( ZAP_STONE_ARROW, power, beam ); break;case 3: zapping( ZAP_ELECTRICITY, power, beam ); break;case 4: zapping( ZAP_BREATHE_ACID, power / 2, beam ); break;
case 0: beam.range = 7; zapping(ZAP_FLAME, power, beam); break;case 1: beam.range = 8; zapping(ZAP_PAIN, power, beam); break;case 2: beam.range = 5; zapping(ZAP_STONE_ARROW, power, beam); break;case 3: beam.range = 13; zapping(ZAP_ELECTRICITY, power, beam); break;case 4: beam.range = 8; zapping(ZAP_BREATHE_ACID, power/2, beam); break;
case 0: zapping( ZAP_FIRE, power, beam ); break;case 1: zapping( ZAP_FIREBALL, power, beam ); break;case 2: zapping( ZAP_LIGHTNING, power, beam ); break;case 3: zapping( ZAP_NEGATIVE_ENERGY, power, beam ); break;case 4: zapping( ZAP_STICKY_FLAME, power, beam ); break;case 5: zapping( ZAP_IRON_BOLT, power, beam ); break;case 6: zapping( ZAP_ORB_OF_ELECTRICITY, power, beam ); break;
zap_type ztype = ZAP_DEBUGGING_RAY;switch (random2(7)){case 0: beam.range = 6; ztype = ZAP_FIRE; break;case 1: beam.range = 6; ztype = ZAP_FIREBALL; break;case 2: beam.range = 10; ztype = ZAP_LIGHTNING; break;case 3: beam.range = 5; ztype = ZAP_STICKY_FLAME; break;case 4: beam.range = 5; ztype = ZAP_IRON_BOLT; break;case 5: beam.range = 6; ztype = ZAP_NEGATIVE_ENERGY; break;case 6: beam.range = 20; ztype = ZAP_ORB_OF_ELECTRICITY; break;}zapping(ztype, power, beam);