def weapon_eff(N, shots, bs, S, T, ap, sv, D): values = [] for i in range(N): # hits hits = 0 for s in range(shots): if ac_core.d6() >= bs: hits += 1 # wounds wounds = 0 for h in range(hits): if (ac_core.to_wound(S, T)): wounds += 1 # saves failed = 0 for w in range(wounds): if ac_core.d6() < sv - ap: failed += 1 # damage damage = 0 for f in range(failed): if callable(D): damage += D() else: damage += D values.append(damage) return np.mean(values), np.quantile(values, 0.25), np.quantile(values, 0.75)
def primaris_smite(bonus=0, wc=5): damage = 0 test = ac_core.d6() + ac_core.d6() + bonus if test > 10: damage = ac_core.d6() elif test > wc: damage = ac_core.d3() return damage
def wyrdvane_smite(bonus=0, wc=5, wyrd_bonus=0): damage = 0 test = ac_core.d6() + bonus + wyrd_bonus if test > 10: damage = ac_core.d6() elif test > wc: damage = ac_core.d3() return damage
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if ld is None: print("Error! Provide Ld for {} power!".format(self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: r = ac_core.d6() + ac_core.d6() + ac_core.d6() if r > ld: d = ac_core.d3() return d
def do_seq( to_hit, to_wound, rr_hits): if rr_hits: if ac_core.d6rr() >= to_hit: if ac_core.d6() >= to_wound: return 1 return 0 else: # rr wounds if ac_core.d6() >= to_hit: if ac_core.d6rr() >= to_wound: return 1 return 0
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if ld is None: print("Error! Provide Ld for {} power!".format(self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: r1 = 9 + ac_core.d6() r2 = ld + ac_core.d6() d = r1 - r2 if d < 0: d = 0 return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): pt1, pt2 = self.cast(wc) d = 0 if pt1: while True: r1 = ac_core.d6() r2 = ac_core.d6() if r1 >= r2: d += 1 else: break return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): pt1, pt2 = self.cast(wc) d = 0 if pt1: r = ac_core.d6() if r == 1: d = 1 elif r == 6: d = ac_core.d6() else: d = ac_core.d3() return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if t is None: print("Error! Provide toughness for {} power!".format(self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: r = ac_core.d6() + ac_core.d6() if r > t * 2: d = 3 elif r > t: d = ac_core.d3() return d
def cast(self, wc=None): psi_test = ac_core.d6() + ac_core.d6() if wc is None: #if self.wc = None: #print("Power {} is not well defined!", self.name) #return None, None if psi_test >= self.wc: return True, psi_test return False, psi_test else: if psi_test >= wc: return True, psi_test return False, psi_test
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): pt1, pt2 = self.cast(wc) if pt1: if pt2 > 10: return ac_core.d6() return ac_core.d3() return 0
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): pt1, pt2 = self.cast(wc) d = 0 if pt1: for i in range(pt2): if ac_core.d6() > 2: d += 1 return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if m is None: print("Error! Provide model number for {} power!".format( self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: for i in range(m): if ac_core.d6() == 6: d += 1 r = ac_core.d6() + ac_core.d6() if r >= 10: for i in range(m): if ac_core.d6() == 6: d += 1 return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if ld is None: print("Error! Provide Ld for {} power!".format(self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: while True: r1 = ac_core.d6() + 9 r2 = ac_core.d6() if r2 == 6: break r2 += ld if r1 > r2: d += 1 else: break return d
def do_seq_2( to_hit, to_wound): h = ac_core.d6() w = ac_core.d6() res = [0, 0, 0] if h >= to_hit: if w >= to_wound: res[2] = 1 else: if w == 1: w = ac_core.d6() if w >= to_wound: res[1] = 1 elif h == 1: h = ac_core.d6() if h >= to_hit: if w >= to_wound: res[0] = 1 return res
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): pt1, pt2 = self.cast(wc) d = 0 if pt1: for i in range(5): if (ac_core.d6() >= i + 2): d += 1 else: break return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if t is None: print("Error! Provide toughness for {} power!".format(self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: for i in range(7): if ac_core.d6() > t: d += 1 return d
def get_damage(self, wc=None, ld=None, m=None, w=None, t=None): if m is None: print("Error! Provide model number for {} power!".format( self.name)) pt1, pt2 = self.cast(wc) d = 0 if pt1: if m < 10: d = ac_core.d3() else: d = ac_core.d6() return d
#!/usr/bin/env python # coding: utf-8 import ac_core import numpy as np import matplotlib.pyplot as plt if __name__ == '__main__': N = 10000 results_base = np.zeros(4) results_rr = np.zeros(4) results_a = np.zeros(4) for i in range(3, 7): for n in range(N): base = ac_core.d6() if base >= i: results_base[i - 3] += 1 rr = ac_core.d6rr(i - 1) if rr >= i: results_rr[i - 3] += 1 a = ac_core.d6() if a >= i - 1: results_a[i - 3] += 1 results_base /= N results_a /= N results_rr /= N plt.plot([3, 4, 5, 6], results_base, 'o-', label="base") plt.plot([3, 4, 5, 6], results_a, 'o-', label="add_to_hit")
#!/usr/bin/env python # coding: utf-8 import numpy as np import ac_core import matplotlib.pyplot as plt if __name__ == '__main__': N = 10000 exp_2d6 = [] exp_4d3 = [] for n in range(N): exp_2d6.append(ac_core.d6() + ac_core.d6()) exp_4d3.append(ac_core.d3() + ac_core.d3() + ac_core.d3() + ac_core.d3()) fig1, ax1 = plt.subplots() ax1.boxplot([exp_2d6, exp_4d3]) ac_core.boxplot([exp_2d6, exp_4d3], ax1, ["2d6", "4d3"], 'm') plt.grid() plt.title("2d6 vs 4d3") plt.ylabel("Result") plt.xlabel("Roll") plt.show()
if __name__ == '__main__': N = 10000 manticores = {} manticores['regular'] = [] manticores['rr_ones'] = [] manticores['rr_one_die'] = [] manticores['rr_two_dies'] = [] manticores['rr_two_dies_and_ones'] = [] manticores['rr_one_die_and_ones'] = [] for n in range(N): shot1 = ac_core.d6() shot2 = ac_core.d6() manticores['regular'].append(get_hits(shot1 + shot2)) manticores['rr_ones'].append(get_hits(shot1 + shot2, True)) shots = shot1 + shot2 if min(shot1, shot2) <= 3: shots = max(shot1, shot2) + ac_core.d6() manticores['rr_one_die'].append(get_hits(shots, False)) manticores['rr_one_die_and_ones'].append(get_hits(shots, True)) if shot1 + shot2 < 8: shot1 = ac_core.d6()