/*
 *	Item generator 2, a simpler approch to the creation system
 *
 *	File: Generator.Ring.c
 *	Descr: This file holds the main generation of Ring items
 *	       Makes sure Ring has magical property
 */

#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_ring (OBJ_DATA * obj, int level)
{
	char name_set[MSL];
	char shor_set[MSL];
	char long_set[MSL];

	obj = create_object (get_obj_index (910), 0);
	obj->wear_flags =  ITEM_TAKE;
	obj->wear_flags += ITEM_WEAR_FINGER;

	sprintf(name_set, "ring");
	sprintf(shor_set, "ring");
	sprintf(long_set, "a small ring is on the ground here");
	obj->name        = str_dup (name_set);
	obj->short_descr = str_dup (shor_set);
	obj->description  = str_dup (long_set);

	int prefix_suffix = number_range(1, 3);

	switch(prefix_suffix)
	{
		default:
		case 1:
		gen_ring_prefix (obj, level);
		break;

		case 2:
		/* Quick hack for visual ascetics */
		sprintf(shor_set, "a ring");
		obj->short_descr = str_dup (shor_set);
		gen_ring_suffix (obj, level);
		break;

		case 3:
		gen_ring_prefix (obj, level);
		gen_ring_suffix (obj, level);
		break;
	}

	return(obj);
}


OBJ_DATA *
new_gen_ammy (OBJ_DATA * obj, int level)
{
	char name_set[MSL];
	char shor_set[MSL];
	char long_set[MSL];

	obj = create_object (get_obj_index (911), 0);
	obj->wear_flags =  ITEM_TAKE;
	obj->wear_flags += ITEM_WEAR_NECK;

	sprintf(name_set, "amulet");
	sprintf(shor_set, "amulet");
	sprintf(long_set, "a small amulet is on the ground here.");
	obj->name        = str_dup (name_set);
	obj->short_descr = str_dup (shor_set);
	obj->description  = str_dup (long_set);

	int prefix_suffix = number_range(1, 3);

	switch(prefix_suffix)
	{
		default:
		case 1:
		gen_ring_prefix (obj, level);
		break;

		case 2:
		/* Quick hack for visual ascetics */
		sprintf(shor_set, "an amulet");
		obj->short_descr = str_dup (shor_set);
		gen_ring_suffix (obj, level);
		break;

		case 3:
		gen_ring_prefix (obj, level);
		gen_ring_suffix (obj, level);
		break;
	}

	return(obj);
}


OBJ_DATA *
gen_ring_suffix (OBJ_DATA * obj, int level)
{
  if (level >= 50)	// Quick hack for range
  {
   level = 50;
  }

  int choices_suffix = number_range(1, level);

	switch(choices_suffix)
	{
		default:
		case 1:  case 2:  case 3:  case 4:  case 5:
		case 6:  case 7:  case 8:  case 9:  case 10:
		case 11: case 12: case 13: case 14: case 15:
		case 16: case 17: case 18: case 19: case 20:
			switch(number_range(1, 3))
			{	default:
				case 1:
				case 2:
				gen_prefix_armor_ac (obj, level);
				break;
				case 3:
				gen_prefix_armor_hitroll (obj, level);
				break;
			}
		break;
		case 21: case 22: case 23: case 24: case 25:
		case 26: case 27: case 28: case 29: case 30:
		case 31: case 32: case 33: case 34: case 35:
		case 36: case 37: case 38: case 39: case 40:
			switch(number_range(1, 0))
			{	default:
				case 1:
				case 2:
				gen_prefix_armor_ac (obj, level);
				break;
				case 4:
				gen_prefix_armor_hitroll (obj, level);
				break;
				case 5:
				gen_prefix_armor_res_fire (obj, level);
				break;
				case 6:
				gen_prefix_armor_res_cold (obj, level);
				break;
				case 7:
				gen_prefix_armor_res_holy (obj, level);
				break;
				case 8:
				gen_prefix_armor_res_negi (obj, level);
				break;
				case 9:
				gen_prefix_armor_res_pierce (obj, level);
				break;
				case 10:
				gen_prefix_armor_res_slash (obj, level);
				break;
				case 3:
				gen_prefix_armor_res_magic (obj, level);
				break;
			}
		break;
		case 41: case 42: case 43: case 44: case 45:
		case 46: case 47: case 48: case 49: case 50:
			switch(number_range(1, 11))
			{	default:
				case 1:
				case 2:
				gen_prefix_armor_ac (obj, level);
				break;
				case 3:
				gen_prefix_armor_saves (obj, level);
				break;
				case 4:
				gen_prefix_armor_hitroll (obj, level);
				break;
				case 5:
				gen_prefix_armor_res_fire (obj, level);
				break;
				case 6:
				gen_prefix_armor_res_cold (obj, level);
				break;
				case 7:
				gen_prefix_armor_res_holy (obj, level);
				break;
				case 8:
				gen_prefix_armor_res_negi (obj, level);
				break;
				case 9:
				gen_prefix_armor_res_pierce (obj, level);
				break;
				case 10:
				gen_prefix_armor_res_slash (obj, level);
				break;
				case 11:
				gen_prefix_armor_res_magic (obj, level);
				break;
			}
		break;
	}

  return(obj);
}

