znmud-0.0.1/benchmark/
znmud-0.0.1/cmd/
znmud-0.0.1/cmd/emotes/
znmud-0.0.1/cmd/objects/
znmud-0.0.1/cmd/tiny/
znmud-0.0.1/doc/
znmud-0.0.1/farts/
znmud-0.0.1/lib/
znmud-0.0.1/lib/combat/
znmud-0.0.1/lib/core/bodytypes/
znmud-0.0.1/lib/engine/
znmud-0.0.1/lib/farts/
znmud-0.0.1/logs/
# Author: Craig Smith
#
# This source code copyright (C) 2009 Craig Smith
# All rights reserved.
#
# Released under the terms of the TeensyMUD Public License
# See LICENSE file for additional information.
#

require 'gettext'
require 'combat/attackmsgs'

# These are the damage tables.  Once it has been determined that damage
# has been done.  The type of damage of the details are determined by
# these charts.  Initialize the appropriate chart and use deal() with a
# random number from 1-100

# Base chart for dealing standard damage
class Damage < AttackMsgs
  include GetText
  bindtextdomain("core")

  def initialize(attacker, defender, damagetype, hitlocationid, weaponid)
    @a = attacker
    @d = defender
    @damagetype = damagetype
    @hitlocationid = hitlocationid
    @weaponid = weaponid
    super(@a, @d, damagetype, hitlocationid, weaponid)
  end


  def deal(roll)
	damage = 0
	loc = get_object(@hitlocationid).name
	leg = _("leg")
	head = _("head")
	torso = _("torso")
	hand = _("hand")
	foot = _("foot")
	arm = _("arm")
	case @damagetype
	when :zombie
		chanceofinfection = 0
		damage = 2 + rand(6)
		strBonus = @a.stats[:strength] - 15
		damage += strBonus / 2 if strBonus
		# Non-critical zombie attacks are scratches
		case loc
		when /#{arm}/,/#{leg}/
			self.msg2a = _("You rake your nails across ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 rakes their nails across your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 rakes their nails across ^p2's %{loc}!" % {:loc => loc})
			chanceofinfection = 10
		when /#{torso}/
			self.msg2a = _("You clamor on top of ^p2!")
			self.msg2d = _("^p1 tries to crawl on top of you!")
			self.msg2r = _("^p1 pulls and tugs on ^p2!")
		when /#{head}/
			self.msg2a = _("You grab ^p2 by the hair!")
			self.msg2d = _("^p1 grabs your hair!")
			self.msg2r = _("^p1 grabs ^p2 by the hair!")
		else
			self.msg2a = _("You scratch at ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 scratches at your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 scratches at ^p2's %{loc}!" % {:loc => loc})
			damage -= 1
			chanceofinfection = 5
		end
		sendmsgs
		if rand(100) < chanceofinfection
			@d.add_attribute :infected
		end
	when :biting
		damage = 2 + rand(4)
		strBonus = @a.stats[:strength] - 15
		damage += strBonus / 2 if strBonus
		case rand(1)
		when 1
			self.msg2a = _("You bite ^p2 in their %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 bites you in your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 bites ^p2 in their %{loc}!" % {:loc => loc})
		else
			self.msg2a = _("You sink your teeth into ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 sinks thier teeth directly into your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 sinks their teeth into ^p2's %{loc}!" % {:loc => loc})
		end
		sendmsgs
	when :clawing
		damage = 2 + rand(4)
		strBonus = @a.stats[:strength] - 15
		damage += strBonus / 2 if strBonus
		case rand(1)
		when 1
			self.msg2a = _("Your claws rip at ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 claws rip at your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 claws rip at ^p2's %{loc}!" % {:loc => loc})
		else
			self.msg2a = _("You slash ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 slashes your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 slashes ^p2's %{loc}!" % {:loc => loc})
		end
		sendmsgs
	when :melee
		damage = 2 + rand(4)
		strBonus = @a.stats[:strength] - 15
		damage += strBonus / 2 if strBonus
		case loc
		when /#{leg}/
			self.msg2a = _("You kick ^p2 in their %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 kicks you in your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 kicks ^p2 in their %{loc}!" % {:loc => loc})
		when /#{foot}/
			self.msg2a = _("You stomp on ^p2's %{loc}!" % {:loc => loc})
			self.msg2d = _("^p1 stomps on your %{loc}!" % {:loc => loc})
			self.msg2r = _("^p1 stomps on ^p2's %{loc}!" % {:loc => loc})
			damage -= 1
		when /#{head}/
			self.msg2a = _("You punch ^p2 if the face!")
			self.msg2d = _("^p1 punches you in your face!")
			self.msg2r = _("^p1 punches ^p2 in the face!")
			damage += 1
		else
			self.msg2a = _("You hit ^p2 in the %{loc}" % {:loc => loc})
			self.msg2d = _("^p1 hits you in your %{loc}" % {:loc => loc})
			self.msg2r = _("^p1 hits ^p2 in the %{loc}" % {:loc => loc})
		end
		sendmsgs
	when :bludgeon
		weapon = get_object(@weaponid)
		self.msg2a = _("You hit ^p2 in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2d = _("^p1 hits you in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2r = _("^p1 hits ^p2 in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		sendmsgs
		damage = rand((weapon.weight) * 2)+1 if weapon.weight > 0
	when :piercing
		weapon = get_object(@weaponid)
		self.msg2a = _("You stab ^p2 in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2d = _("^p1 stabs you in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2r = _("^p1 stabs ^p2 in the %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		sendmsgs
		damage = rand((weapon.weight) * 2)+2 if weapon.weight > 0
	when :slashing
		weapon = get_object(@weaponid)
		self.msg2a = _("You slash ^p2's %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2d = _("^p1 slashes your %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		self.msg2r = _("^p1 slashes ^p2's %{loc} with %{weaponname}!" % {:loc => loc, :weaponname => weapon.shortname})
		sendmsgs
		damage = rand((weapon.weight) * 2)+2 if weapon.weight > 0
	else
		self.msg2a = _("You attack ^p2 and hit!")
		self.msg2d = _("^p1 hits you!")
		self.msg2r = _("^p1 hits ^p2!")
		if weapon
			damage = rand((weapon.weight) * 2)+1 if weapon.weight > 0
		end
		sendmsgs
	end
	damage += damage_mod if damage
	if damage > 0
		strBonus = @a.stats[:strength] - 15
		damage += strBonus if strBonus
		@d.body.damage(@hitlocationid, damage)
	else
		self.msg2a = _("Your attack had no effect!")
		self.msg2d = _("^p1's attack had no effect!")
		self.msg2r = nil
		sendmsgs
	end
  end

end