diff orpg/dieroller/hero.py @ 0:4385a7d0efd1 grumpy-goblin

Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author sirebral
date Tue, 14 Jul 2009 16:41:58 -0500
parents
children 449a8900f9ac
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/orpg/dieroller/hero.py	Tue Jul 14 16:41:58 2009 -0500
@@ -0,0 +1,227 @@
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: Hero.py
+# Version:
+#   $Id: Hero.py,v .3 DJM & Heroman
+#
+# Description: Hero System die roller originally based on Posterboy's D20 Dieroller
+#
+# Changelog:
+# v.3 by Heroman
+# Added hl() to show hit location (+side), and hk() for Hit Location killing damage
+# (No random stun multiplier)
+# v.2 DJM
+# Removed useless modifiers from the Normal damage roller
+# Changed Combat Value roller and SKill roller so that positive numbers are bonuses,
+# negative numbers are penalties
+# Changed Killing damage roller to correct stun multiplier bug
+# Handled new rounding issues
+#
+# v.1 original release DJM
+
+from die import *
+from time import time, clock
+import random
+
+
+__version__ = "$Id: hero.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
+
+# Hero stands for "Hero system" not 20 sided die :)
+
+class hero(std):
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+# these methods return new die objects for specific options
+
+    def k(self,mod):
+        return herok(self,mod)
+
+    def hl(self):
+        return herohl(self)
+
+    def hk(self):
+        return herohk(self)
+
+    def n(self):
+        return heron(self)
+
+    def cv(self,cv,mod):
+        return herocv(self,cv,mod)
+
+    def sk(self,sk,mod):
+        return herosk(self,sk,mod)
+
+class herocv(std):
+    def __init__(self,source=[],cv=10,mod=0):
+        std.__init__(self,source)
+        self.cv = cv
+        self.mod = mod
+
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+
+        myStr += " with a CV of " + str(self.cv)
+        myStr += " and a modifier of " + str(self.mod)
+        cvhit = 11 + self.cv - self.sum() + self.mod
+        myStr += " hits up to <b>DCV <font color='#ff0000'>" + str(cvhit) + "</font></b>"
+        return myStr
+
+class herosk(std):
+    def __init__(self,source=[],sk=11,mod=0):
+        std.__init__(self,source)
+        self.sk = sk
+        self.mod = mod
+
+    def is_success(self):
+        return (((self.sum()-self.mod) <= self.sk))
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        strAdd="] - "
+        swapmod=self.mod
+        if self.mod < 0:
+            strAdd= "] + "
+            swapmod= -self.mod
+        myStr += strAdd + str(swapmod)
+        modSum = self.sum()-self.mod
+        myStr += " = (" + str(modSum) + ")"
+        myStr += " vs " + str(self.sk)
+
+        if self.is_success():
+            myStr += " or less <font color='#ff0000'>Success!"
+        else:
+            myStr += " or less <font color='#ff0000'>Failure!"
+
+        Diff = self.sk - modSum
+        myStr += " by " + str(Diff) +" </font>"
+
+        return myStr
+
+class herok(std):
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
+        stunx = random.randint(1,6)-1
+        if stunx <= 1:
+            stunx = 1
+        myStr += " <b>Body</b> and a stunx of (" + str(stunx)
+        stunx = stunx + self.mod
+        myStr += " + " + str(self.mod)
+        stunsum = round(self.sum()) * stunx
+        myStr += ") for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
+        return myStr
+
+class herohl(std):
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        side = random.randint(1,6)
+        sidestr = "Left "
+        if side >=4:
+            sidestr = "Right "
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) "
+        location = int(round(self.sum()))
+        if location <= 5:
+            myStr += "Location: <B>Head</B>, StunX:<B>x5</B>, NStun:<B>x2</B>, Bodyx:<B>x2</B>"
+        elif location == 6:
+            myStr += "Location: <B>" + sidestr + "Hand</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 7:
+            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 8:
+            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 9:
+            myStr += "Location: <B>" + sidestr + "Shoulder</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 10:
+            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 11:
+            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 12:
+            myStr += "Location: <B>Stomach</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x1</B>"
+        elif location == 13:
+            myStr += "Location: <B>Vitals</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x2</B>"
+        elif location == 14:
+            myStr += "Location: <B>" + sidestr + "Thigh</B>, StunX:<B>x2</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 15:
+            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 16:
+            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location >= 17:
+            myStr += "Location: <B>" + sidestr + "Foot</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        return myStr
+
+class herohk(std):
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
+        stunx = 1
+        myStr += " <b>Body</b> "
+        stunx = stunx + self.mod
+        stunsum = round(self.sum()) * stunx
+        myStr += " for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
+        return myStr
+
+class heron(std):
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.bodtot=0
+
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        if self.data[0] == 6:
+            self.bodtot=self.bodtot+2
+        else:
+            self.bodtot=self.bodtot+1
+        if self.data[0] <= 1:
+            self.bodtot=self.bodtot-1
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+            if a == 6:
+                self.bodtot=self.bodtot+2
+            else:
+                self.bodtot=self.bodtot+1
+            if a <= 1:
+                self.bodtot=self.bodtot-1
+        myStr += "] = (<font color='#ff0000'><b>" + str(self.bodtot) + "</b></font>)"
+        myStr += " <b>Body</b> and "
+        myStr += "(<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) <b>Stun</b>"
+        return myStr