3.2 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			3.2 KiB
		
	
	
	
	
	
	
	
Fate Accelerated + One Page Solo Engine
Roll 4dF
Characters
PC
CHARACTER NAME
CHARACTER DESCRIPTION
Stress
- 1
 - 2
 - 3
 
Aspects
- High Concept:
 - Trouble:
 - Aspect 1:
 
Consequences
- Consequence 1:
 - Consequence 2:
 - Consequence 3:
 
Approaches
| +x | Approach | 
|---|---|
| +2 | Careful | 
| +0 | Clever | 
| +8 | Flashy | 
| +3 | Forceful | 
| +0 | Quick | 
| +0 | Sneaky | 
Stunts
Log
Code
  (org-sbe "fae")
  (define-minor-mode srpg-mode
    "Minor mode for solo RPG gameplay."
    :init-value nil
    :keymap (make-keymap))
  (define-key srpg-mode-map (kbd "M-r") 'fae/take-action)
  (alist-get target
  	   (mapcar #'(lambda (x) (cons (replace-regexp-in-string "\\(\\[\\[.*\\]\\[\\)\\(.*\\)\\]\\]" "\\2" (cadr x)) (car x)))
  		   (cl-remove-if (lambda (x) (not (listp x))) lookup))
  	   nil
  	   nil
  	   (lambda (x y) (let ((z (string-search x y)))
  			   (and z (= 0 z)))))
Fate Accelerated
  (defun fae/roll-fate-die ()
    "Rolls a single fate die, returning either 1, 0, or -1."
    (interactive)
    (- (random 3) 1))
  (defun fae/roll-ndF (n)
    "Rolls `n' fate dice, and returns the result."
    (interactive)
    (defun roll (i acc)
      (if (= i n)
  	acc
        (roll (+ 1 i)
  	    (+ acc (fae/roll-fate-die)))))
    (roll 0 0))
  (defun fae/get-approach-modifier (approach)
    "Get approach value."
    (let (	(table (read-string "For which approach table? ")))
      (or (org-babel-execute-src-block nil (org-babel-lob-get-info `(babel-call (:call "prop-tbl-lookup" :arguments ,(format "%s, \"%s\"" table approach))))) 0)))
  (defun fae/roll-approach (table approach)
    "Get careful approach value."
    (+ (fae/roll-ndF 4)
       (or (org-babel-execute-src-block nil (org-babel-lob-get-info `(babel-call (:call "prop-tbl-lookup" :arguments ,(format "%s, \"%s\"" table approach))))) 0)
       (if (y-or-n-p "Any other modifiers?")
  	 (read-minibuffer "+? ")
         0)))
  (defun fae/take-action ()
    "Say what you're trying to do and insert a roll outcome."
    (interactive)
    (let* ((action (read-string "What are you trying to do? "))
  	 (dice-roll (fae/roll-ndF 4))
  	 (approach (completing-read
  		    "Select approach: "
  		    '("Careful" "Clever" "Flashy" "Forceful" "Quick" "Sneaky")))
  	 (app-mod (fae/get-approach-modifier approach))
  	 (add-mod (if (y-or-n-p "Any other modifiers?")
  		      (read-minibuffer "+? ")
  		    0)))
      (insert (format "%s (Approach %s, Rolled %s+%s+%s=%s)\n" action approach dice-roll app-mod add-mod (+ dice-roll app-mod add-mod)))))