/*
 *	Item Generator version 2
 *	File Description: Generator.weapon.rare.c

 *							-Thri
 */


#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 *
gen_weapon_rare (OBJ_DATA * obj, int level)
{
	int weapon_type = number_range(1, 6);
	char name_set[MSL];
	char shor_set[MSL];
	char long_set[MSL];
	char prefix[MSL];
	char suffix[MSL];

	int weapon_type_1_name = number_range(1, 5);
	int weapon_type_2_name = number_range(1, 5);
	int weapon_type_3_name = number_range(1, 5);
//	int weapon_type_4_name = number_range(1, 5);
	int weapon_type_5_name = number_range(1, 5);
	int weapon_type_6_name = number_range(1, 5);

	// Get the weapon type
	switch(weapon_type)
	{
		// case 1, slasher
		default:
		case 1:
		obj = create_object (get_obj_index (900), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Death's");
				break;

				case 2:
				sprintf(prefix, "Eternal");
				break;

				case 3:
				sprintf(prefix, "Dark");
				break;

				case 4:
				sprintf(prefix, "Onyx");
				break;

				case 5:
				sprintf(prefix, "ancient");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "sword");
				break;

				case 2:
				sprintf(suffix, "slasher");
				break;

				case 3:
				sprintf(suffix, "nightbringer");
				break;

				case 4:
				sprintf(suffix, "blade");
				break;

				case 5:
				sprintf(suffix, "blade of suffering");
				break;
			}

		break;
		// case 2, slicer
		case 2:
		obj = create_object (get_obj_index (901), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Crusader's");
				break;

				case 2:
				sprintf(prefix, "Runed");
				break;

				case 3:
				sprintf(prefix, "Holy");
				break;

				case 4:
				sprintf(prefix, "Unholy");
				break;

				case 5:
				sprintf(prefix, "Realms");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "blade");
				break;

				case 2:
				sprintf(suffix, "slicer");
				break;

				case 3:
				sprintf(suffix, "nightbringer");
				break;

				case 4:
				sprintf(suffix, "longsword");
				break;

				case 5:
				sprintf(suffix, "blade of eternal suffering");
				break;
			}
		break;
		// case 3, pound
		case 3:
		obj = create_object (get_obj_index (902), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Gleaming");
				break;

				case 2:
				sprintf(prefix, "Eternal");
				break;

				case 3:
				sprintf(prefix, "Pitchblack");
				break;

				case 4:
				sprintf(prefix, "Etherael");
				break;

				case 5:
				sprintf(prefix, "Blood stained");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "mace");
				break;

				case 2:
				sprintf(suffix, "pounder");
				break;

				case 3:
				sprintf(suffix, "mace of the sun");
				break;

				case 4:
				sprintf(suffix, "club");
				break;

				case 5:
				sprintf(suffix, "club of destruction");
				break;
			}
		break;
		// case 4, crusher
		case 4:
		obj = create_object (get_obj_index (903), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Mithril");
				break;

				case 2:
				sprintf(prefix, "Fine");
				break;

				case 3:
				sprintf(prefix, "Pitchblack");
				break;

				case 4:
				sprintf(prefix, "Etherael");
				break;

				case 5:
				sprintf(prefix, "Blood soaked");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "mace");
				break;

				case 2:
				sprintf(suffix, "crusher");
				break;

				case 3:
				sprintf(suffix, "neutralizer");
				break;

				case 4:
				sprintf(suffix, "bone crusher");
				break;

				case 5:
				sprintf(suffix, "pain bringer");
				break;
			}
		break;
		// case 5, piercer
		case 5:
		obj = create_object (get_obj_index (904), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Gleaming");
				break;

				case 2:
				sprintf(prefix, "ancient");
				break;

				case 3:
				sprintf(prefix, "Onyx");
				break;

				case 4:
				sprintf(prefix, "Sapphire");
				break;

				case 5:
				sprintf(prefix, "Evil looking");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "dagger");
				break;

				case 2:
				sprintf(suffix, "stilletio");
				break;

				case 3:
				sprintf(suffix, "piercer");
				break;

				case 4:
				sprintf(suffix, "killer");
				break;

				case 5:
				sprintf(suffix, "dagger of pain");
				break;
			}
		break;
		// case 6, Whip
		case 6:
		obj = create_object (get_obj_index (905), 0);
			// Select Prefix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(prefix, "Wicked");
				break;

				case 2:
				sprintf(prefix, "Crackling");
				break;

				case 3:
				sprintf(prefix, "Eternal");
				break;

				case 4:
				sprintf(prefix, "Barbed");
				break;

				case 5:
				sprintf(prefix, "Ancient");
				break;
			}
			// Select Suffix
			switch(number_range(1, 5))
			{	default:
				case 1:
				sprintf(suffix, "whip");
				break;

				case 2:
				sprintf(suffix, "lash");
				break;

				case 3:
				sprintf(suffix, "backlash");
				break;

				case 4:
				sprintf(suffix, "laso");
				break;

				case 5:
				sprintf(suffix, "whip of sorrow");
				break;
			}
		break;
	}

	switch(number_range(1, 2))
	{
		default:
		case 1:
		gen_weapon_choice (obj, level);
		gen_weapon_choice (obj, level);
		break;
		case 2:
		gen_weapon_choice (obj, level);
		gen_weapon_choice (obj, level);
		gen_weapon_choice (obj, level);
		break;
	}

	// Now we set the name of the object as well as type

	/* Slashing weapons first */
	if (weapon_type == 1)
	{
		switch(weapon_type_1_name)
		{
			case 1:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 2:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 3:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 4:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 5:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;
		}
	}

	/* Sliceing weapons */
	if (weapon_type == 2)
	{
		switch(weapon_type_2_name)
		{
			case 1:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 2:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 3:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 4:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 5:
			obj->value[0] = 1;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;
		}
	}


	/* Pound and crush */
	if ( (weapon_type == 3) || (weapon_type == 4) )
	{
		switch(weapon_type_3_name)
		{
			case 1:
			obj->value[0] = 4;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 2:
			obj->value[0] = 4;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 3:
			obj->value[0] = 4;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 4:
			obj->value[0] = 4;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 5:
			obj->value[0] = 4;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;
		}
	}

	if (weapon_type == 5)
	{
		switch(weapon_type_5_name)
		{
			case 1:
			obj->value[0] = 2;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 2:
			obj->value[0] = 2;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 3:
			obj->value[0] = 2;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 4:
			obj->value[0] = 2;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 5:
			obj->value[0] = 2;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;
		}
	}

	if (weapon_type == 6)
	{
		switch(weapon_type_6_name)
		{
			case 1:
			obj->value[0] = 7;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 2:
			obj->value[0] = 7;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 3:
			obj->value[0] = 7;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 4:
			obj->value[0] = 7;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;

			case 5:
			obj->value[0] = 7;
			sprintf(name_set, "%s %s", prefix, suffix);
			sprintf(shor_set, "%s %s", prefix, suffix);
			sprintf(long_set, "%s %s is on the ground here", prefix, suffix);
			obj->name        = str_dup (name_set);
			obj->short_descr = str_dup (shor_set);
			obj->description  = str_dup (long_set);
			break;
		}
	}



/* END : Set the Damage of the weapon */
   obj->value[1] = number_range( (level / 2), level);			// Min dam
   obj->value[2] = number_range( level, (level + level) );		// Max dam
   obj->level    = number_range( (level -5), (level +5) );		// Level
   obj->weight   = number_range(3, 8);					// Weight
   obj->cost     = number_range(1, (level * 5) );			// Value

   return (obj);
}