/* This will be the table for spells.
* It will be the place spells.c will look for when it casts a spell, and the
* guld will find the spells to add to a player.
* This will reduce the memory requirements in the spell array in the player obs
* But it may be slower than the old system. I am not sure yet tho..
* Started sept 11 '93 by Baldrick.
*/
/* the complete array will not be finished until I know what I need */
/* it looks like the easiest method is to have two tables, one for sphere/spell
* and one for spell/filename.. Shame ..*/
/*** Addition of spells and new spheres started by Eerevann Nov 93 ***/
mixed query_spellist()
{
mixed list;
int level;
string bing;
list = ({ });
level = this_player()->query_level();
/* I'm afraid we have to put a query_spell into all the cases.. */
/* this is the way of adding a sphere/school */
/*** Level/Spell progression is as per AD&D ***/
/*** CLERIC MAGIC ***/
/*** 1st level spells at 1st level, 2nd level spells at 3rd level ***/
/*** 3rd level spells at 5th level, 4th level spells at 7th level ***/
/*** 5th level spells at 9th level, 6th level spells at 11th level ***/
/*** 7th level spells at 14th level ***/
/*** WIZARD MAGIC ***/
/*** 1st level spells at 1st level, 2nd level spells at 3rd level ***/
/*** 3rd level spells at 5th level, 4th level spells at 7th level ***/
/*** 5th level spells at 9th level, 6th level spells at 12th level ***/
/*** 7th level spells at 14th level 8th level spells at 16th level ***/
/*** 9th level spells at 18th level ***/
if (this_player()->query_sphere("all"))
{
switch(level)
{
case 14..1000:
case 11..13:
case 9..10:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
if(!this_player()->query_spell("bless"))
list += ({"bless"});
break;
}
} /* if ALL SPHERE */
if (this_player()->query_sphere("healing"))
{
switch(level)
{
case 1..2:
if (!this_player()->query_spell("cure light wounds"))
list += ({"cure light wounds",});
if (!this_player()->query_spell("cause light wounds"))
list += ({"cause light wounds",});
break;
}
} /* if HEALING SPHERE */
if (this_player()->query_sphere("plant"))
{
switch(level)
{
case 14..1000:
case 11..13:
if(!this_player()->query_spell("pacify"))
list += ({ "pacify", });
case 9..10:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if PLANT */
if (this_player()->query_sphere("sun"))
{
switch(level)
{
case 14..1000:
case 11..13:
case 9..10:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
if(!this_player()->query_spell("light"))
list += ({"light",});
break;
}
} /* if SUN */
if (this_player()->query_sphere("weather"))
{
switch(level)
{
case 14..1000:
case 11..13:
case 9..10:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if WEATHER */
/*** THIS SECTION FOR MAGE SCHOOLS ****/
if (this_player()->query_sphere("abjuration"))
{
switch(level)
{
case 30..1000:
case 18..29:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if ABJURATION */
if (this_player()->query_sphere("alteration"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if ALTERATION */
if (this_player()->query_sphere("conjuration"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if CONJURATION */
if (this_player()->query_sphere("enchantment"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if enchantment */
if (this_player()->query_sphere("aphelic"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if aphelic */
if (this_player()->query_sphere("illusion"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if ILLUSION */
if (this_player()->query_sphere("invocation"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 10..11:
case 9:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if INVOCATION */
if (this_player()->query_sphere("lesserdivination"))
{
switch(level)
{
case 7..1000:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if LESSERDIVINATION EVERY SPECIALIST AND WIZARD GETS THIS */
if (this_player()->query_sphere("greaterdivination"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
break;
}
} /* if GREATER DIVINATION 5TH LEVEL MAGIC AND HIGHER */
if (this_player()->query_sphere("necromancy"))
{
switch(level)
{
case 18..1000:
case 16..17:
case 14..15:
case 12..13:
case 9..11:
case 7..8:
case 5..6:
case 3..4:
case 1..2:
break;
}
} /* if NECROMANCY */
if(this_player()->query_sphere("test"))
{
switch(level)
{
case 1..1000:
if(!this_player()->query_spell("teleport"))
list += ({"teleport",});
if(!this_player()->query_spell("typetest"))
list += ({"typetest",});
if(!this_player()->query_spell("test"))
list+= ({"test",});
break;
}
} /*** TEST SPHERE, for testing spells...doh! ***/
return list;
} /* mixed query_spellist */
string query_spellfilename(string spell)
{
if (spell)
{
switch (spell)
{
/*** Cleric Spell Listing, also Ranger and Paladin ****/
case "symbol transformation": return ("sym_spell");
case "holy storm": return "holy_stm";
case "pacify": return ("pacify");
case "cure light wounds": return ("cure_lt");
case "bless": return ("bless");
case "spirit armour": return ("sp_armour");
}
} /* if (spell) */
return 0;
} /* query_spellfilename */