Nearly all offensive magic provides for a mob save vs spell, which reduces cast damage by 50 - 75%. I've added a column that indicates which spells can be saved against, and by how much. SS value of 1 = 50% reduction. SS value of 2 = 75% reduction.
The MAG_BONUS variable is used to apply spell damage bonuses for high INT casters.
#define MAG_BONUS(ch) ( number(0,101)<int_app[GET_INT((ch))].pbonus?1:0 ) /* /* bonus = (if random_number < character's intelligence tier (0-99) then true else false) /* /* intelligence tiers based on char int (1-25): /* /* 5 1 /* 25 5 /* 50 10 /* 75 15 /* 82 18 /* 95 20 /* 99 25
| SPELL NAME | CLASS | DICE | ADD | INT/WIS
STAT BONUS |
DAM RANGE
L 30 |
SS
*** |
MANA
COST |
METADATA or PSEUDO-CODE |
|---|---|---|---|---|---|---|---|---|
| ATOMIC BLAST | M27 | 4-9 | 75-125 | 725-1400/mob | 2 | 150 | dam = number(4,9) * number(75,125) | |
| BRAIN IMPLOSION | J27 | 600-700 | 2 | 45 | 17*level + 25 int modifier | |||
| BURNING HANDS | M5 | 3D6 | 6 | *4 | 21-50 | 1 | 15 | dice(3,6)+6 + (MAG_BONUS(ch)<<2)) |
| BURNING HANDS | canned | 3D6 | 4 | 15 | dam = dice(3,6)+4 | |||
| CALL LIGHTNING | C15
R25 |
12D8 | 8 | 64-300 | 1 | 15 | dam *= (level/15) | |
| CAUSE CRITICAL | A12
C11 |
4D8 | LEVEL | 45-95 | 1 | 25 | (dam = dice(3,8)+ (level>>2))
(dam = dice(4,8) + (level>>1)) | |
| CAUSE LIGHT | A4
C3 |
2D6 | LEVEL | 25-50 | 1 | 15 | (dam = dice(1,8)+ (level>>2))
(dam = dice(2,6) + (level>>1))
| |
| CAUSE SERIOUS | A8
C7 |
3D7 | LEVEL | 35-70 | 1 | 20 | (dam = dice(2,8)+ (level>>2))
(dam = dice(3,7) + (level>>1))
| |
| CHILL TOUCH | M3 | 2D7 | 14-18 | 1 | 15 | 1.35 *(dice(2,7)+6) | ||
| CHOKING CLAW | J15 | 8D8 | 7 | *4 | 35-95 | 1 | 35 | |
| COLOR SPRAY | M11 | 7D8 | 6 | *2 | 40 | 1 | 20 | dice(7,8)+ 6+ (MAG_BONUS(ch)<<1)) |
| COLOR SPRAY | canned | 7D8 | 6 | 38 | ||||
| DISINTEGRATE | J24
M17 |
100-550 | 2 | 40 | 8*level*(curlev/17)
dam *= 2 (mage) | |||
| DISINTEGRATE | canned | 11D8 | 8 | 58 | ||||
| DISINTEGRATE | npc | 150 | ||||||
| DISPEL EVIL | C14 | XD4 | 50-150 | 1 | 25 | if ((GET_LEVEL(victim) < level) || (victim == ch))
dam = 100; else dam = dice(level,4); | ||
| EARTHQUAKE | C13
R28 |
2D8 | LEVEL | 50-162/mob | 2 | 30 | dam *= (level/13)
dam *= 2 (cleric) (ranger quake is only 2D8) | |
| ENERGY DRAIN | J17
M13 |
25-100 | 2 | 50 | (level 1 mob is killed instantly) else
xp = number(level>>1,level)*1000; gain_exp(victim, -xp); dam = (GET_LEVEL(ch)/(2*GET_LEVEL(victim))) * GET_MAX_HIT(victim); else /* dam = dice(2,8); too ineffectual */ dam = (GET_LEVEL(ch)/(2*GET_LEVEL(victim))) * (GET_MAX_HIT(victim)/2); | |||
| FIREBALL | M15 | 7D28 | 10 | MAG_BONUS(ch)<<1 | 90-150 | 1 | 40 | dice(7,(8+GET_LEVEL(ch)/4))+10+(MAG_BONUS(ch)<<1)) |
| FIREBALL | canned | 9D8 | 8 | 49 | ||||
| FIREBLAST | M19 | 9D14 | 10 | 160/mob | 2 | dam = dice(9,(8+GET_LEVEL(ch)/5))) + 10
dam = *2 (mages) | ||
| FISSION BOMB | M25 | 4-8 | 50-100 | 200-900/mob | 2 | 150 | dam = number(4,8) * number(50,100) | |
| FLAMESTRIKE | C30
A29 J28 |
11D8 | 8 | MAG_BONUS(ch)<<2 | 116-436 | 1 | 75 | dice(11,8)+8 + (MAG_BONUS(ch)<<2)
dam += dice(2,5)+4 |
| HARM | A20
C19 |
60-135 | 1 | 75 | dam = GET_HIT(victim) - dice(1,6);
if (dam < 0) dam = 0; /* Kill the suffering bastard */ else if (saves_spell(victim, SAVING_SPELL)) dam = MIN(50, dam>>1); | |||
| ICE STORM | M21 | 10D12 | 10 | 150-250/mob | 2 | 80 | dam = dice(10,12) + GET_LEVEL(ch) / 3)
dam = *2 (mages) | |
| JUDGMENT OF THE GODS | A23 | ? | ? | ? | 150-170/mob | none | 50 | ? |
| LIGHTNING BOLT | M9 | 7D8 | 10 | MAG_BONUS(ch) | 50-130 | 1 | 20 | 7D8 +10 + (MAG_BONUS) |
| LIGHTNING BOLT | canned | 5D8 | 9 | 32 | ||||
| MAGIC MISSILE | M1 | 1D6 | 3 | MAG_BONUS(ch) | 8 | 1 | 10-30 | dice(1,6)+3+MAG_BONUS(ch)) |
| MAGIC MISSILE | canned | 1D4 | 1 | 4 | dice(1,4)+1 | |||
| METEOR SWARM | M25 | 15D12 | 10 | MAG_BONUS(ch) | 220-320/mob | 2 | 125 | dam = dice(15,12) + GET_LEVEL(ch)/3 + MAG_BONUS(ch))
dam =* 2 (mages) |
| NERVE SHOCK | J25 | |||||||
| NUCLEAR SPELLS | canned | <75% mage damage> | ||||||
| PETRIFICATION | M27 | 200-1,300 | 2 | 100 | 30*level * 1.5
| |||
| PETRIFY | B29 | 1,305 | 2 | 50 | 30*level * 1.5
| |||
| SEARING GAZE | J20 | 8D17 | 10 | MAG_BONUS(ch)<<1 | 84-110 | 2 | 55 | 8D(9+30/4)+10+2 |
| SHOCKING GRASP | M6 | 8D6 | 9 | MAG_BONUS(ch) | 38 | 1 | 15 | |
| SHOCKING GRASP | canned | 6D6 | 6 | 28 | ||||
| SLAY | M23 | 450-750 | 2 | 75 | 15*level | |||
| SLAY | canned | 10*level | ||||||
| SLAY | npc | 200 | min(10*level,200) | |||||
| STAMPEDE | R30 | 15D12 | LEVEL/3 | 220/mob | 1 | 100 | dam = dice(15, 12) +GET_LEVEL(ch)/3;
dam *= 2; | |
| THERMONUCLEAR HOLOCAUST | M30 | 4-10 | 100-150 | 950-1800/mob | 2 | 150 | dam = number(4,10) * number(100, 150) | |
| WORD OF DEATH | M29 | 550-1,350 | 2 | 150 | 45*level | |||
| WORD OF DEATH | canned | 24*level | ||||||
| WORD OF DEATH | npc | sqrt(24^level) |
*** The spell save column denotes the level of spell damage reduction when a target rolls a saving throw. 0 means that there is no save, 1 = half damage and 2= quarter damage.
