>
-[[Keep circulating | Circulating]]
+<% s.variables.talkingTo = window.SM.currentStorylet.character %>
+You talk with <%= window.SM.currentStorylet.character.name %>.
+<%= window.SM.getStoryletLinks(3, "during conversation") %>
+[[Keep circulating|Circulating]]
:: Being approached
-$currentStorylet.character.name is coming toward you to talk.
-You can [[talk to them | Conversation]], or risk snubbing them by [[trying to get away | Circulating][$reputation = $reputation - 1]].
+<%= window.SM.currentStorylet.character.name %> is coming toward you to talk.
+You can [[talk to them|Conversation]], or risk snubbing them by [[trying to get away|Circulating]]
.
:: Conversation topic
-<>
-<>
-$talkingTo.name tells you about <>.
-<>
-<>
-<>
-You and $talkingTo.name discuss <>.
-<>
-< $talkingTo[$topic]>>
-You tell $talkingTo.name about <>.
-<>
-They listen intently, and seem impressed.
-<>
-<>
+<% var topic = window.SM.currentStorylet.character %>
-[[Keep circulating | Circulating]]
+<% var topic = window.SM.currentStorylet.topic
+if (s.variables.playerKnowledge[topic] < s.variables.talkingTo[topic]) { %>
+ <%= s.variables.talkingTo.name %> tells you about <%= s.variables.conversationTopics[topic][s.variables.playerKnowledge[topic]] %>
+<%
+ s.variables.playerKnowledge[topic] += 1
+ s.variables.reputation -= 0.5
+} else if (s.variables.playerKnowledge[topic] == s.variables.talkingTo[topic]) { %>
+ You and <%= s.variables.talkingTo.name %> discuss <%= s.variables.conversationTopics[topic][s.variables.playerKnowledge[topic]] %>
+<%
+ s.variables.reputation += 1
+} else { %>
+ You tell <%= s.variables.talkingTo.name %> about <%= s.variables.conversationTopics[topic][s.variables.playerKnowledge[topic]] %>
+ They listen intently and seem impressed.
+<%
+ s.variables.talkingTo[topic] += 1
+ s.variables.reputation += 2
+}
+%>
+
+[[Keep circulating|Circulating]]
:: Asked to leave
The footman demands to see your invitation.
diff --git a/storymanager.js b/storymanager.js
index 9c909ae..e62746b 100644
--- a/storymanager.js
+++ b/storymanager.js
@@ -3,6 +3,8 @@
// -----------------------------------------------------------------------
var StoryManager = {};
StoryManager.storylets = {};
+StoryManager.nextStoryletCache = [];
+StoryManager.currentStorylet = Object.create(null);
StoryManager.getAllStorylets = function(tag=null) {
let allStorylets = [];
@@ -99,32 +101,54 @@ StoryManager.weightedRandom = function(allStorylets, n) {
return selectedStorylets;
}
+StoryManager.setCurrentStorylet = function(id) {
+ if (Object.hasOwn(StoryManager.nextStoryletCache, id)) {
+ StoryManager.currentStorylet = StoryManager.nextStoryletCache[id]
+ StoryManager.nextStoryletCache = Object.create(null);
+ } else {
+ console.log("Error: didn't find storylet cache entry: " + id);
+ }
+}
+StoryManager.getStoryletLinks = function(n, tag, selection) {
+ var links = _.map(StoryManager.getStorylets(n, tag, selection), function(storylet) {
+ // Maybe store the current storylet in a map generating a unique ID, then
+ // add some code below looking it up via that ID?
+ //
+ // How to keep storylets from building up over time?
+ // Clear them when a passage is left
+
+ var id = _.uniqueId("storylet-key_")
+ StoryManager.nextStoryletCache[id] = storylet;
+ return "[[" + storylet.description + "|" + storylet.passage + "]]
"
+ })
+ return _.reduce(links, function(memo, link) { return memo + link }, "")
+}
// Set up macros
// ---------------------------------------------------------------
-Macro.add("getStoryletLinks", {
- handler: function() {
- let n, tag, selection;
- [n=null, tag=null, selection="ordered"] = this.args;
- State.temporary.nextStorylets = StoryManager.getStorylets(n, tag, selection);
- $(this.output).wiki(`\
- <> \
- <> \
- [[_storylet.description|_storylet.passage][$currentStorylet=_storylet]]
- <> \
- <> \
- `)
- }
-});
+// Macro.add("getStoryletLinks", {
+ // handler: function() {
+ // let n, tag, selection;
+ // [n=null, tag=null, selection="ordered"] = this.args;
+ // State.temporary.nextStorylets = StoryManager.getStorylets(n, tag, selection);
+ // $(this.output).wiki(`\
+ // <> \
+ // <> \
+ // [[_storylet.description|_storylet.passage][$currentStorylet=_storylet]]
+ // <> \
+ // <> \
+ // `)
+ // }
+// });
-Macro.add("linkToNextStorylet", {
- handler: function() {
- let text, tag, selection;
- [text, tag=null, selection="weighted"] = this.args;
- State.temporary.nextStorylet = StoryManager.getStorylets(1, tag, selection)[0];
- $(this.output).wiki(`<>[[${text}|_nextStorylet.passage][$currentStorylet=_nextStorylet]]<>`);
- }
-});
+// Macro.add("linkToNextStorylet", {
+ // handler: function() {
+ // let text, tag, selection;
+ // [text, tag=null, selection="weighted"] = this.args;
+ // State.temporary.nextStorylet = StoryManager.getStorylets(1, tag, selection)[0];
+ // $(this.output).wiki(`<>[[${text}|_nextStorylet.passage][$currentStorylet=_nextStorylet]]<>`);
+ // }
+// });
window.SM = StoryManager;
\ No newline at end of file