def __init__(self, name="Mr. Swagger"):
		self.name  = name
		self.hp    = 20
		self.maxHP = self.hp
		self.lvl   = 100
		self.xp    = 0
		self.lvlup = 1
		self.money = 20

		self.effects = []

		self.defence = 0
		self.attack  = 0
		self.reach   = 2
		self.view    = 5

		self.maxInv  = 15
		# Add a couple of test items to the player's inventory
		self.inv     = [item(0,0,"h","Noob Helmet","It is a starter's helmet.","head",1,[]),
		                item(0,0,"c","Noob Chest Plate","It is a starter's chest plate.","body",3,[]),
		                item(0,0,"l","Noob Pants","It is a pair of starter's pants.","legs",2,[ExtraPocketsEffect, LargePocketsEffect]),
		                item(0,0,"f","Noob Boots","It is a pair of starter's boots.","feet",1,[]),
		                item(0,0,"s","Noob Sword","It is a starter's sword.","weapon",3,[]),
		                item(0,0,"s","Wooden Stick","A very sturdy stick covered in bark that can be used as a weapon.","weapon",1,[]),
		                item(0,0,"f","Apple","It is a beautifully red apple. It looks like it would get rid of hunger.","healing",1,[])]

		# This equips the weapons and armor to the player.
		self.inv[0].equipped=True
		self.inv[1].equipped=True
		self.inv[2].equipped=True
		self.inv[3].equipped=True
		self.inv[4].equipped=True
		self.equipped = {"head":self.inv[0],
		                "body":self.inv[1],
		                "legs":self.inv[2],
		                "feet":self.inv[3],
		                "weapon":self.inv[4]}

		self.achievements = [] # This currently is not used, but is in place for later.

		self.maxHunger = 10
		self.hunger = self.maxHunger
		self.hungerTimerCountDown = 50
		self.hTimer = 0

		self.moved = False
		self.fighting = False

		self.x  = 0
		self.y  = 0
		self.ax = 0
		self.ay = 0
		self.wx = 1
		self.wy = 1
	def __init__(self,x=0,y=0,n="Enemy Name",desc="An evil creature.",lev=1,hp=3):
		self.name = n
		self.lvl  = lev
		self.hp   = hp
		self.desc = desc
		self.icon ="E"
		self.inv  = []
		self.weapon = item(0,0,"s","Enemy Sword","It is a sword that is usually used by evil creatures.","weapon",1)
		self.xp   = int( (0.0+self.lvl) * self.weapon.damage / 2 + 0.5)

		self.x = x
		self.y = y

		self.attack = False
	def generateNewConsumable(self,itemType=-1,rarity=-1,playerLevel=-1):
		newItem = item(0,0,"c","ConsumableTest","Description for consumable test.","healing")
		if not rarity == -1:
			r = self.rarity[rarity]
		# This runs if there is not a rarity specified
		# It will generate a rarity based on a random number generator
		else:
			if playerLevel >= 25:
				num = random.randint(0+int(playerLevel/2),255)
			elif playerLevel >= 20:
				num = random.randint(0+int(playerLevel/2),245)
			elif playerLevel >= 10:
				num = random.randint(0+int(playerLevel/2),240)
			elif playerLevel >= 5:
				num = random.randint(0+int(playerLevel/2),220)
			else:
				num = random.randint(0+int(playerLevel/2),210)
			rares = []
			for rare in self.rarity:
				if self.rarity[rare][1] <= num <= self.rarity[rare][2] and playerLevel>=self.rarity[rare][0]:
					rares.append(rare)
			num = random.randint(0,len(rares)-1)
			rarity = rares[num]
			r = self.rarity[rarity]
		newItem.rarity = rarity

		if itemType == -1:
			n = random.randint(0,3)
			if n == 0 or n == 1:
				itemType = "Neutral"
			elif n == 2:
				itemType = "Good"
			else:
				itemType = "Bad"

		newItem.name = random.choice(open(self.folder + self.consumable[itemType][0]).read().splitlines()) 
		newItem.desc = random.choice(open(self.folder + self.consumable[itemType][1]).read().splitlines())
		newItem.desc = newItem.desc.replace("<itemType>",itemType)
		newItem.desc = newItem.desc.replace("<itemName>",newItem.name)

		return newItem
	def generateNewWeapon(self,race=-1,playerLevel=-1,rarity=-1, inv=[]):
		log("Generating new weapon...")
		# Create a new item with some pre-setup stats.
		newItem = item(0,0,"w","Weapon Generation Test","This is being used as a weapon generation test for the game.","weapon")

		# Item generation code:
		# Choose a minimum playerlevel if one not decided:
		log("Setting item level...")
		if playerLevel == -1:
			playerLevel = random.randint(1,20) # with 20 being max so that it does not generate something with level 100 or something
		else:
			playerLevel = playerLevel + random.randint(0,2) - 1
		log("Player level: %d" % (playerLevel))

		# This chooses a rarity to use.
		# This code runs if there is a rarity already specified
		log("Setting item rarity...")
		if not rarity == -1:
			r = self.rarity[rarity]
		# This runs if there is not a rarity specified
		else:
			if playerLevel >= 25:
				num = random.randint(0+int(playerLevel/2),255)
			elif playerLevel >= 20:
				num = random.randint(0+int(playerLevel/2),245)
			elif playerLevel >= 10:
				num = random.randint(0+int(playerLevel/2),240)
			elif playerLevel >= 5:
				num = random.randint(0+int(playerLevel/2),220)
			else:
				num = random.randint(0+int(playerLevel/2),210)
			rares = []
			for rare in self.rarity:
				if self.rarity[rare][1] <= num <= self.rarity[rare][2] and playerLevel>=self.rarity[rare][0]:
					rares.append(rare)
			num = random.randint(0,len(rares)-1)
			rarity = rares[num]
			r = self.rarity[rarity]
		newItem.rarity = rarity
		log("Item worth: %s" % (rarity))

		worth = random.randint(int(playerLevel*self.rarity[rarity][3]/2),playerLevel*self.rarity[rarity][3])
		log("Item worth: %d" % (worth))
		log("Setting item effects and damage.")
		while worth >= 0:
			if worth > 30 and len(newItem.effects) < 3:
				if random.choice([True, False, False, False, False]):
					log("Generating item effect.")

					newEffect = itemEffect()
					n = random.randint(0,0)
					if n == 0:
						newEffect.effect = "DamageInstant"
					newEffect.name = random.choice(open(self.folder + self.effects["weapons"][0] + self.effects["weapons"][1+n]).read().splitlines())
					newEffect.desc = newEffect.name.split("|")[1]
					newEffect.name = newEffect.name.split("|")[0]
					newEffect.effectStrength = random.randint(1,int((worth-30)/3 + 1))
					newEffect.worth = 30 + ((newEffect.effectStrength-1) * 3)


					# Issue #10 happens here.
					newItem.effects.append(newEffect)
					worth -= newItem.effects[len(newItem.effects)-1].worth
					for i in inv:
						if i.iType == "weapon":
							log(str(i))

				else:
					d = random.randint(1,int(worth)/4+1)
					newItem.damage += d
					worth -= (3+random.randint(0,1)) * d
			else:
				newItem.damage += 1
				worth -= 3+random.randint(0,1)

		# This sets up the weapons race if there is not one specified
		if race == -1:
			race = random.choice(self.weaponRaces.keys())
		log("Item race: %s" % (race))

		# This sets the weapon type which will be used later.
		wepType = random.choice(open(self.folder + self.weaponRaces[race][1]).read().splitlines())
		newItem.weaponType = wepType
		newItem.icon = wepType[0]

		log("Setting item name and description.")
		# This generates the item based on its rarity that was decided above
		if rarity == "Very Common" or rarity == "Common" or rarity == "Uncommon":
			newItem.name = "%s" % (wepType)

		elif rarity == "Rare" or rarity == "Exotic":
			newItem.name = "%s %s" % (random.choice(open(self.folder + self.weaponRaces[race][0]).read().splitlines()),
				                      wepType)

		elif rarity == "Legendary" or rarity == "Ascendent":
			newItem.name = "%s %s %s" % (random.choice(open(self.folder + self.weaponRaces[race][0]).read().splitlines()),
				                         wepType,
				                         random.choice(open(self.folder + self.weaponRaces[race][2]).read().splitlines()))
		elif rarity == "Godly":
			newItem.name = "%s %s %s" % (random.choice(open(self.folder + self.weaponRaces[race][0]).read().splitlines()),
			                             wepType,
			                             random.choice(open(self.folder + self.weaponRaces[race][2]).read().splitlines()))

		# You can use <weptype> and <wepname> to make descriptions more dynamic
		newItem.desc = random.choice(open(self.folder+self.weaponRaces[race][3]).read().splitlines())
		for e in newItem.effects:
			newItem.desc = newItem.desc + e.desc
		newItem.desc = newItem.desc.replace("<weptype>",newItem.weaponType)
		newItem.desc = newItem.desc.replace("<wepname>",newItem.name)
		
		# Returns the new item to whatever called for it.
		log("Returning item.")
		return newItem
	def generateNewArmor(self,armorType=-1,race=-1,playerLevel=-1,rarity=-1):
		# If there is no armor type specified:
		if armorType == -1:
			a = random.randint(0,3) # This is set to 1,1 so that only body armor will spawn
			if a == 0:
				armorType = "head"
			elif a == 1:
				armorType = "body"
			elif a == 2:
				armorType = "legs"
			elif a == 3:
				armorType = "feet"

		# Create a new item with some pre-setup stats.
		newItem = item(0,0,armorType[0],"Armor Generation Test","This is being used as an armor generation test for the game.",armorType)
		if armorType == "head":
			fileNum = 1
		elif armorType == "body":
			fileNum = 2
		elif armorType == "legs":
			fileNum = 3
		elif armorType == "feet":
			fileNum = 4

		# Item generation code:
		# Choose a minimum playerlevel if one not decided:
		if playerLevel == -1:
			playerLevel = random.randint(1,20) # with 20 being max so that it does not generate something with level 100 or something
		else:
			playerLevel = playerLevel + random.randint(0,2) - 1

		# This chooses a rarity to use.
		# This code runs if there is a rarity already specified
		if not rarity == -1:
			r = self.rarity[rarity]
		# This runs if there is not a rarity specified
		# It will generate a rarity based on a random number generator
		else:
			if playerLevel >= 25:
				num = random.randint(0+int(playerLevel/2),255)
			elif playerLevel >= 20:
				num = random.randint(0+int(playerLevel/2),245)
			elif playerLevel >= 10:
				num = random.randint(0+int(playerLevel/2),240)
			elif playerLevel >= 5:
				num = random.randint(0+int(playerLevel/2),220)
			else:
				num = random.randint(0+int(playerLevel/2),210)
			rares = []
			for rare in self.rarity:
				if self.rarity[rare][1] <= num <= self.rarity[rare][2] and playerLevel>=self.rarity[rare][0]:
					rares.append(rare)
			num = random.randint(0,len(rares)-1)
			rarity = rares[num]
			r = self.rarity[rarity]
		newItem.rarity = rarity

		# This sets up the weapons race if there is not one specified
		if race == -1:
			race = random.choice(self.armorRaces.keys())

		# This sets the weapon type which will be used later.
		armType = random.choice(open(self.folder + self.armorRaces[race][fileNum]).read().splitlines())
		newItem.armorType = armType

		# This generates the item based on its rarity that was decided above
		if rarity == "Very Common" or rarity == "Common" or rarity == "Uncommon":
			newItem.name = "%s" % (armType)

		elif rarity == "Rare" or rarity == "Exotic":
			newItem.name = "%s %s" % (random.choice(open(self.folder + self.armorRaces[race][0]).read().splitlines()),
				                      armType)

		elif rarity == "Legendary" or rarity == "Ascendent":
			newItem.name = "%s %s %s" % (random.choice(open(self.folder + self.armorRaces[race][0]).read().splitlines()),
				                         armType,
				                         random.choice(open(self.folder + self.armorRaces[race][7]).read().splitlines()))
		elif rarity == "Godly":
			newItem.name = "%s %s %s %s" % (random.choice(open(self.folder + self.armorRaces[race][0]).read().splitlines()),
				                            random.choice(open(self.folder + self.armorRaces[race][0]).read().splitlines()),
			                                armType,
			                                random.choice(open(self.folder + self.armorRaces[race][7]).read().splitlines()))

		# You can use <weptype> and <wepname> to make descriptions more dynamic
		newItem.desc = random.choice(open(self.folder+self.armorRaces[race][6]).read().splitlines())
		newItem.desc = newItem.desc.replace("<armType>",armType)
		newItem.desc = newItem.desc.replace("<itype>",newItem.iType)
		
		# Returns the new item to whatever called for it.
		return newItem