Skip to content

Instantly share code, notes, and snippets.

@emdeesee
Last active January 3, 2019 22:55
Show Gist options
  • Save emdeesee/cbf26b5dc9e658e668d8a798d54c09fd to your computer and use it in GitHub Desktop.
Save emdeesee/cbf26b5dc9e658e668d8a798d54c09fd to your computer and use it in GitHub Desktop.
Beginning of an action resolver for FUDGE
(defparameter *outcomes* '(terrible poor mediocre fair good great superb))
(defun build-outcome-alist ()
(loop for n from 0 for o in *outcomes* collect (cons n o)))
(defparameter *outcome-table* (build-outcome-alist))
(defparameter *superb-value* (car (rassoc 'superb *outcome-table*)))
(defparameter *terrible-value* (car (rassoc 'terrible *outcome-table*)))
(let ((random-state (make-random-state t)))
(defun df (&optional (times 1) (random-state random-state))
(flet ((1df () (1- (random 3 random-state))))
(loop repeat times sum (1df)))))
(defmacro trait-value (trait)
`(car (rassoc (quote ,trait) *outcome-table*)))
(defun trait-description (value)
(cdr (assoc value *outcome-table*)))
(defun describe-resolution (value)
(cond
((< value *terrible-value*) 'worse-than-terrible)
((> value *superb-value*) 'better-than-superb)
(t (cdr (assoc value *outcome-table*)))))
(defun resolve-fn (base)
(+ base (df 4)))
(defmacro resolve (trait-adjective)
`(resolve-fn (trait-value ,trait-adjective)))
(defmacro resolve-opposed (trait opposing-trait)
`(- (resolve ,trait) (resolve ,opposing-trait)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment