@icon("res://assets/icons/dice.svg") extends Node enum DiceType { d4, d6, d8, d10, d12, d20, d100 } var dice: Dictionary[DiceType, Array] = { DiceType.d4: [1, 2, 3, 4], DiceType.d6: [1, 2, 3, 4, 5, 6], DiceType.d8: [1, 2, 3, 4, 5, 6, 7, 8], DiceType.d10: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], DiceType.d12: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], DiceType.d20: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], DiceType.d100: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] } func roll(dice_type: DiceType, number: int) -> int: var total: int = 0 for die in number: var this_roll = _roll_this_die(dice_type, number) total += this_roll return total func _roll_this_die(d_t: DiceType, roll_index: int) -> int: print_debug("Roll #%s commencing..." % roll_index) var roll: int = dice[d_t].pick_random() var crit_hit: bool = roll == dice[d_t].back() if crit_hit: print_debug("That's a critical hit!") var crit_miss: bool = roll == dice[d_t].front() if crit_miss: print_debug("That's a critical miss!") print_debug("Roll #%s total: %s" % [roll_index, roll]) return roll