@randsum/roller
Version:
A flexible, type-safe dice roller for tabletop RPGs, game development, and probability simulations
24 lines (21 loc) • 851 B
text/typescript
import { coreSpreadRolls } from '../../lib/random'
import type { RollParams, RollRecord } from '../../types'
import { generateHistory } from './generateHistory'
export function generateRollRecord<T>(parameters: RollParams<T>): RollRecord<T> {
const { sides, quantity = 1, faces, arithmetic, description } = parameters
const initialRolls = coreSpreadRolls(quantity, sides)
const isNegative = arithmetic === 'subtract'
const customResults = faces
? { customResults: initialRolls.map(roll => faces[roll - 1] as T) }
: {}
const modifierHistory = generateHistory(parameters, initialRolls)
return {
...customResults,
parameters,
description,
modifierHistory,
rolls: modifierHistory.modifiedRolls,
appliedTotal: isNegative ? -modifierHistory.total : modifierHistory.total,
total: modifierHistory.total
}
}