#!/usr/bin/env ruby
# $Revision: 1.2 $
# $Date: 2003/12/04 22:18:34 $
# $Author: jefus $

# some globally accessible dice rolling methods are always good.

class Dice
	def Dice.roll(dice, sides)
		result = 0
		dice.times { result = result + rand(sides) + 1 }
		return result
	end

	# skill checks are performed by rolling the control die (1d20) and
	# adding in the results of the situation die, which varies depending on
	# the difficulty of the task.
	
	def Dice.control
		return Dice.roll(1, 20)
	end

	# modifier ranges from -5 (no sweat) to +7 (nearly impossible)
	# the value returned by this method is added to the result of the control
	# die for the final skill check result.
	def Dice.situation(modifier = 0)
		case modifier
		when -5 # no sweat
			return Dice.roll(1, 20) * -1
		when -4 # cakewalk
			return Dice.roll(1, 12) * -1
		when -3 # extremely easy
			return Dice.roll(1, 8) * -1
		when -2 # very easy
			return Dice.roll(1, 6) * -1
		when -1 # easy
			return Dice.roll(1, 4) * -1
		when 0 # average
			return 0
		when 1 # tough
			return Dice.roll(1, 4)
		when 2 # hard
			return Dice.roll(1, 6)
		when 3 # challenging
			return Dice.roll(1, 8)
		when 4 # formidable
			return Dice.roll(1, 12)
		when 5 # grueling
			return Dice.roll(1, 20)
		when 6 # gargantuan
			return Dice.roll(2, 20)
		when 7 # nearly impossible
			return Dice.roll(3, 20)
		else
			Logger.log("Dice.situation: modifier out of range (#{modifier})")
			return 0
		end
	end
end

Logger.log("Dice code initialized.")