/*
 *	Item generator 2, a simpler approch to the creation system
 *
 *	File: Prefix.weapon.c
 *	Descr: This file holds all weapon prefixes called by the
 *		weapon prefix/suffix generator.
 */

#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_prefix_weapon_poison (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_POISON;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "a poisoned %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}


OBJ_DATA * gen_prefix_weapon_flame (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_FLAMING;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "a flaming %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}

OBJ_DATA * gen_prefix_weapon_frost (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_FROST;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "a chilling %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}

OBJ_DATA * gen_prefix_weapon_electric (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_SHOCKING;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "an electric %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}

OBJ_DATA * gen_prefix_weapon_sharp (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_SHARP;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "a sharp %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}

OBJ_DATA * gen_prefix_weapon_vorpal (OBJ_DATA * obj, int level)
{

  AFFECT_DATA af;
  char prefix_full[MSL];

  af.where = TO_WEAPON;
  af.level = 20;
  af.duration = -1;
  af.location = 0;
  af.modifier = 0;
  af.bitvector = WEAPON_VORPAL;
  affect_to_obj (obj, &af);

  sprintf (prefix_full, "a vorpal %s", obj->short_descr);
  obj->short_descr = str_dup (prefix_full);

  return (obj);

}


OBJ_DATA * gen_prefix_weapon_maxdam (OBJ_DATA * obj, int level)
{
  char prefix_full[MSL];

	if (level >= 50)				// Quick hack for range
	{
	 level = 50;
	}

  int selection = number_range(1, level);		// Switch on level range
  int mod;

	// Now the selection of the modifier
	switch(selection)
	{
		default:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a jagged %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 1: case 2: case 3: case 4: case 5:
		case 6: case 7: case 8: case 9: case 10:
		 mod = number_range(1, 2);;
		 sprintf (prefix_full, "a jagged %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 11: case 12: case 13: case 14: case 15:
		case 16: case 17: case 18: case 19: case 20:
		 mod = number_range(3, 4);;
		 sprintf (prefix_full, "a deadly %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 21: case 22: case 23: case 24: case 25:
		case 26: case 27: case 28: case 29: case 30:
		 mod = number_range(5, 6);;
		 sprintf (prefix_full, "a vicious %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 31: case 32: case 33: case 34: case 35:
		case 36: case 37: case 38: case 39: case 40:
		 mod = number_range(7, 8);;
		 sprintf (prefix_full, "a brutal %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 41: case 42: case 43: case 44: case 45:
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(9, 10);;
		 sprintf (prefix_full, "a massive %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}

	obj->value[2]	+= mod;


  return (obj);
}


OBJ_DATA * gen_prefix_weapon_hitroll (OBJ_DATA * obj, int level)
{
  AFFECT_DATA *af = new_affect ();			// aff data				// Hack to save item's stats
  char prefix_full[MSL];

	if (level >= 50)				// Quick hack for range
	{
	 level = 50;
	}

  int selection = number_range(1, level);		// Switch on level range
  int mod;

	// Now the selection of the modifier
	switch(selection)
	{
		default:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a bronze %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 1: case 2: case 3: case 4: case 5:
		case 6: case 7: case 8: case 9: case 10:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a bronze %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 11: case 12: case 13: case 14: case 15:
		case 16: case 17: case 18: case 19: case 20:
		 mod = number_range(3, 4);
		 sprintf (prefix_full, "an iron %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 21: case 22: case 23: case 24: case 25:
		case 26: case 27: case 28: case 29: case 30:
 		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a silver %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 31: case 32: case 33: case 34: case 35:
		case 36: case 37: case 38: case 39: case 40:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a golden %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 41: case 42: case 43: case 44: case 45:
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(9, 10);
		 sprintf (prefix_full, "a platinum %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_HITROLL;
  af->modifier = mod;
  af->where = TO_OBJECT;
  af->type = 10;
  af->duration = -1;
  af->bitvector = 0;
  af->level = mod;
  af->next = obj->affected;
  obj->affected = af;

  return (obj);
}


/*
 * Utility functions for king's prefix
 */

OBJ_DATA * gen_util_weapon_hitroll (OBJ_DATA * obj, int level)
{

  AFFECT_DATA *af = new_affect ();

  af->location = APPLY_HITROLL;
  af->modifier = level;
  af->where = TO_OBJECT;
  af->type = 11;
  af->duration = -1;
  af->bitvector = 0;
  af->level = 250;
  af->next = obj->affected;
  obj->affected = af;

  return (obj);

}

OBJ_DATA * gen_util_weapon_damroll (OBJ_DATA * obj, int level)
{

  AFFECT_DATA *af = new_affect ();

  af->location = APPLY_DAMROLL;
  af->modifier = level;
  af->where = TO_OBJECT;
  af->type = 11;
  af->duration = -1;
  af->bitvector = 0;
  af->level = 250;
  af->next = obj->affected;
  obj->affected = af;

  return (obj);

}


OBJ_DATA * gen_prefix_weapon_hitdam (OBJ_DATA * obj, int level)
{

  char prefix_full[MSL];
//  AFFECT_DATA *af = new_affect ();			// aff data				// Hack to save item's stats

	if (level >= 50)				// Quick hack for range
	{
	 level = 50;
	}

  int selection = number_range(1, level);		// Switch on level range
  int mod;

	switch(selection)
	{
		default:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a warriors's %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 gen_util_weapon_damroll (obj, mod);
		 gen_util_weapon_hitroll (obj, mod);
		 break;

		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:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a warriors's %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 gen_util_weapon_damroll (obj, mod);
		 gen_util_weapon_hitroll (obj, mod);
		 break;
		case 16: case 17: case 18: case 19: case 20:
		case 21: case 22: case 23: case 24: case 25:
		case 26: case 27: case 28: case 29: case 30:
		 mod = number_range(3, 4);
		 sprintf (prefix_full, "a barbarian's %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 gen_util_weapon_damroll (obj, mod);
		 gen_util_weapon_hitroll (obj, mod);
		 break;
		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:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a soldier's %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 gen_util_weapon_damroll (obj, mod);
		 gen_util_weapon_hitroll (obj, mod);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a warlord's %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 gen_util_weapon_damroll (obj, mod);
		 gen_util_weapon_hitroll (obj, mod);
		 break;
	}

	return(obj);


}