@randsum/salvageunion
Version:
A flexible, type-safe dice roller for the Salvage Union system
29 lines (26 loc) • 792 B
text/typescript
import { D20 } from '@randsum/dice'
import { AllRollTables } from './tables'
import type { SUHit, SUTableName, SUTableResult } from './types'
function interpretHit(result: number): SUHit {
switch (true) {
case result === 20:
return 'Nailed It'
case result >= 11 && result <= 19:
return 'Success'
case result >= 6 && result <= 10:
return 'Tough Choice'
case result >= 2 && result <= 5:
return 'Failure'
default:
return 'Cascade Failure'
}
}
export function rollSU(
tableName: SUTableName = 'Core Mechanic'
): [SUTableResult, number] {
const total = D20.roll()
const hit = interpretHit(total)
const table = AllRollTables[tableName]
const result = table[hit]
return [{ ...result, hit, table, tableName, roll: total }, total]
}