Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
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:
            r = ac_core.d6() + ac_core.d6() + ac_core.d6()
            if r > ld:
                d = ac_core.d3()

        return d
Ejemplo n.º 5
0
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    
Ejemplo n.º 6
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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
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
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
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:
         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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
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(5):
             if (ac_core.d6() >= i + 2):
                 d += 1
             else:
                 break
     return d
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
#!/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")
Ejemplo n.º 20
0
#!/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()
Ejemplo n.º 21
0

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()