OBJ_DATA *
gen_ring_prefix (OBJ_DATA * obj, int level)
{
  if (level >= 50)	// Quick hack for range
  {
   level = 50;
  }

  int choices_prefix = number_range(1, level);

	switch(choices_prefix)
	{	default:
		case 1:  case 2:  case 3:  case 4:  case 5:
		case 6:  case 7:  case 8:  case 9:  case 10:
			switch(number_range(1, 6))
			{
				default:
				case 1:
				gen_suffix_armor_wis(obj, level);
				break;
				case 2:
				gen_suffix_armor_int(obj, level);
				break;
				case 3:
				gen_suffix_armor_con(obj, level);
				break;
				case 4:
				gen_suffix_armor_str(obj, level);
				break;
				case 5:
				gen_suffix_armor_dex(obj, level);
				break;
				case 6:
				gen_suffix_weapon_damroll(obj, level);
				break;
			}
			break;
		case 11: case 12: case 13: case 14: case 15:
		case 16: case 17: case 18: case 19: case 20:
			switch(number_range(1, 9))
			{
				default:
				case 1:
				gen_suffix_armor_wis(obj, level);
				break;
				case 2:
				gen_suffix_armor_int(obj, level);
				break;
				case 3:
				gen_suffix_armor_con(obj, level);
				break;
				case 4:
				gen_suffix_armor_str(obj, level);
				break;
				case 5:
				gen_suffix_armor_dex(obj, level);
				break;
				case 6:
				gen_suffix_weapon_damroll(obj, level);
				break;
				case 7:
				gen_suffix_armor_hp(obj, level);
				break;
				case 8:
				gen_suffix_armor_mana(obj, level);
				break;
				case 9:
				gen_suffix_armor_move(obj, level);
				break;
			}
			break;
		case 21: case 22: case 23: case 24: case 25:
		case 26: case 27: case 28: case 29: case 30:
		case 31: case 32: case 33: case 34: case 35:
		case 36: case 37: case 38: case 39: case 40:
		case 41: case 42: case 43: case 44: case 45:
		case 46: case 47: case 48: case 49: case 50:
			switch(number_range(1, 13))
			{
				default:
				case 1:
				gen_suffix_armor_wis(obj, level);
				break;
				case 2:
				gen_suffix_armor_int(obj, level);
				break;
				case 3:
				gen_suffix_armor_con(obj, level);
				break;
				case 4:
				gen_suffix_armor_str(obj, level);
				break;
				case 5:
				gen_suffix_armor_dex(obj, level);
				break;
				case 6:
				gen_suffix_weapon_damroll(obj, level);
				break;
				case 7:
				gen_suffix_armor_hp(obj, level);
				break;
				case 8:
				gen_suffix_armor_mana(obj, level);
				break;
				case 9:
				gen_suffix_armor_move(obj, level);
				break;
				case 10:
				gen_suffix_armor_luck(obj, level);
				break;
				case 11:
				gen_suffix_armor_intui(obj, level);
				break;
				case 12:
				gen_suffix_armor_resil(obj, level);
				break;
				case 13:
				gen_suffix_weapon_force(obj, level);
				break;
				case 14:
				gen_suffix_weapon_speed(obj, level);
				break;
			}
			break;
	}

  return(obj);
}