/*
 *	Item generator 2, a simpler approch to the creation system
 *
 *	File: Prefix.armor.c
 *	Descr: This file holds all Armor prefixes called by the
 *		Armor 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_armor_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);
}

OBJ_DATA * gen_prefix_armor_ac (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, -5);
		 sprintf (prefix_full, "a sturdy %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, -5);
		 sprintf (prefix_full, "a sturdy %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(-6, -10);
		 sprintf (prefix_full, "a strong %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(-11, -15);
		 sprintf (prefix_full, "a glorious %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(-16, -20);
		 sprintf (prefix_full, "a blessed %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;

		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(-21, -25);
		 sprintf (prefix_full, "a holy %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(-26, -30);
		 sprintf (prefix_full, "a godly %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_AC;
  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);
}


OBJ_DATA * gen_prefix_armor_saves (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 protected %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 protected %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 angelic %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 demi-god's %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 godly protected %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(-9, -10);
		 sprintf (prefix_full, "a divinly protected %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_SAVES;
  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);
}


OBJ_DATA * gen_prefix_armor_res_fire (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 crimson %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a crimson %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 burgandy %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a garnet %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a ruby %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_FIRE;
  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);
}

OBJ_DATA * gen_prefix_armor_res_cold (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, "an azure %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "an azure %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 lapis %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a cobalt %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a sapphire %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_COLD;
  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);
}


OBJ_DATA * gen_prefix_armor_res_holy (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, "an ocher %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "an ocher %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 tangerine %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a coral %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "an amber %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_HOLY;
  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);
}


OBJ_DATA * gen_prefix_armor_res_negi (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 blackened %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a blackened %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 charcol %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a grey %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "an onyx %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_NEGI;
  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);
}



OBJ_DATA * gen_prefix_armor_res_pierce (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 solid %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a solid %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 un-peneatrable %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a shiny %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a pierce resistant %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_PIERCE;
  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);
}



OBJ_DATA * gen_prefix_armor_res_slash (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 green %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a green %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 light green %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a forest %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a slash resistant %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_SLASH;
  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);
}

OBJ_DATA * gen_prefix_armor_res_bash (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 padded %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "a padded %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 blue %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a sky blue %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a bash resistant %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_BASH;
  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);
}

OBJ_DATA * gen_prefix_armor_res_magic (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, "an aqua %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:
		case 11: case 12: case 13: case 14: case 15:
		 mod = number_range(1, 2);
		 sprintf (prefix_full, "an aqua %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 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 light blue %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:
		case 41: case 42: case 43: case 44: case 45:
		 mod = number_range(5, 6);
		 sprintf (prefix_full, "a grenish blue %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
		case 46: case 47: case 48: case 49: case 50:
		 mod = number_range(7, 8);
		 sprintf (prefix_full, "a magic resistant %s", obj->short_descr);
		 obj->short_descr = str_dup (prefix_full);
		 break;
	}


  af->location = APPLY_RES_MAGIC;
  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);
}