/*
 *	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);

}