From 1cb1e45efaf45861515a850f1bfe6be2a08010dd Mon Sep 17 00:00:00 2001 From: Howard Abrams Date: Fri, 29 Apr 2022 21:39:44 -0700 Subject: [PATCH] Limit assets not appropriate for new characters Shouldn't be a Revenant without a little tragedy first. Also, describe how progress tracks are nested. --- README.org | 192 +++++++++++++++++++-------- images/progress-placement-prompt.png | Bin 0 -> 29316 bytes images/progress-tracks-tree.png | Bin 0 -> 59510 bytes moves/fate/ask-the-oracle.org | 5 +- moves/fate/pay-the-price.org | 4 +- rpgdm-ironsworn-tests.el | 4 + rpgdm-ironsworn.el | 165 +++++++++++++---------- 7 files changed, 245 insertions(+), 125 deletions(-) create mode 100644 images/progress-placement-prompt.png create mode 100644 images/progress-tracks-tree.png diff --git a/README.org b/README.org index 941a83a..888239f 100644 --- a/README.org +++ b/README.org @@ -58,6 +58,13 @@ What I do, is add the following "code" somewhere in my Ironsworn-specific org fi # End: #+END_SRC +Finally, many of the displayed org files contain embedded hyperlinks that actually call functions (defined below). I find it helpful to ignore the constant prompts for selecting this links by setting the [[help:org-link-elisp-skip-confirm-regexp][org-link-elisp-skip-confirm-regexp]] variable, as in: +#+BEGIN_SRC emacs-lisp :tangle no + (setq org-link-elisp-skip-confirm-regexp (rx string-start (optional "(") "rpgdm-" + (or "tables-" "ironsworn-") + (one-or-more any))) +#+END_SRC + Finally, define your character. While I describe the details later, first, load an org-mode file and hit ~M-x~ to type: =rpgdm-ironsworn-new-character= and answer the questions. This will create the necessary formatting and you are ready to play with either your key-binding (or ~F6~) to bring up the Hydra of commands: #+ATTR_HTML: :width 1100px @@ -96,6 +103,72 @@ While the interface may change (and I may not update that screenshot too often), - And ~q~ (or ~F6~) dismisses the UI. This may be sufficient, but the rest of this document goes into details about how to use this, as well as the code to make it. +** File Organization +I really didn’t want to dictate how Ironsworn notes should be organized, but I wanted the /progress tracks/ to be relevant. Sure, one can mark progress on one or more tracks, but I didn’t want see tracks that were old. I toyed with the idea of deleting, or just closing, old tracks, but I realized that progress tracks are really just arcs in the stories plot. Some of long, like a character /inciting vow/ and others are short, like a battle with a Cave Lion, but they are all nested in a hierarchical tree. + +Let me explain with an illustration: + #+BEGIN_SRC dot :file images/progress-tracks-tree.png :exports file :results file + digraph G { + bgcolor="transparent"; + node [fillcolor="white" style="filled" fontname="Arial"]; + + Background [label="Background / Theme"] + Arc1 [label="Story Arc"] + Arc2 [label="Story Arc"] + Arc3 [label="Story Arc"] + Scene1 [label="Scene"] + Scene2 [label="Montage"] + Scene3 [label="Montage"] + Scene4 [label="Scene"] + Scene5 [label="Scene"] + Scene6 [label="Montage"] + Event1 [label="Event"] + Event2 [label="Challenge"] + Event3 [label="Event"] + Event4 [label="Challenge"] + Event5 [label="Event"] + Event6 [label="Challenge"] + Event7 [label="Event"] + Event8 [label="Challenge"] + Event9 [label="Event"] + Event10 [label="Challenge"] + Event11 [label="Event"] + Event12 [label="Challenge"] + + Background -> Arc1; + Background -> Arc2; + Background -> Arc3; + + Arc1 -> Scene1; + Arc1 -> Scene2; + Arc2 -> Scene3; + Arc2 -> Scene4; + Arc3 -> Scene5; + Arc3 -> Scene6; + + Scene1 -> Event1; + Scene1 -> Event2; + Scene2 -> Event3; + Scene3 -> Event4; + Scene3 -> Event5; + Scene3 -> Event6; + Scene4 -> Event7; + Scene5 -> Event8; + Scene5 -> Event9; + Scene6 -> Event10; + Scene6 -> Event11; + Scene6 -> Event12; + } + #+END_SRC +[[file:images/progress-tracks-tree.png]] + +A character or party has a theme or premise that drives the entire story, like Destroying the One Ring of Power or, teenagers solving mysteries with a talking dog. In Ironsworn, this is referred to as an /Epic Vow/. This epic story is broken into long-running arcs or character goals … perhaps they could be packaged into three books to make a Trilogy, or even seven books for each year in a school. These are the [[file:moves/quest/swear-an-iron-vow.org][various vows]], like the initial /Inciting Vow/. + +These, in turn, are further divided into scenes like Journeying to Bree, Escaping Moria, or even each Saturday morning episode. In Ironsworn, these are moves like [[file:moves/adventure/undertake-a-journey.org][Undertake a Journey]] or [[file:moves/delve/delve-the-depths.org][Delve the Depths]]. And these segments can be punctuated by conflict and combat. These tracks are not concern with the length of a progress, as a battle with an Elder Beast will conclude before arriving at Grandma’s House, even those the Elder Beast was /formidable/ and the journey was merely /troublesome/. + +Notice that this structure works well with the outline of a typical document, and by choosing this structure and tying a progress track to a header, completed tracks would disappear on their own, and I didn’t have to manage old tracks. As you call the progress functions, these prompt with a question: +[[file:images/progress-placement-prompt.png]] + ** Character Sheets A character sheet, for this project, is just an org mode file where you take notes, and =:PROPERTIES:= drawers contain the current stats for your character. While most of it is /whatever you like it to be/ ... you need to keep a few things in mind. @@ -207,7 +280,7 @@ Oh, and if the same number shows on both d10s, you should introduce a significan #+BEGIN_SRC emacs-lisp (defun rpgdm-ironsworn--results (action modifier one-challenge two-challenge - &optional momentum) + &optional momentum) "Return formatted string for an Ironsworn dice roll results. The ACTION is the d6 which is added to the MODIFIER (which can have character attribute values as well as any bonuses. The sum @@ -219,45 +292,45 @@ Oh, and if the same number shows on both d10s, you should introduce a significan (setq momentum 0)) (cl-flet ((strong-p (value dice1 dice2) (and (> value dice1) (> value dice2))) - (weak-p (value dice1 dice2) (or (> value dice1) (> value dice2))) - (miss-p (value dice1 dice2) (and (<= value dice1) (<= value dice2))) - (faded (str) (propertize str 'face '(:foreground "#888"))) - (noted (str) (propertize str 'face '(:foreground "light blue"))) - (strong (str) (propertize str 'face '(:foreground "green"))) - (weak (str) (propertize str 'face '(:foreground "yellow"))) - (interest (str) (propertize str 'face '(:foreground "orange"))) - (miss (str) (propertize str 'face '(:foreground "red")))) + (weak-p (value dice1 dice2) (or (> value dice1) (> value dice2))) + (miss-p (value dice1 dice2) (and (<= value dice1) (<= value dice2))) + (faded (str) (propertize str 'face '(:foreground "#888"))) + (noted (str) (propertize str 'face '(:foreground "light blue"))) + (strong (str) (propertize str 'face '(:foreground "green"))) + (weak (str) (propertize str 'face '(:foreground "yellow"))) + (interest (str) (propertize str 'face '(:foreground "orange"))) + (miss (str) (propertize str 'face '(:foreground "red")))) (let* ((action-results (+ action modifier)) - (str-results (cond - ((strong-p action-results one-challenge two-challenge) - (strong "Strong hit")) - ((weak-p action-results one-challenge two-challenge) - (weak "Weak hit")) - (t (miss "Miss")))) - (burn-msg (if (> momentum action-results) - (cond - ((and (strong-p momentum one-challenge two-challenge) - (not (strong-p action-results one-challenge two-challenge))) - (concat " -- Burn momentum for a " (strong "Strong hit"))) - ((and (weak-p momentum one-challenge two-challenge) - (miss-p action-results one-challenge two-challenge)) - (concat " -- Burn momentum for a " (weak "Weak hit"))) - (t "")) - "")) - (matched-msg (if (= one-challenge two-challenge) - (concat " ← " (interest "Create a Twist")) - ""))) + (str-results (cond + ((strong-p action-results one-challenge two-challenge) + (strong "Strong hit")) + ((weak-p action-results one-challenge two-challenge) + (weak "Weak hit")) + (t (miss "Miss")))) + (burn-msg (if (> momentum action-results) + (cond + ((and (strong-p momentum one-challenge two-challenge) + (not (strong-p action-results one-challenge two-challenge))) + (concat " -- Burn momentum for a " (strong "Strong hit"))) + ((and (weak-p momentum one-challenge two-challenge) + (miss-p action-results one-challenge two-challenge)) + (concat " -- Burn momentum for a " (weak "Weak hit"))) + (t "")) + "")) + (matched-msg (if (= one-challenge two-challenge) + (concat " ← " (interest "Create a Twist")) + ""))) - (format "%s %s %d %s%d %s %d%s %s %d %s %d%s%s" - str-results (faded "::") - (+ action modifier) (faded "(") - action (faded "+") - modifier (faded ")") - (noted "→") - one-challenge (faded "/") - two-challenge - matched-msg burn-msg)))) + (format "%s %s %d %s%d %s %d%s %s %d %s %d%s%s" + str-results (faded "::") + (+ action modifier) (faded "(") + action (faded "+") + modifier (faded ")") + (noted "→") + one-challenge (faded "/") + two-challenge + matched-msg burn-msg)))) #+END_SRC So the following messages, given various /rolls/ should cover those possibilities with text properties: @@ -325,7 +398,7 @@ We assume you have created an org-file, and the /template/ will just append some "))) #+END_SRC **** Character Assets -We store the assets in a collection of org files in the [[file:assets/][assets]] directory. We'd like the user to choose an asset, so we convert a filename into something nicer to read based on extracting the /description/ from the /filename/, for instance, =: +We store the assets in a collection of org files in the [[file:assets/][assets]] directory. We'd like the user to choose an asset, so we convert a filename into something nicer to read based on extracting the /description/ from the /filename/, for instance: #+BEGIN_SRC emacs-lisp (defun rpgdm-ironsworn--character-asset-label (filename) @@ -410,19 +483,30 @@ Hrm. Perhaps we just want to /look/ at an asset before inserting it, similar to When you start a character, you choose three assets, but what if we choose them randomly from our asset list? Could be fun, however, I don't want duplicates, or two companions, or ... well, I may come up with more rules, but I codify those rules into a function that returns a list, if it is good, or =nil= otherwise: #+BEGIN_SRC emacs-lisp - (defun rpgdm-ironsworn--good-character-assets (asset-files) + (defun rpgdm-ironsworn--good-character-assets (assets) "Return ASSET-FILES if all given are _good enough_. - That is, all are unique, only one companion, etc." - (cl-flet ((companion-p (entry) - (when (consp entry) - (setq entry (cdr entry))) - (string-match (rx "companions") entry))) - (when (and - (equal asset-files (seq-uniq asset-files)) - (<= (seq-length - (seq-filter #'companion-p asset-files)) - 1)) - asset-files))) + That is, all are unique, only one companion, etc." + (cl-flet ((only-files (entry) (if (consp entry) (cdr entry) entry)) + (is-companion? (file) (string-match (rx "companions") file)) + (not-at-first? (file) (when (or (s-ends-with? "revenant.org" file) + (s-ends-with? "weaponmaster.org" file) + (s-ends-with? "masked.org" file) + (s-ends-with? "battle-scarred.org" file) + (s-ends-with? "ritualist.org" file) + (s-ends-with? "shadow-kin.org" file) + (s-ends-with? "oathbreaker.org" file)) + t))) + (let* ((asset-files (-map #'only-files assets)) + (num-of-companions (seq-count #'is-companion? asset-files))) + (when (and + ;; Are all the assets in the list unique? + (equal asset-files (seq-uniq asset-files)) + ;; Does the list only include first-time-only? + (-none? #'not-at-first? asset-files) + ;; Does the list include, at most, one companion? + (<= num-of-companions 1)) + assets)))) + #+END_SRC And I can write a little unit test to verify my test cases: @@ -430,6 +514,10 @@ And I can write a little unit test to verify my test cases: #+BEGIN_SRC emacs-lisp :tangle rpgdm-ironsworn-tests.el (ert-deftest rpgdm-ironsworn--good-character-assets-test () (should (rpgdm-ironsworn--good-character-assets '("foo" "bar" "baz"))) + (should (rpgdm-ironsworn--good-character-assets '(("Companions :: Dog" . "assets/companions/dog.org") + ("Paths :: Good Guy" . "assets/paths/good-guy.org") + ("Ritual :: Booboo" . "assets/ritual/booboo.org")))) + (should-not (rpgdm-ironsworn--good-character-assets '("foo" "bar" "paths/shadow-kin.org"))) (should-not (rpgdm-ironsworn--good-character-assets '("foo" "bar" "foo"))) (should-not (rpgdm-ironsworn--good-character-assets '("assets/companions/dog.org" "assets/paths/good-guy.org" @@ -736,7 +824,7 @@ Best if we wrote some unit tests to both explain and verify this function. This The =rpgdm-ironsworn-adjust-stat= function takes one of the four stats, like =’health= or =’momentum=, as well as its =default= or /starting/ value, collects the /current value/ (the =curr= variable), and then creates a new value based on the /operator/ determined by the input from =rpgdm-ironsworn--read-stat=. It sets the new stat by calling =rpgdm-ironsworn-store-character-state= defined below. -#+BEGIN_SRC emacs-lisp :results silent +#+BEGIN_SRC emacs-lisp (defun rpgdm-ironsworn-adjust-stat (stat &optional default) "Increase or decrease the current character's STAT by ADJ. If the STAT isn't found, returns DEFAULT." @@ -791,7 +879,7 @@ The previous functions allows us to create character stat-specific rolling funct #+END_SRC And we could have a function for each: -#+BEGIN_SRC emacs-lisp :results silent +#+BEGIN_SRC emacs-lisp (defun rpgdm-ironsworn-roll-edge (modifier) "Roll an action based on a loaded character's Edge stat with a MODIFIER." (interactive (list (read-string "Edge + Modifier: "))) diff --git a/images/progress-placement-prompt.png b/images/progress-placement-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..c68c18ed554cc53be9758bf236db85fda407268a GIT binary patch literal 29316 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 p@=!||z=&LFf1evDFRda~BVii$KLBkxiE;n{ literal 0 HcmV?d00001 diff --git a/images/progress-tracks-tree.png b/images/progress-tracks-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b9c4fd764ed42eb1b9e75c5148e17e904f22543b GIT binary patch literal 59510 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 P|1?gVR?Sj2yZ^rc5N=h| literal 0 HcmV?d00001 diff --git a/moves/fate/ask-the-oracle.org b/moves/fate/ask-the-oracle.org index 9790773..ebd3256 100644 --- a/moves/fate/ask-the-oracle.org +++ b/moves/fate/ask-the-oracle.org @@ -4,7 +4,7 @@ When you seek to resolve questions, discover details in the world, determine how - Draw a conclusion :: Decide the answer based on the most interesting and obvious result. - Ask a yes/no question :: Decide the odds of a ‘yes’, and roll on the table below to check the answer. - - Pick two :: Envision two options. Rate one as ‘likely’, and [[elisp:(rpgdm-ironsworn-oracle)][roll on the table]] below to see if it is true. If not, it is the other. + - Pick two :: Envision two options. Rate one as ‘likely’, and [[elisp:rpgdm-ironsworn-oracle][roll on the table]] below to see if it is true. If not, it is the other. - Spark an idea :: Brainstorm or use a random prompt. | Odds | The answer is ‘yes’ if you roll... | @@ -68,6 +68,3 @@ When you’re unsure what a match might mean, you can roll on another oracle tab In guided play, your GM is the oracle. You won’t make this move unless you are talking things out and need a random result or a bit of inspiration. Your GM can use this move (or ask you to make it) to help guide the story. #+STARTUP: showall -# Local Variables: -# eval: (flycheck-mode -1) -# End: diff --git a/moves/fate/pay-the-price.org b/moves/fate/pay-the-price.org index 9984186..9f16523 100644 --- a/moves/fate/pay-the-price.org +++ b/moves/fate/pay-the-price.org @@ -3,7 +3,9 @@ When you *suffer the outcome of a move*, choose one. - Make the most obvious negative outcome happen. - - Envision two negative outcomes. Rate one as ‘likely’, and [[file:ask-the-oracle.org][Ask the Oracle]] using the yes/no table. On a ‘yes’, make that outcome happen. Otherwise, make it the other. + - Envision two negative outcomes. Rate one as ‘likely’, and [[file:ask-the-oracle.org][Ask the Oracle]] using the yes/no table. + On a ‘yes’, make that outcome happen. + Otherwise, make it the other. - [[elisp:(rpgdm-tables-choose "pay-the-price")][Roll on the following table]]. If you have difficulty interpreting the result to fit the current situation, roll again. | Roll | Result | diff --git a/rpgdm-ironsworn-tests.el b/rpgdm-ironsworn-tests.el index 39d4b72..f7c597f 100644 --- a/rpgdm-ironsworn-tests.el +++ b/rpgdm-ironsworn-tests.el @@ -15,6 +15,10 @@ (ert-deftest rpgdm-ironsworn--good-character-assets-test () (should (rpgdm-ironsworn--good-character-assets '("foo" "bar" "baz"))) + (should (rpgdm-ironsworn--good-character-assets '(("Companions :: Dog" . "assets/companions/dog.org") + ("Paths :: Good Guy" . "assets/paths/good-guy.org") + ("Ritual :: Booboo" . "assets/ritual/booboo.org")))) + (should-not (rpgdm-ironsworn--good-character-assets '("foo" "bar" "paths/shadow-kin.org"))) (should-not (rpgdm-ironsworn--good-character-assets '("foo" "bar" "foo"))) (should-not (rpgdm-ironsworn--good-character-assets '("assets/companions/dog.org" "assets/paths/good-guy.org" diff --git a/rpgdm-ironsworn.el b/rpgdm-ironsworn.el index b6752fa..07e3c28 100644 --- a/rpgdm-ironsworn.el +++ b/rpgdm-ironsworn.el @@ -22,7 +22,7 @@ "The root directory to the rpgdm-ironsworn project.") (defun rpgdm-ironsworn--results (action modifier one-challenge two-challenge - &optional momentum) + &optional momentum) "Return formatted string for an Ironsworn dice roll results. The ACTION is the d6 which is added to the MODIFIER (which can have character attribute values as well as any bonuses. The sum @@ -34,45 +34,45 @@ use could burn that in order to improve the roll." (setq momentum 0)) (cl-flet ((strong-p (value dice1 dice2) (and (> value dice1) (> value dice2))) - (weak-p (value dice1 dice2) (or (> value dice1) (> value dice2))) - (miss-p (value dice1 dice2) (and (<= value dice1) (<= value dice2))) - (faded (str) (propertize str 'face '(:foreground "#888"))) - (noted (str) (propertize str 'face '(:foreground "light blue"))) - (strong (str) (propertize str 'face '(:foreground "green"))) - (weak (str) (propertize str 'face '(:foreground "yellow"))) - (interest (str) (propertize str 'face '(:foreground "orange"))) - (miss (str) (propertize str 'face '(:foreground "red")))) + (weak-p (value dice1 dice2) (or (> value dice1) (> value dice2))) + (miss-p (value dice1 dice2) (and (<= value dice1) (<= value dice2))) + (faded (str) (propertize str 'face '(:foreground "#888"))) + (noted (str) (propertize str 'face '(:foreground "light blue"))) + (strong (str) (propertize str 'face '(:foreground "green"))) + (weak (str) (propertize str 'face '(:foreground "yellow"))) + (interest (str) (propertize str 'face '(:foreground "orange"))) + (miss (str) (propertize str 'face '(:foreground "red")))) (let* ((action-results (+ action modifier)) - (str-results (cond - ((strong-p action-results one-challenge two-challenge) - (strong "Strong hit")) - ((weak-p action-results one-challenge two-challenge) - (weak "Weak hit")) - (t (miss "Miss")))) - (burn-msg (if (> momentum action-results) - (cond - ((and (strong-p momentum one-challenge two-challenge) - (not (strong-p action-results one-challenge two-challenge))) - (concat " -- Burn momentum for a " (strong "Strong hit"))) - ((and (weak-p momentum one-challenge two-challenge) - (miss-p action-results one-challenge two-challenge)) - (concat " -- Burn momentum for a " (weak "Weak hit"))) - (t "")) - "")) - (matched-msg (if (= one-challenge two-challenge) - (concat " ← " (interest "Create a Twist")) - ""))) + (str-results (cond + ((strong-p action-results one-challenge two-challenge) + (strong "Strong hit")) + ((weak-p action-results one-challenge two-challenge) + (weak "Weak hit")) + (t (miss "Miss")))) + (burn-msg (if (> momentum action-results) + (cond + ((and (strong-p momentum one-challenge two-challenge) + (not (strong-p action-results one-challenge two-challenge))) + (concat " -- Burn momentum for a " (strong "Strong hit"))) + ((and (weak-p momentum one-challenge two-challenge) + (miss-p action-results one-challenge two-challenge)) + (concat " -- Burn momentum for a " (weak "Weak hit"))) + (t "")) + "")) + (matched-msg (if (= one-challenge two-challenge) + (concat " ← " (interest "Create a Twist")) + ""))) (format "%s %s %d %s%d %s %d%s %s %d %s %d%s%s" - str-results (faded "::") - (+ action modifier) (faded "(") - action (faded "+") - modifier (faded ")") - (noted "→") - one-challenge (faded "/") - two-challenge - matched-msg burn-msg)))) + str-results (faded "::") + (+ action modifier) (faded "(") + action (faded "+") + modifier (faded ")") + (noted "→") + one-challenge (faded "/") + two-challenge + matched-msg burn-msg)))) (defun rpgdm-ironsworn-roll (modifier &optional momentum) "Display a Hit/Miss message based on an Ironsworn roll. @@ -152,25 +152,42 @@ the `assets' directory, otherwise, we return a cached version." (interactive (list (rpgdm-ironsworn--pick-character-asset))) (when rpgdm-ironsworn-new-character (goto-char (point-max))) (let ((file (if (consp asset) (cdr asset) asset))) - (insert-file-contents file nil) + (ignore-errors + (insert-file-contents file nil)))) - (when (called-interactively-p) - (when (y-or-n-p "Insert another asset? ") - (call-interactively 'rpgdm-ironsworn-insert-character-asset))))) +(defun rpgdm-ironsworn-show-character-asset (asset) + "Choose and insert the contents of an ASSET in the current buffer." + (interactive (list (rpgdm-ironsworn--pick-character-asset))) + (let ((asset-file (if (consp asset) (cdr asset) asset)) + (orig-buf (window-buffer))) + (ignore-errors + (find-file-other-window asset-file) + (goto-char (point-min)) + (pop-to-buffer orig-buf)))) -(defun rpgdm-ironsworn--good-character-assets (asset-files) +(defun rpgdm-ironsworn--good-character-assets (assets) "Return ASSET-FILES if all given are _good enough_. -That is, all are unique, only one companion, etc." - (cl-flet ((companion-p (entry) - (when (consp entry) - (setq entry (cdr entry))) - (string-match (rx "companions") entry))) - (when (and - (equal asset-files (seq-uniq asset-files)) - (<= (seq-length - (seq-filter #'companion-p asset-files)) - 1)) - asset-files))) + That is, all are unique, only one companion, etc." + (cl-flet ((only-files (entry) (if (consp entry) (cdr entry) entry)) + (is-companion? (file) (string-match (rx "companions") file)) + (not-at-first? (file) (when (or (s-ends-with? "revenant.org" file) + (s-ends-with? "weaponmaster.org" file) + (s-ends-with? "masked.org" file) + (s-ends-with? "battle-scarred.org" file) + (s-ends-with? "ritualist.org" file) + (s-ends-with? "shadow-kin.org" file) + (s-ends-with? "oathbreaker.org" file)) + t))) + (let* ((asset-files (-map #'only-files assets)) + (num-of-companions (seq-count #'is-companion? asset-files))) + (when (and + ;; Are all the assets in the list unique? + (equal asset-files (seq-uniq asset-files)) + ;; Does the list only include first-time-only? + (-none? #'not-at-first? asset-files) + ;; Does the list include, at most, one companion? + (<= num-of-companions 1)) + assets)))) (defun rpgdm-ironsworn--some-character-assets (asset-filenames &optional number) "Return a list of NUMBER elements from ASSET-FILENAMES... randomly. @@ -200,14 +217,20 @@ The chosen assets are _good_ in that they won't have duplicates, etc." (dolist (file (rpgdm-ironsworn--random-character-assets number-of-assets)) (rpgdm-ironsworn-insert-character-asset file))) +(defun rpgdm-ironsworn-insert-character-assets () + (ignore-errors + (call-interactively 'rpgdm-ironsworn-insert-character-asset)) + (when (y-or-n-p "Insert another asset? ") + (rpgdm-ironsworn-insert-character-assets))) + (defun rpgdm-ironsworn--new-character-assets () "Insert the contents of three character assets from the assets directory." - (goto-char (point-max)) - (insert "\n** Assets\n") - (if (y-or-n-p "Would you like three random assets? ") - (rpgdm-ironsworn-random-character-assets 3) - (if (y-or-n-p "Would you like to choose your assets? ") - (call-interactively 'rpgdm-ironsworn-insert-character-asset)))) + (goto-char (point-max)) + (insert "\n** Assets\n") + (if (y-or-n-p "Would you like three random assets? ") + (rpgdm-ironsworn-random-character-assets 3) + (if (y-or-n-p "Would you like to choose your assets? ") + (rpgdm-ironsworn-insert-character-assets)))) (defun rpgdm-ironsworn--new-character-stats () "Insert character stats after querying user for them. @@ -225,8 +248,9 @@ Note: The stats are added as properties using the (rpgdm-ironsworn-progress-create (read-string "What title should we give this new character's Epic vow: ") 1) (rpgdm-ironsworn-progress-create "Bonds" 1) (rpgdm-ironsworn-progress-mark "Bonds") + (next-line) (insert "\n** Bonds\n") - (insert (format " - Your home settlement of %s\n" (rpgdm-tables-choose "settlement/name")))) + (insert (format " - My home settlement of %s\n" (rpgdm-tables-choose "settlement/name")))) (defun rpgdm-ironsworn--new-character-stats-first (&optional name) "Insert a new character template for character, NAME. @@ -1075,10 +1099,11 @@ You'll need to pick and choose what works and discard what doesn't." ("A" rpgdm-ironsworn-insert-character-asset "insert new asset") ("a" rpgdm-ironsworn-asset-stat-adjust "adjust asset stat") ("n" rpgdm-ironsworn-asset-stat-create "new asset stat") - ("s" rpgdm-ironsworn-asset-stat-show "show") - ("r" rpgdm-ironsworn-asset-stat-roll "roll asset as modifier")) + ("s" rpgdm-ironsworn-asset-stat-show "show asset stat") + ("r" rpgdm-ironsworn-asset-stat-roll "roll asset as modifier") + ("v" rpgdm-ironsworn-show-character-asset "view asset")) -(defhydra hydra-rpgdm (:color blue :hint nil) +(defhydra hydra-rpgdm (:color pink :hint nil) " ^Dice^ 0=d100 1=d10 6=d6 ^Roll/Adjust^ ^Oracles/Tables^ ^Moving/Editing^ ^Messages^ ------------------------------------------------------------------------------------------------------------------------------ @@ -1106,9 +1131,9 @@ You'll need to pick and choose what works and discard what doesn't." ("O" rpgdm-tables-load) ("c" rpgdm-tables-choose) ("C" rpgdm-tables-choose :color pink) - ("d" hydra-rpgdm-delve/body) - ("p" hydra-rpgdm-progress/body) - ("a" hydra-rpgdm-assets/body) + ("d" hydra-rpgdm-delve/body :color blue) + ("p" hydra-rpgdm-progress/body :color blue) + ("a" hydra-rpgdm-assets/body :color blue) ("o" ace-link) ("N" org-narrow-to-subtree) ("W" widen) ("K" scroll-down :color pink) ("J" scroll-up :color pink) @@ -1124,9 +1149,10 @@ You'll need to pick and choose what works and discard what doesn't." ("0" rpgdm-roll-d100 :color pink) ("1" rpgdm-roll-d10 :color pink) ("6" rpgdm-roll-d6 :color pink) + ("RET" evil-open-below :color blue) ("q" nil "quit") ("" nil)) -(defun rpgdm-ironsworn-store-character-state (stat value) +(defun rpgdm-ironsworn-store-character-temp-state (stat value) "Store the VALUE of a character's STAT in the current org tree property. Note that STAT should be a symbol, like `supply' and VALUE should be a number, but doesn't have to be." @@ -1135,7 +1161,7 @@ number, but doesn't have to be." (setq value (number-to-string value))) (org-set-property prop value))) -(defun rpgdm-ironsworn-store-default-character-state (stat value) +(defun rpgdm-ironsworn-store-character-state (stat value) "Store the VALUE of a character's STAT in the top-level org tree property. Note that STAT should be a symbol, like `supply' and VALUE should be a number, but doesn't have to be." @@ -1143,7 +1169,10 @@ number, but doesn't have to be." (org-up-heading) (while (> (org-heading-level) 1) (org-up-heading)) - (rpgdm-ironsworn-store-character-state stat value))) + (rpgdm-ironsworn-store-character-temp-state stat value))) + +(defalias 'rpgdm-ironsworn-store-default-character-state + 'rpgdm-ironsworn-store-character-state) (defun rpgdm-ironsworn--property-p (prop) "Given a symbol PROP, return non-nil if it is an ironsworn keyword.