Skip to content

hmusgrave/dpsbin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dpsbin

Computes the probability mass function for an extended negative binomial distribution essential for accurate DPS calculations in a variety of turn/tick-based games.

Description

Common methods for estimating how long it takes to finish off an opponent in typical hack-and-slash games are inaccurate due to factors like overkill. Those crude calculations are often good enough, but in case they're not you can turn to this library to get an exact answer.

Installation

dpsbin requires Python 3 or greater and is available on PyPI.

python -m pip install dpsbin

Alternatively, the latest version can be easily downloaded and installed locally.

python -m pip install -e git+https://github.com/hmusgrave/dpsbin.git#egg=dpsbin
git clone https://github.com/hmusgrave/dpsbin.git
cd dpsbin
python -m pip install -e .

Using dpsbin

The only notable entry point is dpsbin.pmf. Suppose you want to know how many times you'll have to roll a 6-sided die to reach a total of 40 or more.

import dpsbin, numpy as np, math

probs = dpsbin.pmf(6, 40)

# probs[k] is the probability you need to roll k times.
assert math.isclose(np.sum(probs), 1)

# easily find out how many rolls you'll need on average.
avg = np.dot(probs, np.arange(len(probs)))

# if you have a 90% chance to miss and not deal the 1d6 damage then
# you can use with_zeros() to translate the old probability mass array
# into one that accounts for zeros. Truncate to only considering up
# to 80 rolls.
hard_to_hit = dpsbin.with_zeros(80, .9, probs)