/* * Item generator 2, a simpler approch to the creation system * * File: Generator.Magic.c * Descr: This file holds the creation of wands/scrolls/staves/potions/pills * All related functions are within this file. * */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "interp.h" #include "magic.h" #include "recycle.h" #include "tables.h" OBJ_DATA * new_gen_magic (OBJ_DATA * obj, int level) { int magic_type = number_range(1, 5); /* Wands */ if (magic_type == 1) { obj = create_object (get_obj_index (912), 0); gen_wand_spell(obj, level); return(obj); } /* Scrolls */ else if (magic_type == 2) { obj = create_object (get_obj_index (913), 0); gen_scroll_spell(obj, level); return(obj); } /* Staffs */ else if (magic_type == 3) { obj = create_object (get_obj_index (914), 0); gen_staff_spell(obj, level); return(obj); } /* Potion */ else if (magic_type == 4) { obj = create_object (get_obj_index (915), 0); gen_potion_spell(obj, level); return(obj); } /* Potion */ else if (magic_type == 5) { obj = create_object (get_obj_index (916), 0); gen_pill_spell(obj, level); return(obj); } else { obj = create_object (get_obj_index (912), 0); gen_wand_spell(obj, level); return(obj); } } OBJ_DATA *gen_wand_spell (OBJ_DATA * obj, int level) { int range = number_range(1, 10); char spell_buf[MSL]; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_level = number_range(1, level); int charges = number_range(1, (level/2)); int spell_num; switch(range) { default: case 1: spell_num = skill_lookup ("cure poison"); sprintf( spell_buf, "Cure poison"); break; case 2: spell_num = skill_lookup ("stone skin"); sprintf( spell_buf, "stone skin"); break; case 3: spell_num = skill_lookup ("chill touch"); sprintf( spell_buf, "chill touch"); break; case 4: spell_num = skill_lookup ("cure disease"); sprintf( spell_buf, "cure disease"); break; case 5: spell_num = skill_lookup ("heal"); sprintf( spell_buf, "heal"); break; case 6: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 7: spell_num = skill_lookup ("barkskin"); sprintf( spell_buf, "barkskin"); break; case 8: spell_num = skill_lookup ("Hawk spirit"); sprintf( spell_buf, "Hawk spirit"); break; case 9: spell_num = skill_lookup ("cancellation"); sprintf( spell_buf, "cancellation"); break; case 10: spell_num = skill_lookup ("haste"); sprintf( spell_buf, "haste"); break; } sprintf(name_set, "pill %s", spell_buf); sprintf(shor_set, "a pill of %s", spell_buf); sprintf(long_set, "a pill of %s is on the ground here.", spell_buf); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->level = obj_level; obj->weight = 10; obj->cost = number_range(1000, 25000); obj->value[0] = number_range( (level / 2) , level); obj->value[1] = charges; obj->value[2] = number_range( (charges / 2) , charges ); obj->value[3] = spell_num; return(obj); } OBJ_DATA *gen_scroll_spell (OBJ_DATA * obj, int level) { int range = number_range(1, 10); char spell_buf[MSL]; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_level = number_range(1, level); // int charges = number_range(1, (level/2)); int spell_num; switch(range) { default: case 1: spell_num = skill_lookup ("cure poison"); sprintf( spell_buf, "Cure poison"); break; case 2: spell_num = skill_lookup ("colour spray"); sprintf( spell_buf, "colour spray"); break; case 3: spell_num = skill_lookup ("chill touch"); sprintf( spell_buf, "chill touch"); break; case 4: spell_num = skill_lookup ("harm"); sprintf( spell_buf, "harm"); break; case 5: spell_num = skill_lookup ("heal"); sprintf( spell_buf, "heal"); break; case 6: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 7: spell_num = skill_lookup ("barkskin"); sprintf( spell_buf, "barkskin"); break; case 8: spell_num = skill_lookup ("Hawk spirit"); sprintf( spell_buf, "Hawk spirit"); break; case 9: spell_num = skill_lookup ("cancellation"); sprintf( spell_buf, "cancellation"); break; case 10: spell_num = skill_lookup ("demonfire"); sprintf( spell_buf, "demonfire"); break; } sprintf(name_set, "scroll %s", spell_buf); sprintf(shor_set, "a scroll titled '%s'", spell_buf); sprintf(long_set, "a scroll titled '%s' is on the ground here.", spell_buf); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->level = obj_level; obj->weight = 10; obj->cost = number_range(1000, 25000); obj->value[0] = number_range( (level / 2) , level); obj->value[1] = spell_num; if (level >= 15) { obj->value[2] = spell_num; } if (level >= 35) { obj->value[3] = spell_num; } return(obj); } OBJ_DATA * gen_staff_spell (OBJ_DATA * obj, int level) { int range = number_range(1, 10); char spell_buf[MSL]; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_level = number_range(1, level); int charges = number_range(1, (level/2)); int spell_num; switch(range) { default: case 1: spell_num = skill_lookup ("cure poison"); sprintf( spell_buf, "Cure poison"); break; case 2: spell_num = skill_lookup ("colour spray"); sprintf( spell_buf, "colour spray"); break; case 3: spell_num = skill_lookup ("chill touch"); sprintf( spell_buf, "chill touch"); break; case 4: spell_num = skill_lookup ("harm"); sprintf( spell_buf, "harm"); break; case 5: spell_num = skill_lookup ("heal"); sprintf( spell_buf, "heal"); break; case 6: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 7: spell_num = skill_lookup ("barkskin"); sprintf( spell_buf, "barkskin"); break; case 8: spell_num = skill_lookup ("Hawk spirit"); sprintf( spell_buf, "Hawk spirit"); break; case 9: spell_num = skill_lookup ("cancellation"); sprintf( spell_buf, "cancellation"); break; case 10: spell_num = skill_lookup ("demonfire"); sprintf( spell_buf, "demonfire"); break; } sprintf(name_set, "staff %s", spell_buf); sprintf(shor_set, "a staff of %s", spell_buf); sprintf(long_set, "a staff of %s is on the ground here.", spell_buf); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->level = obj_level; obj->weight = 10; obj->cost = number_range(1000, 25000); obj->value[0] = number_range( (level / 2) , level); obj->value[1] = charges; obj->value[2] = number_range( (charges / 2) , charges ); obj->value[3] = spell_num; return(obj); } OBJ_DATA * gen_potion_spell (OBJ_DATA * obj, int level) { int range = number_range(1, 10); char spell_buf[MSL]; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_level = number_range(1, level); // int charges = number_range(1, (level/2)); int spell_num; switch(range) { default: case 1: spell_num = skill_lookup ("cure poison"); sprintf( spell_buf, "Cure poison"); break; case 2: spell_num = skill_lookup ("haste"); sprintf( spell_buf, "haste"); break; case 3: spell_num = skill_lookup ("pass door"); sprintf( spell_buf, "pass door"); break; case 4: spell_num = skill_lookup ("shield"); sprintf( spell_buf, "shield"); break; case 5: spell_num = skill_lookup ("heal"); sprintf( spell_buf, "heal"); break; case 6: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 7: spell_num = skill_lookup ("barkskin"); sprintf( spell_buf, "barkskin"); break; case 8: spell_num = skill_lookup ("Hawk spirit"); sprintf( spell_buf, "Hawk spirit"); break; case 9: spell_num = skill_lookup ("cancellation"); sprintf( spell_buf, "cancellation"); break; case 10: spell_num = skill_lookup ("oliphaunt armour"); sprintf( spell_buf, "oliphaunt armour"); break; } sprintf(name_set, "potion %s", spell_buf); sprintf(shor_set, "a potion of '%s'", spell_buf); sprintf(long_set, "a potion of '%s' is on the ground here.", spell_buf); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->level = obj_level; obj->weight = 10; obj->cost = number_range(1000, 25000); obj->value[0] = number_range( (level / 2) , level); obj->value[1] = spell_num; if (level >= 15) { obj->value[2] = spell_num; } if (level >= 35) { obj->value[3] = spell_num; } if (level >= 45) { obj->value[4] = spell_num; } return(obj); } OBJ_DATA * gen_pill_spell (OBJ_DATA * obj, int level) { int range = number_range(1, 10); char spell_buf[MSL]; char name_set[MSL]; char shor_set[MSL]; char long_set[MSL]; int obj_level = number_range(1, level); // int charges = number_range(1, (level/2)); int spell_num; switch(range) { default: case 1: spell_num = skill_lookup ("cure poison"); sprintf( spell_buf, "Cure poison"); break; case 2: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 3: spell_num = skill_lookup ("4x exp"); sprintf( spell_buf, "4x experience"); break; case 4: spell_num = skill_lookup ("oliphaunt armour"); sprintf( spell_buf, "oliphaunt armour"); break; case 5: spell_num = skill_lookup ("heal"); sprintf( spell_buf, "heal"); break; case 6: spell_num = skill_lookup ("ice shield"); sprintf( spell_buf, "ice shield"); break; case 7: spell_num = skill_lookup ("barkskin"); sprintf( spell_buf, "barkskin"); break; case 8: spell_num = skill_lookup ("Hawk spirit"); sprintf( spell_buf, "Hawk spirit"); break; case 9: spell_num = skill_lookup ("cancellation"); sprintf( spell_buf, "cancellation"); break; case 10: spell_num = skill_lookup ("healer mana "); sprintf( spell_buf, "mana infuse"); break; } sprintf(name_set, "pill %s", spell_buf); sprintf(shor_set, "a pill of '%s'", spell_buf); sprintf(long_set, "a pill of '%s' is on the ground here.", spell_buf); obj->name = str_dup (name_set); obj->short_descr = str_dup (shor_set); obj->description = str_dup (long_set); obj->level = obj_level; obj->weight = 10; obj->cost = number_range(1000, 25000); obj->value[0] = number_range( (level / 2) , level); obj->value[1] = spell_num; if (level >= 15) { obj->value[2] = spell_num; } if (level >= 35) { obj->value[3] = spell_num; } if (level >= 45) { obj->value[4] = spell_num; } return(obj); }