156
|
1 #This program is free software; you can redistribute it and/or
|
|
2 #modify it under the terms of the GNU General Public License
|
|
3 #as published by the Free Software Foundation; either version 2
|
|
4 #of the License, or (at your option) any later version.
|
|
5 #
|
|
6 #This program is distributed in the hope that it will be useful,
|
|
7 #but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
8 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
9 #GNU General Public License for more details.
|
|
10 #
|
|
11 #You should have received a copy of the GNU General Public License
|
|
12 #along with this program; if not, write to the Free Software
|
|
13 #Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
14 # --
|
|
15 #
|
|
16 # File: gurps.py
|
|
17 # Version:
|
|
18 # $Id: gurps.py,v 1.3
|
|
19 #
|
|
20 # Description: Modified Hero System die roller based on DJM and Heroman's Hero
|
|
21 # dieroller
|
|
22 #
|
|
23 # GURPS is a trademark of Steve Jackson Games, and its rules and art are
|
|
24 # copyrighted by Steve Jackson Games. All rights are reserved by Steve Jackson
|
|
25 # Games. This game aid is the original creation of Naryt with help from Pyrandon
|
|
26 # and is released for free distribution, and not for resale, under the
|
|
27 # permissions granted in the Steve Jackson Games Online Policy.
|
|
28 # http://www.sjgames.com/general/online_policy.html
|
|
29 #
|
|
30 # Errors should be reported to rpg@ormonds.net
|
|
31 #
|
|
32 # Changelog:
|
|
33 # V 1.3 2007/03/23 Thomas M. Edwards <tmedwards@motoslave.net>
|
|
34 # Fixed gurpsskill, gurpsdefaultskill, and gurpssupernatural to correctly
|
|
35 # return a normal failure when the roll is 17 and the effective skill is 27+;
|
|
36 # previously, they would erroneously return a critical failure. This fix also
|
|
37 # corrects the less serious issue whereby rolls of 17 and an effective skill
|
|
38 # of 17-26 would report "failure by X" instead of merely "failure", which is
|
|
39 # wrong as the only reason the roll failed was because a 17 was rolled, not
|
|
40 # because the roll exceeded the effective skill.
|
|
41 # V 1.2 29 October 2006, added defaultskill (Rule of 20 [B344]), supernatural
|
|
42 # (Rule of 16 [B349]). The frightcheck roll is now the actual Fright Check
|
|
43 # (with Rule of 14 [B360]) and a lookup oon the Fright Check Table if needed.
|
|
44 # The fightcheckfail roll is the old Fright Check Table lookup.
|
|
45 # Removes the Help roller as it was nothing but trouble, see
|
|
46 # http://openrpg.wrathof.com/repository/GURPS/GURPS_Roller_1.7.xml for help
|
|
47 # in using this roller.
|
|
48 # V 1 Original gurps release 2006/05/28 00:00:00, modified crit_hit, crit_headblow, crit_miss, crit_unarm, spellfail, frightcheck and help_me
|
|
49 # Corrects numerous descriptions
|
|
50 # v.1 original gurps release by Naryt 2005/10/17 16:34:00
|
|
51
|
|
52 from die import *
|
|
53 from time import time, clock
|
|
54 import random
|
|
55
|
|
56 __version__ = "$Id: gurps.py,v 1.5 2007/05/06 16:42:55 digitalxero Exp $"
|
|
57
|
|
58 # gurps
|
|
59
|
|
60 class gurps(std):
|
|
61 def __init__(self,source=[]):
|
|
62 std.__init__(self,source)
|
|
63
|
|
64 # these methods return new die objects for specific options
|
|
65
|
|
66 # Original msk roll renamed to be easier to understand/remember
|
|
67
|
|
68 def skill(self,skill,mod):
|
|
69 return gurpsskill(self,skill,mod)
|
|
70
|
|
71
|
|
72 def defaultskill(self,stat,defaultlevel,mod):
|
|
73 return gurpsdefaultskill(self,stat,defaultlevel,mod)
|
|
74
|
|
75
|
|
76 def supernatural(self,skill,resistance,mod):
|
|
77 return gurpssupernatural(self,skill,resistance,mod)
|
|
78
|
|
79
|
|
80 def crit_hit(self):
|
|
81 return gurpscrit_hit(self)
|
|
82
|
|
83
|
|
84 def crit_headblow(self):
|
|
85 return gurpscrit_headblow(self)
|
|
86
|
|
87
|
|
88 def crit_miss(self):
|
|
89 return gurpscrit_miss(self)
|
|
90
|
|
91
|
|
92 def crit_unarm(self):
|
|
93 return gurpscrit_unarm(self)
|
|
94
|
|
95
|
|
96 def spellfail(self):
|
|
97 return gurpsspellfail(self)
|
|
98
|
|
99
|
|
100 def frightcheck(self,level,mod):
|
|
101 return gurpsfrightcheck(self,level,mod)
|
|
102
|
|
103
|
|
104 def frightcheckfail(self,mod):
|
|
105 return gurpsfrightcheckfail(self,mod)
|
|
106
|
|
107 class gurpsskill(std):
|
|
108
|
|
109 def __init__(self,source=[],skill=0,mod=0):
|
|
110 std.__init__(self,source)
|
|
111 self.skill = skill
|
|
112 self.mod = mod
|
|
113
|
|
114
|
|
115 def is_success(self):
|
|
116 return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 17))
|
|
117
|
|
118
|
|
119 def __str__(self):
|
|
120 myStr = "[" + str(self.data[0])
|
|
121 for a in self.data[1:]:
|
|
122 myStr += ","
|
|
123 myStr += str(a)
|
|
124 myStr +="]"
|
|
125 myStr += " = <b>" + str(self.sum()) + "</b>"
|
|
126 myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
|
|
127
|
|
128 Diff = abs((self.skill+self.mod) - self.sum())
|
|
129
|
|
130 if self.is_success():
|
|
131 if self.sum() == 3 or self.sum() == 4:
|
|
132 myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
|
|
133 elif self.sum() == 5 and (self.skill+self.mod > 14):
|
|
134 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
|
|
135 elif self.sum() == 6 and (self.skill+self.mod > 15):
|
|
136 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
|
|
137 else:
|
|
138 myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
|
|
139 else:
|
|
140 if self.sum() == 18:
|
|
141 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
142 # elif self.sum() == 17 and (self.skill+self.mod < 16):
|
|
143 # myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
144 elif self.sum() == 17:
|
|
145 if (self.skill+self.mod) < 16:
|
|
146 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
147 else:
|
|
148 myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
|
|
149 elif Diff > 9:
|
|
150 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
|
|
151 else:
|
|
152 myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
|
|
153
|
|
154 return myStr
|
|
155
|
|
156 class gurpsdefaultskill(std):
|
|
157
|
|
158 def __init__(self,source=[],stat=0,defaultlevel=0,mod=0):
|
|
159 std.__init__(self,source)
|
|
160 self.stat = stat
|
|
161 self.defaultlevel = defaultlevel
|
|
162 self.mod = mod
|
|
163
|
|
164
|
|
165 def is_success(self):
|
|
166 if self.stat < 21:
|
|
167 intSkillVal = self.stat + self.defaultlevel + self.mod
|
|
168 else:
|
|
169 intSkillVal = 20 + self.defaultlevel + self.mod
|
|
170 return (((self.sum()) <= intSkillVal) and (self.sum() < 17))
|
|
171
|
|
172
|
|
173 def __str__(self):
|
|
174 myStr = "[" + str(self.data[0])
|
|
175 for a in self.data[1:]:
|
|
176 myStr += ","
|
|
177 myStr += str(a)
|
|
178 myStr +="]"
|
|
179 myStr += " = <b>" + str(self.sum()) + "</b>"
|
|
180 strRule = ""
|
|
181 if self.stat < 21:
|
|
182 intSkillVal = self.stat + self.defaultlevel + self.mod
|
|
183 else:
|
|
184 intSkillVal = 20 + self.defaultlevel + self.mod
|
|
185 strRule = "<br />Rule of 20 in effect [B173, B344]"
|
|
186
|
|
187 myStr += " vs <b>(" + str(intSkillVal) + ")</b>"
|
|
188
|
|
189 Diff = abs((intSkillVal) - self.sum())
|
|
190
|
|
191 if self.is_success():
|
|
192 if self.sum() == 3 or self.sum() == 4:
|
|
193 myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
|
|
194 elif self.sum() == 5 and (intSkillVal > 14):
|
|
195 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
|
|
196 elif self.sum() == 6 and (intSkillVal > 15):
|
|
197 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
|
|
198 else:
|
|
199 myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +"</font>"
|
|
200 else:
|
|
201 if self.sum() == 18:
|
|
202 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
203 elif self.sum() == 17:
|
|
204 if intSkillVal < 16:
|
|
205 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
206 else:
|
|
207 myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
|
|
208 elif Diff > 9:
|
|
209 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +"</font> [B556]"
|
|
210 else:
|
|
211 myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +"</font>"
|
|
212
|
|
213 myStr += strRule
|
|
214 return myStr
|
|
215
|
|
216 class gurpssupernatural(std):
|
|
217
|
|
218 def __init__(self,source=[],skill=0,resistance=0,mod=0):
|
|
219 std.__init__(self,source)
|
|
220 self.skill = skill
|
|
221 self.resistance = resistance
|
|
222 self.mod = mod
|
|
223
|
|
224
|
|
225 def is_success(self):
|
|
226 if self.skill+self.mod > 16:
|
|
227 if self.resistance > 16:
|
|
228 if self.resistance > self.skill+self.mod:
|
|
229 newSkill = self.skill+self.mod
|
|
230 else:
|
|
231 newSkill = self.resistance
|
|
232 else:
|
|
233 newSkill = 16
|
|
234 else:
|
|
235 newSkill = self.skill+self.mod
|
|
236 return (((self.sum()) <= newSkill) and (self.sum() < 17))
|
|
237
|
|
238
|
|
239 def __str__(self):
|
|
240 myStr = "[" + str(self.data[0])
|
|
241 for a in self.data[1:]:
|
|
242 myStr += ","
|
|
243 myStr += str(a)
|
|
244 myStr +="]"
|
|
245 myStr += " = <b>" + str(self.sum()) + "</b>"
|
|
246 strRule = ""
|
|
247 if self.skill+self.mod > 16:
|
|
248 if self.resistance > 16:
|
|
249 if self.resistance > self.skill+self.mod:
|
|
250 newSkill = self.skill+self.mod
|
|
251 strRule = "<br />Rule of 16: Subject's Resistance is higher than skill, no change in skill [B349]"
|
|
252 else:
|
|
253 newSkill = self.resistance
|
|
254 strRule = "<br />Rule of 16: Effective skill limited by subject's Resistance [B349]"
|
|
255 else:
|
|
256 newSkill = 16
|
|
257 strRule = "<br />Rule of 16: Effective skill limited to 16 [B349]"
|
|
258 else:
|
|
259 newSkill = self.skill+self.mod
|
|
260 myStr += " vs <b>(" + str(newSkill) + ")</b>"
|
|
261
|
|
262 Diff = abs((newSkill) - self.sum())
|
|
263
|
|
264 if self.is_success():
|
|
265 if self.sum() == 3 or self.sum() == 4:
|
|
266 myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
|
|
267 elif self.sum() == 5 and (newSkill > 14):
|
|
268 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
|
|
269 elif self.sum() == 6 and (newSkill > 15):
|
|
270 myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
|
|
271 else:
|
|
272 myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
|
|
273 else:
|
|
274 if self.sum() == 18:
|
|
275 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
276 elif self.sum() == 17:
|
|
277 if newSkill < 16:
|
|
278 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
|
|
279 else:
|
|
280 myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
|
|
281 elif Diff > 9:
|
|
282 myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
|
|
283 else:
|
|
284 myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
|
|
285
|
|
286 myStr += strRule
|
|
287 return myStr
|
|
288
|
|
289 class gurpscrit_hit(std):
|
|
290
|
|
291 def __init__(self,source=[],mod=0):
|
|
292 std.__init__(self,source)
|
|
293
|
|
294
|
|
295 def __str__(self):
|
|
296 myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
|
|
297 for a in self.data[1:]: #This is a for loop. It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
|
|
298 myStr += "," #Adds a comma after each die
|
|
299 myStr += str(a) #Adds the value of each die.
|
|
300 myStr += "] = " #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
|
|
301 myStr += str(self.sum()) #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
|
|
302
|
|
303 if self.sum() > 8 and self.sum() < 12:
|
|
304 myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
|
|
305 elif self.sum() == 12:
|
|
306 myStr += " <font color='#ff0000'>The blow inflicts normal damage, AND victim drops anything they hold--even if no damage penetrates DR.</font> [B556]"
|
|
307 elif self.sum() == 8:
|
|
308 myStr += " <font color='#ff0000'>Damage penetrating DR does double shock (-8 max) AND if it hits the victim's limb, it's crippled for 16-HT seconds (unless wound is enough to cripple permanently!).</font> [B556]"
|
|
309 elif self.sum() == 13 or self.sum() == 14 or self.sum() == 7:
|
|
310 myStr += " <font color='#ff0000'>If any damage penetrates DR, treat as major wound. See [B420] for major wounds.</font> [B556]"
|
|
311 elif self.sum() == 6 or self.sum() == 15:
|
|
312 myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
|
|
313 elif self.sum() == 5 or self.sum() == 16:
|
|
314 myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
|
|
315 elif self.sum() == 4 or self.sum() == 17:
|
|
316 myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded down, after applying any armor divisors.</font> [B556]"
|
|
317 elif self.sum() == 3 or self.sum() == 18 :
|
|
318 myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
|
|
319
|
|
320 return myStr
|
|
321
|
|
322 class gurpscrit_headblow(std):
|
|
323
|
|
324 def __init__(self,source=[],mod=0):
|
|
325 std.__init__(self,source)
|
|
326
|
|
327
|
|
328 def __str__(self):
|
|
329 myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
|
|
330 for a in self.data[1:]: #This is a for loop. It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
|
|
331 myStr += "," #Adds a comma after each die
|
|
332 myStr += str(a) #Adds the value of each die.
|
|
333 myStr += "] = " #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
|
|
334 myStr += str(self.sum()) #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
|
|
335
|
|
336 if self.sum() > 8 and self.sum() < 12:
|
|
337 myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
|
|
338 elif self.sum() == 12 or self.sum() == 13:
|
|
339 myStr += " <font color='#ff0000'>Normal damage to the head, BUT if any penetrates DR victim is scarred (-1 to appearance, -2 if burning or corrosive attacks) OR, if <i>crushing</i> then victim deafened [see B422 for duration].</font> [B556]"
|
|
340 elif self.sum() == 8:
|
|
341 myStr += " <font color='#ff0000'>Normal damage to head, but victim knocked off balance: must Do Nothing until next turn (but can defend).</font> [B556]"
|
|
342 elif self.sum() == 14:
|
|
343 myStr += " <font color='#ff0000'>Normal damage to head, but victim drops their weapon. If holding two weapons, roll randomly for which one is dropped.</font> [B556]"
|
|
344 elif self.sum() == 6 or self.sum() == 7:
|
|
345 myStr += " <font color='#ff0000'>If you aimed for face or skull, you hit an eye [B399]; otherwise, DR only half effective & if even 1 point damage penetrates it's a major wound [B420]. If you hit an eye and that should be impossible, treat as if a <b>4</b> were rolled, see [B556].</font> [B556]"
|
|
346 elif self.sum() == 15:
|
|
347 myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
|
|
348 elif self.sum() == 16:
|
|
349 myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
|
|
350 elif self.sum() == 4 or self.sum() == 5:
|
|
351 myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying armor divisors AND if even 1 point penetrates it's a major wound [B420].</font> [B556]"
|
|
352 elif self.sum() == 17:
|
|
353 myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying any armor divisors.</font> [B556]"
|
|
354 elif self.sum() == 3:
|
|
355 myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage AND ignores all DR.</font> [B556]"
|
|
356 elif self.sum() == 18:
|
|
357 myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
|
|
358
|
|
359 return myStr
|
|
360
|
|
361 class gurpscrit_miss(std):
|
|
362
|
|
363 def __init__(self,source=[],mod=0):
|
|
364 std.__init__(self,source)
|
|
365
|
|
366
|
|
367 def __str__(self):
|
|
368 myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
|
|
369 for a in self.data[1:]: #This is a for loop. It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
|
|
370 myStr += "," #Adds a comma after each die
|
|
371 myStr += str(a) #Adds the value of each die.
|
|
372 myStr += "] = " #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
|
|
373 myStr += str(self.sum()) #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
|
|
374
|
|
375 if self.sum() > 8 and self.sum() < 12:
|
|
376 myStr += " <font color='#ff0000'>You drop your weapon (& a <i>cheap</i> weapon breaks).</font> [B556]"
|
|
377 elif self.sum() == 12 or self.sum() == 8:
|
|
378 myStr += " <font color='#ff0000'>Your weapon turns in your hand; must Ready it before it can be used again.</font> [B556]"
|
|
379 elif self.sum() == 13 or self.sum() == 7:
|
|
380 myStr += " <font color='#ff0000'>You lose your balance & can do nothing else (not even free actions) until next turn; all defenses -2 until next turn.</font> [B556]"
|
|
381 elif self.sum() == 14:
|
|
382 yrdStr = str(int(random.uniform(1,7)))
|
|
383 myStr += " <font color='#ff0000'>A <i>swung</i> weapon flies from hand " + yrdStr + " yards (50% chance straight forward/backward) anyone on the target of the flying weapon makes a DX roll or takes half-damage; a <i>thrust</i> or <i>ranged</i> weapon is dropped (& a <i>cheap</i> weapon breaks).</font> [B556]"
|
|
384 elif self.sum() == 6:
|
|
385 myStr += " <font color='#ff0000'>You hit yourself in arm or leg (50/50 chance), doing half damage; if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
|
|
386 elif self.sum() == 15:
|
|
387 myStr += " <font color='#ff0000'>You strain your shoulder! Weapon arm crippled for 30 min; do not drop weapon, but that arm is useless.</font> [B557]"
|
|
388 elif self.sum() == 16:
|
|
389 myStr += " <font color='#ff0000'>If <i>melee attack,</i> you fall down! If <i>ranged attack,</i> you lose your balance & can do nothing until next turn & all defenses -2 until next turn.</font> [B557]"
|
|
390 elif self.sum() == 5:
|
|
391 myStr += " <font color='#ff0000'>You hit yourself in the arm or leg (50/50 chance), doing normal damage; if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
|
|
392 elif self.sum() == 4 or self.sum() == 3 or self.sum() == 17 or self.sum() == 18:
|
|
393 broke = int(random.uniform(3,19))
|
|
394 if broke >=5 and broke <=16:
|
|
395 brokestr = "it is dropped."
|
|
396 else:
|
|
397 brokestr = "the weapon also breaks!"
|
|
398 myStr += " <font color='#ff0000'>A normal weapon breaks [B485]; if solid crushing weapon OR fine, very fine, or magical weapon " + brokestr + "</font> [B556] Note, second for roll non-normal weapons already fingured into this result."
|
|
399
|
|
400 return myStr
|
|
401
|
|
402 class gurpscrit_unarm(std):
|
|
403
|
|
404 def __init__(self,source=[],mod=0):
|
|
405 std.__init__(self,source)
|
|
406
|
|
407
|
|
408 def __str__(self):
|
|
409 myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
|
|
410 for a in self.data[1:]: #This is a for loop. It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
|
|
411 myStr += "," #Adds a comma after each die
|
|
412 myStr += str(a) #Adds the value of each die.
|
|
413 myStr += "] = " #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
|
|
414 myStr += str(self.sum()) #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
|
|
415
|
|
416 if self.sum() > 8 and self.sum() < 12:
|
|
417 myStr += " <font color='#ff0000'>You lose your balance; you can do nothing else (not even free actions) until next turn, and all defenses -2 until next turn.</font> [B557]"
|
|
418 elif self.sum() == 12:
|
|
419 myStr += " <font color='#ff0000'>You trip; make a DX roll to avoid falling at -4 if kicking or twice the normal penatly for a technique that normally requires a DX to avoid injury on even a normal failure (e.g., Jump Kick).</font> [B557]"
|
|
420 elif self.sum() == 8:
|
|
421 myStr += " <font color='#ff0000'>You fall down!</font> [B557]"
|
|
422 elif self.sum() == 13:
|
|
423 myStr += " <font color='#ff0000'>You drop your guard: all defenses -2 for the next turn & any Evaluate bonus or Feint penalties against you are doubled. This is obvious to those around you.</font> [B557]"
|
|
424 elif self.sum() == 7 or self.sum() == 14:
|
|
425 myStr += " <font color='#ff0000'>You stumble: <i>If attacking,</i> you advance one yard past opponent with them behind you (you are facing away); <i>if parrying</i> you fall down!</font> [B557]"
|
|
426 elif self.sum() == 15:
|
|
427 mslStr = str(int(random.uniform(1,4)))
|
|
428 myStr += " <font color='#ff0000'>You tear a muscle; " + mslStr + " HT damage to the limb used to attack (to one limb if two used to attack), & -3 to use it (-1 w/high pain thresh); also all atacks & defenses -1 until next turn. If neck was injured -3 (-1 w/high pain thresh) applies to ALL actions.</font> [B557]"
|
|
429 elif self.sum() == 6:
|
|
430 myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage equalt to 1/2 of (your thrusting damage - your DR) (<i>EXCEPTION:</i> If attacking with natural weapons, such as claws or teeth, they <i>break</i> -1 damage on future attacks until you heal (for recovery, B422).</font> [B557]"
|
|
431 elif self.sum() == 5 or self.sum() == 16:
|
|
432 myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage = your thrusting damage - your DR (<i>EXCEPTION:</i> if opponent using impaling weapon, you fall on it & take damage based on your ST). If attacking an opponent who is using an impaling weapon, you fall on <i>his weapon</i>. You suffer the weapon's normal damage based on <i>your</i> <b>ST</b>.</font> [B557]"
|
|
433 elif self.sum() == 4:
|
|
434 myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb: 1 HP damage & it's crippled for 30 min. If biting, butting, etc., have moderate neck pain (B428) for next 20-HT min minimum of 1 minute.</font> [B557]"
|
|
435 elif self.sum() == 17:
|
|
436 myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb: 1 HP damage & it's crippled for 30 min. If IQ 3-5 animal, it loses its nerve & flees on next turn or surrenders if cornered.</font> [B557]"
|
|
437 elif self.sum() == 3 or self.sum() == 18 :
|
|
438 myStr += " <font color='#ff0000'>You knock yourself out! Roll vs. HT every 30 min. to recover.</font> [B557]"
|
|
439
|
|
440 return myStr
|
|
441
|
|
442 class gurpsspellfail(std):
|
|
443
|
|
444 def __init__(self,source=[],mod=0):
|
|
445 std.__init__(self,source)
|
|
446
|
|
447
|
|
448 def __str__(self):
|
|
449 myStr = "[" + str(self.data[0])
|
|
450 for a in self.data[1:]:
|
|
451 myStr += ","
|
|
452 myStr += str(a)
|
|
453 myStr +="]"
|
|
454 myStr += " = <b>" + str(self.sum()) + "</b>"
|
|
455
|
|
456 if self.sum() == 10 or self.sum() == 11:
|
|
457 myStr += " <font color='#ff0000'>Spell produces nothing but a loud noise, bright flash, awful odor, etc.</font> [B236]"
|
|
458 elif self.sum() == 9:
|
|
459 myStr += " <font color='#ff0000'>Spell fails entirely. Caster is stunned (IQ roll to recover).</font> [B236]"
|
|
460 elif self.sum() == 12:
|
|
461 myStr += " <font color='#ff0000'>Spell produces a weak and useless shadow of the intended effect.</font> [B236]"
|
|
462 elif self.sum() == 8:
|
|
463 myStr += " <font color='#ff0000'>Spell fails entirely. Caster takes 1 point of damage.</font> [B236]"
|
|
464 elif self.sum() == 13:
|
|
465 myStr += " <font color='#ff0000'>Spell produces the reverse of the intended effect.</font> [B236]"
|
|
466 elif self.sum() == 7:
|
|
467 myStr += " <font color='#ff0000'>Spell affects someone or something other than the intended subject.</font> [B236]"
|
|
468 elif self.sum() == 14:
|
|
469 myStr += " <font color='#ff0000'>Spell seems to work, but it is only a useless illusion.</font> [B236]"
|
|
470 elif self.sum() == 5 or self.sum() == 6:
|
|
471 myStr += " <font color='#ff0000'>Spell is cast on one of the caster's companions (if harmful) or a random nearby foe (if beneficial).</font> [B236]"
|
|
472 elif self.sum() == 15 or self.sum() == 16:
|
|
473 myStr += " <font color='#ff0000'>Spell has the reverse of the intended, on the wrong target. Roll randomly.</font> [B236]"
|
|
474 elif self.sum() == 4:
|
|
475 myStr += " <font color='#ff0000'>Spell is cast on caster (if harmful) or on a random nearby foe (if beneficial).</font> [B236]"
|
|
476 elif self.sum() == 17:
|
|
477 myStr += " <font color='#ff0000'>Spell fails entirely. Caster temporarily forgets the spell. Make a weekly IQ roll (after a week passes) until the spell is remembered.</font> [B236]"
|
|
478 elif self.sum() == 3:
|
|
479 myStr += " <font color='#ff0000'>Spell fails entirely. Caster takes 1d of injury.</font> [B236]"
|
|
480 elif self.sum() == 18:
|
|
481 myStr += " <font color='#ff0000'>Spell fails entirely. A demon or other malign entity appears and attacks the caster. (GM may waive this if the caster and spell were both lily-white, pure good in intent.)</font> [B236]"
|
|
482
|
|
483 return myStr
|
|
484
|
|
485 class gurpsfrightcheck(std):
|
|
486
|
|
487 def __init__(self,source=[],skill=0,mod=0):
|
|
488 std.__init__(self,source)
|
|
489 self.skill = skill
|
|
490 self.mod = mod
|
|
491
|
|
492
|
|
493 def is_success(self):
|
|
494 return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 14))
|
|
495
|
|
496
|
|
497 def __str__(self):
|
|
498 myStr = "[" + str(self.data[0])
|
|
499 for a in self.data[1:]:
|
|
500 myStr += ","
|
|
501 myStr += str(a)
|
|
502 myStr +="]"
|
|
503 myStr += " = <b>" + str(self.sum()) + "</b>"
|
|
504
|
|
505 if self.skill+self.mod < 14:
|
|
506 myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
|
|
507 Diff = abs((self.skill+self.mod) - self.sum())
|
|
508 else:
|
|
509 myStr += " vs <b>(13)</b>"
|
|
510 Diff = abs(13 - self.sum())
|
|
511
|
|
512 if self.is_success():
|
|
513 if self.sum() == 3 or self.sum() == 4:
|
|
514 myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
|
|
515 else:
|
|
516 myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
|
|
517 else:
|
|
518 myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
|
|
519
|
|
520 if self.skill + self.mod > 13:
|
|
521 myStr += " Rule of 14 in effect [B360]"
|
|
522
|
|
523 if not(self.is_success()):
|
|
524 intD1 = int(random.uniform(1,7))
|
|
525 intD2 = int(random.uniform(1,7))
|
|
526 intD3 = int(random.uniform(1,7))
|
|
527 intFright = intD1 + intD2 + intD3 + Diff
|
|
528 myStr += "<br />Rolling on Fright Check Table<br />[" + str(intD1) + "," + str(intD2) + "," + str(intD3) + "] ==> " + str(intFright - Diff) + " + " + str(Diff) + " = " + str(intFright) + "<br />"
|
|
529 if intFright < 6:
|
|
530 myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
|
|
531 elif intFright < 8:
|
|
532 myStr += "<font color='#ff0000'>Stunned for one second. Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
|
|
533 elif intFright < 10:
|
|
534 myStr += "<font color='#ff0000'>Stunned for one second. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
|
|
535 elif intFright == 10:
|
|
536 strStun = str(int(random.uniform(1,7)))
|
|
537 myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
|
|
538 elif intFright == 11:
|
|
539 strStun = str(int(random.uniform(2,13)))
|
|
540 myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
|
|
541 elif intFright == 12:
|
|
542 myStr += "<font color='#ff0000'>Lose your lunch. Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
|
|
543 elif intFright == 13:
|
|
544 myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
|
|
545 elif intFright < 16:
|
|
546 strFP = str(int(random.uniform(1,7)))
|
|
547 strSeconds = str(int(random.uniform(1,7)))
|
|
548 myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
|
|
549 elif intFright == 16:
|
|
550 strSeconds = str(int(random.uniform(1,7)))
|
|
551 myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it. Acquire a new mental quirk.</font> [B361]"
|
|
552 elif intFright == 17:
|
|
553 strMinutes = str(int(random.uniform(1,7)))
|
|
554 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes. Every minute after that roll vs. HT to recover.</font> [B361]"
|
|
555 elif intFright == 18:
|
|
556 strMinutes = str(int(random.uniform(1,7)))
|
|
557 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover.</font> [B361]"
|
|
558 elif intFright == 19:
|
|
559 strMinutes = str(int(random.uniform(2,13)))
|
|
560 myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes. Every minute after that roll vs. HT to recover. Take 1 HP of injury.</font> [B361]"
|
|
561 elif intFright == 20:
|
|
562 strMinutes = str(int(random.uniform(4,25)))
|
|
563 strFP = str(int(random.uniform(1,7)))
|
|
564 myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes. Also, lose " + strFP + " FP.</font> [B361]"
|
|
565 elif intFright == 21:
|
|
566 strMinutes = str(int(random.uniform(1,7)))
|
|
567 myStr += "<font color='#ff0000'>Panic. You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes. Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
|
|
568 elif intFright == 22:
|
|
569 myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
|
|
570 elif intFright == 23:
|
|
571 myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
|
|
572 elif intFright == 24:
|
|
573 myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc. (Acquire -15 points worth of physical disadvantages. Each year of aging = -3 points.)</font> [B361]"
|
|
574 elif intFright == 25 :
|
|
575 myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse. If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
|
|
576 elif intFright == 26:
|
|
577 strMinutes = str(int(random.uniform(1,7)))
|
|
578 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover. Also acquire a new -10-point Delusion (B130).</font> [B361]"
|
|
579 elif intFright == 27:
|
|
580 strMinutes = str(int(random.uniform(1,7)))
|
|
581 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover. Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
|
|
582 elif intFright == 28:
|
|
583 myStr += "<font color='#ff0000'>Light coma. You fall unconscious, rolling vs. HT every 30 minutes to recover. For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
|
|
584 elif intFright == 29:
|
|
585 strHours = str(int(random.uniform(1,7)))
|
|
586 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
|
|
587 elif intFright == 30:
|
|
588 strDays = str(int(random.uniform(1,7)))
|
|
589 myStr += "<font color='#ff0000'>Catatonia. Stare into space for " + strDays + " days. Then roll vs. HT. On a failed roll, remain catatonic for another " + strDays + " days, and so on. If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on. If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
|
|
590 elif intFright == 31:
|
|
591 strMinutes = str(int(random.uniform(1,7)))
|
|
592 strFP = str(int(random.uniform(1,7)))
|
|
593 strInjury = str(int(random.uniform(1,7)))
|
|
594 myStr += "<font color='#ff0000'>Seizure. You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP. Also, roll vs. HT. On a failure, take " + strInjury + " HP of injury. On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
|
|
595 elif intFright == 32:
|
|
596 strInjury = str(int(random.uniform(2,13)))
|
|
597 myStr += "<font color='#ff0000'>Stricken. You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
|
|
598 elif intFright == 33:
|
|
599 myStr += "<font color='#ff0000'>Total panic. You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction). For instance, you might jump off a cliff to avoid the monster. If you survive your first reaction, roll vs. Will to come out of the panic. If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
|
|
600 elif intFright == 34:
|
|
601 myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
|
|
602 elif intFright == 35:
|
|
603 myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
|
|
604 elif intFright == 36:
|
|
605 myStr += "<font color='#ff0000'>Severe physical effect, set by the GM. (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
|
|
606 elif intFright == 37:
|
|
607 myStr += "<font color='#ff0000'>Severe physical effect, set by the GM. (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
|
|
608 elif intFright == 39:
|
|
609 strHours = str(int(random.uniform(1,7)))
|
|
610 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Delusion (B130).</font> [B361]"
|
|
611 elif intFright == 39:
|
|
612 strHours = str(int(random.uniform(1,7)))
|
|
613 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
|
|
614 else:
|
|
615 strHours = str(int(random.uniform(1,7)))
|
|
616 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage. Also lose 1 point of IQ <i>permanently</i>. This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
|
|
617 return myStr
|
|
618
|
|
619 class gurpsfrightcheckfail(std):
|
|
620
|
|
621 def __init__(self,source=[],mod=0):
|
|
622 std.__init__(self,source)
|
|
623 self.mod = mod
|
|
624
|
|
625
|
|
626 def __str__(self):
|
|
627 myStr = "[" + str(self.data[0])
|
|
628 for a in self.data[1:]:
|
|
629 myStr += ","
|
|
630 myStr += str(a)
|
|
631 myStr +="] + " + str(self.mod)
|
|
632 intFright = self.sum() + self.mod
|
|
633 myStr += " = <b>" + str(intFright) + "</b> "
|
|
634
|
|
635 if intFright < 6:
|
|
636 myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
|
|
637 elif intFright < 8:
|
|
638 myStr += "<font color='#ff0000'>Stunned for one second. Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
|
|
639 elif intFright < 10:
|
|
640 myStr += "<font color='#ff0000'>Stunned for one second. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
|
|
641 elif intFright == 10:
|
|
642 strStun = str(int(random.uniform(1,7)))
|
|
643 myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
|
|
644 elif intFright == 11:
|
|
645 strStun = str(int(random.uniform(2,13)))
|
|
646 myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
|
|
647 elif intFright == 12:
|
|
648 myStr += "<font color='#ff0000'>Lose your lunch. Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
|
|
649 elif intFright == 13:
|
|
650 myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
|
|
651 elif intFright < 16:
|
|
652 strFP = str(int(random.uniform(1,7)))
|
|
653 strSeconds = str(int(random.uniform(1,7)))
|
|
654 myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
|
|
655 elif intFright == 16:
|
|
656 strSeconds = str(int(random.uniform(1,7)))
|
|
657 myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds. Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it. Acquire a new mental quirk.</font> [B361]"
|
|
658 elif intFright == 17:
|
|
659 strMinutes = str(int(random.uniform(1,7)))
|
|
660 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes. Every minute after that roll vs. HT to recover.</font> [B361]"
|
|
661 elif intFright == 18:
|
|
662 strMinutes = str(int(random.uniform(1,7)))
|
|
663 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover.</font> [B361]"
|
|
664 elif intFright == 19:
|
|
665 strMinutes = str(int(random.uniform(2,13)))
|
|
666 myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes. Every minute after that roll vs. HT to recover. Take 1 HP of injury.</font> [B361]"
|
|
667 elif intFright == 20:
|
|
668 strMinutes = str(int(random.uniform(4,25)))
|
|
669 strFP = str(int(random.uniform(1,7)))
|
|
670 myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes. Also, lose " + strFP + " FP.</font> [B361]"
|
|
671 elif intFright == 21:
|
|
672 strMinutes = str(int(random.uniform(1,7)))
|
|
673 myStr += "<font color='#ff0000'>Panic. You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes. Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
|
|
674 elif intFright == 22:
|
|
675 myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
|
|
676 elif intFright == 23:
|
|
677 myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
|
|
678 elif intFright == 24:
|
|
679 myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc. (Acquire -15 points worth of physical disadvantages. Each year of aging = -3 points.)</font> [B361]"
|
|
680 elif intFright == 25 :
|
|
681 myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse. If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
|
|
682 elif intFright == 26:
|
|
683 strMinutes = str(int(random.uniform(1,7)))
|
|
684 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover. Also acquire a new -10-point Delusion (B130).</font> [B361]"
|
|
685 elif intFright == 27:
|
|
686 strMinutes = str(int(random.uniform(1,7)))
|
|
687 myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately. On a failed roll, take 1 HP of injury as you collapse. Every minute after that roll vs. HT to recover. Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
|
|
688 elif intFright == 28:
|
|
689 myStr += "<font color='#ff0000'>Light coma. You fall unconscious, rolling vs. HT every 30 minutes to recover. For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
|
|
690 elif intFright == 29:
|
|
691 strHours = str(int(random.uniform(1,7)))
|
|
692 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
|
|
693 elif intFright == 30:
|
|
694 strDays = str(int(random.uniform(1,7)))
|
|
695 myStr += "<font color='#ff0000'>Catatonia. Stare into space for " + strDays + " days. Then roll vs. HT. On a failed roll, remain catatonic for another " + strDays + " days, and so on. If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on. If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
|
|
696 elif intFright == 31:
|
|
697 strMinutes = str(int(random.uniform(1,7)))
|
|
698 strFP = str(int(random.uniform(1,7)))
|
|
699 strInjury = str(int(random.uniform(1,7)))
|
|
700 myStr += "<font color='#ff0000'>Seizure. You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP. Also, roll vs. HT. On a failure, take " + strInjury + " HP of injury. On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
|
|
701 elif intFright == 32:
|
|
702 strInjury = str(int(random.uniform(2,13)))
|
|
703 myStr += "<font color='#ff0000'>Stricken. You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
|
|
704 elif intFright == 33:
|
|
705 myStr += "<font color='#ff0000'>Total panic. You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction). For instance, you might jump off a cliff to avoid the monster. If you survive your first reaction, roll vs. Will to come out of the panic. If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
|
|
706 elif intFright == 34:
|
|
707 myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
|
|
708 elif intFright == 35:
|
|
709 myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
|
|
710 elif intFright == 36:
|
|
711 myStr += "<font color='#ff0000'>Severe physical effect, set by the GM. (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
|
|
712 elif intFright == 37:
|
|
713 myStr += "<font color='#ff0000'>Severe physical effect, set by the GM. (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
|
|
714 elif intFright == 39:
|
|
715 strHours = str(int(random.uniform(1,7)))
|
|
716 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Delusion (B130).</font> [B361]"
|
|
717 elif intFright == 39:
|
|
718 strHours = str(int(random.uniform(1,7)))
|
|
719 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
|
|
720 else:
|
|
721 strHours = str(int(random.uniform(1,7)))
|
|
722 myStr += "<font color='#ff0000'>Coma. You fall unconcious for " + strHours + " hours. At the end of the " + strHours + " hours, roll vs. HT to recover. Continue to roll every " + strHours + " hours until you recover. Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage. Also lose 1 point of IQ <i>permanently</i>. This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
|
|
723
|