From 8ddee836e1dd6f195c4f9e5e3d502e82ca0227f0 Mon Sep 17 00:00:00 2001 From: Leonard Francis Coogan Date: Mon, 16 Mar 2026 01:13:40 -0400 Subject: [PATCH] removed old name --- ruixi/.DS_Store | Bin 6148 -> 0 bytes ruixi/index.html | 38 --- ruixi/ink.js | 2 - ruixi/main.js | 439 ----------------------------------- ruixi/ruixi.js | 1 - ruixi/ruixi.zip | Bin 81976 -> 0 bytes ruixi/ruixi/.DS_Store | Bin 6148 -> 0 bytes ruixi/ruixi/index.html | 38 --- ruixi/ruixi/ink.js | 2 - ruixi/ruixi/main.js | 439 ----------------------------------- ruixi/ruixi/ruixi.js | 1 - ruixi/ruixi/ruixi/index.html | 38 --- ruixi/ruixi/ruixi/ink.js | 2 - ruixi/ruixi/ruixi/main.js | 439 ----------------------------------- ruixi/ruixi/ruixi/ruixi.js | 1 - ruixi/ruixi/ruixi/style.css | 306 ------------------------ ruixi/ruixi/style.css | 306 ------------------------ ruixi/style.css | 306 ------------------------ 18 files changed, 2358 deletions(-) delete mode 100644 ruixi/.DS_Store delete mode 100644 ruixi/index.html delete mode 100644 ruixi/ink.js delete mode 100644 ruixi/main.js delete mode 100644 ruixi/ruixi.js delete mode 100644 ruixi/ruixi.zip delete mode 100644 ruixi/ruixi/.DS_Store delete mode 100644 ruixi/ruixi/index.html delete mode 100644 ruixi/ruixi/ink.js delete mode 100644 ruixi/ruixi/main.js delete mode 100644 ruixi/ruixi/ruixi.js delete mode 100644 ruixi/ruixi/ruixi/index.html delete mode 100644 ruixi/ruixi/ruixi/ink.js delete mode 100644 ruixi/ruixi/ruixi/main.js delete mode 100644 ruixi/ruixi/ruixi/ruixi.js delete mode 100644 ruixi/ruixi/ruixi/style.css delete mode 100644 ruixi/ruixi/style.css delete mode 100644 ruixi/style.css diff --git a/ruixi/.DS_Store b/ruixi/.DS_Store deleted file mode 100644 index 1cbf4635971de69e8f434bc1533e693b85c1d8a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOH0E*5Z>*>rW7Fug&qT53)X4{@e*SF14i_qQWH`%7_%i0Ba}kU`iJ}_{vKy` zH_&46C}L+|_nV!^ZsvpRgE7XPJUC#?WQ-Zm5IHI}g63LRLkA;rIY;Oh>D-TmUo*|$ zG~u_mS;BG_vRAhH{U8233e#*j{N#;htG(4RI!4d9b00Tt(KWhLv%gr3$D@IDba=cRSc{X< zQ0dFAvAef_dNF;9o@4Q*h~&Vylx>X_yo0h*(TkhJk%%9_T4hv`gv0 - - - - - ruixi - - - - - - - - - -
-

WRITTEN IN INK

- -
- restart - save - load - theme -
- -
-
-

ruixi

- -
-
-
- - - - - - diff --git a/ruixi/ink.js b/ruixi/ink.js deleted file mode 100644 index 718da43..0000000 --- a/ruixi/ink.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).inkjs={})}(this,(function(t){"use strict";class e{constructor(){if(this._components=[],this._componentsString=null,this._isRelative=!1,"string"==typeof arguments[0]){let t=arguments[0];this.componentsString=t}else if(arguments[0]instanceof e.Component&&arguments[1]instanceof e){let t=arguments[0],e=arguments[1];this._components.push(t),this._components=this._components.concat(e._components)}else if(arguments[0]instanceof Array){let t=arguments[0],e=!!arguments[1];this._components=this._components.concat(t),this._isRelative=e}}get isRelative(){return this._isRelative}get componentCount(){return this._components.length}get head(){return this._components.length>0?this._components[0]:null}get tail(){if(this._components.length>=2){let t=this._components.slice(1,this._components.length);return new e(t)}return e.self}get length(){return this._components.length}get lastComponent(){let t=this._components.length-1;return t>=0?this._components[t]:null}get containsNamedComponent(){for(let t=0,e=this._components.length;t=0}get isParent(){return this.name==t.parentId}static ToParent(){return new e(t.parentId)}toString(){return this.isIndex?this.index.toString():this.name}Equals(t){return null!=t&&t.isIndex==this.isIndex&&(this.isIndex?this.index==t.index:this.name==t.name)}}t.Component=e}(e||(e={})),function(t){function e(t,e){if(!t)throw void 0!==e&&console.warn(e),console.trace&&console.trace(),new Error("")}t.AssertType=function(t,n,i){e(t instanceof n,i)},t.Assert=e}(n||(n={}));class d extends Error{}function p(t){throw new d("".concat(t," is null or undefined"))}class m{constructor(){this.parent=null,this._debugMetadata=null,this._path=null}get debugMetadata(){return null===this._debugMetadata&&this.parent?this.parent.debugMetadata:this._debugMetadata}set debugMetadata(t){this._debugMetadata=t}get ownDebugMetadata(){return this._debugMetadata}DebugLineNumberOfPath(t){if(null===t)return null;let e=this.rootContentContainer;if(e){let n=e.ContentAtPath(t).obj;if(n){let t=n.debugMetadata;if(null!==t)return t.startLineNumber}}return null}get path(){if(null==this._path)if(null==this.parent)this._path=new e;else{let t=[],n=this,i=s(n.parent,x);for(;null!==i;){let r=o(n);if(null!=r&&r.hasValidName){if(null===r.name)return p("namedChild.name");t.unshift(new e.Component(r.name))}else t.unshift(new e.Component(i.content.indexOf(n)));n=i,i=s(i.parent,x)}this._path=new e(t)}return this._path}ResolvePath(t){if(null===t)return p("path");if(t.isRelative){let e=s(this,x);return null===e&&(n.Assert(null!==this.parent,"Can't resolve relative path because we don't have a parent"),e=s(this.parent,x),n.Assert(null!==e,"Expected parent to be a container"),n.Assert(t.GetComponent(0).isParent),t=t.tail),null===e?p("nearestContainer"):e.ContentAtPath(t)}{let e=this.rootContentContainer;return null===e?p("contentContainer"):e.ContentAtPath(t)}}ConvertPathToRelative(t){let n=this.path,i=Math.min(t.length,n.length),r=-1;for(let e=0;e1?e-1:0),i=1;ivoid 0!==n[e]?n[e]:t))}toString(){return this.string}Clear(){this.string=""}}class g{constructor(){if(this.originName=null,this.itemName=null,void 0!==arguments[1]){let t=arguments[0],e=arguments[1];this.originName=t,this.itemName=e}else if(arguments[0]){let t=arguments[0].toString().split(".");this.originName=t[0],this.itemName=t[1]}}static get Null(){return new g(null,null)}get isNull(){return null==this.originName&&null==this.itemName}get fullName(){return(null!==this.originName?this.originName:"?")+"."+this.itemName}toString(){return this.fullName}Equals(t){if(t instanceof g){let e=t;return e.itemName==this.itemName&&e.originName==this.originName}return!1}copy(){return new g(this.originName,this.itemName)}serialized(){return JSON.stringify({originName:this.originName,itemName:this.itemName})}static fromSerializedKey(t){let e=JSON.parse(t);if(!g.isLikeInkListItem(e))return g.Null;let n=e;return new g(n.originName,n.itemName)}static isLikeInkListItem(t){return"object"==typeof t&&(!(!t.hasOwnProperty("originName")||!t.hasOwnProperty("itemName"))&&(("string"==typeof t.originName||null===typeof t.originName)&&("string"==typeof t.itemName||null===typeof t.itemName)))}}class S extends Map{constructor(){if(super(arguments[0]instanceof S?arguments[0]:[]),this.origins=null,this._originNames=[],arguments[0]instanceof S){let t=arguments[0],e=t.originNames;null!==e&&(this._originNames=e.slice()),null!==t.origins&&(this.origins=t.origins.slice())}else if("string"==typeof arguments[0]){let t=arguments[0],e=arguments[1];if(this.SetInitialOriginName(t),null===e.listDefinitions)return p("originStory.listDefinitions");let n=e.listDefinitions.TryListGetDefinition(t,null);if(!n.exists)throw new Error("InkList origin could not be found in story when constructing new list: "+t);if(null===n.result)return p("def.result");this.origins=[n.result]}else if("object"==typeof arguments[0]&&arguments[0].hasOwnProperty("Key")&&arguments[0].hasOwnProperty("Value")){let t=arguments[0];this.Add(t.Key,t.Value)}}static FromString(t,e){var n;let i=null===(n=e.listDefinitions)||void 0===n?void 0:n.FindSingleItemListWithName(t);if(i)return null===i.value?p("listValue.value"):new S(i.value);throw new Error("Could not find the InkListItem from the string '"+t+"' to create an InkList because it doesn't exist in the original list definition in ink.")}AddItem(t){if(t instanceof g){let e=t;if(null==e.originName)return void this.AddItem(e.itemName);if(null===this.origins)return p("this.origins");for(let t of this.origins)if(t.name==e.originName){let n=t.TryGetValueForItem(e,0);if(n.exists)return void this.Add(e,n.result);throw new Error("Could not add the item "+e+" to this list because it doesn't exist in the original list definition in ink.")}throw new Error("Failed to add item to list because the item was from a new list definition that wasn't previously known to this list. Only items from previously known lists can be used, so that the int value can be found.")}{let e=t,n=null;if(null===this.origins)return p("this.origins");for(let t of this.origins){if(null===e)return p("itemName");if(t.ContainsItemWithName(e)){if(null!=n)throw new Error("Could not add the item "+e+" to this list because it could come from either "+t.name+" or "+n.name);n=t}}if(null==n)throw new Error("Could not add the item "+e+" to this list because it isn't known to any list definitions previously associated with this list.");let i=new g(n.name,e),r=n.ValueForItem(i);this.Add(i,r)}}ContainsItemNamed(t){for(let[e]of this){if(g.fromSerializedKey(e).itemName==t)return!0}return!1}ContainsKey(t){return this.has(t.serialized())}Add(t,e){let n=t.serialized();if(this.has(n))throw new Error("The Map already contains an entry for ".concat(t));this.set(n,e)}Remove(t){return this.delete(t.serialized())}get Count(){return this.size}get originOfMaxItem(){if(null==this.origins)return null;let t=this.maxItem.Key.originName,e=null;return this.origins.every((n=>n.name!=t||(e=n,!1))),e}get originNames(){if(this.Count>0){null==this._originNames&&this.Count>0?this._originNames=[]:(this._originNames||(this._originNames=[]),this._originNames.length=0);for(let[t]of this){let e=g.fromSerializedKey(t);if(null===e.originName)return p("item.originName");this._originNames.push(e.originName)}}return this._originNames}SetInitialOriginName(t){this._originNames=[t]}SetInitialOriginNames(t){this._originNames=null==t?null:t.slice()}get maxItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||n>t.Value)&&(t={Key:i,Value:n})}return t}get minItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||nt.maxItem.Value)}GreaterThanOrEquals(t){return 0!=this.Count&&(0==t.Count||this.minItem.Value>=t.minItem.Value&&this.maxItem.Value>=t.maxItem.Value)}LessThan(t){return 0!=t.Count&&(0==this.Count||this.maxItem.Value0?new S(this.maxItem):new S}MinAsList(){return this.Count>0?new S(this.minItem):new S}ListWithSubRange(t,e){if(0==this.Count)return new S;let n=this.orderedItems,i=0,r=Number.MAX_SAFE_INTEGER;Number.isInteger(t)?i=t:t instanceof S&&t.Count>0&&(i=t.minItem.Value),Number.isInteger(e)?r=e:e instanceof S&&e.Count>0&&(r=e.maxItem.Value);let a=new S;a.SetInitialOriginNames(this.originNames);for(let t of n)t.Value>=i&&t.Value<=r&&a.Add(t.Key,t.Value);return a}Equals(t){if(t instanceof S==!1)return!1;if(t.Count!=this.Count)return!1;for(let[e]of this)if(!t.has(e))return!1;return!0}get orderedItems(){let t=new Array;for(let[e,n]of this){let i=g.fromSerializedKey(e);t.push({Key:i,Value:n})}return t.sort(((t,e)=>null===t.Key.originName?p("x.Key.originName"):null===e.Key.originName?p("y.Key.originName"):t.Value==e.Value?t.Key.originName.localeCompare(e.Key.originName):t.Valuee.Value?1:0)),t}toString(){let t=this.orderedItems,e=new f;for(let n=0;n0&&e.Append(", ");let i=t[n].Key;if(null===i.itemName)return p("item.itemName");e.Append(i.itemName)}return e.toString()}valueOf(){return NaN}}class y extends Error{constructor(t){super(t),this.useEndLineNumber=!1,this.message=t,this.name="StoryException"}}function v(t,e,n){if(null===t)return{result:n,exists:!1};let i=t.get(e);return void 0===i?{result:n,exists:!1}:{result:i,exists:!0}}class C extends m{static Create(t,n){if(n){if(n===i.Int&&Number.isInteger(Number(t)))return new w(Number(t));if(n===i.Float&&!isNaN(t))return new T(Number(t))}return"boolean"==typeof t?new _(Boolean(t)):"string"==typeof t?new E(String(t)):Number.isInteger(Number(t))?new w(Number(t)):isNaN(t)?t instanceof e?new P(l(t,e)):t instanceof S?new O(l(t,S)):null:new T(Number(t))}Copy(){return l(C.Create(this.valueObject),m)}BadCastException(t){return new y("Can't cast "+this.valueObject+" from "+this.valueType+" to "+t)}}class b extends C{constructor(t){super(),this.value=t}get valueObject(){return this.value}toString(){return null===this.value?p("Value.value"):this.value.toString()}}class _ extends b{constructor(t){super(t||!1)}get isTruthy(){return Boolean(this.value)}get valueType(){return i.Bool}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Int)return new w(this.value?1:0);if(t==i.Float)return new T(this.value?1:0);if(t==i.String)return new E(this.value?"true":"false");throw this.BadCastException(t)}toString(){return this.value?"true":"false"}}class w extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Int}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Float)return new T(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class T extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Float}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Int)return new w(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class E extends b{constructor(t){if(super(t||""),this._isNewline="\n"==this.value,this._isInlineWhitespace=!0,null===this.value)return p("Value.value");this.value.length>0&&this.value.split("").every((t=>" "==t||"\t"==t||(this._isInlineWhitespace=!1,!1)))}get valueType(){return i.String}get isTruthy(){return null===this.value?p("Value.value"):this.value.length>0}get isNewline(){return this._isNewline}get isInlineWhitespace(){return this._isInlineWhitespace}get isNonWhitespace(){return!this.isNewline&&!this.isInlineWhitespace}Cast(t){if(t==this.valueType)return this;if(t==i.Int){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseInt(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new w(e.result);throw this.BadCastException(t)}if(t==i.Float){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseFloat(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new T(e.result);throw this.BadCastException(t)}throw this.BadCastException(t)}}class P extends b{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)}get valueType(){return i.DivertTarget}get targetPath(){return null===this.value?p("Value.value"):this.value}set targetPath(t){this.value=t}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a divert target")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"DivertTargetValue("+this.targetPath+")"}}class N extends b{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;super(t),this._contextIndex=e}get contextIndex(){return this._contextIndex}set contextIndex(t){this._contextIndex=t}get variableName(){return null===this.value?p("Value.value"):this.value}set variableName(t){this.value=t}get valueType(){return i.VariablePointer}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a variable pointer")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"VariablePointerValue("+this.variableName+")"}Copy(){return new N(this.variableName,this.contextIndex)}}class O extends b{get isTruthy(){return null===this.value?p("this.value"):this.value.Count>0}get valueType(){return i.List}Cast(t){if(null===this.value)return p("Value.value");if(t==i.Int){let t=this.value.maxItem;return t.Key.isNull?new w(0):new w(t.Value)}if(t==i.Float){let t=this.value.maxItem;return t.Key.isNull?new T(0):new T(t.Value)}if(t==i.String){let t=this.value.maxItem;return t.Key.isNull?new E(""):new E(t.Key.toString())}if(t==this.valueType)return this;throw this.BadCastException(t)}constructor(t,e){super(null),t||e?t instanceof S?this.value=new S(t):t instanceof g&&"number"==typeof e&&(this.value=new S({Key:t,Value:e})):this.value=new S}static RetainListOriginsForAssignment(t,e){let n=s(t,O),i=s(e,O);return i&&null===i.value?p("newList.value"):n&&null===n.value?p("oldList.value"):void(n&&i&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames))}}!function(t){t[t.Bool=-1]="Bool",t[t.Int=0]="Int",t[t.Float=1]="Float",t[t.List=2]="List",t[t.String=3]="String",t[t.DivertTarget=4]="DivertTarget",t[t.VariablePointer=5]="VariablePointer"}(i||(i={}));class A{constructor(){this.obj=null,this.approximate=!1}get correctObj(){return this.approximate?null:this.obj}get container(){return this.obj instanceof x?this.obj:null}copy(){let t=new A;return t.obj=this.obj,t.approximate=this.approximate,t}}class x extends m{constructor(){super(...arguments),this.name=null,this._content=[],this.namedContent=new Map,this.visitsShouldBeCounted=!1,this.turnIndexShouldBeCounted=!1,this.countingAtStartOnly=!1,this._pathToFirstLeafContent=null}get hasValidName(){return null!=this.name&&this.name.length>0}get content(){return this._content}set content(t){this.AddContent(t)}get namedOnlyContent(){let t=new Map;for(let[e,n]of this.namedContent){let i=l(n,m);t.set(e,i)}for(let e of this.content){let n=o(e);null!=n&&n.hasValidName&&t.delete(n.name)}return 0==t.size&&(t=null),t}set namedOnlyContent(t){let e=this.namedOnlyContent;if(null!=e)for(let[t]of e)this.namedContent.delete(t);if(null!=t)for(let[,e]of t){let t=o(e);null!=t&&this.AddToNamedContentOnly(t)}}get countFlags(){let t=0;return this.visitsShouldBeCounted&&(t|=x.CountFlags.Visits),this.turnIndexShouldBeCounted&&(t|=x.CountFlags.Turns),this.countingAtStartOnly&&(t|=x.CountFlags.CountStartOnly),t==x.CountFlags.CountStartOnly&&(t=0),t}set countFlags(t){let e=t;(e&x.CountFlags.Visits)>0&&(this.visitsShouldBeCounted=!0),(e&x.CountFlags.Turns)>0&&(this.turnIndexShouldBeCounted=!0),(e&x.CountFlags.CountStartOnly)>0&&(this.countingAtStartOnly=!0)}get pathToFirstLeafContent(){return null==this._pathToFirstLeafContent&&(this._pathToFirstLeafContent=this.path.PathByAppendingPath(this.internalPathToFirstLeafContent)),this._pathToFirstLeafContent}get internalPathToFirstLeafContent(){let t=[],n=this;for(;n instanceof x;)n.content.length>0&&(t.push(new e.Component(0)),n=n.content[0]);return new e(t)}AddContent(t){if(t instanceof Array){let e=t;for(let t of e)this.AddContent(t)}else{let e=t;if(this._content.push(e),e.parent)throw new Error("content is already in "+e.parent);e.parent=this,this.TryAddNamedContent(e)}}TryAddNamedContent(t){let e=o(t);null!=e&&e.hasValidName&&this.AddToNamedContentOnly(e)}AddToNamedContentOnly(t){if(n.AssertType(t,m,"Can only add Runtime.Objects to a Runtime.Container"),l(t,m).parent=this,null===t.name)return p("namedContentObj.name");this.namedContent.set(t.name,t)}ContentAtPath(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;-1==n&&(n=t.length);let i=new A;i.approximate=!1;let r=this,a=this;for(let l=e;l=0&&t.index=0||a.set(t,e);if(a.size>0){r(),t.AppendLine("-- named: --");for(let[,r]of a){n.AssertType(r,x,"Can only print out named Containers"),r.BuildStringOfHierarchy(t,e,i),t.AppendLine()}}e--,r(),t.Append("]")}}!function(t){var e;(e=t.CountFlags||(t.CountFlags={}))[e.Visits=1]="Visits",e[e.Turns=2]="Turns",e[e.CountStartOnly=4]="CountStartOnly"}(x||(x={}));class I extends m{toString(){return"Glue"}}class k extends m{get commandType(){return this._commandType}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k.CommandType.NotSet;super(),this._commandType=t}Copy(){return new k(this.commandType)}static EvalStart(){return new k(k.CommandType.EvalStart)}static EvalOutput(){return new k(k.CommandType.EvalOutput)}static EvalEnd(){return new k(k.CommandType.EvalEnd)}static Duplicate(){return new k(k.CommandType.Duplicate)}static PopEvaluatedValue(){return new k(k.CommandType.PopEvaluatedValue)}static PopFunction(){return new k(k.CommandType.PopFunction)}static PopTunnel(){return new k(k.CommandType.PopTunnel)}static BeginString(){return new k(k.CommandType.BeginString)}static EndString(){return new k(k.CommandType.EndString)}static NoOp(){return new k(k.CommandType.NoOp)}static ChoiceCount(){return new k(k.CommandType.ChoiceCount)}static Turns(){return new k(k.CommandType.Turns)}static TurnsSince(){return new k(k.CommandType.TurnsSince)}static ReadCount(){return new k(k.CommandType.ReadCount)}static Random(){return new k(k.CommandType.Random)}static SeedRandom(){return new k(k.CommandType.SeedRandom)}static VisitIndex(){return new k(k.CommandType.VisitIndex)}static SequenceShuffleIndex(){return new k(k.CommandType.SequenceShuffleIndex)}static StartThread(){return new k(k.CommandType.StartThread)}static Done(){return new k(k.CommandType.Done)}static End(){return new k(k.CommandType.End)}static ListFromInt(){return new k(k.CommandType.ListFromInt)}static ListRange(){return new k(k.CommandType.ListRange)}static ListRandom(){return new k(k.CommandType.ListRandom)}static BeginTag(){return new k(k.CommandType.BeginTag)}static EndTag(){return new k(k.CommandType.EndTag)}toString(){return"ControlCommand "+this.commandType.toString()}}!function(t){var e;(e=t.CommandType||(t.CommandType={}))[e.NotSet=-1]="NotSet",e[e.EvalStart=0]="EvalStart",e[e.EvalOutput=1]="EvalOutput",e[e.EvalEnd=2]="EvalEnd",e[e.Duplicate=3]="Duplicate",e[e.PopEvaluatedValue=4]="PopEvaluatedValue",e[e.PopFunction=5]="PopFunction",e[e.PopTunnel=6]="PopTunnel",e[e.BeginString=7]="BeginString",e[e.EndString=8]="EndString",e[e.NoOp=9]="NoOp",e[e.ChoiceCount=10]="ChoiceCount",e[e.Turns=11]="Turns",e[e.TurnsSince=12]="TurnsSince",e[e.ReadCount=13]="ReadCount",e[e.Random=14]="Random",e[e.SeedRandom=15]="SeedRandom",e[e.VisitIndex=16]="VisitIndex",e[e.SequenceShuffleIndex=17]="SequenceShuffleIndex",e[e.StartThread=18]="StartThread",e[e.Done=19]="Done",e[e.End=20]="End",e[e.ListFromInt=21]="ListFromInt",e[e.ListRange=22]="ListRange",e[e.ListRandom=23]="ListRandom",e[e.BeginTag=24]="BeginTag",e[e.EndTag=25]="EndTag",e[e.TOTAL_VALUES=26]="TOTAL_VALUES"}(k||(k={})),function(t){t[t.Tunnel=0]="Tunnel",t[t.Function=1]="Function",t[t.FunctionEvaluationFromGame=2]="FunctionEvaluationFromGame"}(r||(r={}));class F{constructor(){this.container=null,this.index=-1,2===arguments.length&&(this.container=arguments[0],this.index=arguments[1])}Resolve(){return this.index<0?this.container:null==this.container?null:0==this.container.content.length?this.container:this.index>=this.container.content.length?null:this.container.content[this.index]}get isNull(){return null==this.container}get path(){return this.isNull?null:this.index>=0?this.container.path.PathByAppendingComponent(new e.Component(this.index)):this.container.path}toString(){return this.container?"Ink Pointer -> "+this.container.path.toString()+" -- index "+this.index:"Ink Pointer (null)"}copy(){return new F(this.container,this.index)}static StartOf(t){return new F(t,0)}static get Null(){return new F(null,-1)}}class W extends m{get targetPath(){if(null!=this._targetPath&&this._targetPath.isRelative){let t=this.targetPointer.Resolve();t&&(this._targetPath=t.path)}return this._targetPath}set targetPath(t){this._targetPath=t,this._targetPointer=F.Null}get targetPointer(){if(this._targetPointer.isNull){let t=this.ResolvePath(this._targetPath).obj;if(null===this._targetPath)return p("this._targetPath");if(null===this._targetPath.lastComponent)return p("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(null===t)return p("targetObj");this._targetPointer.container=t.parent instanceof x?t.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index}else this._targetPointer=F.StartOf(t instanceof x?t:null)}return this._targetPointer.copy()}get targetPathString(){return null==this.targetPath?null:this.CompactPathString(this.targetPath)}set targetPathString(t){this.targetPath=null==t?null:new e(t)}get hasVariableTarget(){return null!=this.variableDivertName}constructor(t){super(),this._targetPath=null,this._targetPointer=F.Null,this.variableDivertName=null,this.pushesToStack=!1,this.stackPushType=0,this.isExternal=!1,this.externalArgs=0,this.isConditional=!1,this.pushesToStack=!1,void 0!==t&&(this.pushesToStack=!0,this.stackPushType=t)}Equals(t){let e=t;return e instanceof W&&this.hasVariableTarget==e.hasVariableTarget&&(this.hasVariableTarget?this.variableDivertName==e.variableDivertName:null===this.targetPath?p("this.targetPath"):this.targetPath.Equals(e.targetPath))}toString(){if(this.hasVariableTarget)return"Divert(variable: "+this.variableDivertName+")";if(null==this.targetPath)return"Divert(null)";{let t=new f,e=this.targetPath.toString();return t.Append("Divert"),this.isConditional&&t.Append("?"),this.pushesToStack&&(this.stackPushType==r.Function?t.Append(" function"):t.Append(" tunnel")),t.Append(" -> "),t.Append(this.targetPathString),t.Append(" ("),t.Append(e),t.Append(")"),t.toString()}}}class V extends m{constructor(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];super(),this._pathOnChoice=null,this.hasCondition=!1,this.hasStartContent=!1,this.hasChoiceOnlyContent=!1,this.isInvisibleDefault=!1,this.onceOnly=!0,this.onceOnly=t}get pathOnChoice(){if(null!=this._pathOnChoice&&this._pathOnChoice.isRelative){let t=this.choiceTarget;t&&(this._pathOnChoice=t.path)}return this._pathOnChoice}set pathOnChoice(t){this._pathOnChoice=t}get choiceTarget(){return null===this._pathOnChoice?p("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}get pathStringOnChoice(){return null===this.pathOnChoice?p("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)}set pathStringOnChoice(t){this.pathOnChoice=new e(t)}get flags(){let t=0;return this.hasCondition&&(t|=1),this.hasStartContent&&(t|=2),this.hasChoiceOnlyContent&&(t|=4),this.isInvisibleDefault&&(t|=8),this.onceOnly&&(t|=16),t}set flags(t){this.hasCondition=(1&t)>0,this.hasStartContent=(2&t)>0,this.hasChoiceOnlyContent=(4&t)>0,this.isInvisibleDefault=(8&t)>0,this.onceOnly=(16&t)>0}toString(){if(null===this.pathOnChoice)return p("ChoicePoint.pathOnChoice");return"Choice: -> "+this.pathOnChoice.toString()}}class L extends m{get containerForCount(){return null===this.pathForCount?null:this.ResolvePath(this.pathForCount).container}get pathStringForCount(){return null===this.pathForCount?null:this.CompactPathString(this.pathForCount)}set pathStringForCount(t){this.pathForCount=null===t?null:new e(t)}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;super(),this.pathForCount=null,this.name=t}toString(){if(null!=this.name)return"var("+this.name+")";return"read_count("+this.pathStringForCount+")"}}class R extends m{constructor(t,e){super(),this.variableName=t||null,this.isNewDeclaration=!!e,this.isGlobal=!1}toString(){return"VarAssign to "+this.variableName}}class D extends m{toString(){return"Void"}}class j extends m{static CallWithName(t){return new j(t)}static CallExistsWithName(t){return this.GenerateNativeFunctionsIfNecessary(),this._nativeFunctions.get(t)}get name(){return null===this._name?p("NativeFunctionCall._name"):this._name}set name(t){this._name=t,this._isPrototype||(null===j._nativeFunctions?p("NativeFunctionCall._nativeFunctions"):this._prototype=j._nativeFunctions.get(this._name)||null)}get numberOfParameters(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters}set numberOfParameters(t){this._numberOfParameters=t}Call(t){if(this._prototype)return this._prototype.Call(t);if(this.numberOfParameters!=t.length)throw new Error("Unexpected number of parameters");let e=!1;for(let n of t){if(n instanceof D)throw new y('Attempting to perform operation on a void value. Did you forget to "return" a value from a function you called here?');n instanceof O&&(e=!0)}if(2==t.length&&e)return this.CallBinaryListOperation(t);let n=this.CoerceValuesToSingleType(t),r=n[0].valueType;return r==i.Int||r==i.Float||r==i.String||r==i.DivertTarget||r==i.List?this.CallType(n):null}CallType(t){let e=l(t[0],b),n=e.valueType,r=e,a=t.length;if(2==a||1==a){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let s=this._operationFuncs.get(n);if(!s){const t=i[n];throw new y("Cannot perform operation "+this.name+" on "+t)}if(2==a){let e=l(t[1],b),n=s;if(null===r.value||null===e.value)return p("NativeFunctionCall.Call BinaryOp values");let i=n(r.value,e.value);return b.Create(i)}{let t=s;if(null===r.value)return p("NativeFunctionCall.Call UnaryOp value");let n=t(r.value);return this.name===j.Int?b.Create(n,i.Int):this.name===j.Float?b.Create(n,i.Float):b.Create(n,e.valueType)}}throw new Error("Unexpected number of parameters to NativeFunctionCall: "+t.length)}CallBinaryListOperation(t){if(("+"==this.name||"-"==this.name)&&t[0]instanceof O&&t[1]instanceof w)return this.CallListIncrementOperation(t);let e=l(t[0],b),n=l(t[1],b);if(!("&&"!=this.name&&"||"!=this.name||e.valueType==i.List&&n.valueType==i.List)){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let t=this._operationFuncs.get(i.Int);if(null===t)return p("NativeFunctionCall.CallBinaryListOperation op");let r=function(t){if("boolean"==typeof t)return t;throw new Error("".concat(t," is not a boolean"))}(t(e.isTruthy?1:0,n.isTruthy?1:0));return new _(r)}if(e.valueType==i.List&&n.valueType==i.List)return this.CallType([e,n]);throw new y("Can not call use "+this.name+" operation on "+i[e.valueType]+" and "+i[n.valueType])}CallListIncrementOperation(t){let e=l(t[0],O),n=l(t[1],w),r=new S;if(null===e.value)return p("NativeFunctionCall.CallListIncrementOperation listVal.value");for(let[t,a]of e.value){let s=g.fromSerializedKey(t);if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let l=this._operationFuncs.get(i.Int);if(null===n.value)return p("NativeFunctionCall.CallListIncrementOperation intVal.value");let o=l(a,n.value),h=null;if(null===e.value.origins)return p("NativeFunctionCall.CallListIncrementOperation listVal.value.origins");for(let t of e.value.origins)if(t.name==s.originName){h=t;break}if(null!=h){let t=h.TryGetItemWithValue(o,g.Null);t.exists&&r.Add(t.result,o)}}return new O(r)}CoerceValuesToSingleType(t){let e=i.Int,n=null;for(let r of t){let t=l(r,b);t.valueType>e&&(e=t.valueType),t.valueType==i.List&&(n=s(t,O))}let r=[];if(i[e]==i[i.List])for(let e of t){let t=l(e,b);if(t.valueType==i.List)r.push(t);else{if(t.valueType!=i.Int){const e=i[t.valueType];throw new y("Cannot mix Lists and "+e+" values in this operation")}{let e=parseInt(t.valueObject);if(n=l(n,O),null===n.value)return p("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");let i=n.value.originOfMaxItem;if(null===i)return p("NativeFunctionCall.CoerceValuesToSingleType list");let a=i.TryGetItemWithValue(e,g.Null);if(!a.exists)throw new y("Could not find List item with the value "+e+" in "+i.name);{let t=new O(a.result,e);r.push(t)}}}}else for(let n of t){let t=l(n,b).Cast(e);r.push(t)}return r}constructor(){if(super(),this._name=null,this._numberOfParameters=0,this._prototype=null,this._isPrototype=!1,this._operationFuncs=null,0===arguments.length)j.GenerateNativeFunctionsIfNecessary();else if(1===arguments.length){let t=arguments[0];j.GenerateNativeFunctionsIfNecessary(),this.name=t}else if(2===arguments.length){let t=arguments[0],e=arguments[1];this._isPrototype=!0,this.name=t,this.numberOfParameters=e}}static Identity(t){return t}static GenerateNativeFunctionsIfNecessary(){if(null==this._nativeFunctions){this._nativeFunctions=new Map,this.AddIntBinaryOp(this.Add,((t,e)=>t+e)),this.AddIntBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddIntBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddIntBinaryOp(this.Divide,((t,e)=>Math.floor(t/e))),this.AddIntBinaryOp(this.Mod,((t,e)=>t%e)),this.AddIntUnaryOp(this.Negate,(t=>-t)),this.AddIntBinaryOp(this.Equal,((t,e)=>t==e)),this.AddIntBinaryOp(this.Greater,((t,e)=>t>e)),this.AddIntBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddIntBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddIntBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddIntUnaryOp(this.Not,(t=>0==t)),this.AddIntBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddIntBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddIntBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddIntBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddIntBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddIntUnaryOp(this.Floor,j.Identity),this.AddIntUnaryOp(this.Ceiling,j.Identity),this.AddIntUnaryOp(this.Int,j.Identity),this.AddIntUnaryOp(this.Float,(t=>t)),this.AddFloatBinaryOp(this.Add,((t,e)=>t+e)),this.AddFloatBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddFloatBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddFloatBinaryOp(this.Divide,((t,e)=>t/e)),this.AddFloatBinaryOp(this.Mod,((t,e)=>t%e)),this.AddFloatUnaryOp(this.Negate,(t=>-t)),this.AddFloatBinaryOp(this.Equal,((t,e)=>t==e)),this.AddFloatBinaryOp(this.Greater,((t,e)=>t>e)),this.AddFloatBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddFloatBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddFloatBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddFloatUnaryOp(this.Not,(t=>0==t)),this.AddFloatBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddFloatBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddFloatBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddFloatBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddFloatBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddFloatUnaryOp(this.Floor,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Ceiling,(t=>Math.ceil(t))),this.AddFloatUnaryOp(this.Int,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Float,j.Identity),this.AddStringBinaryOp(this.Add,((t,e)=>t+e)),this.AddStringBinaryOp(this.Equal,((t,e)=>t===e)),this.AddStringBinaryOp(this.NotEquals,((t,e)=>!(t===e))),this.AddStringBinaryOp(this.Has,((t,e)=>t.includes(e))),this.AddStringBinaryOp(this.Hasnt,((t,e)=>!t.includes(e))),this.AddListBinaryOp(this.Add,((t,e)=>t.Union(e))),this.AddListBinaryOp(this.Subtract,((t,e)=>t.Without(e))),this.AddListBinaryOp(this.Has,((t,e)=>t.Contains(e))),this.AddListBinaryOp(this.Hasnt,((t,e)=>!t.Contains(e))),this.AddListBinaryOp(this.Intersect,((t,e)=>t.Intersect(e))),this.AddListBinaryOp(this.Equal,((t,e)=>t.Equals(e))),this.AddListBinaryOp(this.Greater,((t,e)=>t.GreaterThan(e))),this.AddListBinaryOp(this.Less,((t,e)=>t.LessThan(e))),this.AddListBinaryOp(this.GreaterThanOrEquals,((t,e)=>t.GreaterThanOrEquals(e))),this.AddListBinaryOp(this.LessThanOrEquals,((t,e)=>t.LessThanOrEquals(e))),this.AddListBinaryOp(this.NotEquals,((t,e)=>!t.Equals(e))),this.AddListBinaryOp(this.And,((t,e)=>t.Count>0&&e.Count>0)),this.AddListBinaryOp(this.Or,((t,e)=>t.Count>0||e.Count>0)),this.AddListUnaryOp(this.Not,(t=>0==t.Count?1:0)),this.AddListUnaryOp(this.Invert,(t=>t.inverse)),this.AddListUnaryOp(this.All,(t=>t.all)),this.AddListUnaryOp(this.ListMin,(t=>t.MinAsList())),this.AddListUnaryOp(this.ListMax,(t=>t.MaxAsList())),this.AddListUnaryOp(this.Count,(t=>t.Count)),this.AddListUnaryOp(this.ValueOfList,(t=>t.maxItem.Value));let t=(t,e)=>t.Equals(e),e=(t,e)=>!t.Equals(e);this.AddOpToNativeFunc(this.Equal,2,i.DivertTarget,t),this.AddOpToNativeFunc(this.NotEquals,2,i.DivertTarget,e)}}AddOpFuncForType(t,e){null==this._operationFuncs&&(this._operationFuncs=new Map),this._operationFuncs.set(t,e)}static AddOpToNativeFunc(t,e,n,i){if(null===this._nativeFunctions)return p("NativeFunctionCall._nativeFunctions");let r=this._nativeFunctions.get(t);r||(r=new j(t,e),this._nativeFunctions.set(t,r)),r.AddOpFuncForType(n,i)}static AddIntBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Int,e)}static AddIntUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Int,e)}static AddFloatBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Float,e)}static AddFloatUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Float,e)}static AddStringBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.String,e)}static AddListBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.List,e)}static AddListUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.List,e)}toString(){return'Native "'+this.name+'"'}}j.Add="+",j.Subtract="-",j.Divide="/",j.Multiply="*",j.Mod="%",j.Negate="_",j.Equal="==",j.Greater=">",j.Less="<",j.GreaterThanOrEquals=">=",j.LessThanOrEquals="<=",j.NotEquals="!=",j.Not="!",j.And="&&",j.Or="||",j.Min="MIN",j.Max="MAX",j.Pow="POW",j.Floor="FLOOR",j.Ceiling="CEILING",j.Int="INT",j.Float="FLOAT",j.Has="?",j.Hasnt="!?",j.Intersect="^",j.ListMin="LIST_MIN",j.ListMax="LIST_MAX",j.All="LIST_ALL",j.Count="LIST_COUNT",j.ValueOfList="LIST_VALUE",j.Invert="LIST_INVERT",j._nativeFunctions=null;class B extends m{constructor(t){super(),this.text=t.toString()||""}toString(){return"# "+this.text}}class G extends m{constructor(){super(...arguments),this.text="",this.index=0,this.threadAtGeneration=null,this.sourcePath="",this.targetPath=null,this.isInvisibleDefault=!1,this.tags=null,this.originalThreadIndex=0}get pathStringOnChoice(){return null===this.targetPath?p("Choice.targetPath"):this.targetPath.toString()}set pathStringOnChoice(t){this.targetPath=new e(t)}}class M{constructor(t,e){this._name=t||"",this._items=null,this._itemNameToValues=e||new Map}get name(){return this._name}get items(){if(null==this._items){this._items=new Map;for(let[t,e]of this._itemNameToValues){let n=new g(this.name,t);this._items.set(n.serialized(),e)}}return this._items}ValueForItem(t){if(!t.itemName)return 0;let e=this._itemNameToValues.get(t.itemName);return void 0!==e?e:0}ContainsItem(t){return!!t.itemName&&(t.originName==this.name&&this._itemNameToValues.has(t.itemName))}ContainsItemWithName(t){return this._itemNameToValues.has(t)}TryGetItemWithValue(t,e){for(let[e,n]of this._itemNameToValues)if(n==t)return{result:new g(this.name,e),exists:!0};return{result:g.Null,exists:!1}}TryGetValueForItem(t,e){if(!t.itemName)return{result:0,exists:!1};let n=this._itemNameToValues.get(t.itemName);return n?{result:n,exists:!0}:{result:0,exists:!1}}}class J{constructor(t){this._lists=new Map,this._allUnambiguousListValueCache=new Map;for(let e of t){this._lists.set(e.name,e);for(let[t,n]of e.items){let e=g.fromSerializedKey(t),i=new O(e,n);if(!e.itemName)throw new Error("item.itemName is null or undefined.");this._allUnambiguousListValueCache.set(e.itemName,i),this._allUnambiguousListValueCache.set(e.fullName,i)}}}get lists(){let t=[];for(let[,e]of this._lists)t.push(e);return t}TryListGetDefinition(t,e){if(null===t)return{result:e,exists:!1};let n=this._lists.get(t);return n?{result:n,exists:!0}:{result:e,exists:!1}}FindSingleItemListWithName(t){if(null===t)return p("name");let e=this._allUnambiguousListValueCache.get(t);return void 0!==e?e:null}}class q{static JArrayToRuntimeObjList(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.length;e&&n--;let i=[];for(let e=0;et->")),e=i.hasVariableTarget?i.variableDivertName:i.targetPathString,t.WriteObjectStart(),t.WriteProperty(n,e),i.hasVariableTarget&&t.WriteProperty("var",!0),i.isConditional&&t.WriteProperty("c",!0),i.externalArgs>0&&t.WriteIntProperty("exArgs",i.externalArgs),void t.WriteObjectEnd()}let a=s(e,V);if(a)return t.WriteObjectStart(),t.WriteProperty("*",a.pathStringOnChoice),t.WriteIntProperty("flg",a.flags),void t.WriteObjectEnd();let l=s(e,_);if(l)return void t.WriteBool(l.value);let o=s(e,w);if(o)return void t.WriteInt(o.value);let h=s(e,T);if(h)return void t.WriteFloat(h.value);let u=s(e,E);if(u)return void(u.isNewline?t.Write("\n",!1):(t.WriteStringStart(),t.WriteStringInner("^"),t.WriteStringInner(u.value),t.WriteStringEnd()));let c=s(e,O);if(c)return void this.WriteInkList(t,c);let d=s(e,P);if(d)return t.WriteObjectStart(),null===d.value?p("divTargetVal.value"):(t.WriteProperty("^->",d.value.componentsString),void t.WriteObjectEnd());let m=s(e,N);if(m)return t.WriteObjectStart(),t.WriteProperty("^var",m.value),t.WriteIntProperty("ci",m.contextIndex),void t.WriteObjectEnd();if(s(e,I))return void t.Write("<>");let f=s(e,k);if(f)return void t.Write(q._controlCommandNames[f.commandType]);let g=s(e,j);if(g){let e=g.name;return"^"==e&&(e="L^"),void t.Write(e)}let S=s(e,L);if(S){t.WriteObjectStart();let e=S.pathStringForCount;return null!=e?t.WriteProperty("CNT?",e):t.WriteProperty("VAR?",S.name),void t.WriteObjectEnd()}let y=s(e,R);if(y){t.WriteObjectStart();let e=y.isGlobal?"VAR=":"temp=";return t.WriteProperty(e,y.variableName),y.isNewDeclaration||t.WriteProperty("re",!0),void t.WriteObjectEnd()}if(s(e,D))return void t.Write("void");let v=s(e,B);if(v)return t.WriteObjectStart(),t.WriteProperty("#",v.text),void t.WriteObjectEnd();let C=s(e,G);if(!C)throw new Error("Failed to convert runtime object to Json token: "+e);this.WriteChoice(t,C)}static JObjectToDictionaryRuntimeObjs(t){let e=new Map;for(let n in t)if(t.hasOwnProperty(n)){let i=this.JTokenToRuntimeObject(t[n]);if(null===i)return p("inkObject");e.set(n,i)}return e}static JObjectToIntDictionary(t){let e=new Map;for(let n in t)t.hasOwnProperty(n)&&e.set(n,parseInt(t[n]));return e}static JTokenToRuntimeObject(t){if("number"==typeof t&&!isNaN(t)||"boolean"==typeof t)return b.Create(t);if("string"==typeof t){let e=t.toString(),n=e[0];if("^"==n)return new E(e.substring(1));if("\n"==n&&1==e.length)return new E("\n");if("<>"==e)return new I;for(let t=0;t->"==e)return k.PopTunnel();if("~ret"==e)return k.PopFunction();if("void"==e)return new D}if("object"==typeof t&&!Array.isArray(t)){let n,i=t;if(i["^->"])return n=i["^->"],new P(new e(n.toString()));if(i["^var"]){n=i["^var"];let t=new N(n.toString());return"ci"in i&&(n=i.ci,t.contextIndex=parseInt(n)),t}let a=!1,s=!1,l=r.Function,o=!1;if((n=i["->"])?a=!0:(n=i["f()"])?(a=!0,s=!0,l=r.Function):(n=i["->t->"])?(a=!0,s=!0,l=r.Tunnel):(n=i["x()"])&&(a=!0,o=!0,s=!1,l=r.Function),a){let t=new W;t.pushesToStack=s,t.stackPushType=l,t.isExternal=o;let e=n.toString();return(n=i.var)?t.variableDivertName=e:t.targetPathString=e,t.isConditional=!!i.c,o&&(n=i.exArgs)&&(t.externalArgs=parseInt(n)),t}if(n=i["*"]){let t=new V;return t.pathStringOnChoice=n.toString(),(n=i.flg)&&(t.flags=parseInt(n)),t}if(n=i["VAR?"])return new L(n.toString());if(n=i["CNT?"]){let t=new L;return t.pathStringForCount=n.toString(),t}let h=!1,u=!1;if((n=i["VAR="])?(h=!0,u=!0):(n=i["temp="])&&(h=!0,u=!1),h){let t=n.toString(),e=!i.re,r=new R(t,e);return r.isGlobal=u,r}if(void 0!==i["#"])return n=i["#"],new B(n.toString());if(n=i.list){let t=n,e=new S;if(n=i.origins){let t=n;e.SetInitialOriginNames(t)}for(let n in t)if(t.hasOwnProperty(n)){let i=t[n],r=new g(n),a=parseInt(i);e.Add(r,a)}return new O(e)}if(null!=i.originalChoicePath)return this.JObjectToChoice(i)}if(Array.isArray(t))return this.JArrayToContainer(t);if(null==t)return null;throw new Error("Failed to convert token to runtime object: "+this.toJson(t,["parent"]))}static toJson(t,e,n){return JSON.stringify(t,((t,n)=>(null==e?void 0:e.some((e=>e===t)))?void 0:n),n)}static WriteRuntimeContainer(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.WriteArrayStart(),null===e)return p("container");for(let n of e.content)this.WriteRuntimeObject(t,n);let i=e.namedOnlyContent,r=e.countFlags,a=null!=e.name&&!n,l=null!=i||r>0||a;if(l&&t.WriteObjectStart(),null!=i)for(let[e,n]of i){let i=e,r=s(n,x);t.WritePropertyStart(i),this.WriteRuntimeContainer(t,r,!0),t.WritePropertyEnd()}r>0&&t.WriteIntProperty("#f",r),a&&t.WriteProperty("#n",e.name),l?t.WriteObjectEnd():t.WriteNull(),t.WriteArrayEnd()}static JArrayToContainer(t){let e=new x;e.content=this.JArrayToRuntimeObjList(t,!0);let n=t[t.length-1];if(null!=n){let t=new Map;for(let i in n)if("#f"==i)e.countFlags=parseInt(n[i]);else if("#n"==i)e.name=n[i].toString();else{let e=this.JTokenToRuntimeObject(n[i]),r=s(e,x);r&&(r.name=i),t.set(i,e)}e.namedOnlyContent=t}return e}static JObjectToChoice(t){let e=new G;return e.text=t.text.toString(),e.index=parseInt(t.index),e.sourcePath=t.originalChoicePath.toString(),e.originalThreadIndex=parseInt(t.originalThreadIndex),e.pathStringOnChoice=t.targetPath.toString(),t.tags&&(e.tags=t.tags),e}static WriteChoice(t,e){t.WriteObjectStart(),t.WriteProperty("text",e.text),t.WriteIntProperty("index",e.index),t.WriteProperty("originalChoicePath",e.sourcePath),t.WriteIntProperty("originalThreadIndex",e.originalThreadIndex),t.WriteProperty("targetPath",e.pathStringOnChoice),e.tags&&t.WriteProperty("tags",(t=>{t.WriteArrayStart();for(const n of e.tags)t.WriteStringStart(),t.WriteStringInner(n),t.WriteStringEnd();t.WriteArrayEnd()})),t.WriteObjectEnd()}static WriteInkList(t,e){let n=e.value;if(null===n)return p("rawList");t.WriteObjectStart(),t.WritePropertyStart("list"),t.WriteObjectStart();for(let[e,i]of n){let n=g.fromSerializedKey(e),r=i;if(null===n.itemName)return p("item.itemName");t.WritePropertyNameStart(),t.WritePropertyNameInner(n.originName?n.originName:"?"),t.WritePropertyNameInner("."),t.WritePropertyNameInner(n.itemName),t.WritePropertyNameEnd(),t.Write(r),t.WritePropertyEnd()}if(t.WriteObjectEnd(),t.WritePropertyEnd(),0==n.Count&&null!=n.originNames&&n.originNames.length>0){t.WritePropertyStart("origins"),t.WriteArrayStart();for(let e of n.originNames)t.Write(e);t.WriteArrayEnd(),t.WritePropertyEnd()}t.WriteObjectEnd()}static ListDefinitionsToJToken(t){let e={};for(let n of t.lists){let t={};for(let[e,i]of n.items){let n=g.fromSerializedKey(e);if(null===n.itemName)return p("item.itemName");t[n.itemName]=i}e[n.name]=t}return e}static JTokenToListDefinitions(t){let e=t,n=[];for(let t in e)if(e.hasOwnProperty(t)){let i=t.toString(),r=e[t],a=new Map;for(let n in r)if(e.hasOwnProperty(t)){let t=r[n];a.set(n,parseInt(t))}let s=new M(i,a);n.push(s)}return new J(n)}}q._controlCommandNames=(()=>{let t=[];t[k.CommandType.EvalStart]="ev",t[k.CommandType.EvalOutput]="out",t[k.CommandType.EvalEnd]="/ev",t[k.CommandType.Duplicate]="du",t[k.CommandType.PopEvaluatedValue]="pop",t[k.CommandType.PopFunction]="~ret",t[k.CommandType.PopTunnel]="->->",t[k.CommandType.BeginString]="str",t[k.CommandType.EndString]="/str",t[k.CommandType.NoOp]="nop",t[k.CommandType.ChoiceCount]="choiceCnt",t[k.CommandType.Turns]="turn",t[k.CommandType.TurnsSince]="turns",t[k.CommandType.ReadCount]="readc",t[k.CommandType.Random]="rnd",t[k.CommandType.SeedRandom]="srnd",t[k.CommandType.VisitIndex]="visit",t[k.CommandType.SequenceShuffleIndex]="seq",t[k.CommandType.StartThread]="thread",t[k.CommandType.Done]="done",t[k.CommandType.End]="end",t[k.CommandType.ListFromInt]="listInt",t[k.CommandType.ListRange]="range",t[k.CommandType.ListRandom]="lrnd",t[k.CommandType.BeginTag]="#",t[k.CommandType.EndTag]="/#";for(let e=0;e1}constructor(){if(this._threadCounter=0,this._startOfRoot=F.Null,arguments[0]instanceof Z){let t=arguments[0];this._startOfRoot=F.StartOf(t.rootContentContainer),this.Reset()}else{let t=arguments[0];this._threads=[];for(let e of t._threads)this._threads.push(e.Copy());this._threadCounter=t._threadCounter,this._startOfRoot=t._startOfRoot.copy()}}Reset(){this._threads=[],this._threads.push(new U.Thread),this._threads[0].callstack.push(new U.Element(r.Tunnel,this._startOfRoot))}SetJsonToken(t,e){this._threads.length=0;let n=t.threads;for(let t of n){let n=t,i=new U.Thread(n,e);this._threads.push(i)}this._threadCounter=parseInt(t.threadCounter),this._startOfRoot=F.StartOf(e.rootContentContainer)}WriteJson(t){t.WriteObject((t=>{t.WritePropertyStart("threads"),t.WriteArrayStart();for(let e of this._threads)e.WriteJson(t);t.WriteArrayEnd(),t.WritePropertyEnd(),t.WritePropertyStart("threadCounter"),t.WriteInt(this._threadCounter),t.WritePropertyEnd()}))}PushThread(){let t=this.currentThread.Copy();this._threadCounter++,t.threadIndex=this._threadCounter,this._threads.push(t)}ForkThread(){let t=this.currentThread.Copy();return this._threadCounter++,t.threadIndex=this._threadCounter,t}PopThread(){if(!this.canPopThread)throw new Error("Can't pop thread");this._threads.splice(this._threads.indexOf(this.currentThread),1)}get canPopThread(){return this._threads.length>1&&!this.elementIsEvaluateFromGame}get elementIsEvaluateFromGame(){return this.currentElement.type==r.FunctionEvaluationFromGame}Push(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=new U.Element(t,this.currentElement.currentPointer,!1);i.evaluationStackHeightWhenPushed=e,i.functionStartInOutputStream=n,this.callStack.push(i)}CanPop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return!!this.canPop&&(null==t||this.currentElement.type==t)}Pop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.CanPop(t))throw new Error("Mismatched push/pop in Callstack");this.callStack.pop()}GetTemporaryVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;-1==e&&(e=this.currentElementIndex+1);let n=v(this.callStack[e-1].temporaryVariables,t,null);return n.exists?n.result:null}SetTemporaryVariable(t,e,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1;-1==i&&(i=this.currentElementIndex+1);let r=this.callStack[i-1];if(!n&&!r.temporaryVariables.get(t))throw new Error("Could not find temporary variable to set: "+t);let a=v(r.temporaryVariables,t,null);a.exists&&O.RetainListOriginsForAssignment(a.result,e),r.temporaryVariables.set(t,e)}ContextForVariableNamed(t){return this.currentElement.temporaryVariables.get(t)?this.currentElementIndex+1:0}ThreadWithIndex(t){let e=this._threads.filter((e=>{if(e.threadIndex==t)return e}));return e.length>0?e[0]:null}get callStack(){return this.currentThread.callstack}get callStackTrace(){let t=new f;for(let e=0;e")}}}return t.toString()}}!function(t){class n{constructor(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.evaluationStackHeightWhenPushed=0,this.functionStartInOutputStream=0,this.currentPointer=e.copy(),this.inExpressionEvaluation=n,this.temporaryVariables=new Map,this.type=t}Copy(){let t=new n(this.type,this.currentPointer,this.inExpressionEvaluation);return t.temporaryVariables=new Map(this.temporaryVariables),t.evaluationStackHeightWhenPushed=this.evaluationStackHeightWhenPushed,t.functionStartInOutputStream=this.functionStartInOutputStream,t}}t.Element=n;class i{constructor(){if(this.threadIndex=0,this.previousPointer=F.Null,this.callstack=[],arguments[0]&&arguments[1]){let t=arguments[0],i=arguments[1];this.threadIndex=parseInt(t.threadIndex);let r=t.callstack;for(let t of r){let r,a=t,s=parseInt(a.type),l=F.Null,o=a.cPath;if(void 0!==o){r=o.toString();let t=i.ContentAtPath(new e(r));if(l.container=t.container,l.index=parseInt(a.idx),null==t.obj)throw new Error("When loading state, internal story location couldn't be found: "+r+". Has the story changed since this save data was created?");if(t.approximate){if(null===l.container)return p("pointer.container");i.Warning("When loading state, exact internal story location couldn't be found: '"+r+"', so it was approximated to '"+l.container.path.toString()+"' to recover. Has the story changed since this save data was created?")}}let h=!!a.exp,u=new n(s,l,h),c=a.temp;void 0!==c?u.temporaryVariables=q.JObjectToDictionaryRuntimeObjs(c):u.temporaryVariables.clear(),this.callstack.push(u)}let a=t.previousContentObject;if(void 0!==a){let t=new e(a.toString());this.previousPointer=i.PointerAtPath(t)}}}Copy(){let t=new i;t.threadIndex=this.threadIndex;for(let e of this.callstack)t.callstack.push(e.Copy());return t.previousPointer=this.previousPointer.copy(),t}WriteJson(t){t.WriteObjectStart(),t.WritePropertyStart("callstack"),t.WriteArrayStart();for(let e of this.callstack){if(t.WriteObjectStart(),!e.currentPointer.isNull){if(null===e.currentPointer.container)return p("el.currentPointer.container");t.WriteProperty("cPath",e.currentPointer.container.path.componentsString),t.WriteIntProperty("idx",e.currentPointer.index)}t.WriteProperty("exp",e.inExpressionEvaluation),t.WriteIntProperty("type",e.type),e.temporaryVariables.size>0&&(t.WritePropertyStart("temp"),q.WriteDictionaryRuntimeObjs(t,e.temporaryVariables),t.WritePropertyEnd()),t.WriteObjectEnd()}if(t.WriteArrayEnd(),t.WritePropertyEnd(),t.WriteIntProperty("threadIndex",this.threadIndex),!this.previousPointer.isNull){let e=this.previousPointer.Resolve();if(null===e)return p("this.previousPointer.Resolve()");t.WriteProperty("previousContentObject",e.path.toString())}t.WriteObjectEnd()}}t.Thread=i}(U||(U={}));class K extends class{}{variableChangedEvent(t,e){for(let n of this.variableChangedEventCallbacks)n(t,e)}get batchObservingVariableChanges(){return this._batchObservingVariableChanges}set batchObservingVariableChanges(t){if(this._batchObservingVariableChanges=t,t)this._changedVariablesForBatchObs=new Set;else if(null!=this._changedVariablesForBatchObs){for(let t of this._changedVariablesForBatchObs){let e=this._globalVariables.get(t);e?this.variableChangedEvent(t,e):p("currentValue")}this._changedVariablesForBatchObs=null}}get callStack(){return this._callStack}set callStack(t){this._callStack=t}$(t,e){if(void 0===e){let e=null;return null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists)?e.result.valueObject:(e=this._globalVariables.get(t),void 0===e&&(e=this._defaultGlobalVariables.get(t)),void 0!==e?e.valueObject:null)}{if(void 0===this._defaultGlobalVariables.get(t))throw new y("Cannot assign to a variable ("+t+") that hasn't been declared in the story");let n=b.Create(e);if(null==n)throw null==e?new Error("Cannot pass null to VariableState"):new Error("Invalid value passed to VariableState: "+e.toString());this.SetGlobal(t,n)}}constructor(t,e){super(),this.variableChangedEventCallbacks=[],this.patch=null,this._batchObservingVariableChanges=!1,this._defaultGlobalVariables=new Map,this._changedVariablesForBatchObs=new Set,this._globalVariables=new Map,this._callStack=t,this._listDefsOrigin=e;try{return new Proxy(this,{get:(t,e)=>e in t?t[e]:t.$(e),set:(t,e,n)=>(e in t?t[e]=n:t.$(e,n),!0)})}catch(t){}}ApplyPatch(){if(null===this.patch)return p("this.patch");for(let[t,e]of this.patch.globals)this._globalVariables.set(t,e);if(null!==this._changedVariablesForBatchObs)for(let t of this.patch.changedVariables)this._changedVariablesForBatchObs.add(t);this.patch=null}SetJsonToken(t){this._globalVariables.clear();for(let[e,n]of this._defaultGlobalVariables){let i=t[e];if(void 0!==i){let t=q.JTokenToRuntimeObject(i);if(null===t)return p("tokenInkObject");this._globalVariables.set(e,t)}else this._globalVariables.set(e,n)}}WriteJson(t){t.WriteObjectStart();for(let[e,n]of this._globalVariables){let i=e,r=n;if(K.dontSaveDefaultValues&&this._defaultGlobalVariables.has(i)){let t=this._defaultGlobalVariables.get(i);if(this.RuntimeObjectsEqual(r,t))continue}t.WritePropertyStart(i),q.WriteRuntimeObject(t,r),t.WritePropertyEnd()}t.WriteObjectEnd()}RuntimeObjectsEqual(t,e){if(null===t)return p("obj1");if(null===e)return p("obj2");if(t.constructor!==e.constructor)return!1;let n=s(t,_);if(null!==n)return n.value===l(e,_).value;let i=s(t,w);if(null!==i)return i.value===l(e,w).value;let r=s(t,T);if(null!==r)return r.value===l(e,T).value;let a=s(t,b),o=s(e,b);if(null!==a&&null!==o)return u(a.valueObject)&&u(o.valueObject)?a.valueObject.Equals(o.valueObject):a.valueObject===o.valueObject;throw new Error("FastRoughDefinitelyEquals: Unsupported runtime object type: "+t.constructor.name)}GetVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=this.GetRawVariableWithName(t,e),i=s(n,N);return null!==i&&(n=this.ValueAtVariablePointer(i)),n}TryGetDefaultVariableValue(t){let e=v(this._defaultGlobalVariables,t,null);return e.exists?e.result:null}GlobalVariableExistsWithName(t){return this._globalVariables.has(t)||null!==this._defaultGlobalVariables&&this._defaultGlobalVariables.has(t)}GetRawVariableWithName(t,e){let n=null;if(0==e||-1==e){let e=null;if(null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists))return e.result;if(e=v(this._globalVariables,t,null),e.exists)return e.result;if(null!==this._defaultGlobalVariables&&(e=v(this._defaultGlobalVariables,t,null),e.exists))return e.result;if(null===this._listDefsOrigin)return p("VariablesState._listDefsOrigin");let n=this._listDefsOrigin.FindSingleItemListWithName(t);if(n)return n}return n=this._callStack.GetTemporaryVariableWithName(t,e),n}ValueAtVariablePointer(t){return this.GetVariableWithName(t.variableName,t.contextIndex)}Assign(t,e){let n=t.variableName;if(null===n)return p("name");let i=-1,r=!1;if(r=t.isNewDeclaration?t.isGlobal:this.GlobalVariableExistsWithName(n),t.isNewDeclaration){let t=s(e,N);if(null!==t){e=this.ResolveVariablePointer(t)}}else{let t=null;do{t=s(this.GetRawVariableWithName(n,i),N),null!=t&&(n=t.variableName,i=t.contextIndex,r=0==i)}while(null!=t)}r?this.SetGlobal(n,e):this._callStack.SetTemporaryVariable(n,e,t.isNewDeclaration,i)}SnapshotDefaultGlobals(){this._defaultGlobalVariables=new Map(this._globalVariables)}RetainListOriginsForAssignment(t,e){let n=l(t,O),i=l(e,O);n.value&&i.value&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames)}SetGlobal(t,e){let n=null;if(null===this.patch&&(n=v(this._globalVariables,t,null)),null!==this.patch&&(n=this.patch.TryGetGlobal(t,null),n.exists||(n=v(this._globalVariables,t,null))),O.RetainListOriginsForAssignment(n.result,e),null===t)return p("variableName");if(null!==this.patch?this.patch.SetGlobal(t,e):this._globalVariables.set(t,e),null!==this.variableChangedEvent&&null!==n&&e!==n.result)if(this.batchObservingVariableChanges){if(null===this._changedVariablesForBatchObs)return p("this._changedVariablesForBatchObs");null!==this.patch?this.patch.AddChangedVariable(t):null!==this._changedVariablesForBatchObs&&this._changedVariablesForBatchObs.add(t)}else this.variableChangedEvent(t,e)}ResolveVariablePointer(t){let e=t.contextIndex;-1==e&&(e=this.GetContextIndexOfVariableNamed(t.variableName));let n=s(this.GetRawVariableWithName(t.variableName,e),N);return null!=n?n:new N(t.variableName,e)}GetContextIndexOfVariableNamed(t){return this.GlobalVariableExistsWithName(t)?0:this._callStack.currentElementIndex}ObserveVariableChange(t){this.variableChangedEventCallbacks.push(t)}}K.dontSaveDefaultValues=!0;class z{constructor(t){this.seed=t%2147483647,this.seed<=0&&(this.seed+=2147483646)}next(){return this.seed=48271*this.seed%2147483647}nextFloat(){return(this.next()-1)/2147483646}}class H{get globals(){return this._globals}get changedVariables(){return this._changedVariables}get visitCounts(){return this._visitCounts}get turnIndices(){return this._turnIndices}constructor(){if(this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map,1===arguments.length&&null!==arguments[0]){let t=arguments[0];this._globals=new Map(t._globals),this._changedVariables=new Set(t._changedVariables),this._visitCounts=new Map(t._visitCounts),this._turnIndices=new Map(t._turnIndices)}else this._globals=new Map,this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map}TryGetGlobal(t,e){return null!==t&&this._globals.has(t)?{result:this._globals.get(t),exists:!0}:{result:e,exists:!1}}SetGlobal(t,e){this._globals.set(t,e)}AddChangedVariable(t){return this._changedVariables.add(t)}TryGetVisitCount(t,e){return this._visitCounts.has(t)?{result:this._visitCounts.get(t),exists:!0}:{result:e,exists:!1}}SetVisitCount(t,e){this._visitCounts.set(t,e)}SetTurnIndex(t,e){this._turnIndices.set(t,e)}TryGetTurnIndex(t,e){return this._turnIndices.has(t)?{result:this._turnIndices.get(t),exists:!0}:{result:e,exists:!1}}}class X{static TextToDictionary(t){return new X.Reader(t).ToDictionary()}static TextToArray(t){return new X.Reader(t).ToArray()}}!function(t){t.Reader=class{constructor(t){this._rootObject=JSON.parse(t)}ToDictionary(){return this._rootObject}ToArray(){return this._rootObject}};class e{constructor(){this._currentPropertyName=null,this._currentString=null,this._stateStack=[],this._collectionStack=[],this._propertyNameStack=[],this._jsonObject=null}WriteObject(t){this.WriteObjectStart(),t(this),this.WriteObjectEnd()}WriteObjectStart(){this.StartNewObject(!0);let e={};if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Object))}WriteObjectEnd(){this.Assert(this.state===t.Writer.State.Object),this._collectionStack.pop(),this._stateStack.pop()}WriteProperty(t,e){if(this.WritePropertyStart(t),arguments[1]instanceof Function){(0,arguments[1])(this)}else{let t=arguments[1];this.Write(t)}this.WritePropertyEnd()}WriteIntProperty(t,e){this.WritePropertyStart(t),this.WriteInt(e),this.WritePropertyEnd()}WriteFloatProperty(t,e){this.WritePropertyStart(t),this.WriteFloat(e),this.WritePropertyEnd()}WritePropertyStart(e){this.Assert(this.state===t.Writer.State.Object),this._propertyNameStack.push(e),this.IncrementChildCount(),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property))}WritePropertyEnd(){this.Assert(this.state===t.Writer.State.Property),this.Assert(1===this.childCount),this._stateStack.pop()}WritePropertyNameStart(){this.Assert(this.state===t.Writer.State.Object),this.IncrementChildCount(),this._currentPropertyName="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property)),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.PropertyName))}WritePropertyNameEnd(){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._propertyNameStack.push(this._currentPropertyName),this._currentPropertyName=null,this._stateStack.pop()}WritePropertyNameInner(e){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._currentPropertyName+=e}WriteArrayStart(){this.StartNewObject(!0);let e=[];if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Array))}WriteArrayEnd(){this.Assert(this.state===t.Writer.State.Array),this._collectionStack.pop(),this._stateStack.pop()}Write(t){null!==t?(this.StartNewObject(!1),this._addToCurrentObject(t)):console.error("Warning: trying to write a null value")}WriteBool(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(t))}WriteInt(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(Math.floor(t)))}WriteFloat(t){null!==t&&(this.StartNewObject(!1),t==Number.POSITIVE_INFINITY?this._addToCurrentObject(34e37):t==Number.NEGATIVE_INFINITY?this._addToCurrentObject(-34e37):isNaN(t)?this._addToCurrentObject(0):this._addToCurrentObject(t))}WriteNull(){this.StartNewObject(!1),this._addToCurrentObject(null)}WriteStringStart(){this.StartNewObject(!1),this._currentString="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.String))}WriteStringEnd(){this.Assert(this.state==t.Writer.State.String),this._stateStack.pop(),this._addToCurrentObject(this._currentString),this._currentString=null}WriteStringInner(e){this.Assert(this.state===t.Writer.State.String),null!==e?this._currentString+=e:console.error("Warning: trying to write a null string")}toString(){return null===this._jsonObject?"":JSON.stringify(this._jsonObject)}StartNewObject(e){e?this.Assert(this.state===t.Writer.State.None||this.state===t.Writer.State.Property||this.state===t.Writer.State.Array):this.Assert(this.state===t.Writer.State.Property||this.state===t.Writer.State.Array),this.state===t.Writer.State.Property&&this.Assert(0===this.childCount),this.state!==t.Writer.State.Array&&this.state!==t.Writer.State.Property||this.IncrementChildCount()}get state(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].type:t.Writer.State.None}get childCount(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].childCount:0}get currentCollection(){return this._collectionStack.length>0?this._collectionStack[this._collectionStack.length-1]:null}get currentPropertyName(){return this._propertyNameStack.length>0?this._propertyNameStack[this._propertyNameStack.length-1]:null}IncrementChildCount(){this.Assert(this._stateStack.length>0);let t=this._stateStack.pop();t.childCount++,this._stateStack.push(t)}Assert(t){if(!t)throw Error("Assert failed while writing JSON")}_addToCurrentObject(e){this.Assert(null!==this.currentCollection),this.state===t.Writer.State.Array?(this.Assert(Array.isArray(this.currentCollection)),this.currentCollection.push(e)):this.state===t.Writer.State.Property&&(this.Assert(!Array.isArray(this.currentCollection)),this.Assert(null!==this.currentPropertyName),this.currentCollection[this.currentPropertyName]=e,this._propertyNameStack.pop())}}t.Writer=e,function(e){var n;(n=e.State||(e.State={}))[n.None=0]="None",n[n.Object=1]="Object",n[n.Array=2]="Array",n[n.Property=3]="Property",n[n.PropertyName=4]="PropertyName",n[n.String=5]="String";e.StateElement=class{constructor(e){this.type=t.Writer.State.None,this.childCount=0,this.type=e}}}(e=t.Writer||(t.Writer={}))}(X||(X={}));class ${constructor(){let t=arguments[0],e=arguments[1];if(this.name=t,this.callStack=new U(e),arguments[2]){let t=arguments[2];this.callStack.SetJsonToken(t.callstack,e),this.outputStream=q.JArrayToRuntimeObjList(t.outputStream),this.currentChoices=q.JArrayToRuntimeObjList(t.currentChoices);let n=t.choiceThreads;void 0!==n&&this.LoadFlowChoiceThreads(n,e)}else this.outputStream=[],this.currentChoices=[]}WriteJson(t){t.WriteObjectStart(),t.WriteProperty("callstack",(t=>this.callStack.WriteJson(t))),t.WriteProperty("outputStream",(t=>q.WriteListRuntimeObjs(t,this.outputStream)));let e=!1;for(let n of this.currentChoices){if(null===n.threadAtGeneration)return p("c.threadAtGeneration");n.originalThreadIndex=n.threadAtGeneration.threadIndex,null===this.callStack.ThreadWithIndex(n.originalThreadIndex)&&(e||(e=!0,t.WritePropertyStart("choiceThreads"),t.WriteObjectStart()),t.WritePropertyStart(n.originalThreadIndex),n.threadAtGeneration.WriteJson(t),t.WritePropertyEnd())}e&&(t.WriteObjectEnd(),t.WritePropertyEnd()),t.WriteProperty("currentChoices",(t=>{t.WriteArrayStart();for(let e of this.currentChoices)q.WriteChoice(t,e);t.WriteArrayEnd()})),t.WriteObjectEnd()}LoadFlowChoiceThreads(t,e){for(let n of this.currentChoices){let i=this.callStack.ThreadWithIndex(n.originalThreadIndex);if(null!==i)n.threadAtGeneration=i.Copy();else{let i=t["".concat(n.originalThreadIndex)];n.threadAtGeneration=new U.Thread(i,e)}}}}class Y{ToJson(){let t=new X.Writer;return this.WriteJson(t),t.toString()}toJson(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.ToJson(t)}LoadJson(t){let e=X.TextToDictionary(t);this.LoadJsonObj(e),null!==this.onDidLoadState&&this.onDidLoadState()}VisitCountAtPathString(t){let n;if(null!==this._patch){let i=this.story.ContentAtPath(new e(t)).container;if(null===i)throw new Error("Content at path not found: "+t);if(n=this._patch.TryGetVisitCount(i,0),n.exists)return n.result}return n=v(this._visitCounts,t,null),n.exists?n.result:0}VisitCountForContainer(t){if(null===t)return p("container");if(!t.visitsShouldBeCounted)return this.story.Error("Read count for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;if(null!==this._patch){let e=this._patch.TryGetVisitCount(t,0);if(e.exists)return e.result}let e=t.path.toString(),n=v(this._visitCounts,e,null);return n.exists?n.result:0}IncrementVisitCountForContainer(t){if(null!==this._patch){let e=this.VisitCountForContainer(t);return e++,void this._patch.SetVisitCount(t,e)}let e=t.path.toString(),n=v(this._visitCounts,e,null);n.exists?this._visitCounts.set(e,n.result+1):this._visitCounts.set(e,1)}RecordTurnIndexVisitToContainer(t){if(null!==this._patch)return void this._patch.SetTurnIndex(t,this.currentTurnIndex);let e=t.path.toString();this._turnIndices.set(e,this.currentTurnIndex)}TurnsSinceForContainer(t){if(t.turnIndexShouldBeCounted||this.story.Error("TURNS_SINCE() for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),null!==this._patch){let e=this._patch.TryGetTurnIndex(t,0);if(e.exists)return this.currentTurnIndex-e.result}let e=t.path.toString(),n=v(this._turnIndices,e,0);return n.exists?this.currentTurnIndex-n.result:-1}get callstackDepth(){return this.callStack.depth}get outputStream(){return this._currentFlow.outputStream}get currentChoices(){return this.canContinue?[]:this._currentFlow.currentChoices}get generatedChoices(){return this._currentFlow.currentChoices}get currentErrors(){return this._currentErrors}get currentWarnings(){return this._currentWarnings}get variablesState(){return this._variablesState}set variablesState(t){this._variablesState=t}get callStack(){return this._currentFlow.callStack}get evaluationStack(){return this._evaluationStack}get currentTurnIndex(){return this._currentTurnIndex}set currentTurnIndex(t){this._currentTurnIndex=t}get currentPathString(){let t=this.currentPointer;return t.isNull?null:null===t.path?p("pointer.path"):t.path.toString()}get currentPointer(){return this.callStack.currentElement.currentPointer.copy()}set currentPointer(t){this.callStack.currentElement.currentPointer=t.copy()}get previousPointer(){return this.callStack.currentThread.previousPointer.copy()}set previousPointer(t){this.callStack.currentThread.previousPointer=t.copy()}get canContinue(){return!this.currentPointer.isNull&&!this.hasError}get hasError(){return null!=this.currentErrors&&this.currentErrors.length>0}get hasWarning(){return null!=this.currentWarnings&&this.currentWarnings.length>0}get currentText(){if(this._outputStreamTextDirty){let t=new f,e=!1;for(let n of this.outputStream){let i=s(n,E);if(e||null===i){let t=s(n,k);null!==t&&(t.commandType==k.CommandType.BeginTag?e=!0:t.commandType==k.CommandType.EndTag&&(e=!1))}else t.Append(i.value)}this._currentText=this.CleanOutputWhitespace(t.toString()),this._outputStreamTextDirty=!1}return this._currentText}CleanOutputWhitespace(t){let e=new f,n=-1,i=0;for(let r=0;r0&&n!=i&&e.Append(" "),n=-1),"\n"==a&&(i=r+1),s||e.Append(a)}return e.toString()}get currentTags(){if(this._outputStreamTagsDirty){this._currentTags=[];let t=!1,e=new f;for(let n of this.outputStream){let i=s(n,k);if(null!=i){if(i.commandType==k.CommandType.BeginTag){if(t&&e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!0}else if(i.commandType==k.CommandType.EndTag){if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!1}}else if(t){let t=s(n,E);null!==t&&e.Append(t.value)}else{let t=s(n,B);null!=t&&null!=t.text&&t.text.length>0&&this._currentTags.push(t.text)}}if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}this._outputStreamTagsDirty=!1}return this._currentTags}get currentFlowName(){return this._currentFlow.name}get currentFlowIsDefaultFlow(){return this._currentFlow.name==this.kDefaultFlowName}get aliveFlowNames(){if(this._aliveFlowNamesDirty){if(this._aliveFlowNames=[],null!=this._namedFlows)for(let t of this._namedFlows.keys())t!=this.kDefaultFlowName&&this._aliveFlowNames.push(t);this._aliveFlowNamesDirty=!1}return this._aliveFlowNames}get inExpressionEvaluation(){return this.callStack.currentElement.inExpressionEvaluation}set inExpressionEvaluation(t){this.callStack.currentElement.inExpressionEvaluation=t}constructor(t){this.kInkSaveStateVersion=10,this.kMinCompatibleLoadVersion=8,this.onDidLoadState=null,this._currentErrors=null,this._currentWarnings=null,this.divertedPointer=F.Null,this._currentTurnIndex=0,this.storySeed=0,this.previousRandom=0,this.didSafeExit=!1,this._currentText=null,this._currentTags=null,this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0,this._patch=null,this._aliveFlowNames=null,this._namedFlows=null,this.kDefaultFlowName="DEFAULT_FLOW",this._aliveFlowNamesDirty=!0,this.story=t,this._currentFlow=new $(this.kDefaultFlowName,t),this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this._evaluationStack=[],this._variablesState=new K(this.callStack,t.listDefinitions),this._visitCounts=new Map,this._turnIndices=new Map,this.currentTurnIndex=-1;let e=(new Date).getTime();this.storySeed=new z(e).next()%100,this.previousRandom=0,this.GoToStart()}GoToStart(){this.callStack.currentElement.currentPointer=F.StartOf(this.story.mainContentContainer)}SwitchFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.SwitchFlow");if(null===this._namedFlows&&(this._namedFlows=new Map,this._namedFlows.set(this.kDefaultFlowName,this._currentFlow)),t===this._currentFlow.name)return;let e,n=v(this._namedFlows,t,null);n.exists?e=n.result:(e=new $(t,this.story),this._namedFlows.set(t,e),this._aliveFlowNamesDirty=!0),this._currentFlow=e,this.variablesState.callStack=this._currentFlow.callStack,this.OutputStreamDirty()}SwitchToDefaultFlow_Internal(){null!==this._namedFlows&&this.SwitchFlow_Internal(this.kDefaultFlowName)}RemoveFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.DestroyFlow");if(t===this.kDefaultFlowName)throw new Error("Cannot destroy default flow");if(this._currentFlow.name===t&&this.SwitchToDefaultFlow_Internal(),null===this._namedFlows)return p("this._namedFlows");this._namedFlows.delete(t),this._aliveFlowNamesDirty=!0}CopyAndStartPatching(){let t=new Y(this.story);if(t._patch=new H(this._patch),t._currentFlow.name=this._currentFlow.name,t._currentFlow.callStack=new U(this._currentFlow.callStack),t._currentFlow.currentChoices.push(...this._currentFlow.currentChoices),t._currentFlow.outputStream.push(...this._currentFlow.outputStream),t.OutputStreamDirty(),null!==this._namedFlows){t._namedFlows=new Map;for(let[e,n]of this._namedFlows)t._namedFlows.set(e,n),t._aliveFlowNamesDirty=!0;t._namedFlows.set(this._currentFlow.name,t._currentFlow)}return this.hasError&&(t._currentErrors=[],t._currentErrors.push(...this.currentErrors||[])),this.hasWarning&&(t._currentWarnings=[],t._currentWarnings.push(...this.currentWarnings||[])),t.variablesState=this.variablesState,t.variablesState.callStack=t.callStack,t.variablesState.patch=t._patch,t.evaluationStack.push(...this.evaluationStack),this.divertedPointer.isNull||(t.divertedPointer=this.divertedPointer.copy()),t.previousPointer=this.previousPointer.copy(),t._visitCounts=this._visitCounts,t._turnIndices=this._turnIndices,t.currentTurnIndex=this.currentTurnIndex,t.storySeed=this.storySeed,t.previousRandom=this.previousRandom,t.didSafeExit=this.didSafeExit,t}RestoreAfterPatch(){this.variablesState.callStack=this.callStack,this.variablesState.patch=this._patch}ApplyAnyPatch(){if(null!==this._patch){this.variablesState.ApplyPatch();for(let[t,e]of this._patch.visitCounts)this.ApplyCountChanges(t,e,!0);for(let[t,e]of this._patch.turnIndices)this.ApplyCountChanges(t,e,!1);this._patch=null}}ApplyCountChanges(t,e,n){(n?this._visitCounts:this._turnIndices).set(t.path.toString(),e)}WriteJson(t){if(t.WriteObjectStart(),t.WritePropertyStart("flows"),t.WriteObjectStart(),null!==this._namedFlows)for(let[e,n]of this._namedFlows)t.WriteProperty(e,(t=>n.WriteJson(t)));else t.WriteProperty(this._currentFlow.name,(t=>this._currentFlow.WriteJson(t)));if(t.WriteObjectEnd(),t.WritePropertyEnd(),t.WriteProperty("currentFlowName",this._currentFlow.name),t.WriteProperty("variablesState",(t=>this.variablesState.WriteJson(t))),t.WriteProperty("evalStack",(t=>q.WriteListRuntimeObjs(t,this.evaluationStack))),!this.divertedPointer.isNull){if(null===this.divertedPointer.path)return p("divertedPointer");t.WriteProperty("currentDivertTarget",this.divertedPointer.path.componentsString)}t.WriteProperty("visitCounts",(t=>q.WriteIntDictionary(t,this._visitCounts))),t.WriteProperty("turnIndices",(t=>q.WriteIntDictionary(t,this._turnIndices))),t.WriteIntProperty("turnIdx",this.currentTurnIndex),t.WriteIntProperty("storySeed",this.storySeed),t.WriteIntProperty("previousRandom",this.previousRandom),t.WriteIntProperty("inkSaveVersion",this.kInkSaveStateVersion),t.WriteIntProperty("inkFormatVersion",Z.inkVersionCurrent),t.WriteObjectEnd()}LoadJsonObj(t){let n=t,i=n.inkSaveVersion;if(null==i)throw new Error("ink save format incorrect, can't load.");if(parseInt(i)1){let t=n.currentFlowName;this._currentFlow=this._namedFlows.get(t)}}else{this._namedFlows=null,this._currentFlow.name=this.kDefaultFlowName,this._currentFlow.callStack.SetJsonToken(n.callstackThreads,this.story),this._currentFlow.outputStream=q.JArrayToRuntimeObjList(n.outputStream),this._currentFlow.currentChoices=q.JArrayToRuntimeObjList(n.currentChoices);let t=n.choiceThreads;this._currentFlow.LoadFlowChoiceThreads(t,this.story)}this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this.variablesState.SetJsonToken(n.variablesState),this.variablesState.callStack=this._currentFlow.callStack,this._evaluationStack=q.JArrayToRuntimeObjList(n.evalStack);let a=n.currentDivertTarget;if(null!=a){let t=new e(a.toString());this.divertedPointer=this.story.PointerAtPath(t)}this._visitCounts=q.JObjectToIntDictionary(n.visitCounts),this._turnIndices=q.JObjectToIntDictionary(n.turnIndices),this.currentTurnIndex=parseInt(n.turnIdx),this.storySeed=parseInt(n.storySeed),this.previousRandom=parseInt(n.previousRandom)}ResetErrors(){this._currentErrors=null,this._currentWarnings=null}ResetOutput(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.outputStream.length=0,null!==t&&this.outputStream.push(...t),this.OutputStreamDirty()}PushToOutputStream(t){let e=s(t,E);if(null!==e){let t=this.TrySplittingHeadTailWhitespace(e);if(null!==t){for(let e of t)this.PushToOutputStreamIndividual(e);return void this.OutputStreamDirty()}}this.PushToOutputStreamIndividual(t),this.OutputStreamDirty()}PopFromOutputStream(t){this.outputStream.splice(this.outputStream.length-t,t),this.OutputStreamDirty()}TrySplittingHeadTailWhitespace(t){let e=t.value;if(null===e)return p("single.value");let n=-1,i=-1;for(let t=0;t=0;t--){let n=e[t];if("\n"!=n){if(" "==n||"\t"==n)continue;break}-1==r&&(r=t),a=t}if(-1==n&&-1==r)return null;let s=[],l=0,o=e.length;if(-1!=n){if(n>0){let t=new E(e.substring(0,n));s.push(t)}s.push(new E("\n")),l=i+1}if(-1!=r&&(o=a),o>l){let t=e.substring(l,o);s.push(new E(t))}if(-1!=r&&a>i&&(s.push(new E("\n")),r=0;e--){let n=this.outputStream[e],i=n instanceof k?n:null;if(null!=(n instanceof I?n:null)){a=e;break}if(null!=i&&i.commandType==k.CommandType.BeginString){e>=t&&(t=-1);break}}let s=-1;if(s=-1!=a&&-1!=t?Math.min(t,a):-1!=a?a:t,-1!=s){if(n.isNewline)i=!1;else if(n.isNonWhitespace&&(a>-1&&this.RemoveExistingGlue(),t>-1)){let t=this.callStack.elements;for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!=r.Function)break;n.functionStartInOutputStream=-1}}}else n.isNewline&&(!this.outputStreamEndsInNewline&&this.outputStreamContainsContent||(i=!1))}if(i){if(null===t)return p("obj");this.outputStream.push(t),this.OutputStreamDirty()}}TrimNewlinesFromOutputStream(){let t=-1,e=this.outputStream.length-1;for(;e>=0;){let n=this.outputStream[e],i=s(n,k),r=s(n,E);if(null!=i||null!=r&&r.isNonWhitespace)break;null!=r&&r.isNewline&&(t=e),e--}if(t>=0)for(e=t;e=0;t--){let e=this.outputStream[t];if(e instanceof I)this.outputStream.splice(t,1);else if(e instanceof k)break}this.OutputStreamDirty()}get outputStreamEndsInNewline(){if(this.outputStream.length>0)for(let t=this.outputStream.length-1;t>=0;t--){if(this.outputStream[t]instanceof k)break;let e=this.outputStream[t];if(e instanceof E){if(e.isNewline)return!0;if(e.isNonWhitespace)break}}return!1}get outputStreamContainsContent(){for(let t of this.outputStream)if(t instanceof E)return!0;return!1}get inStringEvaluation(){for(let t=this.outputStream.length-1;t>=0;t--){let e=s(this.outputStream[t],k);if(e instanceof k&&e.commandType==k.CommandType.BeginString)return!0}return!1}PushEvaluationStack(t){let e=s(t,O);if(e){let t=e.value;if(null===t)return p("rawList");if(null!=t.originNames){t.origins||(t.origins=[]),t.origins.length=0;for(let e of t.originNames){if(null===this.story.listDefinitions)return p("StoryState.story.listDefinitions");let n=this.story.listDefinitions.TryListGetDefinition(e,null);if(null===n.result)return p("StoryState def.result");t.origins.indexOf(n.result)<0&&t.origins.push(n.result)}}}if(null===t)return p("obj");this.evaluationStack.push(t)}PopEvaluationStack(t){if(void 0===t){return h(this.evaluationStack.pop())}if(t>this.evaluationStack.length)throw new Error("trying to pop too many objects");return h(this.evaluationStack.splice(this.evaluationStack.length-t,t))}PeekEvaluationStack(){return this.evaluationStack[this.evaluationStack.length-1]}ForceEnd(){this.callStack.Reset(),this._currentFlow.currentChoices.length=0,this.currentPointer=F.Null,this.previousPointer=F.Null,this.didSafeExit=!0}TrimWhitespaceFromFunctionEnd(){n.Assert(this.callStack.currentElement.type==r.Function);let t=this.callStack.currentElement.functionStartInOutputStream;-1==t&&(t=0);for(let e=this.outputStream.length-1;e>=t;e--){let t=this.outputStream[e],n=s(t,E),i=s(t,k);if(null!=n){if(i)break;if(!n.isNewline&&!n.isInlineWhitespace)break;this.outputStream.splice(e,1),this.OutputStreamDirty()}}}PopCallStack(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.callStack.currentElement.type==r.Function&&this.TrimWhitespaceFromFunctionEnd(),this.callStack.Pop(t)}SetChosenPath(t,e){this._currentFlow.currentChoices.length=0;let n=this.story.PointerAtPath(t);n.isNull||-1!=n.index||(n.index=0),this.currentPointer=n,e&&this.currentTurnIndex++}StartFunctionEvaluationFromGame(t,e){this.callStack.Push(r.FunctionEvaluationFromGame,this.evaluationStack.length),this.callStack.currentElement.currentPointer=F.StartOf(t),this.PassArgumentsToEvaluationStack(e)}PassArgumentsToEvaluationStack(t){if(null!==t)for(let e=0;et;){let t=this.PopEvaluationStack();null===e&&(e=t)}if(this.PopCallStack(r.FunctionEvaluationFromGame),e){if(e instanceof D)return null;let t=l(e,b);return t.valueType==i.DivertTarget?t.valueObject.toString():t.valueObject}return null}AddError(t,e){e?(null==this._currentWarnings&&(this._currentWarnings=[]),this._currentWarnings.push(t)):(null==this._currentErrors&&(this._currentErrors=[]),this._currentErrors.push(t))}OutputStreamDirty(){this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0}}class Q{constructor(){this.startTime=void 0}get ElapsedMilliseconds(){return void 0===this.startTime?0:(new Date).getTime()-this.startTime}Start(){this.startTime=(new Date).getTime()}Stop(){this.startTime=void 0}}!function(t){t[t.Author=0]="Author",t[t.Warning=1]="Warning",t[t.Error=2]="Error"}(a||(a={})),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&t>-9007199254740992&&t<9007199254740992&&Math.floor(t)===t});class Z extends m{get currentChoices(){let t=[];if(null===this._state)return p("this._state");for(let e of this._state.currentChoices)e.isInvisibleDefault||(e.index=t.length,t.push(e));return t}get currentText(){return this.IfAsyncWeCant("call currentText since it's a work in progress"),this.state.currentText}get currentTags(){return this.IfAsyncWeCant("call currentTags since it's a work in progress"),this.state.currentTags}get currentErrors(){return this.state.currentErrors}get currentWarnings(){return this.state.currentWarnings}get currentFlowName(){return this.state.currentFlowName}get currentFlowIsDefaultFlow(){return this.state.currentFlowIsDefaultFlow}get aliveFlowNames(){return this.state.aliveFlowNames}get hasError(){return this.state.hasError}get hasWarning(){return this.state.hasWarning}get variablesState(){return this.state.variablesState}get listDefinitions(){return this._listDefinitions}get state(){return this._state}StartProfiling(){}EndProfiling(){}constructor(){let t;super(),this.inkVersionMinimumCompatible=18,this.onError=null,this.onDidContinue=null,this.onMakeChoice=null,this.onEvaluateFunction=null,this.onCompleteEvaluateFunction=null,this.onChoosePathString=null,this._prevContainers=[],this.allowExternalFunctionFallbacks=!1,this._listDefinitions=null,this._variableObservers=null,this._hasValidatedExternals=!1,this._temporaryEvaluationContainer=null,this._asyncContinueActive=!1,this._stateSnapshotAtLastNewline=null,this._sawLookaheadUnsafeFunctionAfterNewline=!1,this._recursiveContinueCount=0,this._asyncSaving=!1,this._profiler=null;let e=null,n=null;if(arguments[0]instanceof x)t=arguments[0],void 0!==arguments[1]&&(e=arguments[1]),this._mainContentContainer=t;else if("string"==typeof arguments[0]){let t=arguments[0];n=X.TextToDictionary(t)}else n=arguments[0];if(null!=e&&(this._listDefinitions=new J(e)),this._externals=new Map,null!==n){let t=n,e=t.inkVersion;if(null==e)throw new Error("ink version number not found. Are you sure it's a valid .ink.json file?");let i=parseInt(e);if(i>Z.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(iq.WriteRuntimeContainer(t,this._mainContentContainer))),null!=this._listDefinitions){t.WritePropertyStart("listDefs"),t.WriteObjectStart();for(let e of this._listDefinitions.lists){t.WritePropertyStart(e.name),t.WriteObjectStart();for(let[n,i]of e.items){let e=g.fromSerializedKey(n),r=i;t.WriteIntProperty(e.itemName,r)}t.WriteObjectEnd(),t.WritePropertyEnd()}t.WriteObjectEnd(),t.WritePropertyEnd()}if(t.WriteObjectEnd(),e)return t.toString()}ResetState(){this.IfAsyncWeCant("ResetState"),this._state=new Y(this),this._state.variablesState.ObserveVariableChange(this.VariableStateDidChangeEvent.bind(this)),this.ResetGlobals()}ResetErrors(){if(null===this._state)return p("this._state");this._state.ResetErrors()}ResetCallstack(){if(this.IfAsyncWeCant("ResetCallstack"),null===this._state)return p("this._state");this._state.ForceEnd()}ResetGlobals(){if(this._mainContentContainer.namedContent.get("global decl")){let t=this.state.currentPointer.copy();this.ChoosePath(new e("global decl"),!1),this.ContinueInternal(),this.state.currentPointer=t}this.state.variablesState.SnapshotDefaultGlobals()}SwitchFlow(t){if(this.IfAsyncWeCant("switch flow"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't switch flow to "+t);this.state.SwitchFlow_Internal(t)}RemoveFlow(t){this.state.RemoveFlow_Internal(t)}SwitchToDefaultFlow(){this.state.SwitchToDefaultFlow_Internal()}Continue(){return this.ContinueAsync(0),this.currentText}get canContinue(){return this.state.canContinue}get asyncContinueComplete(){return!this._asyncContinueActive}ContinueAsync(t){this._hasValidatedExternals||this.ValidateExternalBindings(),this.ContinueInternal(t)}ContinueInternal(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;null!=this._profiler&&this._profiler.PreContinue();let e=t>0;if(this._recursiveContinueCount++,!this._asyncContinueActive){if(this._asyncContinueActive=e,!this.canContinue)throw new Error("Can't continue - should check canContinue before calling Continue");this._state.didSafeExit=!1,this._state.ResetOutput(),1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!0)}let n=new Q;n.Start();let i=!1;this._sawLookaheadUnsafeFunctionAfterNewline=!1;do{try{i=this.ContinueSingleStep()}catch(t){if(!(t instanceof y))throw t;this.AddError(t.message,void 0,t.useEndLineNumber);break}if(i)break;if(this._asyncContinueActive&&n.ElapsedMilliseconds>t)break}while(this.canContinue);if(n.Stop(),!i&&this.canContinue||(null!==this._stateSnapshotAtLastNewline&&this.RestoreStateSnapshot(),this.canContinue||(this.state.callStack.canPopThread&&this.AddError("Thread available to pop, threads should always be flat by the end of evaluation?"),0!=this.state.generatedChoices.length||this.state.didSafeExit||null!=this._temporaryEvaluationContainer||(this.state.callStack.CanPop(r.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop(r.Function)?this.AddError("unexpectedly reached end of content. Do you need a '~ return'?"):this.state.callStack.canPop?this.AddError("unexpectedly reached end of content for unknown reason. Please debug compiler!"):this.AddError("ran out of content. Do you need a '-> DONE' or '-> END'?"))),this.state.didSafeExit=!1,this._sawLookaheadUnsafeFunctionAfterNewline=!1,1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!1),this._asyncContinueActive=!1,null!==this.onDidContinue&&this.onDidContinue()),this._recursiveContinueCount--,null!=this._profiler&&this._profiler.PostContinue(),this.state.hasError||this.state.hasWarning){if(null===this.onError){let t=new f;throw t.Append("Ink had "),this.state.hasError&&(t.Append("".concat(this.state.currentErrors.length)),t.Append(1==this.state.currentErrors.length?" error":"errors"),this.state.hasWarning&&t.Append(" and ")),this.state.hasWarning&&(t.Append("".concat(this.state.currentWarnings.length)),t.Append(1==this.state.currentWarnings.length?" warning":"warnings"),this.state.hasWarning&&t.Append(" and ")),t.Append(". It is strongly suggested that you assign an error handler to story.onError. The first issue was: "),t.Append(this.state.hasError?this.state.currentErrors[0]:this.state.currentWarnings[0]),new y(t.toString())}if(this.state.hasError)for(let t of this.state.currentErrors)this.onError(t,a.Error);if(this.state.hasWarning)for(let t of this.state.currentWarnings)this.onError(t,a.Warning);this.ResetErrors()}}ContinueSingleStep(){if(null!=this._profiler&&this._profiler.PreStep(),this.Step(),null!=this._profiler&&this._profiler.PostStep(),this.canContinue||this.state.callStack.elementIsEvaluateFromGame||this.TryFollowDefaultInvisibleChoice(),null!=this._profiler&&this._profiler.PreSnapshot(),!this.state.inStringEvaluation){if(null!==this._stateSnapshotAtLastNewline){if(null===this._stateSnapshotAtLastNewline.currentTags)return p("this._stateAtLastNewline.currentTags");if(null===this.state.currentTags)return p("this.state.currentTags");let t=this.CalculateNewlineOutputStateChange(this._stateSnapshotAtLastNewline.currentText,this.state.currentText,this._stateSnapshotAtLastNewline.currentTags.length,this.state.currentTags.length);if(t==Z.OutputStateChange.ExtendedBeyondNewline||this._sawLookaheadUnsafeFunctionAfterNewline)return this.RestoreStateSnapshot(),!0;t==Z.OutputStateChange.NewlineRemoved&&this.DiscardSnapshot()}this.state.outputStreamEndsInNewline&&(this.canContinue?null==this._stateSnapshotAtLastNewline&&this.StateSnapshot():this.DiscardSnapshot())}return null!=this._profiler&&this._profiler.PostSnapshot(),!1}CalculateNewlineOutputStateChange(t,e,n,i){if(null===t)return p("prevText");if(null===e)return p("currText");let r=e.length>=t.length&&t.length>0&&"\n"==e.charAt(t.length-1);if(n==i&&t.length==e.length&&r)return Z.OutputStateChange.NoChange;if(!r)return Z.OutputStateChange.NewlineRemoved;if(i>n)return Z.OutputStateChange.ExtendedBeyondNewline;for(let n=t.length;n0?this.Error("Failed to find content at path '"+t+"', and no approximation of it was possible."):i.approximate&&this.Warning("Failed to find content at path '"+t+"', so it was approximated to: '"+i.obj.path+"'."),e)}StateSnapshot(){this._stateSnapshotAtLastNewline=this._state,this._state=this._state.CopyAndStartPatching()}RestoreStateSnapshot(){null===this._stateSnapshotAtLastNewline&&p("_stateSnapshotAtLastNewline"),this._stateSnapshotAtLastNewline.RestoreAfterPatch(),this._state=this._stateSnapshotAtLastNewline,this._stateSnapshotAtLastNewline=null,this._asyncSaving||this._state.ApplyAnyPatch()}DiscardSnapshot(){this._asyncSaving||this._state.ApplyAnyPatch(),this._stateSnapshotAtLastNewline=null}CopyStateForBackgroundThreadSave(){if(this.IfAsyncWeCant("start saving on a background thread"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!");let t=this._state;return this._state=this._state.CopyAndStartPatching(),this._asyncSaving=!0,t}BackgroundSaveComplete(){null===this._stateSnapshotAtLastNewline&&this._state.ApplyAnyPatch(),this._asyncSaving=!1}Step(){let t=!0,e=this.state.currentPointer.copy();if(e.isNull)return;let n=s(e.Resolve(),x);for(;n&&(this.VisitContainer(n,!0),0!=n.content.length);)e=F.StartOf(n),n=s(e.Resolve(),x);this.state.currentPointer=e.copy(),null!=this._profiler&&this._profiler.Step(this.state.callStack);let i=e.Resolve(),r=this.PerformLogicAndFlowControl(i);if(this.state.currentPointer.isNull)return;r&&(t=!1);let a=s(i,V);if(a){let e=this.ProcessChoice(a);e&&this.state.generatedChoices.push(e),i=null,t=!1}if(i instanceof x&&(t=!1),t){let t=s(i,N);if(t&&-1==t.contextIndex){let e=this.state.callStack.ContextForVariableNamed(t.variableName);i=new N(t.variableName,e)}this.state.inExpressionEvaluation?this.state.PushEvaluationStack(i):this.state.PushToOutputStream(i)}this.NextContent();let l=s(i,k);l&&l.commandType==k.CommandType.StartThread&&this.state.callStack.PushThread()}VisitContainer(t,e){t.countingAtStartOnly&&!e||(t.visitsShouldBeCounted&&this.state.IncrementVisitCountForContainer(t),t.turnIndexShouldBeCounted&&this.state.RecordTurnIndexVisitToContainer(t))}VisitChangedContainersDueToDivert(){let t=this.state.previousPointer.copy(),e=this.state.currentPointer.copy();if(e.isNull||-1==e.index)return;if(this._prevContainers.length=0,!t.isNull){let e=s(t.Resolve(),x)||s(t.container,x);for(;e;)this._prevContainers.push(e),e=s(e.parent,x)}let n=e.Resolve();if(null==n)return;let i=s(n.parent,x),r=!0;for(;i&&(this._prevContainers.indexOf(i)<0||i.countingAtStartOnly);){let t=i.content.length>0&&n==i.content[0]&&r;t||(r=!1),this.VisitContainer(i,t),n=i,i=s(i.parent,x)}}PopChoiceStringAndTags(t){let e=l(this.state.PopEvaluationStack(),E);for(;this.state.evaluationStack.length>0&&null!=s(this.state.PeekEvaluationStack(),B);){let e=s(this.state.PopEvaluationStack(),B);e&&t.push(e.text)}return e.value}ProcessChoice(t){let e=!0;if(t.hasCondition){let t=this.state.PopEvaluationStack();this.IsTruthy(t)||(e=!1)}let n="",i="",r=[];if(t.hasChoiceOnlyContent&&(i=this.PopChoiceStringAndTags(r)||""),t.hasStartContent&&(n=this.PopChoiceStringAndTags(r)||""),t.onceOnly){this.state.VisitCountForContainer(t.choiceTarget)>0&&(e=!1)}if(!e)return null;let a=new G;return a.targetPath=t.pathOnChoice,a.sourcePath=t.path.toString(),a.isInvisibleDefault=t.isInvisibleDefault,a.threadAtGeneration=this.state.callStack.ForkThread(),a.tags=r.reverse(),a.text=(n+i).replace(/^[ \t]+|[ \t]+$/g,""),a}IsTruthy(t){if(t instanceof b){let e=t;if(e instanceof P){let t=e;return this.Error("Shouldn't use a divert target (to "+t.targetPath+") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)"),!1}return e.isTruthy}return!1}PerformLogicAndFlowControl(t){if(null==t)return!1;if(t instanceof W){let e=t;if(e.isConditional){let t=this.state.PopEvaluationStack();if(!this.IsTruthy(t))return!0}if(e.hasVariableTarget){let t=e.variableDivertName,n=this.state.variablesState.GetVariableWithName(t);if(null==n)this.Error("Tried to divert using a target from a variable that could not be found ("+t+")");else if(!(n instanceof P)){let e=s(n,w),i="Tried to divert to a target from a variable, but the variable ("+t+") didn't contain a divert target, it ";e instanceof w&&0==e.value?i+="was empty/null (the value 0).":i+="contained '"+n+"'.",this.Error(i)}let i=l(n,P);this.state.divertedPointer=this.PointerAtPath(i.targetPath)}else{if(e.isExternal)return this.CallExternalFunction(e.targetPathString,e.externalArgs),!0;this.state.divertedPointer=e.targetPointer.copy()}return e.pushesToStack&&this.state.callStack.Push(e.stackPushType,void 0,this.state.outputStream.length),this.state.divertedPointer.isNull&&!e.isExternal&&(e&&e.debugMetadata&&null!=e.debugMetadata.sourceName?this.Error("Divert target doesn't exist: "+e.debugMetadata.sourceName):this.Error("Divert resolution failed: "+e)),!0}if(t instanceof k){let e=t;switch(e.commandType){case k.CommandType.EvalStart:this.Assert(!1===this.state.inExpressionEvaluation,"Already in expression evaluation?"),this.state.inExpressionEvaluation=!0;break;case k.CommandType.EvalEnd:this.Assert(!0===this.state.inExpressionEvaluation,"Not in expression evaluation mode"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.EvalOutput:if(this.state.evaluationStack.length>0){let t=this.state.PopEvaluationStack();if(!(t instanceof D)){let e=new E(t.toString());this.state.PushToOutputStream(e)}}break;case k.CommandType.NoOp:break;case k.CommandType.Duplicate:this.state.PushEvaluationStack(this.state.PeekEvaluationStack());break;case k.CommandType.PopEvaluatedValue:this.state.PopEvaluationStack();break;case k.CommandType.PopFunction:case k.CommandType.PopTunnel:let t=e.commandType==k.CommandType.PopFunction?r.Function:r.Tunnel,n=null;if(t==r.Tunnel){let t=this.state.PopEvaluationStack();n=s(t,P),null===n&&this.Assert(t instanceof D,"Expected void if ->-> doesn't override target")}if(this.state.TryExitFunctionEvaluationFromGame())break;if(this.state.callStack.currentElement.type==t&&this.state.callStack.canPop)this.state.PopCallStack(),n&&(this.state.divertedPointer=this.PointerAtPath(n.targetPath));else{let e=new Map;e.set(r.Function,"function return statement (~ return)"),e.set(r.Tunnel,"tunnel onwards statement (->->)");let n=e.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(n="end of flow (-> END or choice)");let i="Found "+e.get(t)+", when expected "+n;this.Error(i)}break;case k.CommandType.BeginString:this.state.PushToOutputStream(e),this.Assert(!0===this.state.inExpressionEvaluation,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.BeginTag:this.state.PushToOutputStream(e);break;case k.CommandType.EndTag:if(this.state.inStringEvaluation){let t=[],e=0;for(let n=this.state.outputStream.length-1;n>=0;--n){let i=this.state.outputStream[n];e++;let r=s(i,k);if(null!=r){if(r.commandType==k.CommandType.BeginTag)break;this.Error("Unexpected ControlCommand while extracting tag from choice");break}i instanceof E&&t.push(i)}this.state.PopFromOutputStream(e);let n=new f;for(let e of t.reverse())n.Append(e.toString());let i=new B(this.state.CleanOutputWhitespace(n.toString()));this.state.PushEvaluationStack(i)}else this.state.PushToOutputStream(e);break;case k.CommandType.EndString:{let t=[],e=[],n=0;for(let i=this.state.outputStream.length-1;i>=0;--i){let r=this.state.outputStream[i];n++;let a=s(r,k);if(a&&a.commandType==k.CommandType.BeginString)break;r instanceof B&&e.push(r),r instanceof E&&t.push(r)}this.state.PopFromOutputStream(n);for(let t of e)this.state.PushToOutputStream(t);t=t.reverse();let i=new f;for(let e of t)i.Append(e.toString());this.state.inExpressionEvaluation=!0,this.state.PushEvaluationStack(new E(i.toString()));break}case k.CommandType.ChoiceCount:let i=this.state.generatedChoices.length;this.state.PushEvaluationStack(new w(i));break;case k.CommandType.Turns:this.state.PushEvaluationStack(new w(this.state.currentTurnIndex+1));break;case k.CommandType.TurnsSince:case k.CommandType.ReadCount:let a=this.state.PopEvaluationStack();if(!(a instanceof P)){let t="";a instanceof w&&(t=". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?"),this.Error("TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw "+a+t);break}let o,h=l(a,P),u=s(this.ContentAtPath(h.targetPath).correctObj,x);null!=u?o=e.commandType==k.CommandType.TurnsSince?this.state.TurnsSinceForContainer(u):this.state.VisitCountForContainer(u):(o=e.commandType==k.CommandType.TurnsSince?-1:0,this.Warning("Failed to find container for "+e.toString()+" lookup at "+h.targetPath.toString())),this.state.PushEvaluationStack(new w(o));break;case k.CommandType.Random:{let t=s(this.state.PopEvaluationStack(),w),e=s(this.state.PopEvaluationStack(),w);if(null==e||e instanceof w==!1)return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(null==t||t instanceof w==!1)return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(null===t.value)return p("maxInt.value");if(null===e.value)return p("minInt.value");let n=t.value-e.value+1;(!isFinite(n)||n>Number.MAX_SAFE_INTEGER)&&(n=Number.MAX_SAFE_INTEGER,this.Error("RANDOM was called with a range that exceeds the size that ink numbers can use.")),n<=0&&this.Error("RANDOM was called with minimum as "+e.value+" and maximum as "+t.value+". The maximum must be larger");let i=this.state.storySeed+this.state.previousRandom,r=new z(i).next(),a=r%n+e.value;this.state.PushEvaluationStack(new w(a)),this.state.previousRandom=r;break}case k.CommandType.SeedRandom:let c=s(this.state.PopEvaluationStack(),w);if(null==c||c instanceof w==!1)return this.Error("Invalid value passed to SEED_RANDOM");if(null===c.value)return p("minInt.value");this.state.storySeed=c.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new D);break;case k.CommandType.VisitIndex:let d=this.state.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new w(d));break;case k.CommandType.SequenceShuffleIndex:let m=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new w(m));break;case k.CommandType.StartThread:break;case k.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=!0,this.state.currentPointer=F.Null);break;case k.CommandType.End:this.state.ForceEnd();break;case k.CommandType.ListFromInt:let v=s(this.state.PopEvaluationStack(),w),C=l(this.state.PopEvaluationStack(),E);if(null===v)throw new y("Passed non-integer when creating a list element from a numerical value.");let _=null;if(null===this.listDefinitions)return p("this.listDefinitions");let T=this.listDefinitions.TryListGetDefinition(C.value,null);if(!T.exists)throw new y("Failed to find LIST called "+C.value);{if(null===v.value)return p("minInt.value");let t=T.result.TryGetItemWithValue(v.value,g.Null);t.exists&&(_=new O(t.result,v.value))}null==_&&(_=new O),this.state.PushEvaluationStack(_);break;case k.CommandType.ListRange:let N=s(this.state.PopEvaluationStack(),b),A=s(this.state.PopEvaluationStack(),b),I=s(this.state.PopEvaluationStack(),O);if(null===I||null===A||null===N)throw new y("Expected list, minimum and maximum for LIST_RANGE");if(null===I.value)return p("targetList.value");let W=I.value.ListWithSubRange(A.valueObject,N.valueObject);this.state.PushEvaluationStack(new O(W));break;case k.CommandType.ListRandom:{let t=this.state.PopEvaluationStack();if(null===t)throw new y("Expected list for LIST_RANDOM");let e=t.value,n=null;if(null===e)throw p("list");if(0==e.Count)n=new S;else{let t=this.state.storySeed+this.state.previousRandom,i=new z(t).next(),r=i%e.Count,a=e.entries();for(let t=0;t<=r-1;t++)a.next();let s=a.next().value,l={Key:g.fromSerializedKey(s[0]),Value:s[1]};if(null===l.Key.originName)return p("randomItem.Key.originName");n=new S(l.Key.originName,this),n.Add(l.Key,l.Value),this.state.previousRandom=i}this.state.PushEvaluationStack(new O(n));break}default:this.Error("unhandled ControlCommand: "+e)}return!0}if(t instanceof R){let e=t,n=this.state.PopEvaluationStack();return this.state.variablesState.Assign(e,n),!0}if(t instanceof L){let e=t,n=null;if(null!=e.pathForCount){let t=e.containerForCount,i=this.state.VisitCountForContainer(t);n=new w(i)}else n=this.state.variablesState.GetVariableWithName(e.name),null==n&&(this.Warning("Variable not found: '"+e.name+"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit. Globals are always given a default value on load if a value doesn't exist in the save state."),n=new w(0));return this.state.PushEvaluationStack(n),!0}if(t instanceof j){let e=t,n=this.state.PopEvaluationStack(e.numberOfParameters),i=e.Call(n);return this.state.PushEvaluationStack(i),!0}return!1}ChoosePathString(t){let n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(this.IfAsyncWeCant("call ChoosePathString right now"),null!==this.onChoosePathString&&this.onChoosePathString(t,i),n)this.ResetCallstack();else if(this.state.callStack.currentElement.type==r.Function){let e="",n=this.state.callStack.currentElement.currentPointer.container;throw null!=n&&(e="("+n.path.toString()+") "),new Error("Story was running a function "+e+"when you called ChoosePathString("+t+") - this is almost certainly not not what you want! Full stack trace: \n"+this.state.callStack.callStackTrace)}this.state.PassArgumentsToEvaluationStack(i),this.ChoosePath(new e(t))}IfAsyncWeCant(t){if(this._asyncContinueActive)throw new Error("Can't "+t+". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.")}ChoosePath(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.state.SetChosenPath(t,e),this.VisitChangedContainersDueToDivert()}ChooseChoiceIndex(t){let e=this.currentChoices;this.Assert(t>=0&&t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!==this.onEvaluateFunction&&this.onEvaluateFunction(t,e),this.IfAsyncWeCant("evaluate a function"),null==t)throw new Error("Function is null");if(""==t||""==t.trim())throw new Error("Function is empty or white space.");let i=this.KnotContainerWithName(t);if(null==i)throw new Error("Function doesn't exist: '"+t+"'");let r=[];r.push(...this.state.outputStream),this._state.ResetOutput(),this.state.StartFunctionEvaluationFromGame(i,e);let a=new f;for(;this.canContinue;)a.Append(this.Continue());let s=a.toString();this._state.ResetOutput(r);let l=this.state.CompleteFunctionEvaluationFromGame();return null!=this.onCompleteEvaluateFunction&&this.onCompleteEvaluateFunction(t,e,s,l),n?{returned:l,output:s}:l}EvaluateExpression(t){let e=this.state.callStack.elements.length;this.state.callStack.Push(r.Tunnel),this._temporaryEvaluationContainer=t,this.state.GoToStart();let n=this.state.evaluationStack.length;return this.Continue(),this._temporaryEvaluationContainer=null,this.state.callStack.elements.length>e&&this.state.PopCallStack(),this.state.evaluationStack.length>n?this.state.PopEvaluationStack():null}CallExternalFunction(t,e){if(null===t)return p("funcName");let n=this._externals.get(t),i=null,a=void 0!==n;if(a&&!n.lookAheadSafe&&null!==this._stateSnapshotAtLastNewline)return void(this._sawLookaheadUnsafeFunctionAfterNewline=!0);if(!a){if(this.allowExternalFunctionFallbacks)return i=this.KnotContainerWithName(t),this.Assert(null!==i,"Trying to call EXTERNAL function '"+t+"' which has not been bound, and fallback ink function could not be found."),this.state.callStack.Push(r.Function,void 0,this.state.outputStream.length),void(this.state.divertedPointer=F.StartOf(i));this.Assert(!1,"Trying to call EXTERNAL function '"+t+"' which has not been bound (and ink fallbacks disabled).")}let s=[];for(let t=0;t2&&void 0!==arguments[2])||arguments[2];this.IfAsyncWeCant("bind an external function"),this.Assert(!this._externals.has(t),"Function '"+t+"' has already been bound."),this._externals.set(t,{function:e,lookAheadSafe:n})}TryCoerce(t){return t}BindExternalFunction(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.Assert(null!=e,"Can't bind a null function"),this.BindExternalFunctionGeneral(t,(t=>{this.Assert(t.length>=e.length,"External function expected "+e.length+" arguments");let n=[];for(let e=0,i=t.length;e1?"s":"",t+=": '",t+=Array.from(n).join("', '"),t+="' ",t+=this.allowExternalFunctionFallbacks?", and no fallback ink function found.":" (ink fallbacks disabled)",this.Error(t)}else if(null!=t){for(let e of t.content){null!=e&&e.hasValidName||this.ValidateExternalBindings(e,n)}for(let[,e]of t.namedContent)this.ValidateExternalBindings(s(e,m),n)}else if(null!=e){let t=s(e,W);if(t&&t.isExternal){let e=t.targetPathString;if(null===e)return p("name");if(!this._externals.has(e))if(this.allowExternalFunctionFallbacks){this.mainContentContainer.namedContent.has(e)||n.add(e)}else n.add(e)}}}ObserveVariable(t,e){if(this.IfAsyncWeCant("observe a new variable"),null===this._variableObservers&&(this._variableObservers=new Map),!this.state.variablesState.GlobalVariableExistsWithName(t))throw new Error("Cannot observe variable '"+t+"' because it wasn't declared in the ink story.");this._variableObservers.has(t)?this._variableObservers.get(t).push(e):this._variableObservers.set(t,[e])}ObserveVariables(t,e){for(let n=0,i=t.length;n=e.container.content.length;){t=!1;let n=s(e.container.parent,x);if(n instanceof x==!1)break;let i=n.content.indexOf(e.container);if(-1==i)break;if(e=new F(n,i),e.index++,t=!0,null===e.container)return p("pointer.container")}return t||(e=F.Null),this.state.callStack.currentElement.currentPointer=e.copy(),t}TryFollowDefaultInvisibleChoice(){let t=this._state.currentChoices,e=t.filter((t=>t.isInvisibleDefault));if(0==e.length||t.length>e.length)return!1;let n=e[0];return null===n.targetPath?p("choice.targetPath"):null===n.threadAtGeneration?p("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,null!==this._stateSnapshotAtLastNewline&&(this.state.callStack.currentThread=this.state.callStack.ForkThread()),this.ChoosePath(n.targetPath,!1),!0)}NextSequenceShuffleIndex(){let t=s(this.state.PopEvaluationStack(),w);if(!(t instanceof w))return this.Error("expected number of elements in sequence for shuffle index"),0;let e=this.state.currentPointer.container;if(null===e)return p("seqContainer");if(null===t.value)return p("numElementsIntVal.value");let n=t.value,i=l(this.state.PopEvaluationStack(),w).value;if(null===i)return p("seqCount");let r=i/n,a=i%n,o=e.path.toString(),h=0;for(let t=0,e=o.length;t1&&void 0!==arguments[1]&&arguments[1],n=new y(t);throw n.useEndLineNumber=e,n}Warning(t){this.AddError(t,!0)}AddError(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.currentDebugMetadata,r=e?"WARNING":"ERROR";if(null!=i){let e=n?i.endLineNumber:i.startLineNumber;t="RUNTIME "+r+": '"+i.fileName+"' line "+e+": "+t}else t=this.state.currentPointer.isNull?"RUNTIME "+r+": "+t:"RUNTIME "+r+": ("+this.state.currentPointer+"): "+t;this.state.AddError(t,e),e||this.state.ForceEnd()}Assert(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==t)throw null==e&&(e="Story assert"),new Error(e+" "+this.currentDebugMetadata)}get currentDebugMetadata(){let t,e=this.state.currentPointer;if(!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let n=this.state.callStack.elements.length-1;n>=0;--n)if(e=this.state.callStack.elements[n].currentPointer,!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let e=this.state.outputStream.length-1;e>=0;--e){if(t=this.state.outputStream[e].debugMetadata,null!==t)return t}return null}get mainContentContainer(){return this._temporaryEvaluationContainer?this._temporaryEvaluationContainer:this._mainContentContainer}}Z.inkVersionCurrent=21,function(t){var e;(e=t.OutputStateChange||(t.OutputStateChange={}))[e.NoChange=0]="NoChange",e[e.ExtendedBeyondNewline=1]="ExtendedBeyondNewline",e[e.NewlineRemoved=2]="NewlineRemoved"}(Z||(Z={})),t.InkList=S,t.Story=Z,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=ink.js.map diff --git a/ruixi/main.js b/ruixi/main.js deleted file mode 100644 index f46a338..0000000 --- a/ruixi/main.js +++ /dev/null @@ -1,439 +0,0 @@ -(function(storyContent) { - - // Create ink story from the content using inkjs - var story = new inkjs.Story(storyContent); - - var savePoint = ""; - - let savedTheme; - let globalTagTheme; - - // Global tags - those at the top of the ink file - // We support: - // # theme: dark - // # author: Your Name - var globalTags = story.globalTags; - if( globalTags ) { - for(var i=0; i { - console.log(`scrollingto ${previousBottomEdge}`) - scrollDown(previousBottomEdge) - } - - showAfter(delay, imageElement); - delay += 200.0; - } - - // LINK: url - else if( splitTag && splitTag.property == "LINK" ) { - window.location.href = splitTag.val; - } - - // LINKOPEN: url - else if( splitTag && splitTag.property == "LINKOPEN" ) { - window.open(splitTag.val); - } - - // BACKGROUND: src - else if( splitTag && splitTag.property == "BACKGROUND" ) { - outerScrollContainer.style.backgroundImage = 'url('+splitTag.val+')'; - } - - // CLASS: className - else if( splitTag && splitTag.property == "CLASS" ) { - customClasses.push(splitTag.val); - } - - // CLEAR - removes all existing content. - // RESTART - clears everything and restarts the story from the beginning - else if( tag == "CLEAR" || tag == "RESTART" ) { - removeAll("p"); - removeAll("img"); - - // Comment out this line if you want to leave the header visible when clearing - setVisible(".header", false); - - if( tag == "RESTART" ) { - restart(); - return; - } - } - } - - // Check if paragraphText is empty - if (paragraphText.trim().length == 0) { - continue; // Skip empty paragraphs - } - - // Create paragraph element (initially hidden) - var paragraphElement = document.createElement('p'); - paragraphElement.innerHTML = paragraphText; - storyContainer.appendChild(paragraphElement); - - // Add any custom classes derived from ink tags - for(var i=0; i${choice.text}` - }else{ - choiceParagraphElement.innerHTML = `${choice.text}` - } - storyContainer.appendChild(choiceParagraphElement); - - // Fade choice in after a short delay - showAfter(delay, choiceParagraphElement); - delay += 200.0; - - // Click on choice - if(isClickable){ - var choiceAnchorEl = choiceParagraphElement.querySelectorAll("a")[0]; - choiceAnchorEl.addEventListener("click", function(event) { - - // Don't follow link - event.preventDefault(); - - // Extend height to fit - // We do this manually so that removing elements and creating new ones doesn't - // cause the height (and therefore scroll) to jump backwards temporarily. - storyContainer.style.height = contentBottomEdgeY()+"px"; - - // Remove all existing choices - removeAll(".choice"); - - // Tell the story where to go next - story.ChooseChoiceIndex(choice.index); - - // This is where the save button will save from - savePoint = story.state.toJson(); - - // Aaand loop - continueStory(); - }); - } - }); - - // Unset storyContainer's height, allowing it to resize itself - storyContainer.style.height = ""; - - if( !firstTime ) - scrollDown(previousBottomEdge); - - } - - function restart() { - story.ResetState(); - - setVisible(".header", true); - - // set save point to here - savePoint = story.state.toJson(); - - continueStory(true); - - outerScrollContainer.scrollTo(0, 0); - } - - // ----------------------------------- - // Various Helper functions - // ----------------------------------- - - // Detects whether the user accepts animations - function isAnimationEnabled() { - return window.matchMedia('(prefers-reduced-motion: no-preference)').matches; - } - - // Fades in an element after a specified delay - function showAfter(delay, el) { - if( isAnimationEnabled() ) { - el.classList.add("hide"); - setTimeout(function() { el.classList.remove("hide") }, delay); - } else { - // If the user doesn't want animations, show immediately - el.classList.remove("hide"); - } - } - - // Scrolls the page down, but no further than the bottom edge of what you could - // see previously, so it doesn't go too far. - function scrollDown(previousBottomEdge) { - // If the user doesn't want animations, let them scroll manually - if ( !isAnimationEnabled() ) { - return; - } - - // Line up top of screen with the bottom of where the previous content ended - var target = previousBottomEdge; - - // Can't go further than the very bottom of the page - var limit = outerScrollContainer.scrollHeight - outerScrollContainer.clientHeight; - if( target > limit ) target = limit; - - var start = outerScrollContainer.scrollTop; - - var dist = target - start; - var duration = 300 + 300*dist/100; - var startTime = null; - function step(time) { - if( startTime == null ) startTime = time; - var t = (time-startTime) / duration; - var lerp = 3*t*t - 2*t*t*t; // ease in/out - outerScrollContainer.scrollTo(0, (1.0-lerp)*start + lerp*target); - if( t < 1 ) requestAnimationFrame(step); - } - requestAnimationFrame(step); - } - - // The Y coordinate of the bottom end of all the story content, used - // for growing the container, and deciding how far to scroll. - function contentBottomEdgeY() { - var bottomElement = storyContainer.lastElementChild; - return bottomElement ? bottomElement.offsetTop + bottomElement.offsetHeight : 0; - } - - // Remove all elements that match the given selector. Used for removing choices after - // you've picked one, as well as for the CLEAR and RESTART tags. - function removeAll(selector) - { - var allElements = storyContainer.querySelectorAll(selector); - for(var i=0; i":"paragraph_2"},{"->":"0.g-0"},{"#f":5}],"g-0":["done",{"#f":5}]}],"done",{"paragraph_2":[["^Out of all people, you had to be the one to discover the body. You want to scream, but you can't, and you know that if you do, there'll be repercussions. The terror feels like daylight beneath your skin in the neon of night.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_3"},{"#f":5}]}],{"#f":1}],"paragraph_3":[["^\"Who could have done this?\" the thought repeats its presence in the white velvet-coated study as the blood crusts slowly to a mediocre brown stain across the parquet floor.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_4"},{"#f":5}]}],{"#f":1}],"paragraph_4":[["^[SEPARATE FRAGMENT]","\n","^Dmitry ran into Katya's mother, Dolores, on the way to the prison. She was silk, saying, \"I thought I meant birth like the apparation of Summer approaching the South, but how wrong I was to give the gift of life to such a cruel woman.\" There she stands with her moon-shaven eyes against the delicately placed watermelons on the table of the street vendor selling fruit.","\n","^\"Are you going to buy anything? I'm about ready to pack up.\" the street vendor said interrupting the intense conversation we were having.","\n","^Dolores's son was originally sent to die in a some unimportant war while her daughter amounted the social ladder to become a laywer with cunning ambition. She was responsible for more executions than holidays in the Hebrew year.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_5"},{"#f":5}]}],{"#f":1}],"paragraph_5":["^[SEPARATE FRAGMENT]","\n","^You spot a black notebook left on the bench by the traintracks. This is nice, to have something to discover. People should leave their belongings in public more often.","\n","^[SEPARATE FRAGMENT]","\n","^Face-down you fall onto the bed into a straight-jacket sleep. Your eyes gently-pressing to the sheets reveal all sorts of hypnagogic decompressions, decompressing into memories that you're not sure you can trust.","\n","end",{"#f":1}],"#f":1}],"listDefs":{}}; \ No newline at end of file diff --git a/ruixi/ruixi.zip b/ruixi/ruixi.zip deleted file mode 100644 index 86d00947ee2eb2e9ebc8131e771e4da487bfcda2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81976 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%0AE~7F#x!ib6 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 - - - - - ruixi - - - - - - - - - -

- - - - - - diff --git a/ruixi/ruixi/ink.js b/ruixi/ruixi/ink.js deleted file mode 100644 index 718da43..0000000 --- a/ruixi/ruixi/ink.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).inkjs={})}(this,(function(t){"use strict";class e{constructor(){if(this._components=[],this._componentsString=null,this._isRelative=!1,"string"==typeof arguments[0]){let t=arguments[0];this.componentsString=t}else if(arguments[0]instanceof e.Component&&arguments[1]instanceof e){let t=arguments[0],e=arguments[1];this._components.push(t),this._components=this._components.concat(e._components)}else if(arguments[0]instanceof Array){let t=arguments[0],e=!!arguments[1];this._components=this._components.concat(t),this._isRelative=e}}get isRelative(){return this._isRelative}get componentCount(){return this._components.length}get head(){return this._components.length>0?this._components[0]:null}get tail(){if(this._components.length>=2){let t=this._components.slice(1,this._components.length);return new e(t)}return e.self}get length(){return this._components.length}get lastComponent(){let t=this._components.length-1;return t>=0?this._components[t]:null}get containsNamedComponent(){for(let t=0,e=this._components.length;t=0}get isParent(){return this.name==t.parentId}static ToParent(){return new e(t.parentId)}toString(){return this.isIndex?this.index.toString():this.name}Equals(t){return null!=t&&t.isIndex==this.isIndex&&(this.isIndex?this.index==t.index:this.name==t.name)}}t.Component=e}(e||(e={})),function(t){function e(t,e){if(!t)throw void 0!==e&&console.warn(e),console.trace&&console.trace(),new Error("")}t.AssertType=function(t,n,i){e(t instanceof n,i)},t.Assert=e}(n||(n={}));class d extends Error{}function p(t){throw new d("".concat(t," is null or undefined"))}class m{constructor(){this.parent=null,this._debugMetadata=null,this._path=null}get debugMetadata(){return null===this._debugMetadata&&this.parent?this.parent.debugMetadata:this._debugMetadata}set debugMetadata(t){this._debugMetadata=t}get ownDebugMetadata(){return this._debugMetadata}DebugLineNumberOfPath(t){if(null===t)return null;let e=this.rootContentContainer;if(e){let n=e.ContentAtPath(t).obj;if(n){let t=n.debugMetadata;if(null!==t)return t.startLineNumber}}return null}get path(){if(null==this._path)if(null==this.parent)this._path=new e;else{let t=[],n=this,i=s(n.parent,x);for(;null!==i;){let r=o(n);if(null!=r&&r.hasValidName){if(null===r.name)return p("namedChild.name");t.unshift(new e.Component(r.name))}else t.unshift(new e.Component(i.content.indexOf(n)));n=i,i=s(i.parent,x)}this._path=new e(t)}return this._path}ResolvePath(t){if(null===t)return p("path");if(t.isRelative){let e=s(this,x);return null===e&&(n.Assert(null!==this.parent,"Can't resolve relative path because we don't have a parent"),e=s(this.parent,x),n.Assert(null!==e,"Expected parent to be a container"),n.Assert(t.GetComponent(0).isParent),t=t.tail),null===e?p("nearestContainer"):e.ContentAtPath(t)}{let e=this.rootContentContainer;return null===e?p("contentContainer"):e.ContentAtPath(t)}}ConvertPathToRelative(t){let n=this.path,i=Math.min(t.length,n.length),r=-1;for(let e=0;e1?e-1:0),i=1;ivoid 0!==n[e]?n[e]:t))}toString(){return this.string}Clear(){this.string=""}}class g{constructor(){if(this.originName=null,this.itemName=null,void 0!==arguments[1]){let t=arguments[0],e=arguments[1];this.originName=t,this.itemName=e}else if(arguments[0]){let t=arguments[0].toString().split(".");this.originName=t[0],this.itemName=t[1]}}static get Null(){return new g(null,null)}get isNull(){return null==this.originName&&null==this.itemName}get fullName(){return(null!==this.originName?this.originName:"?")+"."+this.itemName}toString(){return this.fullName}Equals(t){if(t instanceof g){let e=t;return e.itemName==this.itemName&&e.originName==this.originName}return!1}copy(){return new g(this.originName,this.itemName)}serialized(){return JSON.stringify({originName:this.originName,itemName:this.itemName})}static fromSerializedKey(t){let e=JSON.parse(t);if(!g.isLikeInkListItem(e))return g.Null;let n=e;return new g(n.originName,n.itemName)}static isLikeInkListItem(t){return"object"==typeof t&&(!(!t.hasOwnProperty("originName")||!t.hasOwnProperty("itemName"))&&(("string"==typeof t.originName||null===typeof t.originName)&&("string"==typeof t.itemName||null===typeof t.itemName)))}}class S extends Map{constructor(){if(super(arguments[0]instanceof S?arguments[0]:[]),this.origins=null,this._originNames=[],arguments[0]instanceof S){let t=arguments[0],e=t.originNames;null!==e&&(this._originNames=e.slice()),null!==t.origins&&(this.origins=t.origins.slice())}else if("string"==typeof arguments[0]){let t=arguments[0],e=arguments[1];if(this.SetInitialOriginName(t),null===e.listDefinitions)return p("originStory.listDefinitions");let n=e.listDefinitions.TryListGetDefinition(t,null);if(!n.exists)throw new Error("InkList origin could not be found in story when constructing new list: "+t);if(null===n.result)return p("def.result");this.origins=[n.result]}else if("object"==typeof arguments[0]&&arguments[0].hasOwnProperty("Key")&&arguments[0].hasOwnProperty("Value")){let t=arguments[0];this.Add(t.Key,t.Value)}}static FromString(t,e){var n;let i=null===(n=e.listDefinitions)||void 0===n?void 0:n.FindSingleItemListWithName(t);if(i)return null===i.value?p("listValue.value"):new S(i.value);throw new Error("Could not find the InkListItem from the string '"+t+"' to create an InkList because it doesn't exist in the original list definition in ink.")}AddItem(t){if(t instanceof g){let e=t;if(null==e.originName)return void this.AddItem(e.itemName);if(null===this.origins)return p("this.origins");for(let t of this.origins)if(t.name==e.originName){let n=t.TryGetValueForItem(e,0);if(n.exists)return void this.Add(e,n.result);throw new Error("Could not add the item "+e+" to this list because it doesn't exist in the original list definition in ink.")}throw new Error("Failed to add item to list because the item was from a new list definition that wasn't previously known to this list. Only items from previously known lists can be used, so that the int value can be found.")}{let e=t,n=null;if(null===this.origins)return p("this.origins");for(let t of this.origins){if(null===e)return p("itemName");if(t.ContainsItemWithName(e)){if(null!=n)throw new Error("Could not add the item "+e+" to this list because it could come from either "+t.name+" or "+n.name);n=t}}if(null==n)throw new Error("Could not add the item "+e+" to this list because it isn't known to any list definitions previously associated with this list.");let i=new g(n.name,e),r=n.ValueForItem(i);this.Add(i,r)}}ContainsItemNamed(t){for(let[e]of this){if(g.fromSerializedKey(e).itemName==t)return!0}return!1}ContainsKey(t){return this.has(t.serialized())}Add(t,e){let n=t.serialized();if(this.has(n))throw new Error("The Map already contains an entry for ".concat(t));this.set(n,e)}Remove(t){return this.delete(t.serialized())}get Count(){return this.size}get originOfMaxItem(){if(null==this.origins)return null;let t=this.maxItem.Key.originName,e=null;return this.origins.every((n=>n.name!=t||(e=n,!1))),e}get originNames(){if(this.Count>0){null==this._originNames&&this.Count>0?this._originNames=[]:(this._originNames||(this._originNames=[]),this._originNames.length=0);for(let[t]of this){let e=g.fromSerializedKey(t);if(null===e.originName)return p("item.originName");this._originNames.push(e.originName)}}return this._originNames}SetInitialOriginName(t){this._originNames=[t]}SetInitialOriginNames(t){this._originNames=null==t?null:t.slice()}get maxItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||n>t.Value)&&(t={Key:i,Value:n})}return t}get minItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||nt.maxItem.Value)}GreaterThanOrEquals(t){return 0!=this.Count&&(0==t.Count||this.minItem.Value>=t.minItem.Value&&this.maxItem.Value>=t.maxItem.Value)}LessThan(t){return 0!=t.Count&&(0==this.Count||this.maxItem.Value0?new S(this.maxItem):new S}MinAsList(){return this.Count>0?new S(this.minItem):new S}ListWithSubRange(t,e){if(0==this.Count)return new S;let n=this.orderedItems,i=0,r=Number.MAX_SAFE_INTEGER;Number.isInteger(t)?i=t:t instanceof S&&t.Count>0&&(i=t.minItem.Value),Number.isInteger(e)?r=e:e instanceof S&&e.Count>0&&(r=e.maxItem.Value);let a=new S;a.SetInitialOriginNames(this.originNames);for(let t of n)t.Value>=i&&t.Value<=r&&a.Add(t.Key,t.Value);return a}Equals(t){if(t instanceof S==!1)return!1;if(t.Count!=this.Count)return!1;for(let[e]of this)if(!t.has(e))return!1;return!0}get orderedItems(){let t=new Array;for(let[e,n]of this){let i=g.fromSerializedKey(e);t.push({Key:i,Value:n})}return t.sort(((t,e)=>null===t.Key.originName?p("x.Key.originName"):null===e.Key.originName?p("y.Key.originName"):t.Value==e.Value?t.Key.originName.localeCompare(e.Key.originName):t.Valuee.Value?1:0)),t}toString(){let t=this.orderedItems,e=new f;for(let n=0;n0&&e.Append(", ");let i=t[n].Key;if(null===i.itemName)return p("item.itemName");e.Append(i.itemName)}return e.toString()}valueOf(){return NaN}}class y extends Error{constructor(t){super(t),this.useEndLineNumber=!1,this.message=t,this.name="StoryException"}}function v(t,e,n){if(null===t)return{result:n,exists:!1};let i=t.get(e);return void 0===i?{result:n,exists:!1}:{result:i,exists:!0}}class C extends m{static Create(t,n){if(n){if(n===i.Int&&Number.isInteger(Number(t)))return new w(Number(t));if(n===i.Float&&!isNaN(t))return new T(Number(t))}return"boolean"==typeof t?new _(Boolean(t)):"string"==typeof t?new E(String(t)):Number.isInteger(Number(t))?new w(Number(t)):isNaN(t)?t instanceof e?new P(l(t,e)):t instanceof S?new O(l(t,S)):null:new T(Number(t))}Copy(){return l(C.Create(this.valueObject),m)}BadCastException(t){return new y("Can't cast "+this.valueObject+" from "+this.valueType+" to "+t)}}class b extends C{constructor(t){super(),this.value=t}get valueObject(){return this.value}toString(){return null===this.value?p("Value.value"):this.value.toString()}}class _ extends b{constructor(t){super(t||!1)}get isTruthy(){return Boolean(this.value)}get valueType(){return i.Bool}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Int)return new w(this.value?1:0);if(t==i.Float)return new T(this.value?1:0);if(t==i.String)return new E(this.value?"true":"false");throw this.BadCastException(t)}toString(){return this.value?"true":"false"}}class w extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Int}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Float)return new T(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class T extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Float}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Int)return new w(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class E extends b{constructor(t){if(super(t||""),this._isNewline="\n"==this.value,this._isInlineWhitespace=!0,null===this.value)return p("Value.value");this.value.length>0&&this.value.split("").every((t=>" "==t||"\t"==t||(this._isInlineWhitespace=!1,!1)))}get valueType(){return i.String}get isTruthy(){return null===this.value?p("Value.value"):this.value.length>0}get isNewline(){return this._isNewline}get isInlineWhitespace(){return this._isInlineWhitespace}get isNonWhitespace(){return!this.isNewline&&!this.isInlineWhitespace}Cast(t){if(t==this.valueType)return this;if(t==i.Int){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseInt(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new w(e.result);throw this.BadCastException(t)}if(t==i.Float){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseFloat(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new T(e.result);throw this.BadCastException(t)}throw this.BadCastException(t)}}class P extends b{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)}get valueType(){return i.DivertTarget}get targetPath(){return null===this.value?p("Value.value"):this.value}set targetPath(t){this.value=t}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a divert target")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"DivertTargetValue("+this.targetPath+")"}}class N extends b{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;super(t),this._contextIndex=e}get contextIndex(){return this._contextIndex}set contextIndex(t){this._contextIndex=t}get variableName(){return null===this.value?p("Value.value"):this.value}set variableName(t){this.value=t}get valueType(){return i.VariablePointer}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a variable pointer")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"VariablePointerValue("+this.variableName+")"}Copy(){return new N(this.variableName,this.contextIndex)}}class O extends b{get isTruthy(){return null===this.value?p("this.value"):this.value.Count>0}get valueType(){return i.List}Cast(t){if(null===this.value)return p("Value.value");if(t==i.Int){let t=this.value.maxItem;return t.Key.isNull?new w(0):new w(t.Value)}if(t==i.Float){let t=this.value.maxItem;return t.Key.isNull?new T(0):new T(t.Value)}if(t==i.String){let t=this.value.maxItem;return t.Key.isNull?new E(""):new E(t.Key.toString())}if(t==this.valueType)return this;throw this.BadCastException(t)}constructor(t,e){super(null),t||e?t instanceof S?this.value=new S(t):t instanceof g&&"number"==typeof e&&(this.value=new S({Key:t,Value:e})):this.value=new S}static RetainListOriginsForAssignment(t,e){let n=s(t,O),i=s(e,O);return i&&null===i.value?p("newList.value"):n&&null===n.value?p("oldList.value"):void(n&&i&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames))}}!function(t){t[t.Bool=-1]="Bool",t[t.Int=0]="Int",t[t.Float=1]="Float",t[t.List=2]="List",t[t.String=3]="String",t[t.DivertTarget=4]="DivertTarget",t[t.VariablePointer=5]="VariablePointer"}(i||(i={}));class A{constructor(){this.obj=null,this.approximate=!1}get correctObj(){return this.approximate?null:this.obj}get container(){return this.obj instanceof x?this.obj:null}copy(){let t=new A;return t.obj=this.obj,t.approximate=this.approximate,t}}class x extends m{constructor(){super(...arguments),this.name=null,this._content=[],this.namedContent=new Map,this.visitsShouldBeCounted=!1,this.turnIndexShouldBeCounted=!1,this.countingAtStartOnly=!1,this._pathToFirstLeafContent=null}get hasValidName(){return null!=this.name&&this.name.length>0}get content(){return this._content}set content(t){this.AddContent(t)}get namedOnlyContent(){let t=new Map;for(let[e,n]of this.namedContent){let i=l(n,m);t.set(e,i)}for(let e of this.content){let n=o(e);null!=n&&n.hasValidName&&t.delete(n.name)}return 0==t.size&&(t=null),t}set namedOnlyContent(t){let e=this.namedOnlyContent;if(null!=e)for(let[t]of e)this.namedContent.delete(t);if(null!=t)for(let[,e]of t){let t=o(e);null!=t&&this.AddToNamedContentOnly(t)}}get countFlags(){let t=0;return this.visitsShouldBeCounted&&(t|=x.CountFlags.Visits),this.turnIndexShouldBeCounted&&(t|=x.CountFlags.Turns),this.countingAtStartOnly&&(t|=x.CountFlags.CountStartOnly),t==x.CountFlags.CountStartOnly&&(t=0),t}set countFlags(t){let e=t;(e&x.CountFlags.Visits)>0&&(this.visitsShouldBeCounted=!0),(e&x.CountFlags.Turns)>0&&(this.turnIndexShouldBeCounted=!0),(e&x.CountFlags.CountStartOnly)>0&&(this.countingAtStartOnly=!0)}get pathToFirstLeafContent(){return null==this._pathToFirstLeafContent&&(this._pathToFirstLeafContent=this.path.PathByAppendingPath(this.internalPathToFirstLeafContent)),this._pathToFirstLeafContent}get internalPathToFirstLeafContent(){let t=[],n=this;for(;n instanceof x;)n.content.length>0&&(t.push(new e.Component(0)),n=n.content[0]);return new e(t)}AddContent(t){if(t instanceof Array){let e=t;for(let t of e)this.AddContent(t)}else{let e=t;if(this._content.push(e),e.parent)throw new Error("content is already in "+e.parent);e.parent=this,this.TryAddNamedContent(e)}}TryAddNamedContent(t){let e=o(t);null!=e&&e.hasValidName&&this.AddToNamedContentOnly(e)}AddToNamedContentOnly(t){if(n.AssertType(t,m,"Can only add Runtime.Objects to a Runtime.Container"),l(t,m).parent=this,null===t.name)return p("namedContentObj.name");this.namedContent.set(t.name,t)}ContentAtPath(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;-1==n&&(n=t.length);let i=new A;i.approximate=!1;let r=this,a=this;for(let l=e;l=0&&t.index=0||a.set(t,e);if(a.size>0){r(),t.AppendLine("-- named: --");for(let[,r]of a){n.AssertType(r,x,"Can only print out named Containers"),r.BuildStringOfHierarchy(t,e,i),t.AppendLine()}}e--,r(),t.Append("]")}}!function(t){var e;(e=t.CountFlags||(t.CountFlags={}))[e.Visits=1]="Visits",e[e.Turns=2]="Turns",e[e.CountStartOnly=4]="CountStartOnly"}(x||(x={}));class I extends m{toString(){return"Glue"}}class k extends m{get commandType(){return this._commandType}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k.CommandType.NotSet;super(),this._commandType=t}Copy(){return new k(this.commandType)}static EvalStart(){return new k(k.CommandType.EvalStart)}static EvalOutput(){return new k(k.CommandType.EvalOutput)}static EvalEnd(){return new k(k.CommandType.EvalEnd)}static Duplicate(){return new k(k.CommandType.Duplicate)}static PopEvaluatedValue(){return new k(k.CommandType.PopEvaluatedValue)}static PopFunction(){return new k(k.CommandType.PopFunction)}static PopTunnel(){return new k(k.CommandType.PopTunnel)}static BeginString(){return new k(k.CommandType.BeginString)}static EndString(){return new k(k.CommandType.EndString)}static NoOp(){return new k(k.CommandType.NoOp)}static ChoiceCount(){return new k(k.CommandType.ChoiceCount)}static Turns(){return new k(k.CommandType.Turns)}static TurnsSince(){return new k(k.CommandType.TurnsSince)}static ReadCount(){return new k(k.CommandType.ReadCount)}static Random(){return new k(k.CommandType.Random)}static SeedRandom(){return new k(k.CommandType.SeedRandom)}static VisitIndex(){return new k(k.CommandType.VisitIndex)}static SequenceShuffleIndex(){return new k(k.CommandType.SequenceShuffleIndex)}static StartThread(){return new k(k.CommandType.StartThread)}static Done(){return new k(k.CommandType.Done)}static End(){return new k(k.CommandType.End)}static ListFromInt(){return new k(k.CommandType.ListFromInt)}static ListRange(){return new k(k.CommandType.ListRange)}static ListRandom(){return new k(k.CommandType.ListRandom)}static BeginTag(){return new k(k.CommandType.BeginTag)}static EndTag(){return new k(k.CommandType.EndTag)}toString(){return"ControlCommand "+this.commandType.toString()}}!function(t){var e;(e=t.CommandType||(t.CommandType={}))[e.NotSet=-1]="NotSet",e[e.EvalStart=0]="EvalStart",e[e.EvalOutput=1]="EvalOutput",e[e.EvalEnd=2]="EvalEnd",e[e.Duplicate=3]="Duplicate",e[e.PopEvaluatedValue=4]="PopEvaluatedValue",e[e.PopFunction=5]="PopFunction",e[e.PopTunnel=6]="PopTunnel",e[e.BeginString=7]="BeginString",e[e.EndString=8]="EndString",e[e.NoOp=9]="NoOp",e[e.ChoiceCount=10]="ChoiceCount",e[e.Turns=11]="Turns",e[e.TurnsSince=12]="TurnsSince",e[e.ReadCount=13]="ReadCount",e[e.Random=14]="Random",e[e.SeedRandom=15]="SeedRandom",e[e.VisitIndex=16]="VisitIndex",e[e.SequenceShuffleIndex=17]="SequenceShuffleIndex",e[e.StartThread=18]="StartThread",e[e.Done=19]="Done",e[e.End=20]="End",e[e.ListFromInt=21]="ListFromInt",e[e.ListRange=22]="ListRange",e[e.ListRandom=23]="ListRandom",e[e.BeginTag=24]="BeginTag",e[e.EndTag=25]="EndTag",e[e.TOTAL_VALUES=26]="TOTAL_VALUES"}(k||(k={})),function(t){t[t.Tunnel=0]="Tunnel",t[t.Function=1]="Function",t[t.FunctionEvaluationFromGame=2]="FunctionEvaluationFromGame"}(r||(r={}));class F{constructor(){this.container=null,this.index=-1,2===arguments.length&&(this.container=arguments[0],this.index=arguments[1])}Resolve(){return this.index<0?this.container:null==this.container?null:0==this.container.content.length?this.container:this.index>=this.container.content.length?null:this.container.content[this.index]}get isNull(){return null==this.container}get path(){return this.isNull?null:this.index>=0?this.container.path.PathByAppendingComponent(new e.Component(this.index)):this.container.path}toString(){return this.container?"Ink Pointer -> "+this.container.path.toString()+" -- index "+this.index:"Ink Pointer (null)"}copy(){return new F(this.container,this.index)}static StartOf(t){return new F(t,0)}static get Null(){return new F(null,-1)}}class W extends m{get targetPath(){if(null!=this._targetPath&&this._targetPath.isRelative){let t=this.targetPointer.Resolve();t&&(this._targetPath=t.path)}return this._targetPath}set targetPath(t){this._targetPath=t,this._targetPointer=F.Null}get targetPointer(){if(this._targetPointer.isNull){let t=this.ResolvePath(this._targetPath).obj;if(null===this._targetPath)return p("this._targetPath");if(null===this._targetPath.lastComponent)return p("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(null===t)return p("targetObj");this._targetPointer.container=t.parent instanceof x?t.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index}else this._targetPointer=F.StartOf(t instanceof x?t:null)}return this._targetPointer.copy()}get targetPathString(){return null==this.targetPath?null:this.CompactPathString(this.targetPath)}set targetPathString(t){this.targetPath=null==t?null:new e(t)}get hasVariableTarget(){return null!=this.variableDivertName}constructor(t){super(),this._targetPath=null,this._targetPointer=F.Null,this.variableDivertName=null,this.pushesToStack=!1,this.stackPushType=0,this.isExternal=!1,this.externalArgs=0,this.isConditional=!1,this.pushesToStack=!1,void 0!==t&&(this.pushesToStack=!0,this.stackPushType=t)}Equals(t){let e=t;return e instanceof W&&this.hasVariableTarget==e.hasVariableTarget&&(this.hasVariableTarget?this.variableDivertName==e.variableDivertName:null===this.targetPath?p("this.targetPath"):this.targetPath.Equals(e.targetPath))}toString(){if(this.hasVariableTarget)return"Divert(variable: "+this.variableDivertName+")";if(null==this.targetPath)return"Divert(null)";{let t=new f,e=this.targetPath.toString();return t.Append("Divert"),this.isConditional&&t.Append("?"),this.pushesToStack&&(this.stackPushType==r.Function?t.Append(" function"):t.Append(" tunnel")),t.Append(" -> "),t.Append(this.targetPathString),t.Append(" ("),t.Append(e),t.Append(")"),t.toString()}}}class V extends m{constructor(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];super(),this._pathOnChoice=null,this.hasCondition=!1,this.hasStartContent=!1,this.hasChoiceOnlyContent=!1,this.isInvisibleDefault=!1,this.onceOnly=!0,this.onceOnly=t}get pathOnChoice(){if(null!=this._pathOnChoice&&this._pathOnChoice.isRelative){let t=this.choiceTarget;t&&(this._pathOnChoice=t.path)}return this._pathOnChoice}set pathOnChoice(t){this._pathOnChoice=t}get choiceTarget(){return null===this._pathOnChoice?p("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}get pathStringOnChoice(){return null===this.pathOnChoice?p("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)}set pathStringOnChoice(t){this.pathOnChoice=new e(t)}get flags(){let t=0;return this.hasCondition&&(t|=1),this.hasStartContent&&(t|=2),this.hasChoiceOnlyContent&&(t|=4),this.isInvisibleDefault&&(t|=8),this.onceOnly&&(t|=16),t}set flags(t){this.hasCondition=(1&t)>0,this.hasStartContent=(2&t)>0,this.hasChoiceOnlyContent=(4&t)>0,this.isInvisibleDefault=(8&t)>0,this.onceOnly=(16&t)>0}toString(){if(null===this.pathOnChoice)return p("ChoicePoint.pathOnChoice");return"Choice: -> "+this.pathOnChoice.toString()}}class L extends m{get containerForCount(){return null===this.pathForCount?null:this.ResolvePath(this.pathForCount).container}get pathStringForCount(){return null===this.pathForCount?null:this.CompactPathString(this.pathForCount)}set pathStringForCount(t){this.pathForCount=null===t?null:new e(t)}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;super(),this.pathForCount=null,this.name=t}toString(){if(null!=this.name)return"var("+this.name+")";return"read_count("+this.pathStringForCount+")"}}class R extends m{constructor(t,e){super(),this.variableName=t||null,this.isNewDeclaration=!!e,this.isGlobal=!1}toString(){return"VarAssign to "+this.variableName}}class D extends m{toString(){return"Void"}}class j extends m{static CallWithName(t){return new j(t)}static CallExistsWithName(t){return this.GenerateNativeFunctionsIfNecessary(),this._nativeFunctions.get(t)}get name(){return null===this._name?p("NativeFunctionCall._name"):this._name}set name(t){this._name=t,this._isPrototype||(null===j._nativeFunctions?p("NativeFunctionCall._nativeFunctions"):this._prototype=j._nativeFunctions.get(this._name)||null)}get numberOfParameters(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters}set numberOfParameters(t){this._numberOfParameters=t}Call(t){if(this._prototype)return this._prototype.Call(t);if(this.numberOfParameters!=t.length)throw new Error("Unexpected number of parameters");let e=!1;for(let n of t){if(n instanceof D)throw new y('Attempting to perform operation on a void value. Did you forget to "return" a value from a function you called here?');n instanceof O&&(e=!0)}if(2==t.length&&e)return this.CallBinaryListOperation(t);let n=this.CoerceValuesToSingleType(t),r=n[0].valueType;return r==i.Int||r==i.Float||r==i.String||r==i.DivertTarget||r==i.List?this.CallType(n):null}CallType(t){let e=l(t[0],b),n=e.valueType,r=e,a=t.length;if(2==a||1==a){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let s=this._operationFuncs.get(n);if(!s){const t=i[n];throw new y("Cannot perform operation "+this.name+" on "+t)}if(2==a){let e=l(t[1],b),n=s;if(null===r.value||null===e.value)return p("NativeFunctionCall.Call BinaryOp values");let i=n(r.value,e.value);return b.Create(i)}{let t=s;if(null===r.value)return p("NativeFunctionCall.Call UnaryOp value");let n=t(r.value);return this.name===j.Int?b.Create(n,i.Int):this.name===j.Float?b.Create(n,i.Float):b.Create(n,e.valueType)}}throw new Error("Unexpected number of parameters to NativeFunctionCall: "+t.length)}CallBinaryListOperation(t){if(("+"==this.name||"-"==this.name)&&t[0]instanceof O&&t[1]instanceof w)return this.CallListIncrementOperation(t);let e=l(t[0],b),n=l(t[1],b);if(!("&&"!=this.name&&"||"!=this.name||e.valueType==i.List&&n.valueType==i.List)){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let t=this._operationFuncs.get(i.Int);if(null===t)return p("NativeFunctionCall.CallBinaryListOperation op");let r=function(t){if("boolean"==typeof t)return t;throw new Error("".concat(t," is not a boolean"))}(t(e.isTruthy?1:0,n.isTruthy?1:0));return new _(r)}if(e.valueType==i.List&&n.valueType==i.List)return this.CallType([e,n]);throw new y("Can not call use "+this.name+" operation on "+i[e.valueType]+" and "+i[n.valueType])}CallListIncrementOperation(t){let e=l(t[0],O),n=l(t[1],w),r=new S;if(null===e.value)return p("NativeFunctionCall.CallListIncrementOperation listVal.value");for(let[t,a]of e.value){let s=g.fromSerializedKey(t);if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let l=this._operationFuncs.get(i.Int);if(null===n.value)return p("NativeFunctionCall.CallListIncrementOperation intVal.value");let o=l(a,n.value),h=null;if(null===e.value.origins)return p("NativeFunctionCall.CallListIncrementOperation listVal.value.origins");for(let t of e.value.origins)if(t.name==s.originName){h=t;break}if(null!=h){let t=h.TryGetItemWithValue(o,g.Null);t.exists&&r.Add(t.result,o)}}return new O(r)}CoerceValuesToSingleType(t){let e=i.Int,n=null;for(let r of t){let t=l(r,b);t.valueType>e&&(e=t.valueType),t.valueType==i.List&&(n=s(t,O))}let r=[];if(i[e]==i[i.List])for(let e of t){let t=l(e,b);if(t.valueType==i.List)r.push(t);else{if(t.valueType!=i.Int){const e=i[t.valueType];throw new y("Cannot mix Lists and "+e+" values in this operation")}{let e=parseInt(t.valueObject);if(n=l(n,O),null===n.value)return p("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");let i=n.value.originOfMaxItem;if(null===i)return p("NativeFunctionCall.CoerceValuesToSingleType list");let a=i.TryGetItemWithValue(e,g.Null);if(!a.exists)throw new y("Could not find List item with the value "+e+" in "+i.name);{let t=new O(a.result,e);r.push(t)}}}}else for(let n of t){let t=l(n,b).Cast(e);r.push(t)}return r}constructor(){if(super(),this._name=null,this._numberOfParameters=0,this._prototype=null,this._isPrototype=!1,this._operationFuncs=null,0===arguments.length)j.GenerateNativeFunctionsIfNecessary();else if(1===arguments.length){let t=arguments[0];j.GenerateNativeFunctionsIfNecessary(),this.name=t}else if(2===arguments.length){let t=arguments[0],e=arguments[1];this._isPrototype=!0,this.name=t,this.numberOfParameters=e}}static Identity(t){return t}static GenerateNativeFunctionsIfNecessary(){if(null==this._nativeFunctions){this._nativeFunctions=new Map,this.AddIntBinaryOp(this.Add,((t,e)=>t+e)),this.AddIntBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddIntBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddIntBinaryOp(this.Divide,((t,e)=>Math.floor(t/e))),this.AddIntBinaryOp(this.Mod,((t,e)=>t%e)),this.AddIntUnaryOp(this.Negate,(t=>-t)),this.AddIntBinaryOp(this.Equal,((t,e)=>t==e)),this.AddIntBinaryOp(this.Greater,((t,e)=>t>e)),this.AddIntBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddIntBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddIntBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddIntUnaryOp(this.Not,(t=>0==t)),this.AddIntBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddIntBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddIntBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddIntBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddIntBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddIntUnaryOp(this.Floor,j.Identity),this.AddIntUnaryOp(this.Ceiling,j.Identity),this.AddIntUnaryOp(this.Int,j.Identity),this.AddIntUnaryOp(this.Float,(t=>t)),this.AddFloatBinaryOp(this.Add,((t,e)=>t+e)),this.AddFloatBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddFloatBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddFloatBinaryOp(this.Divide,((t,e)=>t/e)),this.AddFloatBinaryOp(this.Mod,((t,e)=>t%e)),this.AddFloatUnaryOp(this.Negate,(t=>-t)),this.AddFloatBinaryOp(this.Equal,((t,e)=>t==e)),this.AddFloatBinaryOp(this.Greater,((t,e)=>t>e)),this.AddFloatBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddFloatBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddFloatBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddFloatUnaryOp(this.Not,(t=>0==t)),this.AddFloatBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddFloatBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddFloatBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddFloatBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddFloatBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddFloatUnaryOp(this.Floor,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Ceiling,(t=>Math.ceil(t))),this.AddFloatUnaryOp(this.Int,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Float,j.Identity),this.AddStringBinaryOp(this.Add,((t,e)=>t+e)),this.AddStringBinaryOp(this.Equal,((t,e)=>t===e)),this.AddStringBinaryOp(this.NotEquals,((t,e)=>!(t===e))),this.AddStringBinaryOp(this.Has,((t,e)=>t.includes(e))),this.AddStringBinaryOp(this.Hasnt,((t,e)=>!t.includes(e))),this.AddListBinaryOp(this.Add,((t,e)=>t.Union(e))),this.AddListBinaryOp(this.Subtract,((t,e)=>t.Without(e))),this.AddListBinaryOp(this.Has,((t,e)=>t.Contains(e))),this.AddListBinaryOp(this.Hasnt,((t,e)=>!t.Contains(e))),this.AddListBinaryOp(this.Intersect,((t,e)=>t.Intersect(e))),this.AddListBinaryOp(this.Equal,((t,e)=>t.Equals(e))),this.AddListBinaryOp(this.Greater,((t,e)=>t.GreaterThan(e))),this.AddListBinaryOp(this.Less,((t,e)=>t.LessThan(e))),this.AddListBinaryOp(this.GreaterThanOrEquals,((t,e)=>t.GreaterThanOrEquals(e))),this.AddListBinaryOp(this.LessThanOrEquals,((t,e)=>t.LessThanOrEquals(e))),this.AddListBinaryOp(this.NotEquals,((t,e)=>!t.Equals(e))),this.AddListBinaryOp(this.And,((t,e)=>t.Count>0&&e.Count>0)),this.AddListBinaryOp(this.Or,((t,e)=>t.Count>0||e.Count>0)),this.AddListUnaryOp(this.Not,(t=>0==t.Count?1:0)),this.AddListUnaryOp(this.Invert,(t=>t.inverse)),this.AddListUnaryOp(this.All,(t=>t.all)),this.AddListUnaryOp(this.ListMin,(t=>t.MinAsList())),this.AddListUnaryOp(this.ListMax,(t=>t.MaxAsList())),this.AddListUnaryOp(this.Count,(t=>t.Count)),this.AddListUnaryOp(this.ValueOfList,(t=>t.maxItem.Value));let t=(t,e)=>t.Equals(e),e=(t,e)=>!t.Equals(e);this.AddOpToNativeFunc(this.Equal,2,i.DivertTarget,t),this.AddOpToNativeFunc(this.NotEquals,2,i.DivertTarget,e)}}AddOpFuncForType(t,e){null==this._operationFuncs&&(this._operationFuncs=new Map),this._operationFuncs.set(t,e)}static AddOpToNativeFunc(t,e,n,i){if(null===this._nativeFunctions)return p("NativeFunctionCall._nativeFunctions");let r=this._nativeFunctions.get(t);r||(r=new j(t,e),this._nativeFunctions.set(t,r)),r.AddOpFuncForType(n,i)}static AddIntBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Int,e)}static AddIntUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Int,e)}static AddFloatBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Float,e)}static AddFloatUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Float,e)}static AddStringBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.String,e)}static AddListBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.List,e)}static AddListUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.List,e)}toString(){return'Native "'+this.name+'"'}}j.Add="+",j.Subtract="-",j.Divide="/",j.Multiply="*",j.Mod="%",j.Negate="_",j.Equal="==",j.Greater=">",j.Less="<",j.GreaterThanOrEquals=">=",j.LessThanOrEquals="<=",j.NotEquals="!=",j.Not="!",j.And="&&",j.Or="||",j.Min="MIN",j.Max="MAX",j.Pow="POW",j.Floor="FLOOR",j.Ceiling="CEILING",j.Int="INT",j.Float="FLOAT",j.Has="?",j.Hasnt="!?",j.Intersect="^",j.ListMin="LIST_MIN",j.ListMax="LIST_MAX",j.All="LIST_ALL",j.Count="LIST_COUNT",j.ValueOfList="LIST_VALUE",j.Invert="LIST_INVERT",j._nativeFunctions=null;class B extends m{constructor(t){super(),this.text=t.toString()||""}toString(){return"# "+this.text}}class G extends m{constructor(){super(...arguments),this.text="",this.index=0,this.threadAtGeneration=null,this.sourcePath="",this.targetPath=null,this.isInvisibleDefault=!1,this.tags=null,this.originalThreadIndex=0}get pathStringOnChoice(){return null===this.targetPath?p("Choice.targetPath"):this.targetPath.toString()}set pathStringOnChoice(t){this.targetPath=new e(t)}}class M{constructor(t,e){this._name=t||"",this._items=null,this._itemNameToValues=e||new Map}get name(){return this._name}get items(){if(null==this._items){this._items=new Map;for(let[t,e]of this._itemNameToValues){let n=new g(this.name,t);this._items.set(n.serialized(),e)}}return this._items}ValueForItem(t){if(!t.itemName)return 0;let e=this._itemNameToValues.get(t.itemName);return void 0!==e?e:0}ContainsItem(t){return!!t.itemName&&(t.originName==this.name&&this._itemNameToValues.has(t.itemName))}ContainsItemWithName(t){return this._itemNameToValues.has(t)}TryGetItemWithValue(t,e){for(let[e,n]of this._itemNameToValues)if(n==t)return{result:new g(this.name,e),exists:!0};return{result:g.Null,exists:!1}}TryGetValueForItem(t,e){if(!t.itemName)return{result:0,exists:!1};let n=this._itemNameToValues.get(t.itemName);return n?{result:n,exists:!0}:{result:0,exists:!1}}}class J{constructor(t){this._lists=new Map,this._allUnambiguousListValueCache=new Map;for(let e of t){this._lists.set(e.name,e);for(let[t,n]of e.items){let e=g.fromSerializedKey(t),i=new O(e,n);if(!e.itemName)throw new Error("item.itemName is null or undefined.");this._allUnambiguousListValueCache.set(e.itemName,i),this._allUnambiguousListValueCache.set(e.fullName,i)}}}get lists(){let t=[];for(let[,e]of this._lists)t.push(e);return t}TryListGetDefinition(t,e){if(null===t)return{result:e,exists:!1};let n=this._lists.get(t);return n?{result:n,exists:!0}:{result:e,exists:!1}}FindSingleItemListWithName(t){if(null===t)return p("name");let e=this._allUnambiguousListValueCache.get(t);return void 0!==e?e:null}}class q{static JArrayToRuntimeObjList(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.length;e&&n--;let i=[];for(let e=0;et->")),e=i.hasVariableTarget?i.variableDivertName:i.targetPathString,t.WriteObjectStart(),t.WriteProperty(n,e),i.hasVariableTarget&&t.WriteProperty("var",!0),i.isConditional&&t.WriteProperty("c",!0),i.externalArgs>0&&t.WriteIntProperty("exArgs",i.externalArgs),void t.WriteObjectEnd()}let a=s(e,V);if(a)return t.WriteObjectStart(),t.WriteProperty("*",a.pathStringOnChoice),t.WriteIntProperty("flg",a.flags),void t.WriteObjectEnd();let l=s(e,_);if(l)return void t.WriteBool(l.value);let o=s(e,w);if(o)return void t.WriteInt(o.value);let h=s(e,T);if(h)return void t.WriteFloat(h.value);let u=s(e,E);if(u)return void(u.isNewline?t.Write("\n",!1):(t.WriteStringStart(),t.WriteStringInner("^"),t.WriteStringInner(u.value),t.WriteStringEnd()));let c=s(e,O);if(c)return void this.WriteInkList(t,c);let d=s(e,P);if(d)return t.WriteObjectStart(),null===d.value?p("divTargetVal.value"):(t.WriteProperty("^->",d.value.componentsString),void t.WriteObjectEnd());let m=s(e,N);if(m)return t.WriteObjectStart(),t.WriteProperty("^var",m.value),t.WriteIntProperty("ci",m.contextIndex),void t.WriteObjectEnd();if(s(e,I))return void t.Write("<>");let f=s(e,k);if(f)return void t.Write(q._controlCommandNames[f.commandType]);let g=s(e,j);if(g){let e=g.name;return"^"==e&&(e="L^"),void t.Write(e)}let S=s(e,L);if(S){t.WriteObjectStart();let e=S.pathStringForCount;return null!=e?t.WriteProperty("CNT?",e):t.WriteProperty("VAR?",S.name),void t.WriteObjectEnd()}let y=s(e,R);if(y){t.WriteObjectStart();let e=y.isGlobal?"VAR=":"temp=";return t.WriteProperty(e,y.variableName),y.isNewDeclaration||t.WriteProperty("re",!0),void t.WriteObjectEnd()}if(s(e,D))return void t.Write("void");let v=s(e,B);if(v)return t.WriteObjectStart(),t.WriteProperty("#",v.text),void t.WriteObjectEnd();let C=s(e,G);if(!C)throw new Error("Failed to convert runtime object to Json token: "+e);this.WriteChoice(t,C)}static JObjectToDictionaryRuntimeObjs(t){let e=new Map;for(let n in t)if(t.hasOwnProperty(n)){let i=this.JTokenToRuntimeObject(t[n]);if(null===i)return p("inkObject");e.set(n,i)}return e}static JObjectToIntDictionary(t){let e=new Map;for(let n in t)t.hasOwnProperty(n)&&e.set(n,parseInt(t[n]));return e}static JTokenToRuntimeObject(t){if("number"==typeof t&&!isNaN(t)||"boolean"==typeof t)return b.Create(t);if("string"==typeof t){let e=t.toString(),n=e[0];if("^"==n)return new E(e.substring(1));if("\n"==n&&1==e.length)return new E("\n");if("<>"==e)return new I;for(let t=0;t->"==e)return k.PopTunnel();if("~ret"==e)return k.PopFunction();if("void"==e)return new D}if("object"==typeof t&&!Array.isArray(t)){let n,i=t;if(i["^->"])return n=i["^->"],new P(new e(n.toString()));if(i["^var"]){n=i["^var"];let t=new N(n.toString());return"ci"in i&&(n=i.ci,t.contextIndex=parseInt(n)),t}let a=!1,s=!1,l=r.Function,o=!1;if((n=i["->"])?a=!0:(n=i["f()"])?(a=!0,s=!0,l=r.Function):(n=i["->t->"])?(a=!0,s=!0,l=r.Tunnel):(n=i["x()"])&&(a=!0,o=!0,s=!1,l=r.Function),a){let t=new W;t.pushesToStack=s,t.stackPushType=l,t.isExternal=o;let e=n.toString();return(n=i.var)?t.variableDivertName=e:t.targetPathString=e,t.isConditional=!!i.c,o&&(n=i.exArgs)&&(t.externalArgs=parseInt(n)),t}if(n=i["*"]){let t=new V;return t.pathStringOnChoice=n.toString(),(n=i.flg)&&(t.flags=parseInt(n)),t}if(n=i["VAR?"])return new L(n.toString());if(n=i["CNT?"]){let t=new L;return t.pathStringForCount=n.toString(),t}let h=!1,u=!1;if((n=i["VAR="])?(h=!0,u=!0):(n=i["temp="])&&(h=!0,u=!1),h){let t=n.toString(),e=!i.re,r=new R(t,e);return r.isGlobal=u,r}if(void 0!==i["#"])return n=i["#"],new B(n.toString());if(n=i.list){let t=n,e=new S;if(n=i.origins){let t=n;e.SetInitialOriginNames(t)}for(let n in t)if(t.hasOwnProperty(n)){let i=t[n],r=new g(n),a=parseInt(i);e.Add(r,a)}return new O(e)}if(null!=i.originalChoicePath)return this.JObjectToChoice(i)}if(Array.isArray(t))return this.JArrayToContainer(t);if(null==t)return null;throw new Error("Failed to convert token to runtime object: "+this.toJson(t,["parent"]))}static toJson(t,e,n){return JSON.stringify(t,((t,n)=>(null==e?void 0:e.some((e=>e===t)))?void 0:n),n)}static WriteRuntimeContainer(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.WriteArrayStart(),null===e)return p("container");for(let n of e.content)this.WriteRuntimeObject(t,n);let i=e.namedOnlyContent,r=e.countFlags,a=null!=e.name&&!n,l=null!=i||r>0||a;if(l&&t.WriteObjectStart(),null!=i)for(let[e,n]of i){let i=e,r=s(n,x);t.WritePropertyStart(i),this.WriteRuntimeContainer(t,r,!0),t.WritePropertyEnd()}r>0&&t.WriteIntProperty("#f",r),a&&t.WriteProperty("#n",e.name),l?t.WriteObjectEnd():t.WriteNull(),t.WriteArrayEnd()}static JArrayToContainer(t){let e=new x;e.content=this.JArrayToRuntimeObjList(t,!0);let n=t[t.length-1];if(null!=n){let t=new Map;for(let i in n)if("#f"==i)e.countFlags=parseInt(n[i]);else if("#n"==i)e.name=n[i].toString();else{let e=this.JTokenToRuntimeObject(n[i]),r=s(e,x);r&&(r.name=i),t.set(i,e)}e.namedOnlyContent=t}return e}static JObjectToChoice(t){let e=new G;return e.text=t.text.toString(),e.index=parseInt(t.index),e.sourcePath=t.originalChoicePath.toString(),e.originalThreadIndex=parseInt(t.originalThreadIndex),e.pathStringOnChoice=t.targetPath.toString(),t.tags&&(e.tags=t.tags),e}static WriteChoice(t,e){t.WriteObjectStart(),t.WriteProperty("text",e.text),t.WriteIntProperty("index",e.index),t.WriteProperty("originalChoicePath",e.sourcePath),t.WriteIntProperty("originalThreadIndex",e.originalThreadIndex),t.WriteProperty("targetPath",e.pathStringOnChoice),e.tags&&t.WriteProperty("tags",(t=>{t.WriteArrayStart();for(const n of e.tags)t.WriteStringStart(),t.WriteStringInner(n),t.WriteStringEnd();t.WriteArrayEnd()})),t.WriteObjectEnd()}static WriteInkList(t,e){let n=e.value;if(null===n)return p("rawList");t.WriteObjectStart(),t.WritePropertyStart("list"),t.WriteObjectStart();for(let[e,i]of n){let n=g.fromSerializedKey(e),r=i;if(null===n.itemName)return p("item.itemName");t.WritePropertyNameStart(),t.WritePropertyNameInner(n.originName?n.originName:"?"),t.WritePropertyNameInner("."),t.WritePropertyNameInner(n.itemName),t.WritePropertyNameEnd(),t.Write(r),t.WritePropertyEnd()}if(t.WriteObjectEnd(),t.WritePropertyEnd(),0==n.Count&&null!=n.originNames&&n.originNames.length>0){t.WritePropertyStart("origins"),t.WriteArrayStart();for(let e of n.originNames)t.Write(e);t.WriteArrayEnd(),t.WritePropertyEnd()}t.WriteObjectEnd()}static ListDefinitionsToJToken(t){let e={};for(let n of t.lists){let t={};for(let[e,i]of n.items){let n=g.fromSerializedKey(e);if(null===n.itemName)return p("item.itemName");t[n.itemName]=i}e[n.name]=t}return e}static JTokenToListDefinitions(t){let e=t,n=[];for(let t in e)if(e.hasOwnProperty(t)){let i=t.toString(),r=e[t],a=new Map;for(let n in r)if(e.hasOwnProperty(t)){let t=r[n];a.set(n,parseInt(t))}let s=new M(i,a);n.push(s)}return new J(n)}}q._controlCommandNames=(()=>{let t=[];t[k.CommandType.EvalStart]="ev",t[k.CommandType.EvalOutput]="out",t[k.CommandType.EvalEnd]="/ev",t[k.CommandType.Duplicate]="du",t[k.CommandType.PopEvaluatedValue]="pop",t[k.CommandType.PopFunction]="~ret",t[k.CommandType.PopTunnel]="->->",t[k.CommandType.BeginString]="str",t[k.CommandType.EndString]="/str",t[k.CommandType.NoOp]="nop",t[k.CommandType.ChoiceCount]="choiceCnt",t[k.CommandType.Turns]="turn",t[k.CommandType.TurnsSince]="turns",t[k.CommandType.ReadCount]="readc",t[k.CommandType.Random]="rnd",t[k.CommandType.SeedRandom]="srnd",t[k.CommandType.VisitIndex]="visit",t[k.CommandType.SequenceShuffleIndex]="seq",t[k.CommandType.StartThread]="thread",t[k.CommandType.Done]="done",t[k.CommandType.End]="end",t[k.CommandType.ListFromInt]="listInt",t[k.CommandType.ListRange]="range",t[k.CommandType.ListRandom]="lrnd",t[k.CommandType.BeginTag]="#",t[k.CommandType.EndTag]="/#";for(let e=0;e1}constructor(){if(this._threadCounter=0,this._startOfRoot=F.Null,arguments[0]instanceof Z){let t=arguments[0];this._startOfRoot=F.StartOf(t.rootContentContainer),this.Reset()}else{let t=arguments[0];this._threads=[];for(let e of t._threads)this._threads.push(e.Copy());this._threadCounter=t._threadCounter,this._startOfRoot=t._startOfRoot.copy()}}Reset(){this._threads=[],this._threads.push(new U.Thread),this._threads[0].callstack.push(new U.Element(r.Tunnel,this._startOfRoot))}SetJsonToken(t,e){this._threads.length=0;let n=t.threads;for(let t of n){let n=t,i=new U.Thread(n,e);this._threads.push(i)}this._threadCounter=parseInt(t.threadCounter),this._startOfRoot=F.StartOf(e.rootContentContainer)}WriteJson(t){t.WriteObject((t=>{t.WritePropertyStart("threads"),t.WriteArrayStart();for(let e of this._threads)e.WriteJson(t);t.WriteArrayEnd(),t.WritePropertyEnd(),t.WritePropertyStart("threadCounter"),t.WriteInt(this._threadCounter),t.WritePropertyEnd()}))}PushThread(){let t=this.currentThread.Copy();this._threadCounter++,t.threadIndex=this._threadCounter,this._threads.push(t)}ForkThread(){let t=this.currentThread.Copy();return this._threadCounter++,t.threadIndex=this._threadCounter,t}PopThread(){if(!this.canPopThread)throw new Error("Can't pop thread");this._threads.splice(this._threads.indexOf(this.currentThread),1)}get canPopThread(){return this._threads.length>1&&!this.elementIsEvaluateFromGame}get elementIsEvaluateFromGame(){return this.currentElement.type==r.FunctionEvaluationFromGame}Push(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=new U.Element(t,this.currentElement.currentPointer,!1);i.evaluationStackHeightWhenPushed=e,i.functionStartInOutputStream=n,this.callStack.push(i)}CanPop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return!!this.canPop&&(null==t||this.currentElement.type==t)}Pop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.CanPop(t))throw new Error("Mismatched push/pop in Callstack");this.callStack.pop()}GetTemporaryVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;-1==e&&(e=this.currentElementIndex+1);let n=v(this.callStack[e-1].temporaryVariables,t,null);return n.exists?n.result:null}SetTemporaryVariable(t,e,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1;-1==i&&(i=this.currentElementIndex+1);let r=this.callStack[i-1];if(!n&&!r.temporaryVariables.get(t))throw new Error("Could not find temporary variable to set: "+t);let a=v(r.temporaryVariables,t,null);a.exists&&O.RetainListOriginsForAssignment(a.result,e),r.temporaryVariables.set(t,e)}ContextForVariableNamed(t){return this.currentElement.temporaryVariables.get(t)?this.currentElementIndex+1:0}ThreadWithIndex(t){let e=this._threads.filter((e=>{if(e.threadIndex==t)return e}));return e.length>0?e[0]:null}get callStack(){return this.currentThread.callstack}get callStackTrace(){let t=new f;for(let e=0;e")}}}return t.toString()}}!function(t){class n{constructor(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.evaluationStackHeightWhenPushed=0,this.functionStartInOutputStream=0,this.currentPointer=e.copy(),this.inExpressionEvaluation=n,this.temporaryVariables=new Map,this.type=t}Copy(){let t=new n(this.type,this.currentPointer,this.inExpressionEvaluation);return t.temporaryVariables=new Map(this.temporaryVariables),t.evaluationStackHeightWhenPushed=this.evaluationStackHeightWhenPushed,t.functionStartInOutputStream=this.functionStartInOutputStream,t}}t.Element=n;class i{constructor(){if(this.threadIndex=0,this.previousPointer=F.Null,this.callstack=[],arguments[0]&&arguments[1]){let t=arguments[0],i=arguments[1];this.threadIndex=parseInt(t.threadIndex);let r=t.callstack;for(let t of r){let r,a=t,s=parseInt(a.type),l=F.Null,o=a.cPath;if(void 0!==o){r=o.toString();let t=i.ContentAtPath(new e(r));if(l.container=t.container,l.index=parseInt(a.idx),null==t.obj)throw new Error("When loading state, internal story location couldn't be found: "+r+". Has the story changed since this save data was created?");if(t.approximate){if(null===l.container)return p("pointer.container");i.Warning("When loading state, exact internal story location couldn't be found: '"+r+"', so it was approximated to '"+l.container.path.toString()+"' to recover. Has the story changed since this save data was created?")}}let h=!!a.exp,u=new n(s,l,h),c=a.temp;void 0!==c?u.temporaryVariables=q.JObjectToDictionaryRuntimeObjs(c):u.temporaryVariables.clear(),this.callstack.push(u)}let a=t.previousContentObject;if(void 0!==a){let t=new e(a.toString());this.previousPointer=i.PointerAtPath(t)}}}Copy(){let t=new i;t.threadIndex=this.threadIndex;for(let e of this.callstack)t.callstack.push(e.Copy());return t.previousPointer=this.previousPointer.copy(),t}WriteJson(t){t.WriteObjectStart(),t.WritePropertyStart("callstack"),t.WriteArrayStart();for(let e of this.callstack){if(t.WriteObjectStart(),!e.currentPointer.isNull){if(null===e.currentPointer.container)return p("el.currentPointer.container");t.WriteProperty("cPath",e.currentPointer.container.path.componentsString),t.WriteIntProperty("idx",e.currentPointer.index)}t.WriteProperty("exp",e.inExpressionEvaluation),t.WriteIntProperty("type",e.type),e.temporaryVariables.size>0&&(t.WritePropertyStart("temp"),q.WriteDictionaryRuntimeObjs(t,e.temporaryVariables),t.WritePropertyEnd()),t.WriteObjectEnd()}if(t.WriteArrayEnd(),t.WritePropertyEnd(),t.WriteIntProperty("threadIndex",this.threadIndex),!this.previousPointer.isNull){let e=this.previousPointer.Resolve();if(null===e)return p("this.previousPointer.Resolve()");t.WriteProperty("previousContentObject",e.path.toString())}t.WriteObjectEnd()}}t.Thread=i}(U||(U={}));class K extends class{}{variableChangedEvent(t,e){for(let n of this.variableChangedEventCallbacks)n(t,e)}get batchObservingVariableChanges(){return this._batchObservingVariableChanges}set batchObservingVariableChanges(t){if(this._batchObservingVariableChanges=t,t)this._changedVariablesForBatchObs=new Set;else if(null!=this._changedVariablesForBatchObs){for(let t of this._changedVariablesForBatchObs){let e=this._globalVariables.get(t);e?this.variableChangedEvent(t,e):p("currentValue")}this._changedVariablesForBatchObs=null}}get callStack(){return this._callStack}set callStack(t){this._callStack=t}$(t,e){if(void 0===e){let e=null;return null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists)?e.result.valueObject:(e=this._globalVariables.get(t),void 0===e&&(e=this._defaultGlobalVariables.get(t)),void 0!==e?e.valueObject:null)}{if(void 0===this._defaultGlobalVariables.get(t))throw new y("Cannot assign to a variable ("+t+") that hasn't been declared in the story");let n=b.Create(e);if(null==n)throw null==e?new Error("Cannot pass null to VariableState"):new Error("Invalid value passed to VariableState: "+e.toString());this.SetGlobal(t,n)}}constructor(t,e){super(),this.variableChangedEventCallbacks=[],this.patch=null,this._batchObservingVariableChanges=!1,this._defaultGlobalVariables=new Map,this._changedVariablesForBatchObs=new Set,this._globalVariables=new Map,this._callStack=t,this._listDefsOrigin=e;try{return new Proxy(this,{get:(t,e)=>e in t?t[e]:t.$(e),set:(t,e,n)=>(e in t?t[e]=n:t.$(e,n),!0)})}catch(t){}}ApplyPatch(){if(null===this.patch)return p("this.patch");for(let[t,e]of this.patch.globals)this._globalVariables.set(t,e);if(null!==this._changedVariablesForBatchObs)for(let t of this.patch.changedVariables)this._changedVariablesForBatchObs.add(t);this.patch=null}SetJsonToken(t){this._globalVariables.clear();for(let[e,n]of this._defaultGlobalVariables){let i=t[e];if(void 0!==i){let t=q.JTokenToRuntimeObject(i);if(null===t)return p("tokenInkObject");this._globalVariables.set(e,t)}else this._globalVariables.set(e,n)}}WriteJson(t){t.WriteObjectStart();for(let[e,n]of this._globalVariables){let i=e,r=n;if(K.dontSaveDefaultValues&&this._defaultGlobalVariables.has(i)){let t=this._defaultGlobalVariables.get(i);if(this.RuntimeObjectsEqual(r,t))continue}t.WritePropertyStart(i),q.WriteRuntimeObject(t,r),t.WritePropertyEnd()}t.WriteObjectEnd()}RuntimeObjectsEqual(t,e){if(null===t)return p("obj1");if(null===e)return p("obj2");if(t.constructor!==e.constructor)return!1;let n=s(t,_);if(null!==n)return n.value===l(e,_).value;let i=s(t,w);if(null!==i)return i.value===l(e,w).value;let r=s(t,T);if(null!==r)return r.value===l(e,T).value;let a=s(t,b),o=s(e,b);if(null!==a&&null!==o)return u(a.valueObject)&&u(o.valueObject)?a.valueObject.Equals(o.valueObject):a.valueObject===o.valueObject;throw new Error("FastRoughDefinitelyEquals: Unsupported runtime object type: "+t.constructor.name)}GetVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=this.GetRawVariableWithName(t,e),i=s(n,N);return null!==i&&(n=this.ValueAtVariablePointer(i)),n}TryGetDefaultVariableValue(t){let e=v(this._defaultGlobalVariables,t,null);return e.exists?e.result:null}GlobalVariableExistsWithName(t){return this._globalVariables.has(t)||null!==this._defaultGlobalVariables&&this._defaultGlobalVariables.has(t)}GetRawVariableWithName(t,e){let n=null;if(0==e||-1==e){let e=null;if(null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists))return e.result;if(e=v(this._globalVariables,t,null),e.exists)return e.result;if(null!==this._defaultGlobalVariables&&(e=v(this._defaultGlobalVariables,t,null),e.exists))return e.result;if(null===this._listDefsOrigin)return p("VariablesState._listDefsOrigin");let n=this._listDefsOrigin.FindSingleItemListWithName(t);if(n)return n}return n=this._callStack.GetTemporaryVariableWithName(t,e),n}ValueAtVariablePointer(t){return this.GetVariableWithName(t.variableName,t.contextIndex)}Assign(t,e){let n=t.variableName;if(null===n)return p("name");let i=-1,r=!1;if(r=t.isNewDeclaration?t.isGlobal:this.GlobalVariableExistsWithName(n),t.isNewDeclaration){let t=s(e,N);if(null!==t){e=this.ResolveVariablePointer(t)}}else{let t=null;do{t=s(this.GetRawVariableWithName(n,i),N),null!=t&&(n=t.variableName,i=t.contextIndex,r=0==i)}while(null!=t)}r?this.SetGlobal(n,e):this._callStack.SetTemporaryVariable(n,e,t.isNewDeclaration,i)}SnapshotDefaultGlobals(){this._defaultGlobalVariables=new Map(this._globalVariables)}RetainListOriginsForAssignment(t,e){let n=l(t,O),i=l(e,O);n.value&&i.value&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames)}SetGlobal(t,e){let n=null;if(null===this.patch&&(n=v(this._globalVariables,t,null)),null!==this.patch&&(n=this.patch.TryGetGlobal(t,null),n.exists||(n=v(this._globalVariables,t,null))),O.RetainListOriginsForAssignment(n.result,e),null===t)return p("variableName");if(null!==this.patch?this.patch.SetGlobal(t,e):this._globalVariables.set(t,e),null!==this.variableChangedEvent&&null!==n&&e!==n.result)if(this.batchObservingVariableChanges){if(null===this._changedVariablesForBatchObs)return p("this._changedVariablesForBatchObs");null!==this.patch?this.patch.AddChangedVariable(t):null!==this._changedVariablesForBatchObs&&this._changedVariablesForBatchObs.add(t)}else this.variableChangedEvent(t,e)}ResolveVariablePointer(t){let e=t.contextIndex;-1==e&&(e=this.GetContextIndexOfVariableNamed(t.variableName));let n=s(this.GetRawVariableWithName(t.variableName,e),N);return null!=n?n:new N(t.variableName,e)}GetContextIndexOfVariableNamed(t){return this.GlobalVariableExistsWithName(t)?0:this._callStack.currentElementIndex}ObserveVariableChange(t){this.variableChangedEventCallbacks.push(t)}}K.dontSaveDefaultValues=!0;class z{constructor(t){this.seed=t%2147483647,this.seed<=0&&(this.seed+=2147483646)}next(){return this.seed=48271*this.seed%2147483647}nextFloat(){return(this.next()-1)/2147483646}}class H{get globals(){return this._globals}get changedVariables(){return this._changedVariables}get visitCounts(){return this._visitCounts}get turnIndices(){return this._turnIndices}constructor(){if(this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map,1===arguments.length&&null!==arguments[0]){let t=arguments[0];this._globals=new Map(t._globals),this._changedVariables=new Set(t._changedVariables),this._visitCounts=new Map(t._visitCounts),this._turnIndices=new Map(t._turnIndices)}else this._globals=new Map,this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map}TryGetGlobal(t,e){return null!==t&&this._globals.has(t)?{result:this._globals.get(t),exists:!0}:{result:e,exists:!1}}SetGlobal(t,e){this._globals.set(t,e)}AddChangedVariable(t){return this._changedVariables.add(t)}TryGetVisitCount(t,e){return this._visitCounts.has(t)?{result:this._visitCounts.get(t),exists:!0}:{result:e,exists:!1}}SetVisitCount(t,e){this._visitCounts.set(t,e)}SetTurnIndex(t,e){this._turnIndices.set(t,e)}TryGetTurnIndex(t,e){return this._turnIndices.has(t)?{result:this._turnIndices.get(t),exists:!0}:{result:e,exists:!1}}}class X{static TextToDictionary(t){return new X.Reader(t).ToDictionary()}static TextToArray(t){return new X.Reader(t).ToArray()}}!function(t){t.Reader=class{constructor(t){this._rootObject=JSON.parse(t)}ToDictionary(){return this._rootObject}ToArray(){return this._rootObject}};class e{constructor(){this._currentPropertyName=null,this._currentString=null,this._stateStack=[],this._collectionStack=[],this._propertyNameStack=[],this._jsonObject=null}WriteObject(t){this.WriteObjectStart(),t(this),this.WriteObjectEnd()}WriteObjectStart(){this.StartNewObject(!0);let e={};if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Object))}WriteObjectEnd(){this.Assert(this.state===t.Writer.State.Object),this._collectionStack.pop(),this._stateStack.pop()}WriteProperty(t,e){if(this.WritePropertyStart(t),arguments[1]instanceof Function){(0,arguments[1])(this)}else{let t=arguments[1];this.Write(t)}this.WritePropertyEnd()}WriteIntProperty(t,e){this.WritePropertyStart(t),this.WriteInt(e),this.WritePropertyEnd()}WriteFloatProperty(t,e){this.WritePropertyStart(t),this.WriteFloat(e),this.WritePropertyEnd()}WritePropertyStart(e){this.Assert(this.state===t.Writer.State.Object),this._propertyNameStack.push(e),this.IncrementChildCount(),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property))}WritePropertyEnd(){this.Assert(this.state===t.Writer.State.Property),this.Assert(1===this.childCount),this._stateStack.pop()}WritePropertyNameStart(){this.Assert(this.state===t.Writer.State.Object),this.IncrementChildCount(),this._currentPropertyName="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property)),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.PropertyName))}WritePropertyNameEnd(){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._propertyNameStack.push(this._currentPropertyName),this._currentPropertyName=null,this._stateStack.pop()}WritePropertyNameInner(e){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._currentPropertyName+=e}WriteArrayStart(){this.StartNewObject(!0);let e=[];if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Array))}WriteArrayEnd(){this.Assert(this.state===t.Writer.State.Array),this._collectionStack.pop(),this._stateStack.pop()}Write(t){null!==t?(this.StartNewObject(!1),this._addToCurrentObject(t)):console.error("Warning: trying to write a null value")}WriteBool(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(t))}WriteInt(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(Math.floor(t)))}WriteFloat(t){null!==t&&(this.StartNewObject(!1),t==Number.POSITIVE_INFINITY?this._addToCurrentObject(34e37):t==Number.NEGATIVE_INFINITY?this._addToCurrentObject(-34e37):isNaN(t)?this._addToCurrentObject(0):this._addToCurrentObject(t))}WriteNull(){this.StartNewObject(!1),this._addToCurrentObject(null)}WriteStringStart(){this.StartNewObject(!1),this._currentString="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.String))}WriteStringEnd(){this.Assert(this.state==t.Writer.State.String),this._stateStack.pop(),this._addToCurrentObject(this._currentString),this._currentString=null}WriteStringInner(e){this.Assert(this.state===t.Writer.State.String),null!==e?this._currentString+=e:console.error("Warning: trying to write a null string")}toString(){return null===this._jsonObject?"":JSON.stringify(this._jsonObject)}StartNewObject(e){e?this.Assert(this.state===t.Writer.State.None||this.state===t.Writer.State.Property||this.state===t.Writer.State.Array):this.Assert(this.state===t.Writer.State.Property||this.state===t.Writer.State.Array),this.state===t.Writer.State.Property&&this.Assert(0===this.childCount),this.state!==t.Writer.State.Array&&this.state!==t.Writer.State.Property||this.IncrementChildCount()}get state(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].type:t.Writer.State.None}get childCount(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].childCount:0}get currentCollection(){return this._collectionStack.length>0?this._collectionStack[this._collectionStack.length-1]:null}get currentPropertyName(){return this._propertyNameStack.length>0?this._propertyNameStack[this._propertyNameStack.length-1]:null}IncrementChildCount(){this.Assert(this._stateStack.length>0);let t=this._stateStack.pop();t.childCount++,this._stateStack.push(t)}Assert(t){if(!t)throw Error("Assert failed while writing JSON")}_addToCurrentObject(e){this.Assert(null!==this.currentCollection),this.state===t.Writer.State.Array?(this.Assert(Array.isArray(this.currentCollection)),this.currentCollection.push(e)):this.state===t.Writer.State.Property&&(this.Assert(!Array.isArray(this.currentCollection)),this.Assert(null!==this.currentPropertyName),this.currentCollection[this.currentPropertyName]=e,this._propertyNameStack.pop())}}t.Writer=e,function(e){var n;(n=e.State||(e.State={}))[n.None=0]="None",n[n.Object=1]="Object",n[n.Array=2]="Array",n[n.Property=3]="Property",n[n.PropertyName=4]="PropertyName",n[n.String=5]="String";e.StateElement=class{constructor(e){this.type=t.Writer.State.None,this.childCount=0,this.type=e}}}(e=t.Writer||(t.Writer={}))}(X||(X={}));class ${constructor(){let t=arguments[0],e=arguments[1];if(this.name=t,this.callStack=new U(e),arguments[2]){let t=arguments[2];this.callStack.SetJsonToken(t.callstack,e),this.outputStream=q.JArrayToRuntimeObjList(t.outputStream),this.currentChoices=q.JArrayToRuntimeObjList(t.currentChoices);let n=t.choiceThreads;void 0!==n&&this.LoadFlowChoiceThreads(n,e)}else this.outputStream=[],this.currentChoices=[]}WriteJson(t){t.WriteObjectStart(),t.WriteProperty("callstack",(t=>this.callStack.WriteJson(t))),t.WriteProperty("outputStream",(t=>q.WriteListRuntimeObjs(t,this.outputStream)));let e=!1;for(let n of this.currentChoices){if(null===n.threadAtGeneration)return p("c.threadAtGeneration");n.originalThreadIndex=n.threadAtGeneration.threadIndex,null===this.callStack.ThreadWithIndex(n.originalThreadIndex)&&(e||(e=!0,t.WritePropertyStart("choiceThreads"),t.WriteObjectStart()),t.WritePropertyStart(n.originalThreadIndex),n.threadAtGeneration.WriteJson(t),t.WritePropertyEnd())}e&&(t.WriteObjectEnd(),t.WritePropertyEnd()),t.WriteProperty("currentChoices",(t=>{t.WriteArrayStart();for(let e of this.currentChoices)q.WriteChoice(t,e);t.WriteArrayEnd()})),t.WriteObjectEnd()}LoadFlowChoiceThreads(t,e){for(let n of this.currentChoices){let i=this.callStack.ThreadWithIndex(n.originalThreadIndex);if(null!==i)n.threadAtGeneration=i.Copy();else{let i=t["".concat(n.originalThreadIndex)];n.threadAtGeneration=new U.Thread(i,e)}}}}class Y{ToJson(){let t=new X.Writer;return this.WriteJson(t),t.toString()}toJson(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.ToJson(t)}LoadJson(t){let e=X.TextToDictionary(t);this.LoadJsonObj(e),null!==this.onDidLoadState&&this.onDidLoadState()}VisitCountAtPathString(t){let n;if(null!==this._patch){let i=this.story.ContentAtPath(new e(t)).container;if(null===i)throw new Error("Content at path not found: "+t);if(n=this._patch.TryGetVisitCount(i,0),n.exists)return n.result}return n=v(this._visitCounts,t,null),n.exists?n.result:0}VisitCountForContainer(t){if(null===t)return p("container");if(!t.visitsShouldBeCounted)return this.story.Error("Read count for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;if(null!==this._patch){let e=this._patch.TryGetVisitCount(t,0);if(e.exists)return e.result}let e=t.path.toString(),n=v(this._visitCounts,e,null);return n.exists?n.result:0}IncrementVisitCountForContainer(t){if(null!==this._patch){let e=this.VisitCountForContainer(t);return e++,void this._patch.SetVisitCount(t,e)}let e=t.path.toString(),n=v(this._visitCounts,e,null);n.exists?this._visitCounts.set(e,n.result+1):this._visitCounts.set(e,1)}RecordTurnIndexVisitToContainer(t){if(null!==this._patch)return void this._patch.SetTurnIndex(t,this.currentTurnIndex);let e=t.path.toString();this._turnIndices.set(e,this.currentTurnIndex)}TurnsSinceForContainer(t){if(t.turnIndexShouldBeCounted||this.story.Error("TURNS_SINCE() for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),null!==this._patch){let e=this._patch.TryGetTurnIndex(t,0);if(e.exists)return this.currentTurnIndex-e.result}let e=t.path.toString(),n=v(this._turnIndices,e,0);return n.exists?this.currentTurnIndex-n.result:-1}get callstackDepth(){return this.callStack.depth}get outputStream(){return this._currentFlow.outputStream}get currentChoices(){return this.canContinue?[]:this._currentFlow.currentChoices}get generatedChoices(){return this._currentFlow.currentChoices}get currentErrors(){return this._currentErrors}get currentWarnings(){return this._currentWarnings}get variablesState(){return this._variablesState}set variablesState(t){this._variablesState=t}get callStack(){return this._currentFlow.callStack}get evaluationStack(){return this._evaluationStack}get currentTurnIndex(){return this._currentTurnIndex}set currentTurnIndex(t){this._currentTurnIndex=t}get currentPathString(){let t=this.currentPointer;return t.isNull?null:null===t.path?p("pointer.path"):t.path.toString()}get currentPointer(){return this.callStack.currentElement.currentPointer.copy()}set currentPointer(t){this.callStack.currentElement.currentPointer=t.copy()}get previousPointer(){return this.callStack.currentThread.previousPointer.copy()}set previousPointer(t){this.callStack.currentThread.previousPointer=t.copy()}get canContinue(){return!this.currentPointer.isNull&&!this.hasError}get hasError(){return null!=this.currentErrors&&this.currentErrors.length>0}get hasWarning(){return null!=this.currentWarnings&&this.currentWarnings.length>0}get currentText(){if(this._outputStreamTextDirty){let t=new f,e=!1;for(let n of this.outputStream){let i=s(n,E);if(e||null===i){let t=s(n,k);null!==t&&(t.commandType==k.CommandType.BeginTag?e=!0:t.commandType==k.CommandType.EndTag&&(e=!1))}else t.Append(i.value)}this._currentText=this.CleanOutputWhitespace(t.toString()),this._outputStreamTextDirty=!1}return this._currentText}CleanOutputWhitespace(t){let e=new f,n=-1,i=0;for(let r=0;r0&&n!=i&&e.Append(" "),n=-1),"\n"==a&&(i=r+1),s||e.Append(a)}return e.toString()}get currentTags(){if(this._outputStreamTagsDirty){this._currentTags=[];let t=!1,e=new f;for(let n of this.outputStream){let i=s(n,k);if(null!=i){if(i.commandType==k.CommandType.BeginTag){if(t&&e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!0}else if(i.commandType==k.CommandType.EndTag){if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!1}}else if(t){let t=s(n,E);null!==t&&e.Append(t.value)}else{let t=s(n,B);null!=t&&null!=t.text&&t.text.length>0&&this._currentTags.push(t.text)}}if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}this._outputStreamTagsDirty=!1}return this._currentTags}get currentFlowName(){return this._currentFlow.name}get currentFlowIsDefaultFlow(){return this._currentFlow.name==this.kDefaultFlowName}get aliveFlowNames(){if(this._aliveFlowNamesDirty){if(this._aliveFlowNames=[],null!=this._namedFlows)for(let t of this._namedFlows.keys())t!=this.kDefaultFlowName&&this._aliveFlowNames.push(t);this._aliveFlowNamesDirty=!1}return this._aliveFlowNames}get inExpressionEvaluation(){return this.callStack.currentElement.inExpressionEvaluation}set inExpressionEvaluation(t){this.callStack.currentElement.inExpressionEvaluation=t}constructor(t){this.kInkSaveStateVersion=10,this.kMinCompatibleLoadVersion=8,this.onDidLoadState=null,this._currentErrors=null,this._currentWarnings=null,this.divertedPointer=F.Null,this._currentTurnIndex=0,this.storySeed=0,this.previousRandom=0,this.didSafeExit=!1,this._currentText=null,this._currentTags=null,this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0,this._patch=null,this._aliveFlowNames=null,this._namedFlows=null,this.kDefaultFlowName="DEFAULT_FLOW",this._aliveFlowNamesDirty=!0,this.story=t,this._currentFlow=new $(this.kDefaultFlowName,t),this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this._evaluationStack=[],this._variablesState=new K(this.callStack,t.listDefinitions),this._visitCounts=new Map,this._turnIndices=new Map,this.currentTurnIndex=-1;let e=(new Date).getTime();this.storySeed=new z(e).next()%100,this.previousRandom=0,this.GoToStart()}GoToStart(){this.callStack.currentElement.currentPointer=F.StartOf(this.story.mainContentContainer)}SwitchFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.SwitchFlow");if(null===this._namedFlows&&(this._namedFlows=new Map,this._namedFlows.set(this.kDefaultFlowName,this._currentFlow)),t===this._currentFlow.name)return;let e,n=v(this._namedFlows,t,null);n.exists?e=n.result:(e=new $(t,this.story),this._namedFlows.set(t,e),this._aliveFlowNamesDirty=!0),this._currentFlow=e,this.variablesState.callStack=this._currentFlow.callStack,this.OutputStreamDirty()}SwitchToDefaultFlow_Internal(){null!==this._namedFlows&&this.SwitchFlow_Internal(this.kDefaultFlowName)}RemoveFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.DestroyFlow");if(t===this.kDefaultFlowName)throw new Error("Cannot destroy default flow");if(this._currentFlow.name===t&&this.SwitchToDefaultFlow_Internal(),null===this._namedFlows)return p("this._namedFlows");this._namedFlows.delete(t),this._aliveFlowNamesDirty=!0}CopyAndStartPatching(){let t=new Y(this.story);if(t._patch=new H(this._patch),t._currentFlow.name=this._currentFlow.name,t._currentFlow.callStack=new U(this._currentFlow.callStack),t._currentFlow.currentChoices.push(...this._currentFlow.currentChoices),t._currentFlow.outputStream.push(...this._currentFlow.outputStream),t.OutputStreamDirty(),null!==this._namedFlows){t._namedFlows=new Map;for(let[e,n]of this._namedFlows)t._namedFlows.set(e,n),t._aliveFlowNamesDirty=!0;t._namedFlows.set(this._currentFlow.name,t._currentFlow)}return this.hasError&&(t._currentErrors=[],t._currentErrors.push(...this.currentErrors||[])),this.hasWarning&&(t._currentWarnings=[],t._currentWarnings.push(...this.currentWarnings||[])),t.variablesState=this.variablesState,t.variablesState.callStack=t.callStack,t.variablesState.patch=t._patch,t.evaluationStack.push(...this.evaluationStack),this.divertedPointer.isNull||(t.divertedPointer=this.divertedPointer.copy()),t.previousPointer=this.previousPointer.copy(),t._visitCounts=this._visitCounts,t._turnIndices=this._turnIndices,t.currentTurnIndex=this.currentTurnIndex,t.storySeed=this.storySeed,t.previousRandom=this.previousRandom,t.didSafeExit=this.didSafeExit,t}RestoreAfterPatch(){this.variablesState.callStack=this.callStack,this.variablesState.patch=this._patch}ApplyAnyPatch(){if(null!==this._patch){this.variablesState.ApplyPatch();for(let[t,e]of this._patch.visitCounts)this.ApplyCountChanges(t,e,!0);for(let[t,e]of this._patch.turnIndices)this.ApplyCountChanges(t,e,!1);this._patch=null}}ApplyCountChanges(t,e,n){(n?this._visitCounts:this._turnIndices).set(t.path.toString(),e)}WriteJson(t){if(t.WriteObjectStart(),t.WritePropertyStart("flows"),t.WriteObjectStart(),null!==this._namedFlows)for(let[e,n]of this._namedFlows)t.WriteProperty(e,(t=>n.WriteJson(t)));else t.WriteProperty(this._currentFlow.name,(t=>this._currentFlow.WriteJson(t)));if(t.WriteObjectEnd(),t.WritePropertyEnd(),t.WriteProperty("currentFlowName",this._currentFlow.name),t.WriteProperty("variablesState",(t=>this.variablesState.WriteJson(t))),t.WriteProperty("evalStack",(t=>q.WriteListRuntimeObjs(t,this.evaluationStack))),!this.divertedPointer.isNull){if(null===this.divertedPointer.path)return p("divertedPointer");t.WriteProperty("currentDivertTarget",this.divertedPointer.path.componentsString)}t.WriteProperty("visitCounts",(t=>q.WriteIntDictionary(t,this._visitCounts))),t.WriteProperty("turnIndices",(t=>q.WriteIntDictionary(t,this._turnIndices))),t.WriteIntProperty("turnIdx",this.currentTurnIndex),t.WriteIntProperty("storySeed",this.storySeed),t.WriteIntProperty("previousRandom",this.previousRandom),t.WriteIntProperty("inkSaveVersion",this.kInkSaveStateVersion),t.WriteIntProperty("inkFormatVersion",Z.inkVersionCurrent),t.WriteObjectEnd()}LoadJsonObj(t){let n=t,i=n.inkSaveVersion;if(null==i)throw new Error("ink save format incorrect, can't load.");if(parseInt(i)1){let t=n.currentFlowName;this._currentFlow=this._namedFlows.get(t)}}else{this._namedFlows=null,this._currentFlow.name=this.kDefaultFlowName,this._currentFlow.callStack.SetJsonToken(n.callstackThreads,this.story),this._currentFlow.outputStream=q.JArrayToRuntimeObjList(n.outputStream),this._currentFlow.currentChoices=q.JArrayToRuntimeObjList(n.currentChoices);let t=n.choiceThreads;this._currentFlow.LoadFlowChoiceThreads(t,this.story)}this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this.variablesState.SetJsonToken(n.variablesState),this.variablesState.callStack=this._currentFlow.callStack,this._evaluationStack=q.JArrayToRuntimeObjList(n.evalStack);let a=n.currentDivertTarget;if(null!=a){let t=new e(a.toString());this.divertedPointer=this.story.PointerAtPath(t)}this._visitCounts=q.JObjectToIntDictionary(n.visitCounts),this._turnIndices=q.JObjectToIntDictionary(n.turnIndices),this.currentTurnIndex=parseInt(n.turnIdx),this.storySeed=parseInt(n.storySeed),this.previousRandom=parseInt(n.previousRandom)}ResetErrors(){this._currentErrors=null,this._currentWarnings=null}ResetOutput(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.outputStream.length=0,null!==t&&this.outputStream.push(...t),this.OutputStreamDirty()}PushToOutputStream(t){let e=s(t,E);if(null!==e){let t=this.TrySplittingHeadTailWhitespace(e);if(null!==t){for(let e of t)this.PushToOutputStreamIndividual(e);return void this.OutputStreamDirty()}}this.PushToOutputStreamIndividual(t),this.OutputStreamDirty()}PopFromOutputStream(t){this.outputStream.splice(this.outputStream.length-t,t),this.OutputStreamDirty()}TrySplittingHeadTailWhitespace(t){let e=t.value;if(null===e)return p("single.value");let n=-1,i=-1;for(let t=0;t=0;t--){let n=e[t];if("\n"!=n){if(" "==n||"\t"==n)continue;break}-1==r&&(r=t),a=t}if(-1==n&&-1==r)return null;let s=[],l=0,o=e.length;if(-1!=n){if(n>0){let t=new E(e.substring(0,n));s.push(t)}s.push(new E("\n")),l=i+1}if(-1!=r&&(o=a),o>l){let t=e.substring(l,o);s.push(new E(t))}if(-1!=r&&a>i&&(s.push(new E("\n")),r=0;e--){let n=this.outputStream[e],i=n instanceof k?n:null;if(null!=(n instanceof I?n:null)){a=e;break}if(null!=i&&i.commandType==k.CommandType.BeginString){e>=t&&(t=-1);break}}let s=-1;if(s=-1!=a&&-1!=t?Math.min(t,a):-1!=a?a:t,-1!=s){if(n.isNewline)i=!1;else if(n.isNonWhitespace&&(a>-1&&this.RemoveExistingGlue(),t>-1)){let t=this.callStack.elements;for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!=r.Function)break;n.functionStartInOutputStream=-1}}}else n.isNewline&&(!this.outputStreamEndsInNewline&&this.outputStreamContainsContent||(i=!1))}if(i){if(null===t)return p("obj");this.outputStream.push(t),this.OutputStreamDirty()}}TrimNewlinesFromOutputStream(){let t=-1,e=this.outputStream.length-1;for(;e>=0;){let n=this.outputStream[e],i=s(n,k),r=s(n,E);if(null!=i||null!=r&&r.isNonWhitespace)break;null!=r&&r.isNewline&&(t=e),e--}if(t>=0)for(e=t;e=0;t--){let e=this.outputStream[t];if(e instanceof I)this.outputStream.splice(t,1);else if(e instanceof k)break}this.OutputStreamDirty()}get outputStreamEndsInNewline(){if(this.outputStream.length>0)for(let t=this.outputStream.length-1;t>=0;t--){if(this.outputStream[t]instanceof k)break;let e=this.outputStream[t];if(e instanceof E){if(e.isNewline)return!0;if(e.isNonWhitespace)break}}return!1}get outputStreamContainsContent(){for(let t of this.outputStream)if(t instanceof E)return!0;return!1}get inStringEvaluation(){for(let t=this.outputStream.length-1;t>=0;t--){let e=s(this.outputStream[t],k);if(e instanceof k&&e.commandType==k.CommandType.BeginString)return!0}return!1}PushEvaluationStack(t){let e=s(t,O);if(e){let t=e.value;if(null===t)return p("rawList");if(null!=t.originNames){t.origins||(t.origins=[]),t.origins.length=0;for(let e of t.originNames){if(null===this.story.listDefinitions)return p("StoryState.story.listDefinitions");let n=this.story.listDefinitions.TryListGetDefinition(e,null);if(null===n.result)return p("StoryState def.result");t.origins.indexOf(n.result)<0&&t.origins.push(n.result)}}}if(null===t)return p("obj");this.evaluationStack.push(t)}PopEvaluationStack(t){if(void 0===t){return h(this.evaluationStack.pop())}if(t>this.evaluationStack.length)throw new Error("trying to pop too many objects");return h(this.evaluationStack.splice(this.evaluationStack.length-t,t))}PeekEvaluationStack(){return this.evaluationStack[this.evaluationStack.length-1]}ForceEnd(){this.callStack.Reset(),this._currentFlow.currentChoices.length=0,this.currentPointer=F.Null,this.previousPointer=F.Null,this.didSafeExit=!0}TrimWhitespaceFromFunctionEnd(){n.Assert(this.callStack.currentElement.type==r.Function);let t=this.callStack.currentElement.functionStartInOutputStream;-1==t&&(t=0);for(let e=this.outputStream.length-1;e>=t;e--){let t=this.outputStream[e],n=s(t,E),i=s(t,k);if(null!=n){if(i)break;if(!n.isNewline&&!n.isInlineWhitespace)break;this.outputStream.splice(e,1),this.OutputStreamDirty()}}}PopCallStack(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.callStack.currentElement.type==r.Function&&this.TrimWhitespaceFromFunctionEnd(),this.callStack.Pop(t)}SetChosenPath(t,e){this._currentFlow.currentChoices.length=0;let n=this.story.PointerAtPath(t);n.isNull||-1!=n.index||(n.index=0),this.currentPointer=n,e&&this.currentTurnIndex++}StartFunctionEvaluationFromGame(t,e){this.callStack.Push(r.FunctionEvaluationFromGame,this.evaluationStack.length),this.callStack.currentElement.currentPointer=F.StartOf(t),this.PassArgumentsToEvaluationStack(e)}PassArgumentsToEvaluationStack(t){if(null!==t)for(let e=0;et;){let t=this.PopEvaluationStack();null===e&&(e=t)}if(this.PopCallStack(r.FunctionEvaluationFromGame),e){if(e instanceof D)return null;let t=l(e,b);return t.valueType==i.DivertTarget?t.valueObject.toString():t.valueObject}return null}AddError(t,e){e?(null==this._currentWarnings&&(this._currentWarnings=[]),this._currentWarnings.push(t)):(null==this._currentErrors&&(this._currentErrors=[]),this._currentErrors.push(t))}OutputStreamDirty(){this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0}}class Q{constructor(){this.startTime=void 0}get ElapsedMilliseconds(){return void 0===this.startTime?0:(new Date).getTime()-this.startTime}Start(){this.startTime=(new Date).getTime()}Stop(){this.startTime=void 0}}!function(t){t[t.Author=0]="Author",t[t.Warning=1]="Warning",t[t.Error=2]="Error"}(a||(a={})),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&t>-9007199254740992&&t<9007199254740992&&Math.floor(t)===t});class Z extends m{get currentChoices(){let t=[];if(null===this._state)return p("this._state");for(let e of this._state.currentChoices)e.isInvisibleDefault||(e.index=t.length,t.push(e));return t}get currentText(){return this.IfAsyncWeCant("call currentText since it's a work in progress"),this.state.currentText}get currentTags(){return this.IfAsyncWeCant("call currentTags since it's a work in progress"),this.state.currentTags}get currentErrors(){return this.state.currentErrors}get currentWarnings(){return this.state.currentWarnings}get currentFlowName(){return this.state.currentFlowName}get currentFlowIsDefaultFlow(){return this.state.currentFlowIsDefaultFlow}get aliveFlowNames(){return this.state.aliveFlowNames}get hasError(){return this.state.hasError}get hasWarning(){return this.state.hasWarning}get variablesState(){return this.state.variablesState}get listDefinitions(){return this._listDefinitions}get state(){return this._state}StartProfiling(){}EndProfiling(){}constructor(){let t;super(),this.inkVersionMinimumCompatible=18,this.onError=null,this.onDidContinue=null,this.onMakeChoice=null,this.onEvaluateFunction=null,this.onCompleteEvaluateFunction=null,this.onChoosePathString=null,this._prevContainers=[],this.allowExternalFunctionFallbacks=!1,this._listDefinitions=null,this._variableObservers=null,this._hasValidatedExternals=!1,this._temporaryEvaluationContainer=null,this._asyncContinueActive=!1,this._stateSnapshotAtLastNewline=null,this._sawLookaheadUnsafeFunctionAfterNewline=!1,this._recursiveContinueCount=0,this._asyncSaving=!1,this._profiler=null;let e=null,n=null;if(arguments[0]instanceof x)t=arguments[0],void 0!==arguments[1]&&(e=arguments[1]),this._mainContentContainer=t;else if("string"==typeof arguments[0]){let t=arguments[0];n=X.TextToDictionary(t)}else n=arguments[0];if(null!=e&&(this._listDefinitions=new J(e)),this._externals=new Map,null!==n){let t=n,e=t.inkVersion;if(null==e)throw new Error("ink version number not found. Are you sure it's a valid .ink.json file?");let i=parseInt(e);if(i>Z.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(iq.WriteRuntimeContainer(t,this._mainContentContainer))),null!=this._listDefinitions){t.WritePropertyStart("listDefs"),t.WriteObjectStart();for(let e of this._listDefinitions.lists){t.WritePropertyStart(e.name),t.WriteObjectStart();for(let[n,i]of e.items){let e=g.fromSerializedKey(n),r=i;t.WriteIntProperty(e.itemName,r)}t.WriteObjectEnd(),t.WritePropertyEnd()}t.WriteObjectEnd(),t.WritePropertyEnd()}if(t.WriteObjectEnd(),e)return t.toString()}ResetState(){this.IfAsyncWeCant("ResetState"),this._state=new Y(this),this._state.variablesState.ObserveVariableChange(this.VariableStateDidChangeEvent.bind(this)),this.ResetGlobals()}ResetErrors(){if(null===this._state)return p("this._state");this._state.ResetErrors()}ResetCallstack(){if(this.IfAsyncWeCant("ResetCallstack"),null===this._state)return p("this._state");this._state.ForceEnd()}ResetGlobals(){if(this._mainContentContainer.namedContent.get("global decl")){let t=this.state.currentPointer.copy();this.ChoosePath(new e("global decl"),!1),this.ContinueInternal(),this.state.currentPointer=t}this.state.variablesState.SnapshotDefaultGlobals()}SwitchFlow(t){if(this.IfAsyncWeCant("switch flow"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't switch flow to "+t);this.state.SwitchFlow_Internal(t)}RemoveFlow(t){this.state.RemoveFlow_Internal(t)}SwitchToDefaultFlow(){this.state.SwitchToDefaultFlow_Internal()}Continue(){return this.ContinueAsync(0),this.currentText}get canContinue(){return this.state.canContinue}get asyncContinueComplete(){return!this._asyncContinueActive}ContinueAsync(t){this._hasValidatedExternals||this.ValidateExternalBindings(),this.ContinueInternal(t)}ContinueInternal(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;null!=this._profiler&&this._profiler.PreContinue();let e=t>0;if(this._recursiveContinueCount++,!this._asyncContinueActive){if(this._asyncContinueActive=e,!this.canContinue)throw new Error("Can't continue - should check canContinue before calling Continue");this._state.didSafeExit=!1,this._state.ResetOutput(),1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!0)}let n=new Q;n.Start();let i=!1;this._sawLookaheadUnsafeFunctionAfterNewline=!1;do{try{i=this.ContinueSingleStep()}catch(t){if(!(t instanceof y))throw t;this.AddError(t.message,void 0,t.useEndLineNumber);break}if(i)break;if(this._asyncContinueActive&&n.ElapsedMilliseconds>t)break}while(this.canContinue);if(n.Stop(),!i&&this.canContinue||(null!==this._stateSnapshotAtLastNewline&&this.RestoreStateSnapshot(),this.canContinue||(this.state.callStack.canPopThread&&this.AddError("Thread available to pop, threads should always be flat by the end of evaluation?"),0!=this.state.generatedChoices.length||this.state.didSafeExit||null!=this._temporaryEvaluationContainer||(this.state.callStack.CanPop(r.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop(r.Function)?this.AddError("unexpectedly reached end of content. Do you need a '~ return'?"):this.state.callStack.canPop?this.AddError("unexpectedly reached end of content for unknown reason. Please debug compiler!"):this.AddError("ran out of content. Do you need a '-> DONE' or '-> END'?"))),this.state.didSafeExit=!1,this._sawLookaheadUnsafeFunctionAfterNewline=!1,1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!1),this._asyncContinueActive=!1,null!==this.onDidContinue&&this.onDidContinue()),this._recursiveContinueCount--,null!=this._profiler&&this._profiler.PostContinue(),this.state.hasError||this.state.hasWarning){if(null===this.onError){let t=new f;throw t.Append("Ink had "),this.state.hasError&&(t.Append("".concat(this.state.currentErrors.length)),t.Append(1==this.state.currentErrors.length?" error":"errors"),this.state.hasWarning&&t.Append(" and ")),this.state.hasWarning&&(t.Append("".concat(this.state.currentWarnings.length)),t.Append(1==this.state.currentWarnings.length?" warning":"warnings"),this.state.hasWarning&&t.Append(" and ")),t.Append(". It is strongly suggested that you assign an error handler to story.onError. The first issue was: "),t.Append(this.state.hasError?this.state.currentErrors[0]:this.state.currentWarnings[0]),new y(t.toString())}if(this.state.hasError)for(let t of this.state.currentErrors)this.onError(t,a.Error);if(this.state.hasWarning)for(let t of this.state.currentWarnings)this.onError(t,a.Warning);this.ResetErrors()}}ContinueSingleStep(){if(null!=this._profiler&&this._profiler.PreStep(),this.Step(),null!=this._profiler&&this._profiler.PostStep(),this.canContinue||this.state.callStack.elementIsEvaluateFromGame||this.TryFollowDefaultInvisibleChoice(),null!=this._profiler&&this._profiler.PreSnapshot(),!this.state.inStringEvaluation){if(null!==this._stateSnapshotAtLastNewline){if(null===this._stateSnapshotAtLastNewline.currentTags)return p("this._stateAtLastNewline.currentTags");if(null===this.state.currentTags)return p("this.state.currentTags");let t=this.CalculateNewlineOutputStateChange(this._stateSnapshotAtLastNewline.currentText,this.state.currentText,this._stateSnapshotAtLastNewline.currentTags.length,this.state.currentTags.length);if(t==Z.OutputStateChange.ExtendedBeyondNewline||this._sawLookaheadUnsafeFunctionAfterNewline)return this.RestoreStateSnapshot(),!0;t==Z.OutputStateChange.NewlineRemoved&&this.DiscardSnapshot()}this.state.outputStreamEndsInNewline&&(this.canContinue?null==this._stateSnapshotAtLastNewline&&this.StateSnapshot():this.DiscardSnapshot())}return null!=this._profiler&&this._profiler.PostSnapshot(),!1}CalculateNewlineOutputStateChange(t,e,n,i){if(null===t)return p("prevText");if(null===e)return p("currText");let r=e.length>=t.length&&t.length>0&&"\n"==e.charAt(t.length-1);if(n==i&&t.length==e.length&&r)return Z.OutputStateChange.NoChange;if(!r)return Z.OutputStateChange.NewlineRemoved;if(i>n)return Z.OutputStateChange.ExtendedBeyondNewline;for(let n=t.length;n0?this.Error("Failed to find content at path '"+t+"', and no approximation of it was possible."):i.approximate&&this.Warning("Failed to find content at path '"+t+"', so it was approximated to: '"+i.obj.path+"'."),e)}StateSnapshot(){this._stateSnapshotAtLastNewline=this._state,this._state=this._state.CopyAndStartPatching()}RestoreStateSnapshot(){null===this._stateSnapshotAtLastNewline&&p("_stateSnapshotAtLastNewline"),this._stateSnapshotAtLastNewline.RestoreAfterPatch(),this._state=this._stateSnapshotAtLastNewline,this._stateSnapshotAtLastNewline=null,this._asyncSaving||this._state.ApplyAnyPatch()}DiscardSnapshot(){this._asyncSaving||this._state.ApplyAnyPatch(),this._stateSnapshotAtLastNewline=null}CopyStateForBackgroundThreadSave(){if(this.IfAsyncWeCant("start saving on a background thread"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!");let t=this._state;return this._state=this._state.CopyAndStartPatching(),this._asyncSaving=!0,t}BackgroundSaveComplete(){null===this._stateSnapshotAtLastNewline&&this._state.ApplyAnyPatch(),this._asyncSaving=!1}Step(){let t=!0,e=this.state.currentPointer.copy();if(e.isNull)return;let n=s(e.Resolve(),x);for(;n&&(this.VisitContainer(n,!0),0!=n.content.length);)e=F.StartOf(n),n=s(e.Resolve(),x);this.state.currentPointer=e.copy(),null!=this._profiler&&this._profiler.Step(this.state.callStack);let i=e.Resolve(),r=this.PerformLogicAndFlowControl(i);if(this.state.currentPointer.isNull)return;r&&(t=!1);let a=s(i,V);if(a){let e=this.ProcessChoice(a);e&&this.state.generatedChoices.push(e),i=null,t=!1}if(i instanceof x&&(t=!1),t){let t=s(i,N);if(t&&-1==t.contextIndex){let e=this.state.callStack.ContextForVariableNamed(t.variableName);i=new N(t.variableName,e)}this.state.inExpressionEvaluation?this.state.PushEvaluationStack(i):this.state.PushToOutputStream(i)}this.NextContent();let l=s(i,k);l&&l.commandType==k.CommandType.StartThread&&this.state.callStack.PushThread()}VisitContainer(t,e){t.countingAtStartOnly&&!e||(t.visitsShouldBeCounted&&this.state.IncrementVisitCountForContainer(t),t.turnIndexShouldBeCounted&&this.state.RecordTurnIndexVisitToContainer(t))}VisitChangedContainersDueToDivert(){let t=this.state.previousPointer.copy(),e=this.state.currentPointer.copy();if(e.isNull||-1==e.index)return;if(this._prevContainers.length=0,!t.isNull){let e=s(t.Resolve(),x)||s(t.container,x);for(;e;)this._prevContainers.push(e),e=s(e.parent,x)}let n=e.Resolve();if(null==n)return;let i=s(n.parent,x),r=!0;for(;i&&(this._prevContainers.indexOf(i)<0||i.countingAtStartOnly);){let t=i.content.length>0&&n==i.content[0]&&r;t||(r=!1),this.VisitContainer(i,t),n=i,i=s(i.parent,x)}}PopChoiceStringAndTags(t){let e=l(this.state.PopEvaluationStack(),E);for(;this.state.evaluationStack.length>0&&null!=s(this.state.PeekEvaluationStack(),B);){let e=s(this.state.PopEvaluationStack(),B);e&&t.push(e.text)}return e.value}ProcessChoice(t){let e=!0;if(t.hasCondition){let t=this.state.PopEvaluationStack();this.IsTruthy(t)||(e=!1)}let n="",i="",r=[];if(t.hasChoiceOnlyContent&&(i=this.PopChoiceStringAndTags(r)||""),t.hasStartContent&&(n=this.PopChoiceStringAndTags(r)||""),t.onceOnly){this.state.VisitCountForContainer(t.choiceTarget)>0&&(e=!1)}if(!e)return null;let a=new G;return a.targetPath=t.pathOnChoice,a.sourcePath=t.path.toString(),a.isInvisibleDefault=t.isInvisibleDefault,a.threadAtGeneration=this.state.callStack.ForkThread(),a.tags=r.reverse(),a.text=(n+i).replace(/^[ \t]+|[ \t]+$/g,""),a}IsTruthy(t){if(t instanceof b){let e=t;if(e instanceof P){let t=e;return this.Error("Shouldn't use a divert target (to "+t.targetPath+") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)"),!1}return e.isTruthy}return!1}PerformLogicAndFlowControl(t){if(null==t)return!1;if(t instanceof W){let e=t;if(e.isConditional){let t=this.state.PopEvaluationStack();if(!this.IsTruthy(t))return!0}if(e.hasVariableTarget){let t=e.variableDivertName,n=this.state.variablesState.GetVariableWithName(t);if(null==n)this.Error("Tried to divert using a target from a variable that could not be found ("+t+")");else if(!(n instanceof P)){let e=s(n,w),i="Tried to divert to a target from a variable, but the variable ("+t+") didn't contain a divert target, it ";e instanceof w&&0==e.value?i+="was empty/null (the value 0).":i+="contained '"+n+"'.",this.Error(i)}let i=l(n,P);this.state.divertedPointer=this.PointerAtPath(i.targetPath)}else{if(e.isExternal)return this.CallExternalFunction(e.targetPathString,e.externalArgs),!0;this.state.divertedPointer=e.targetPointer.copy()}return e.pushesToStack&&this.state.callStack.Push(e.stackPushType,void 0,this.state.outputStream.length),this.state.divertedPointer.isNull&&!e.isExternal&&(e&&e.debugMetadata&&null!=e.debugMetadata.sourceName?this.Error("Divert target doesn't exist: "+e.debugMetadata.sourceName):this.Error("Divert resolution failed: "+e)),!0}if(t instanceof k){let e=t;switch(e.commandType){case k.CommandType.EvalStart:this.Assert(!1===this.state.inExpressionEvaluation,"Already in expression evaluation?"),this.state.inExpressionEvaluation=!0;break;case k.CommandType.EvalEnd:this.Assert(!0===this.state.inExpressionEvaluation,"Not in expression evaluation mode"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.EvalOutput:if(this.state.evaluationStack.length>0){let t=this.state.PopEvaluationStack();if(!(t instanceof D)){let e=new E(t.toString());this.state.PushToOutputStream(e)}}break;case k.CommandType.NoOp:break;case k.CommandType.Duplicate:this.state.PushEvaluationStack(this.state.PeekEvaluationStack());break;case k.CommandType.PopEvaluatedValue:this.state.PopEvaluationStack();break;case k.CommandType.PopFunction:case k.CommandType.PopTunnel:let t=e.commandType==k.CommandType.PopFunction?r.Function:r.Tunnel,n=null;if(t==r.Tunnel){let t=this.state.PopEvaluationStack();n=s(t,P),null===n&&this.Assert(t instanceof D,"Expected void if ->-> doesn't override target")}if(this.state.TryExitFunctionEvaluationFromGame())break;if(this.state.callStack.currentElement.type==t&&this.state.callStack.canPop)this.state.PopCallStack(),n&&(this.state.divertedPointer=this.PointerAtPath(n.targetPath));else{let e=new Map;e.set(r.Function,"function return statement (~ return)"),e.set(r.Tunnel,"tunnel onwards statement (->->)");let n=e.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(n="end of flow (-> END or choice)");let i="Found "+e.get(t)+", when expected "+n;this.Error(i)}break;case k.CommandType.BeginString:this.state.PushToOutputStream(e),this.Assert(!0===this.state.inExpressionEvaluation,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.BeginTag:this.state.PushToOutputStream(e);break;case k.CommandType.EndTag:if(this.state.inStringEvaluation){let t=[],e=0;for(let n=this.state.outputStream.length-1;n>=0;--n){let i=this.state.outputStream[n];e++;let r=s(i,k);if(null!=r){if(r.commandType==k.CommandType.BeginTag)break;this.Error("Unexpected ControlCommand while extracting tag from choice");break}i instanceof E&&t.push(i)}this.state.PopFromOutputStream(e);let n=new f;for(let e of t.reverse())n.Append(e.toString());let i=new B(this.state.CleanOutputWhitespace(n.toString()));this.state.PushEvaluationStack(i)}else this.state.PushToOutputStream(e);break;case k.CommandType.EndString:{let t=[],e=[],n=0;for(let i=this.state.outputStream.length-1;i>=0;--i){let r=this.state.outputStream[i];n++;let a=s(r,k);if(a&&a.commandType==k.CommandType.BeginString)break;r instanceof B&&e.push(r),r instanceof E&&t.push(r)}this.state.PopFromOutputStream(n);for(let t of e)this.state.PushToOutputStream(t);t=t.reverse();let i=new f;for(let e of t)i.Append(e.toString());this.state.inExpressionEvaluation=!0,this.state.PushEvaluationStack(new E(i.toString()));break}case k.CommandType.ChoiceCount:let i=this.state.generatedChoices.length;this.state.PushEvaluationStack(new w(i));break;case k.CommandType.Turns:this.state.PushEvaluationStack(new w(this.state.currentTurnIndex+1));break;case k.CommandType.TurnsSince:case k.CommandType.ReadCount:let a=this.state.PopEvaluationStack();if(!(a instanceof P)){let t="";a instanceof w&&(t=". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?"),this.Error("TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw "+a+t);break}let o,h=l(a,P),u=s(this.ContentAtPath(h.targetPath).correctObj,x);null!=u?o=e.commandType==k.CommandType.TurnsSince?this.state.TurnsSinceForContainer(u):this.state.VisitCountForContainer(u):(o=e.commandType==k.CommandType.TurnsSince?-1:0,this.Warning("Failed to find container for "+e.toString()+" lookup at "+h.targetPath.toString())),this.state.PushEvaluationStack(new w(o));break;case k.CommandType.Random:{let t=s(this.state.PopEvaluationStack(),w),e=s(this.state.PopEvaluationStack(),w);if(null==e||e instanceof w==!1)return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(null==t||t instanceof w==!1)return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(null===t.value)return p("maxInt.value");if(null===e.value)return p("minInt.value");let n=t.value-e.value+1;(!isFinite(n)||n>Number.MAX_SAFE_INTEGER)&&(n=Number.MAX_SAFE_INTEGER,this.Error("RANDOM was called with a range that exceeds the size that ink numbers can use.")),n<=0&&this.Error("RANDOM was called with minimum as "+e.value+" and maximum as "+t.value+". The maximum must be larger");let i=this.state.storySeed+this.state.previousRandom,r=new z(i).next(),a=r%n+e.value;this.state.PushEvaluationStack(new w(a)),this.state.previousRandom=r;break}case k.CommandType.SeedRandom:let c=s(this.state.PopEvaluationStack(),w);if(null==c||c instanceof w==!1)return this.Error("Invalid value passed to SEED_RANDOM");if(null===c.value)return p("minInt.value");this.state.storySeed=c.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new D);break;case k.CommandType.VisitIndex:let d=this.state.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new w(d));break;case k.CommandType.SequenceShuffleIndex:let m=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new w(m));break;case k.CommandType.StartThread:break;case k.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=!0,this.state.currentPointer=F.Null);break;case k.CommandType.End:this.state.ForceEnd();break;case k.CommandType.ListFromInt:let v=s(this.state.PopEvaluationStack(),w),C=l(this.state.PopEvaluationStack(),E);if(null===v)throw new y("Passed non-integer when creating a list element from a numerical value.");let _=null;if(null===this.listDefinitions)return p("this.listDefinitions");let T=this.listDefinitions.TryListGetDefinition(C.value,null);if(!T.exists)throw new y("Failed to find LIST called "+C.value);{if(null===v.value)return p("minInt.value");let t=T.result.TryGetItemWithValue(v.value,g.Null);t.exists&&(_=new O(t.result,v.value))}null==_&&(_=new O),this.state.PushEvaluationStack(_);break;case k.CommandType.ListRange:let N=s(this.state.PopEvaluationStack(),b),A=s(this.state.PopEvaluationStack(),b),I=s(this.state.PopEvaluationStack(),O);if(null===I||null===A||null===N)throw new y("Expected list, minimum and maximum for LIST_RANGE");if(null===I.value)return p("targetList.value");let W=I.value.ListWithSubRange(A.valueObject,N.valueObject);this.state.PushEvaluationStack(new O(W));break;case k.CommandType.ListRandom:{let t=this.state.PopEvaluationStack();if(null===t)throw new y("Expected list for LIST_RANDOM");let e=t.value,n=null;if(null===e)throw p("list");if(0==e.Count)n=new S;else{let t=this.state.storySeed+this.state.previousRandom,i=new z(t).next(),r=i%e.Count,a=e.entries();for(let t=0;t<=r-1;t++)a.next();let s=a.next().value,l={Key:g.fromSerializedKey(s[0]),Value:s[1]};if(null===l.Key.originName)return p("randomItem.Key.originName");n=new S(l.Key.originName,this),n.Add(l.Key,l.Value),this.state.previousRandom=i}this.state.PushEvaluationStack(new O(n));break}default:this.Error("unhandled ControlCommand: "+e)}return!0}if(t instanceof R){let e=t,n=this.state.PopEvaluationStack();return this.state.variablesState.Assign(e,n),!0}if(t instanceof L){let e=t,n=null;if(null!=e.pathForCount){let t=e.containerForCount,i=this.state.VisitCountForContainer(t);n=new w(i)}else n=this.state.variablesState.GetVariableWithName(e.name),null==n&&(this.Warning("Variable not found: '"+e.name+"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit. Globals are always given a default value on load if a value doesn't exist in the save state."),n=new w(0));return this.state.PushEvaluationStack(n),!0}if(t instanceof j){let e=t,n=this.state.PopEvaluationStack(e.numberOfParameters),i=e.Call(n);return this.state.PushEvaluationStack(i),!0}return!1}ChoosePathString(t){let n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(this.IfAsyncWeCant("call ChoosePathString right now"),null!==this.onChoosePathString&&this.onChoosePathString(t,i),n)this.ResetCallstack();else if(this.state.callStack.currentElement.type==r.Function){let e="",n=this.state.callStack.currentElement.currentPointer.container;throw null!=n&&(e="("+n.path.toString()+") "),new Error("Story was running a function "+e+"when you called ChoosePathString("+t+") - this is almost certainly not not what you want! Full stack trace: \n"+this.state.callStack.callStackTrace)}this.state.PassArgumentsToEvaluationStack(i),this.ChoosePath(new e(t))}IfAsyncWeCant(t){if(this._asyncContinueActive)throw new Error("Can't "+t+". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.")}ChoosePath(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.state.SetChosenPath(t,e),this.VisitChangedContainersDueToDivert()}ChooseChoiceIndex(t){let e=this.currentChoices;this.Assert(t>=0&&t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!==this.onEvaluateFunction&&this.onEvaluateFunction(t,e),this.IfAsyncWeCant("evaluate a function"),null==t)throw new Error("Function is null");if(""==t||""==t.trim())throw new Error("Function is empty or white space.");let i=this.KnotContainerWithName(t);if(null==i)throw new Error("Function doesn't exist: '"+t+"'");let r=[];r.push(...this.state.outputStream),this._state.ResetOutput(),this.state.StartFunctionEvaluationFromGame(i,e);let a=new f;for(;this.canContinue;)a.Append(this.Continue());let s=a.toString();this._state.ResetOutput(r);let l=this.state.CompleteFunctionEvaluationFromGame();return null!=this.onCompleteEvaluateFunction&&this.onCompleteEvaluateFunction(t,e,s,l),n?{returned:l,output:s}:l}EvaluateExpression(t){let e=this.state.callStack.elements.length;this.state.callStack.Push(r.Tunnel),this._temporaryEvaluationContainer=t,this.state.GoToStart();let n=this.state.evaluationStack.length;return this.Continue(),this._temporaryEvaluationContainer=null,this.state.callStack.elements.length>e&&this.state.PopCallStack(),this.state.evaluationStack.length>n?this.state.PopEvaluationStack():null}CallExternalFunction(t,e){if(null===t)return p("funcName");let n=this._externals.get(t),i=null,a=void 0!==n;if(a&&!n.lookAheadSafe&&null!==this._stateSnapshotAtLastNewline)return void(this._sawLookaheadUnsafeFunctionAfterNewline=!0);if(!a){if(this.allowExternalFunctionFallbacks)return i=this.KnotContainerWithName(t),this.Assert(null!==i,"Trying to call EXTERNAL function '"+t+"' which has not been bound, and fallback ink function could not be found."),this.state.callStack.Push(r.Function,void 0,this.state.outputStream.length),void(this.state.divertedPointer=F.StartOf(i));this.Assert(!1,"Trying to call EXTERNAL function '"+t+"' which has not been bound (and ink fallbacks disabled).")}let s=[];for(let t=0;t2&&void 0!==arguments[2])||arguments[2];this.IfAsyncWeCant("bind an external function"),this.Assert(!this._externals.has(t),"Function '"+t+"' has already been bound."),this._externals.set(t,{function:e,lookAheadSafe:n})}TryCoerce(t){return t}BindExternalFunction(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.Assert(null!=e,"Can't bind a null function"),this.BindExternalFunctionGeneral(t,(t=>{this.Assert(t.length>=e.length,"External function expected "+e.length+" arguments");let n=[];for(let e=0,i=t.length;e1?"s":"",t+=": '",t+=Array.from(n).join("', '"),t+="' ",t+=this.allowExternalFunctionFallbacks?", and no fallback ink function found.":" (ink fallbacks disabled)",this.Error(t)}else if(null!=t){for(let e of t.content){null!=e&&e.hasValidName||this.ValidateExternalBindings(e,n)}for(let[,e]of t.namedContent)this.ValidateExternalBindings(s(e,m),n)}else if(null!=e){let t=s(e,W);if(t&&t.isExternal){let e=t.targetPathString;if(null===e)return p("name");if(!this._externals.has(e))if(this.allowExternalFunctionFallbacks){this.mainContentContainer.namedContent.has(e)||n.add(e)}else n.add(e)}}}ObserveVariable(t,e){if(this.IfAsyncWeCant("observe a new variable"),null===this._variableObservers&&(this._variableObservers=new Map),!this.state.variablesState.GlobalVariableExistsWithName(t))throw new Error("Cannot observe variable '"+t+"' because it wasn't declared in the ink story.");this._variableObservers.has(t)?this._variableObservers.get(t).push(e):this._variableObservers.set(t,[e])}ObserveVariables(t,e){for(let n=0,i=t.length;n=e.container.content.length;){t=!1;let n=s(e.container.parent,x);if(n instanceof x==!1)break;let i=n.content.indexOf(e.container);if(-1==i)break;if(e=new F(n,i),e.index++,t=!0,null===e.container)return p("pointer.container")}return t||(e=F.Null),this.state.callStack.currentElement.currentPointer=e.copy(),t}TryFollowDefaultInvisibleChoice(){let t=this._state.currentChoices,e=t.filter((t=>t.isInvisibleDefault));if(0==e.length||t.length>e.length)return!1;let n=e[0];return null===n.targetPath?p("choice.targetPath"):null===n.threadAtGeneration?p("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,null!==this._stateSnapshotAtLastNewline&&(this.state.callStack.currentThread=this.state.callStack.ForkThread()),this.ChoosePath(n.targetPath,!1),!0)}NextSequenceShuffleIndex(){let t=s(this.state.PopEvaluationStack(),w);if(!(t instanceof w))return this.Error("expected number of elements in sequence for shuffle index"),0;let e=this.state.currentPointer.container;if(null===e)return p("seqContainer");if(null===t.value)return p("numElementsIntVal.value");let n=t.value,i=l(this.state.PopEvaluationStack(),w).value;if(null===i)return p("seqCount");let r=i/n,a=i%n,o=e.path.toString(),h=0;for(let t=0,e=o.length;t1&&void 0!==arguments[1]&&arguments[1],n=new y(t);throw n.useEndLineNumber=e,n}Warning(t){this.AddError(t,!0)}AddError(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.currentDebugMetadata,r=e?"WARNING":"ERROR";if(null!=i){let e=n?i.endLineNumber:i.startLineNumber;t="RUNTIME "+r+": '"+i.fileName+"' line "+e+": "+t}else t=this.state.currentPointer.isNull?"RUNTIME "+r+": "+t:"RUNTIME "+r+": ("+this.state.currentPointer+"): "+t;this.state.AddError(t,e),e||this.state.ForceEnd()}Assert(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==t)throw null==e&&(e="Story assert"),new Error(e+" "+this.currentDebugMetadata)}get currentDebugMetadata(){let t,e=this.state.currentPointer;if(!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let n=this.state.callStack.elements.length-1;n>=0;--n)if(e=this.state.callStack.elements[n].currentPointer,!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let e=this.state.outputStream.length-1;e>=0;--e){if(t=this.state.outputStream[e].debugMetadata,null!==t)return t}return null}get mainContentContainer(){return this._temporaryEvaluationContainer?this._temporaryEvaluationContainer:this._mainContentContainer}}Z.inkVersionCurrent=21,function(t){var e;(e=t.OutputStateChange||(t.OutputStateChange={}))[e.NoChange=0]="NoChange",e[e.ExtendedBeyondNewline=1]="ExtendedBeyondNewline",e[e.NewlineRemoved=2]="NewlineRemoved"}(Z||(Z={})),t.InkList=S,t.Story=Z,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=ink.js.map diff --git a/ruixi/ruixi/main.js b/ruixi/ruixi/main.js deleted file mode 100644 index f46a338..0000000 --- a/ruixi/ruixi/main.js +++ /dev/null @@ -1,439 +0,0 @@ -(function(storyContent) { - - // Create ink story from the content using inkjs - var story = new inkjs.Story(storyContent); - - var savePoint = ""; - - let savedTheme; - let globalTagTheme; - - // Global tags - those at the top of the ink file - // We support: - // # theme: dark - // # author: Your Name - var globalTags = story.globalTags; - if( globalTags ) { - for(var i=0; i { - console.log(`scrollingto ${previousBottomEdge}`) - scrollDown(previousBottomEdge) - } - - showAfter(delay, imageElement); - delay += 200.0; - } - - // LINK: url - else if( splitTag && splitTag.property == "LINK" ) { - window.location.href = splitTag.val; - } - - // LINKOPEN: url - else if( splitTag && splitTag.property == "LINKOPEN" ) { - window.open(splitTag.val); - } - - // BACKGROUND: src - else if( splitTag && splitTag.property == "BACKGROUND" ) { - outerScrollContainer.style.backgroundImage = 'url('+splitTag.val+')'; - } - - // CLASS: className - else if( splitTag && splitTag.property == "CLASS" ) { - customClasses.push(splitTag.val); - } - - // CLEAR - removes all existing content. - // RESTART - clears everything and restarts the story from the beginning - else if( tag == "CLEAR" || tag == "RESTART" ) { - removeAll("p"); - removeAll("img"); - - // Comment out this line if you want to leave the header visible when clearing - setVisible(".header", false); - - if( tag == "RESTART" ) { - restart(); - return; - } - } - } - - // Check if paragraphText is empty - if (paragraphText.trim().length == 0) { - continue; // Skip empty paragraphs - } - - // Create paragraph element (initially hidden) - var paragraphElement = document.createElement('p'); - paragraphElement.innerHTML = paragraphText; - storyContainer.appendChild(paragraphElement); - - // Add any custom classes derived from ink tags - for(var i=0; i${choice.text}` - }else{ - choiceParagraphElement.innerHTML = `${choice.text}` - } - storyContainer.appendChild(choiceParagraphElement); - - // Fade choice in after a short delay - showAfter(delay, choiceParagraphElement); - delay += 200.0; - - // Click on choice - if(isClickable){ - var choiceAnchorEl = choiceParagraphElement.querySelectorAll("a")[0]; - choiceAnchorEl.addEventListener("click", function(event) { - - // Don't follow link - event.preventDefault(); - - // Extend height to fit - // We do this manually so that removing elements and creating new ones doesn't - // cause the height (and therefore scroll) to jump backwards temporarily. - storyContainer.style.height = contentBottomEdgeY()+"px"; - - // Remove all existing choices - removeAll(".choice"); - - // Tell the story where to go next - story.ChooseChoiceIndex(choice.index); - - // This is where the save button will save from - savePoint = story.state.toJson(); - - // Aaand loop - continueStory(); - }); - } - }); - - // Unset storyContainer's height, allowing it to resize itself - storyContainer.style.height = ""; - - if( !firstTime ) - scrollDown(previousBottomEdge); - - } - - function restart() { - story.ResetState(); - - setVisible(".header", true); - - // set save point to here - savePoint = story.state.toJson(); - - continueStory(true); - - outerScrollContainer.scrollTo(0, 0); - } - - // ----------------------------------- - // Various Helper functions - // ----------------------------------- - - // Detects whether the user accepts animations - function isAnimationEnabled() { - return window.matchMedia('(prefers-reduced-motion: no-preference)').matches; - } - - // Fades in an element after a specified delay - function showAfter(delay, el) { - if( isAnimationEnabled() ) { - el.classList.add("hide"); - setTimeout(function() { el.classList.remove("hide") }, delay); - } else { - // If the user doesn't want animations, show immediately - el.classList.remove("hide"); - } - } - - // Scrolls the page down, but no further than the bottom edge of what you could - // see previously, so it doesn't go too far. - function scrollDown(previousBottomEdge) { - // If the user doesn't want animations, let them scroll manually - if ( !isAnimationEnabled() ) { - return; - } - - // Line up top of screen with the bottom of where the previous content ended - var target = previousBottomEdge; - - // Can't go further than the very bottom of the page - var limit = outerScrollContainer.scrollHeight - outerScrollContainer.clientHeight; - if( target > limit ) target = limit; - - var start = outerScrollContainer.scrollTop; - - var dist = target - start; - var duration = 300 + 300*dist/100; - var startTime = null; - function step(time) { - if( startTime == null ) startTime = time; - var t = (time-startTime) / duration; - var lerp = 3*t*t - 2*t*t*t; // ease in/out - outerScrollContainer.scrollTo(0, (1.0-lerp)*start + lerp*target); - if( t < 1 ) requestAnimationFrame(step); - } - requestAnimationFrame(step); - } - - // The Y coordinate of the bottom end of all the story content, used - // for growing the container, and deciding how far to scroll. - function contentBottomEdgeY() { - var bottomElement = storyContainer.lastElementChild; - return bottomElement ? bottomElement.offsetTop + bottomElement.offsetHeight : 0; - } - - // Remove all elements that match the given selector. Used for removing choices after - // you've picked one, as well as for the CLEAR and RESTART tags. - function removeAll(selector) - { - var allElements = storyContainer.querySelectorAll(selector); - for(var i=0; i":"paragraph_2"},{"->":"0.g-0"},{"#f":5}],"g-0":["done",{"#f":5}]}],"done",{"paragraph_2":[["^Out of all people, you had to be the one to discover the body. You want to scream, but you can't, and you know that if you do, there'll be repercussions. The terror feels like daylight beneath your skin in the neon of night.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_3"},{"#f":5}]}],{"#f":1}],"paragraph_3":[["^\"Who could have done this?\" the thought repeats its presence in the white velvet-coated study as the blood crusts slowly to a mediocre brown stain across the parquet floor.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_4"},{"#f":5}]}],{"#f":1}],"paragraph_4":[["^[SEPARATE FRAGMENT]","\n","^Dmitry ran into Katya's mother, Dolores, on the way to the prison. She was silk, saying, \"I thought I meant birth like the apparation of Summer approaching the South, but how wrong I was to give the gift of life to such a cruel woman.\" There she stands with her moon-shaven eyes against the delicately placed watermelons on the table of the street vendor selling fruit.","\n","^\"Are you going to buy anything? I'm about ready to pack up.\" the street vendor said interrupting the intense conversation we were having.","\n","^Dolores's son was originally sent to die in a some unimportant war while her daughter amounted the social ladder to become a laywer with cunning ambition. She was responsible for more executions than holidays in the Hebrew year.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_5"},{"#f":5}]}],{"#f":1}],"paragraph_5":["^[SEPARATE FRAGMENT]","\n","^You spot a black notebook left on the bench by the traintracks. This is nice, to have something to discover. People should leave their belongings in public more often.","\n","^[SEPARATE FRAGMENT]","\n","^Face-down you fall onto the bed into a straight-jacket sleep. Your eyes gently-pressing to the sheets reveal all sorts of hypnagogic decompressions, decompressing into memories that you're not sure you can trust.","\n","end",{"#f":1}],"#f":1}],"listDefs":{}}; \ No newline at end of file diff --git a/ruixi/ruixi/ruixi/index.html b/ruixi/ruixi/ruixi/index.html deleted file mode 100644 index ea0a0b6..0000000 --- a/ruixi/ruixi/ruixi/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - ruixi - - - - - - - - - -
-

WRITTEN IN INK

- -
- restart - save - load - theme -
- -
-
-

ruixi

- -
-
-
- - - - - - diff --git a/ruixi/ruixi/ruixi/ink.js b/ruixi/ruixi/ruixi/ink.js deleted file mode 100644 index 718da43..0000000 --- a/ruixi/ruixi/ruixi/ink.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).inkjs={})}(this,(function(t){"use strict";class e{constructor(){if(this._components=[],this._componentsString=null,this._isRelative=!1,"string"==typeof arguments[0]){let t=arguments[0];this.componentsString=t}else if(arguments[0]instanceof e.Component&&arguments[1]instanceof e){let t=arguments[0],e=arguments[1];this._components.push(t),this._components=this._components.concat(e._components)}else if(arguments[0]instanceof Array){let t=arguments[0],e=!!arguments[1];this._components=this._components.concat(t),this._isRelative=e}}get isRelative(){return this._isRelative}get componentCount(){return this._components.length}get head(){return this._components.length>0?this._components[0]:null}get tail(){if(this._components.length>=2){let t=this._components.slice(1,this._components.length);return new e(t)}return e.self}get length(){return this._components.length}get lastComponent(){let t=this._components.length-1;return t>=0?this._components[t]:null}get containsNamedComponent(){for(let t=0,e=this._components.length;t=0}get isParent(){return this.name==t.parentId}static ToParent(){return new e(t.parentId)}toString(){return this.isIndex?this.index.toString():this.name}Equals(t){return null!=t&&t.isIndex==this.isIndex&&(this.isIndex?this.index==t.index:this.name==t.name)}}t.Component=e}(e||(e={})),function(t){function e(t,e){if(!t)throw void 0!==e&&console.warn(e),console.trace&&console.trace(),new Error("")}t.AssertType=function(t,n,i){e(t instanceof n,i)},t.Assert=e}(n||(n={}));class d extends Error{}function p(t){throw new d("".concat(t," is null or undefined"))}class m{constructor(){this.parent=null,this._debugMetadata=null,this._path=null}get debugMetadata(){return null===this._debugMetadata&&this.parent?this.parent.debugMetadata:this._debugMetadata}set debugMetadata(t){this._debugMetadata=t}get ownDebugMetadata(){return this._debugMetadata}DebugLineNumberOfPath(t){if(null===t)return null;let e=this.rootContentContainer;if(e){let n=e.ContentAtPath(t).obj;if(n){let t=n.debugMetadata;if(null!==t)return t.startLineNumber}}return null}get path(){if(null==this._path)if(null==this.parent)this._path=new e;else{let t=[],n=this,i=s(n.parent,x);for(;null!==i;){let r=o(n);if(null!=r&&r.hasValidName){if(null===r.name)return p("namedChild.name");t.unshift(new e.Component(r.name))}else t.unshift(new e.Component(i.content.indexOf(n)));n=i,i=s(i.parent,x)}this._path=new e(t)}return this._path}ResolvePath(t){if(null===t)return p("path");if(t.isRelative){let e=s(this,x);return null===e&&(n.Assert(null!==this.parent,"Can't resolve relative path because we don't have a parent"),e=s(this.parent,x),n.Assert(null!==e,"Expected parent to be a container"),n.Assert(t.GetComponent(0).isParent),t=t.tail),null===e?p("nearestContainer"):e.ContentAtPath(t)}{let e=this.rootContentContainer;return null===e?p("contentContainer"):e.ContentAtPath(t)}}ConvertPathToRelative(t){let n=this.path,i=Math.min(t.length,n.length),r=-1;for(let e=0;e1?e-1:0),i=1;ivoid 0!==n[e]?n[e]:t))}toString(){return this.string}Clear(){this.string=""}}class g{constructor(){if(this.originName=null,this.itemName=null,void 0!==arguments[1]){let t=arguments[0],e=arguments[1];this.originName=t,this.itemName=e}else if(arguments[0]){let t=arguments[0].toString().split(".");this.originName=t[0],this.itemName=t[1]}}static get Null(){return new g(null,null)}get isNull(){return null==this.originName&&null==this.itemName}get fullName(){return(null!==this.originName?this.originName:"?")+"."+this.itemName}toString(){return this.fullName}Equals(t){if(t instanceof g){let e=t;return e.itemName==this.itemName&&e.originName==this.originName}return!1}copy(){return new g(this.originName,this.itemName)}serialized(){return JSON.stringify({originName:this.originName,itemName:this.itemName})}static fromSerializedKey(t){let e=JSON.parse(t);if(!g.isLikeInkListItem(e))return g.Null;let n=e;return new g(n.originName,n.itemName)}static isLikeInkListItem(t){return"object"==typeof t&&(!(!t.hasOwnProperty("originName")||!t.hasOwnProperty("itemName"))&&(("string"==typeof t.originName||null===typeof t.originName)&&("string"==typeof t.itemName||null===typeof t.itemName)))}}class S extends Map{constructor(){if(super(arguments[0]instanceof S?arguments[0]:[]),this.origins=null,this._originNames=[],arguments[0]instanceof S){let t=arguments[0],e=t.originNames;null!==e&&(this._originNames=e.slice()),null!==t.origins&&(this.origins=t.origins.slice())}else if("string"==typeof arguments[0]){let t=arguments[0],e=arguments[1];if(this.SetInitialOriginName(t),null===e.listDefinitions)return p("originStory.listDefinitions");let n=e.listDefinitions.TryListGetDefinition(t,null);if(!n.exists)throw new Error("InkList origin could not be found in story when constructing new list: "+t);if(null===n.result)return p("def.result");this.origins=[n.result]}else if("object"==typeof arguments[0]&&arguments[0].hasOwnProperty("Key")&&arguments[0].hasOwnProperty("Value")){let t=arguments[0];this.Add(t.Key,t.Value)}}static FromString(t,e){var n;let i=null===(n=e.listDefinitions)||void 0===n?void 0:n.FindSingleItemListWithName(t);if(i)return null===i.value?p("listValue.value"):new S(i.value);throw new Error("Could not find the InkListItem from the string '"+t+"' to create an InkList because it doesn't exist in the original list definition in ink.")}AddItem(t){if(t instanceof g){let e=t;if(null==e.originName)return void this.AddItem(e.itemName);if(null===this.origins)return p("this.origins");for(let t of this.origins)if(t.name==e.originName){let n=t.TryGetValueForItem(e,0);if(n.exists)return void this.Add(e,n.result);throw new Error("Could not add the item "+e+" to this list because it doesn't exist in the original list definition in ink.")}throw new Error("Failed to add item to list because the item was from a new list definition that wasn't previously known to this list. Only items from previously known lists can be used, so that the int value can be found.")}{let e=t,n=null;if(null===this.origins)return p("this.origins");for(let t of this.origins){if(null===e)return p("itemName");if(t.ContainsItemWithName(e)){if(null!=n)throw new Error("Could not add the item "+e+" to this list because it could come from either "+t.name+" or "+n.name);n=t}}if(null==n)throw new Error("Could not add the item "+e+" to this list because it isn't known to any list definitions previously associated with this list.");let i=new g(n.name,e),r=n.ValueForItem(i);this.Add(i,r)}}ContainsItemNamed(t){for(let[e]of this){if(g.fromSerializedKey(e).itemName==t)return!0}return!1}ContainsKey(t){return this.has(t.serialized())}Add(t,e){let n=t.serialized();if(this.has(n))throw new Error("The Map already contains an entry for ".concat(t));this.set(n,e)}Remove(t){return this.delete(t.serialized())}get Count(){return this.size}get originOfMaxItem(){if(null==this.origins)return null;let t=this.maxItem.Key.originName,e=null;return this.origins.every((n=>n.name!=t||(e=n,!1))),e}get originNames(){if(this.Count>0){null==this._originNames&&this.Count>0?this._originNames=[]:(this._originNames||(this._originNames=[]),this._originNames.length=0);for(let[t]of this){let e=g.fromSerializedKey(t);if(null===e.originName)return p("item.originName");this._originNames.push(e.originName)}}return this._originNames}SetInitialOriginName(t){this._originNames=[t]}SetInitialOriginNames(t){this._originNames=null==t?null:t.slice()}get maxItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||n>t.Value)&&(t={Key:i,Value:n})}return t}get minItem(){let t={Key:g.Null,Value:0};for(let[e,n]of this){let i=g.fromSerializedKey(e);(t.Key.isNull||nt.maxItem.Value)}GreaterThanOrEquals(t){return 0!=this.Count&&(0==t.Count||this.minItem.Value>=t.minItem.Value&&this.maxItem.Value>=t.maxItem.Value)}LessThan(t){return 0!=t.Count&&(0==this.Count||this.maxItem.Value0?new S(this.maxItem):new S}MinAsList(){return this.Count>0?new S(this.minItem):new S}ListWithSubRange(t,e){if(0==this.Count)return new S;let n=this.orderedItems,i=0,r=Number.MAX_SAFE_INTEGER;Number.isInteger(t)?i=t:t instanceof S&&t.Count>0&&(i=t.minItem.Value),Number.isInteger(e)?r=e:e instanceof S&&e.Count>0&&(r=e.maxItem.Value);let a=new S;a.SetInitialOriginNames(this.originNames);for(let t of n)t.Value>=i&&t.Value<=r&&a.Add(t.Key,t.Value);return a}Equals(t){if(t instanceof S==!1)return!1;if(t.Count!=this.Count)return!1;for(let[e]of this)if(!t.has(e))return!1;return!0}get orderedItems(){let t=new Array;for(let[e,n]of this){let i=g.fromSerializedKey(e);t.push({Key:i,Value:n})}return t.sort(((t,e)=>null===t.Key.originName?p("x.Key.originName"):null===e.Key.originName?p("y.Key.originName"):t.Value==e.Value?t.Key.originName.localeCompare(e.Key.originName):t.Valuee.Value?1:0)),t}toString(){let t=this.orderedItems,e=new f;for(let n=0;n0&&e.Append(", ");let i=t[n].Key;if(null===i.itemName)return p("item.itemName");e.Append(i.itemName)}return e.toString()}valueOf(){return NaN}}class y extends Error{constructor(t){super(t),this.useEndLineNumber=!1,this.message=t,this.name="StoryException"}}function v(t,e,n){if(null===t)return{result:n,exists:!1};let i=t.get(e);return void 0===i?{result:n,exists:!1}:{result:i,exists:!0}}class C extends m{static Create(t,n){if(n){if(n===i.Int&&Number.isInteger(Number(t)))return new w(Number(t));if(n===i.Float&&!isNaN(t))return new T(Number(t))}return"boolean"==typeof t?new _(Boolean(t)):"string"==typeof t?new E(String(t)):Number.isInteger(Number(t))?new w(Number(t)):isNaN(t)?t instanceof e?new P(l(t,e)):t instanceof S?new O(l(t,S)):null:new T(Number(t))}Copy(){return l(C.Create(this.valueObject),m)}BadCastException(t){return new y("Can't cast "+this.valueObject+" from "+this.valueType+" to "+t)}}class b extends C{constructor(t){super(),this.value=t}get valueObject(){return this.value}toString(){return null===this.value?p("Value.value"):this.value.toString()}}class _ extends b{constructor(t){super(t||!1)}get isTruthy(){return Boolean(this.value)}get valueType(){return i.Bool}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Int)return new w(this.value?1:0);if(t==i.Float)return new T(this.value?1:0);if(t==i.String)return new E(this.value?"true":"false");throw this.BadCastException(t)}toString(){return this.value?"true":"false"}}class w extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Int}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Float)return new T(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class T extends b{constructor(t){super(t||0)}get isTruthy(){return 0!=this.value}get valueType(){return i.Float}Cast(t){if(null===this.value)return p("Value.value");if(t==this.valueType)return this;if(t==i.Bool)return new _(0!==this.value);if(t==i.Int)return new w(this.value);if(t==i.String)return new E(""+this.value);throw this.BadCastException(t)}}class E extends b{constructor(t){if(super(t||""),this._isNewline="\n"==this.value,this._isInlineWhitespace=!0,null===this.value)return p("Value.value");this.value.length>0&&this.value.split("").every((t=>" "==t||"\t"==t||(this._isInlineWhitespace=!1,!1)))}get valueType(){return i.String}get isTruthy(){return null===this.value?p("Value.value"):this.value.length>0}get isNewline(){return this._isNewline}get isInlineWhitespace(){return this._isInlineWhitespace}get isNonWhitespace(){return!this.isNewline&&!this.isInlineWhitespace}Cast(t){if(t==this.valueType)return this;if(t==i.Int){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseInt(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new w(e.result);throw this.BadCastException(t)}if(t==i.Float){let e=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=parseFloat(t);return Number.isNaN(n)?{result:e,exists:!1}:{result:n,exists:!0}}(this.value);if(e.exists)return new T(e.result);throw this.BadCastException(t)}throw this.BadCastException(t)}}class P extends b{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)}get valueType(){return i.DivertTarget}get targetPath(){return null===this.value?p("Value.value"):this.value}set targetPath(t){this.value=t}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a divert target")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"DivertTargetValue("+this.targetPath+")"}}class N extends b{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;super(t),this._contextIndex=e}get contextIndex(){return this._contextIndex}set contextIndex(t){this._contextIndex=t}get variableName(){return null===this.value?p("Value.value"):this.value}set variableName(t){this.value=t}get valueType(){return i.VariablePointer}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a variable pointer")}Cast(t){if(t==this.valueType)return this;throw this.BadCastException(t)}toString(){return"VariablePointerValue("+this.variableName+")"}Copy(){return new N(this.variableName,this.contextIndex)}}class O extends b{get isTruthy(){return null===this.value?p("this.value"):this.value.Count>0}get valueType(){return i.List}Cast(t){if(null===this.value)return p("Value.value");if(t==i.Int){let t=this.value.maxItem;return t.Key.isNull?new w(0):new w(t.Value)}if(t==i.Float){let t=this.value.maxItem;return t.Key.isNull?new T(0):new T(t.Value)}if(t==i.String){let t=this.value.maxItem;return t.Key.isNull?new E(""):new E(t.Key.toString())}if(t==this.valueType)return this;throw this.BadCastException(t)}constructor(t,e){super(null),t||e?t instanceof S?this.value=new S(t):t instanceof g&&"number"==typeof e&&(this.value=new S({Key:t,Value:e})):this.value=new S}static RetainListOriginsForAssignment(t,e){let n=s(t,O),i=s(e,O);return i&&null===i.value?p("newList.value"):n&&null===n.value?p("oldList.value"):void(n&&i&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames))}}!function(t){t[t.Bool=-1]="Bool",t[t.Int=0]="Int",t[t.Float=1]="Float",t[t.List=2]="List",t[t.String=3]="String",t[t.DivertTarget=4]="DivertTarget",t[t.VariablePointer=5]="VariablePointer"}(i||(i={}));class A{constructor(){this.obj=null,this.approximate=!1}get correctObj(){return this.approximate?null:this.obj}get container(){return this.obj instanceof x?this.obj:null}copy(){let t=new A;return t.obj=this.obj,t.approximate=this.approximate,t}}class x extends m{constructor(){super(...arguments),this.name=null,this._content=[],this.namedContent=new Map,this.visitsShouldBeCounted=!1,this.turnIndexShouldBeCounted=!1,this.countingAtStartOnly=!1,this._pathToFirstLeafContent=null}get hasValidName(){return null!=this.name&&this.name.length>0}get content(){return this._content}set content(t){this.AddContent(t)}get namedOnlyContent(){let t=new Map;for(let[e,n]of this.namedContent){let i=l(n,m);t.set(e,i)}for(let e of this.content){let n=o(e);null!=n&&n.hasValidName&&t.delete(n.name)}return 0==t.size&&(t=null),t}set namedOnlyContent(t){let e=this.namedOnlyContent;if(null!=e)for(let[t]of e)this.namedContent.delete(t);if(null!=t)for(let[,e]of t){let t=o(e);null!=t&&this.AddToNamedContentOnly(t)}}get countFlags(){let t=0;return this.visitsShouldBeCounted&&(t|=x.CountFlags.Visits),this.turnIndexShouldBeCounted&&(t|=x.CountFlags.Turns),this.countingAtStartOnly&&(t|=x.CountFlags.CountStartOnly),t==x.CountFlags.CountStartOnly&&(t=0),t}set countFlags(t){let e=t;(e&x.CountFlags.Visits)>0&&(this.visitsShouldBeCounted=!0),(e&x.CountFlags.Turns)>0&&(this.turnIndexShouldBeCounted=!0),(e&x.CountFlags.CountStartOnly)>0&&(this.countingAtStartOnly=!0)}get pathToFirstLeafContent(){return null==this._pathToFirstLeafContent&&(this._pathToFirstLeafContent=this.path.PathByAppendingPath(this.internalPathToFirstLeafContent)),this._pathToFirstLeafContent}get internalPathToFirstLeafContent(){let t=[],n=this;for(;n instanceof x;)n.content.length>0&&(t.push(new e.Component(0)),n=n.content[0]);return new e(t)}AddContent(t){if(t instanceof Array){let e=t;for(let t of e)this.AddContent(t)}else{let e=t;if(this._content.push(e),e.parent)throw new Error("content is already in "+e.parent);e.parent=this,this.TryAddNamedContent(e)}}TryAddNamedContent(t){let e=o(t);null!=e&&e.hasValidName&&this.AddToNamedContentOnly(e)}AddToNamedContentOnly(t){if(n.AssertType(t,m,"Can only add Runtime.Objects to a Runtime.Container"),l(t,m).parent=this,null===t.name)return p("namedContentObj.name");this.namedContent.set(t.name,t)}ContentAtPath(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;-1==n&&(n=t.length);let i=new A;i.approximate=!1;let r=this,a=this;for(let l=e;l=0&&t.index=0||a.set(t,e);if(a.size>0){r(),t.AppendLine("-- named: --");for(let[,r]of a){n.AssertType(r,x,"Can only print out named Containers"),r.BuildStringOfHierarchy(t,e,i),t.AppendLine()}}e--,r(),t.Append("]")}}!function(t){var e;(e=t.CountFlags||(t.CountFlags={}))[e.Visits=1]="Visits",e[e.Turns=2]="Turns",e[e.CountStartOnly=4]="CountStartOnly"}(x||(x={}));class I extends m{toString(){return"Glue"}}class k extends m{get commandType(){return this._commandType}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k.CommandType.NotSet;super(),this._commandType=t}Copy(){return new k(this.commandType)}static EvalStart(){return new k(k.CommandType.EvalStart)}static EvalOutput(){return new k(k.CommandType.EvalOutput)}static EvalEnd(){return new k(k.CommandType.EvalEnd)}static Duplicate(){return new k(k.CommandType.Duplicate)}static PopEvaluatedValue(){return new k(k.CommandType.PopEvaluatedValue)}static PopFunction(){return new k(k.CommandType.PopFunction)}static PopTunnel(){return new k(k.CommandType.PopTunnel)}static BeginString(){return new k(k.CommandType.BeginString)}static EndString(){return new k(k.CommandType.EndString)}static NoOp(){return new k(k.CommandType.NoOp)}static ChoiceCount(){return new k(k.CommandType.ChoiceCount)}static Turns(){return new k(k.CommandType.Turns)}static TurnsSince(){return new k(k.CommandType.TurnsSince)}static ReadCount(){return new k(k.CommandType.ReadCount)}static Random(){return new k(k.CommandType.Random)}static SeedRandom(){return new k(k.CommandType.SeedRandom)}static VisitIndex(){return new k(k.CommandType.VisitIndex)}static SequenceShuffleIndex(){return new k(k.CommandType.SequenceShuffleIndex)}static StartThread(){return new k(k.CommandType.StartThread)}static Done(){return new k(k.CommandType.Done)}static End(){return new k(k.CommandType.End)}static ListFromInt(){return new k(k.CommandType.ListFromInt)}static ListRange(){return new k(k.CommandType.ListRange)}static ListRandom(){return new k(k.CommandType.ListRandom)}static BeginTag(){return new k(k.CommandType.BeginTag)}static EndTag(){return new k(k.CommandType.EndTag)}toString(){return"ControlCommand "+this.commandType.toString()}}!function(t){var e;(e=t.CommandType||(t.CommandType={}))[e.NotSet=-1]="NotSet",e[e.EvalStart=0]="EvalStart",e[e.EvalOutput=1]="EvalOutput",e[e.EvalEnd=2]="EvalEnd",e[e.Duplicate=3]="Duplicate",e[e.PopEvaluatedValue=4]="PopEvaluatedValue",e[e.PopFunction=5]="PopFunction",e[e.PopTunnel=6]="PopTunnel",e[e.BeginString=7]="BeginString",e[e.EndString=8]="EndString",e[e.NoOp=9]="NoOp",e[e.ChoiceCount=10]="ChoiceCount",e[e.Turns=11]="Turns",e[e.TurnsSince=12]="TurnsSince",e[e.ReadCount=13]="ReadCount",e[e.Random=14]="Random",e[e.SeedRandom=15]="SeedRandom",e[e.VisitIndex=16]="VisitIndex",e[e.SequenceShuffleIndex=17]="SequenceShuffleIndex",e[e.StartThread=18]="StartThread",e[e.Done=19]="Done",e[e.End=20]="End",e[e.ListFromInt=21]="ListFromInt",e[e.ListRange=22]="ListRange",e[e.ListRandom=23]="ListRandom",e[e.BeginTag=24]="BeginTag",e[e.EndTag=25]="EndTag",e[e.TOTAL_VALUES=26]="TOTAL_VALUES"}(k||(k={})),function(t){t[t.Tunnel=0]="Tunnel",t[t.Function=1]="Function",t[t.FunctionEvaluationFromGame=2]="FunctionEvaluationFromGame"}(r||(r={}));class F{constructor(){this.container=null,this.index=-1,2===arguments.length&&(this.container=arguments[0],this.index=arguments[1])}Resolve(){return this.index<0?this.container:null==this.container?null:0==this.container.content.length?this.container:this.index>=this.container.content.length?null:this.container.content[this.index]}get isNull(){return null==this.container}get path(){return this.isNull?null:this.index>=0?this.container.path.PathByAppendingComponent(new e.Component(this.index)):this.container.path}toString(){return this.container?"Ink Pointer -> "+this.container.path.toString()+" -- index "+this.index:"Ink Pointer (null)"}copy(){return new F(this.container,this.index)}static StartOf(t){return new F(t,0)}static get Null(){return new F(null,-1)}}class W extends m{get targetPath(){if(null!=this._targetPath&&this._targetPath.isRelative){let t=this.targetPointer.Resolve();t&&(this._targetPath=t.path)}return this._targetPath}set targetPath(t){this._targetPath=t,this._targetPointer=F.Null}get targetPointer(){if(this._targetPointer.isNull){let t=this.ResolvePath(this._targetPath).obj;if(null===this._targetPath)return p("this._targetPath");if(null===this._targetPath.lastComponent)return p("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(null===t)return p("targetObj");this._targetPointer.container=t.parent instanceof x?t.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index}else this._targetPointer=F.StartOf(t instanceof x?t:null)}return this._targetPointer.copy()}get targetPathString(){return null==this.targetPath?null:this.CompactPathString(this.targetPath)}set targetPathString(t){this.targetPath=null==t?null:new e(t)}get hasVariableTarget(){return null!=this.variableDivertName}constructor(t){super(),this._targetPath=null,this._targetPointer=F.Null,this.variableDivertName=null,this.pushesToStack=!1,this.stackPushType=0,this.isExternal=!1,this.externalArgs=0,this.isConditional=!1,this.pushesToStack=!1,void 0!==t&&(this.pushesToStack=!0,this.stackPushType=t)}Equals(t){let e=t;return e instanceof W&&this.hasVariableTarget==e.hasVariableTarget&&(this.hasVariableTarget?this.variableDivertName==e.variableDivertName:null===this.targetPath?p("this.targetPath"):this.targetPath.Equals(e.targetPath))}toString(){if(this.hasVariableTarget)return"Divert(variable: "+this.variableDivertName+")";if(null==this.targetPath)return"Divert(null)";{let t=new f,e=this.targetPath.toString();return t.Append("Divert"),this.isConditional&&t.Append("?"),this.pushesToStack&&(this.stackPushType==r.Function?t.Append(" function"):t.Append(" tunnel")),t.Append(" -> "),t.Append(this.targetPathString),t.Append(" ("),t.Append(e),t.Append(")"),t.toString()}}}class V extends m{constructor(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];super(),this._pathOnChoice=null,this.hasCondition=!1,this.hasStartContent=!1,this.hasChoiceOnlyContent=!1,this.isInvisibleDefault=!1,this.onceOnly=!0,this.onceOnly=t}get pathOnChoice(){if(null!=this._pathOnChoice&&this._pathOnChoice.isRelative){let t=this.choiceTarget;t&&(this._pathOnChoice=t.path)}return this._pathOnChoice}set pathOnChoice(t){this._pathOnChoice=t}get choiceTarget(){return null===this._pathOnChoice?p("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}get pathStringOnChoice(){return null===this.pathOnChoice?p("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)}set pathStringOnChoice(t){this.pathOnChoice=new e(t)}get flags(){let t=0;return this.hasCondition&&(t|=1),this.hasStartContent&&(t|=2),this.hasChoiceOnlyContent&&(t|=4),this.isInvisibleDefault&&(t|=8),this.onceOnly&&(t|=16),t}set flags(t){this.hasCondition=(1&t)>0,this.hasStartContent=(2&t)>0,this.hasChoiceOnlyContent=(4&t)>0,this.isInvisibleDefault=(8&t)>0,this.onceOnly=(16&t)>0}toString(){if(null===this.pathOnChoice)return p("ChoicePoint.pathOnChoice");return"Choice: -> "+this.pathOnChoice.toString()}}class L extends m{get containerForCount(){return null===this.pathForCount?null:this.ResolvePath(this.pathForCount).container}get pathStringForCount(){return null===this.pathForCount?null:this.CompactPathString(this.pathForCount)}set pathStringForCount(t){this.pathForCount=null===t?null:new e(t)}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;super(),this.pathForCount=null,this.name=t}toString(){if(null!=this.name)return"var("+this.name+")";return"read_count("+this.pathStringForCount+")"}}class R extends m{constructor(t,e){super(),this.variableName=t||null,this.isNewDeclaration=!!e,this.isGlobal=!1}toString(){return"VarAssign to "+this.variableName}}class D extends m{toString(){return"Void"}}class j extends m{static CallWithName(t){return new j(t)}static CallExistsWithName(t){return this.GenerateNativeFunctionsIfNecessary(),this._nativeFunctions.get(t)}get name(){return null===this._name?p("NativeFunctionCall._name"):this._name}set name(t){this._name=t,this._isPrototype||(null===j._nativeFunctions?p("NativeFunctionCall._nativeFunctions"):this._prototype=j._nativeFunctions.get(this._name)||null)}get numberOfParameters(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters}set numberOfParameters(t){this._numberOfParameters=t}Call(t){if(this._prototype)return this._prototype.Call(t);if(this.numberOfParameters!=t.length)throw new Error("Unexpected number of parameters");let e=!1;for(let n of t){if(n instanceof D)throw new y('Attempting to perform operation on a void value. Did you forget to "return" a value from a function you called here?');n instanceof O&&(e=!0)}if(2==t.length&&e)return this.CallBinaryListOperation(t);let n=this.CoerceValuesToSingleType(t),r=n[0].valueType;return r==i.Int||r==i.Float||r==i.String||r==i.DivertTarget||r==i.List?this.CallType(n):null}CallType(t){let e=l(t[0],b),n=e.valueType,r=e,a=t.length;if(2==a||1==a){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let s=this._operationFuncs.get(n);if(!s){const t=i[n];throw new y("Cannot perform operation "+this.name+" on "+t)}if(2==a){let e=l(t[1],b),n=s;if(null===r.value||null===e.value)return p("NativeFunctionCall.Call BinaryOp values");let i=n(r.value,e.value);return b.Create(i)}{let t=s;if(null===r.value)return p("NativeFunctionCall.Call UnaryOp value");let n=t(r.value);return this.name===j.Int?b.Create(n,i.Int):this.name===j.Float?b.Create(n,i.Float):b.Create(n,e.valueType)}}throw new Error("Unexpected number of parameters to NativeFunctionCall: "+t.length)}CallBinaryListOperation(t){if(("+"==this.name||"-"==this.name)&&t[0]instanceof O&&t[1]instanceof w)return this.CallListIncrementOperation(t);let e=l(t[0],b),n=l(t[1],b);if(!("&&"!=this.name&&"||"!=this.name||e.valueType==i.List&&n.valueType==i.List)){if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let t=this._operationFuncs.get(i.Int);if(null===t)return p("NativeFunctionCall.CallBinaryListOperation op");let r=function(t){if("boolean"==typeof t)return t;throw new Error("".concat(t," is not a boolean"))}(t(e.isTruthy?1:0,n.isTruthy?1:0));return new _(r)}if(e.valueType==i.List&&n.valueType==i.List)return this.CallType([e,n]);throw new y("Can not call use "+this.name+" operation on "+i[e.valueType]+" and "+i[n.valueType])}CallListIncrementOperation(t){let e=l(t[0],O),n=l(t[1],w),r=new S;if(null===e.value)return p("NativeFunctionCall.CallListIncrementOperation listVal.value");for(let[t,a]of e.value){let s=g.fromSerializedKey(t);if(null===this._operationFuncs)return p("NativeFunctionCall._operationFuncs");let l=this._operationFuncs.get(i.Int);if(null===n.value)return p("NativeFunctionCall.CallListIncrementOperation intVal.value");let o=l(a,n.value),h=null;if(null===e.value.origins)return p("NativeFunctionCall.CallListIncrementOperation listVal.value.origins");for(let t of e.value.origins)if(t.name==s.originName){h=t;break}if(null!=h){let t=h.TryGetItemWithValue(o,g.Null);t.exists&&r.Add(t.result,o)}}return new O(r)}CoerceValuesToSingleType(t){let e=i.Int,n=null;for(let r of t){let t=l(r,b);t.valueType>e&&(e=t.valueType),t.valueType==i.List&&(n=s(t,O))}let r=[];if(i[e]==i[i.List])for(let e of t){let t=l(e,b);if(t.valueType==i.List)r.push(t);else{if(t.valueType!=i.Int){const e=i[t.valueType];throw new y("Cannot mix Lists and "+e+" values in this operation")}{let e=parseInt(t.valueObject);if(n=l(n,O),null===n.value)return p("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");let i=n.value.originOfMaxItem;if(null===i)return p("NativeFunctionCall.CoerceValuesToSingleType list");let a=i.TryGetItemWithValue(e,g.Null);if(!a.exists)throw new y("Could not find List item with the value "+e+" in "+i.name);{let t=new O(a.result,e);r.push(t)}}}}else for(let n of t){let t=l(n,b).Cast(e);r.push(t)}return r}constructor(){if(super(),this._name=null,this._numberOfParameters=0,this._prototype=null,this._isPrototype=!1,this._operationFuncs=null,0===arguments.length)j.GenerateNativeFunctionsIfNecessary();else if(1===arguments.length){let t=arguments[0];j.GenerateNativeFunctionsIfNecessary(),this.name=t}else if(2===arguments.length){let t=arguments[0],e=arguments[1];this._isPrototype=!0,this.name=t,this.numberOfParameters=e}}static Identity(t){return t}static GenerateNativeFunctionsIfNecessary(){if(null==this._nativeFunctions){this._nativeFunctions=new Map,this.AddIntBinaryOp(this.Add,((t,e)=>t+e)),this.AddIntBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddIntBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddIntBinaryOp(this.Divide,((t,e)=>Math.floor(t/e))),this.AddIntBinaryOp(this.Mod,((t,e)=>t%e)),this.AddIntUnaryOp(this.Negate,(t=>-t)),this.AddIntBinaryOp(this.Equal,((t,e)=>t==e)),this.AddIntBinaryOp(this.Greater,((t,e)=>t>e)),this.AddIntBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddIntBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddIntBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddIntUnaryOp(this.Not,(t=>0==t)),this.AddIntBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddIntBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddIntBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddIntBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddIntBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddIntUnaryOp(this.Floor,j.Identity),this.AddIntUnaryOp(this.Ceiling,j.Identity),this.AddIntUnaryOp(this.Int,j.Identity),this.AddIntUnaryOp(this.Float,(t=>t)),this.AddFloatBinaryOp(this.Add,((t,e)=>t+e)),this.AddFloatBinaryOp(this.Subtract,((t,e)=>t-e)),this.AddFloatBinaryOp(this.Multiply,((t,e)=>t*e)),this.AddFloatBinaryOp(this.Divide,((t,e)=>t/e)),this.AddFloatBinaryOp(this.Mod,((t,e)=>t%e)),this.AddFloatUnaryOp(this.Negate,(t=>-t)),this.AddFloatBinaryOp(this.Equal,((t,e)=>t==e)),this.AddFloatBinaryOp(this.Greater,((t,e)=>t>e)),this.AddFloatBinaryOp(this.Less,((t,e)=>tt>=e)),this.AddFloatBinaryOp(this.LessThanOrEquals,((t,e)=>t<=e)),this.AddFloatBinaryOp(this.NotEquals,((t,e)=>t!=e)),this.AddFloatUnaryOp(this.Not,(t=>0==t)),this.AddFloatBinaryOp(this.And,((t,e)=>0!=t&&0!=e)),this.AddFloatBinaryOp(this.Or,((t,e)=>0!=t||0!=e)),this.AddFloatBinaryOp(this.Max,((t,e)=>Math.max(t,e))),this.AddFloatBinaryOp(this.Min,((t,e)=>Math.min(t,e))),this.AddFloatBinaryOp(this.Pow,((t,e)=>Math.pow(t,e))),this.AddFloatUnaryOp(this.Floor,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Ceiling,(t=>Math.ceil(t))),this.AddFloatUnaryOp(this.Int,(t=>Math.floor(t))),this.AddFloatUnaryOp(this.Float,j.Identity),this.AddStringBinaryOp(this.Add,((t,e)=>t+e)),this.AddStringBinaryOp(this.Equal,((t,e)=>t===e)),this.AddStringBinaryOp(this.NotEquals,((t,e)=>!(t===e))),this.AddStringBinaryOp(this.Has,((t,e)=>t.includes(e))),this.AddStringBinaryOp(this.Hasnt,((t,e)=>!t.includes(e))),this.AddListBinaryOp(this.Add,((t,e)=>t.Union(e))),this.AddListBinaryOp(this.Subtract,((t,e)=>t.Without(e))),this.AddListBinaryOp(this.Has,((t,e)=>t.Contains(e))),this.AddListBinaryOp(this.Hasnt,((t,e)=>!t.Contains(e))),this.AddListBinaryOp(this.Intersect,((t,e)=>t.Intersect(e))),this.AddListBinaryOp(this.Equal,((t,e)=>t.Equals(e))),this.AddListBinaryOp(this.Greater,((t,e)=>t.GreaterThan(e))),this.AddListBinaryOp(this.Less,((t,e)=>t.LessThan(e))),this.AddListBinaryOp(this.GreaterThanOrEquals,((t,e)=>t.GreaterThanOrEquals(e))),this.AddListBinaryOp(this.LessThanOrEquals,((t,e)=>t.LessThanOrEquals(e))),this.AddListBinaryOp(this.NotEquals,((t,e)=>!t.Equals(e))),this.AddListBinaryOp(this.And,((t,e)=>t.Count>0&&e.Count>0)),this.AddListBinaryOp(this.Or,((t,e)=>t.Count>0||e.Count>0)),this.AddListUnaryOp(this.Not,(t=>0==t.Count?1:0)),this.AddListUnaryOp(this.Invert,(t=>t.inverse)),this.AddListUnaryOp(this.All,(t=>t.all)),this.AddListUnaryOp(this.ListMin,(t=>t.MinAsList())),this.AddListUnaryOp(this.ListMax,(t=>t.MaxAsList())),this.AddListUnaryOp(this.Count,(t=>t.Count)),this.AddListUnaryOp(this.ValueOfList,(t=>t.maxItem.Value));let t=(t,e)=>t.Equals(e),e=(t,e)=>!t.Equals(e);this.AddOpToNativeFunc(this.Equal,2,i.DivertTarget,t),this.AddOpToNativeFunc(this.NotEquals,2,i.DivertTarget,e)}}AddOpFuncForType(t,e){null==this._operationFuncs&&(this._operationFuncs=new Map),this._operationFuncs.set(t,e)}static AddOpToNativeFunc(t,e,n,i){if(null===this._nativeFunctions)return p("NativeFunctionCall._nativeFunctions");let r=this._nativeFunctions.get(t);r||(r=new j(t,e),this._nativeFunctions.set(t,r)),r.AddOpFuncForType(n,i)}static AddIntBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Int,e)}static AddIntUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Int,e)}static AddFloatBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.Float,e)}static AddFloatUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.Float,e)}static AddStringBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.String,e)}static AddListBinaryOp(t,e){this.AddOpToNativeFunc(t,2,i.List,e)}static AddListUnaryOp(t,e){this.AddOpToNativeFunc(t,1,i.List,e)}toString(){return'Native "'+this.name+'"'}}j.Add="+",j.Subtract="-",j.Divide="/",j.Multiply="*",j.Mod="%",j.Negate="_",j.Equal="==",j.Greater=">",j.Less="<",j.GreaterThanOrEquals=">=",j.LessThanOrEquals="<=",j.NotEquals="!=",j.Not="!",j.And="&&",j.Or="||",j.Min="MIN",j.Max="MAX",j.Pow="POW",j.Floor="FLOOR",j.Ceiling="CEILING",j.Int="INT",j.Float="FLOAT",j.Has="?",j.Hasnt="!?",j.Intersect="^",j.ListMin="LIST_MIN",j.ListMax="LIST_MAX",j.All="LIST_ALL",j.Count="LIST_COUNT",j.ValueOfList="LIST_VALUE",j.Invert="LIST_INVERT",j._nativeFunctions=null;class B extends m{constructor(t){super(),this.text=t.toString()||""}toString(){return"# "+this.text}}class G extends m{constructor(){super(...arguments),this.text="",this.index=0,this.threadAtGeneration=null,this.sourcePath="",this.targetPath=null,this.isInvisibleDefault=!1,this.tags=null,this.originalThreadIndex=0}get pathStringOnChoice(){return null===this.targetPath?p("Choice.targetPath"):this.targetPath.toString()}set pathStringOnChoice(t){this.targetPath=new e(t)}}class M{constructor(t,e){this._name=t||"",this._items=null,this._itemNameToValues=e||new Map}get name(){return this._name}get items(){if(null==this._items){this._items=new Map;for(let[t,e]of this._itemNameToValues){let n=new g(this.name,t);this._items.set(n.serialized(),e)}}return this._items}ValueForItem(t){if(!t.itemName)return 0;let e=this._itemNameToValues.get(t.itemName);return void 0!==e?e:0}ContainsItem(t){return!!t.itemName&&(t.originName==this.name&&this._itemNameToValues.has(t.itemName))}ContainsItemWithName(t){return this._itemNameToValues.has(t)}TryGetItemWithValue(t,e){for(let[e,n]of this._itemNameToValues)if(n==t)return{result:new g(this.name,e),exists:!0};return{result:g.Null,exists:!1}}TryGetValueForItem(t,e){if(!t.itemName)return{result:0,exists:!1};let n=this._itemNameToValues.get(t.itemName);return n?{result:n,exists:!0}:{result:0,exists:!1}}}class J{constructor(t){this._lists=new Map,this._allUnambiguousListValueCache=new Map;for(let e of t){this._lists.set(e.name,e);for(let[t,n]of e.items){let e=g.fromSerializedKey(t),i=new O(e,n);if(!e.itemName)throw new Error("item.itemName is null or undefined.");this._allUnambiguousListValueCache.set(e.itemName,i),this._allUnambiguousListValueCache.set(e.fullName,i)}}}get lists(){let t=[];for(let[,e]of this._lists)t.push(e);return t}TryListGetDefinition(t,e){if(null===t)return{result:e,exists:!1};let n=this._lists.get(t);return n?{result:n,exists:!0}:{result:e,exists:!1}}FindSingleItemListWithName(t){if(null===t)return p("name");let e=this._allUnambiguousListValueCache.get(t);return void 0!==e?e:null}}class q{static JArrayToRuntimeObjList(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.length;e&&n--;let i=[];for(let e=0;et->")),e=i.hasVariableTarget?i.variableDivertName:i.targetPathString,t.WriteObjectStart(),t.WriteProperty(n,e),i.hasVariableTarget&&t.WriteProperty("var",!0),i.isConditional&&t.WriteProperty("c",!0),i.externalArgs>0&&t.WriteIntProperty("exArgs",i.externalArgs),void t.WriteObjectEnd()}let a=s(e,V);if(a)return t.WriteObjectStart(),t.WriteProperty("*",a.pathStringOnChoice),t.WriteIntProperty("flg",a.flags),void t.WriteObjectEnd();let l=s(e,_);if(l)return void t.WriteBool(l.value);let o=s(e,w);if(o)return void t.WriteInt(o.value);let h=s(e,T);if(h)return void t.WriteFloat(h.value);let u=s(e,E);if(u)return void(u.isNewline?t.Write("\n",!1):(t.WriteStringStart(),t.WriteStringInner("^"),t.WriteStringInner(u.value),t.WriteStringEnd()));let c=s(e,O);if(c)return void this.WriteInkList(t,c);let d=s(e,P);if(d)return t.WriteObjectStart(),null===d.value?p("divTargetVal.value"):(t.WriteProperty("^->",d.value.componentsString),void t.WriteObjectEnd());let m=s(e,N);if(m)return t.WriteObjectStart(),t.WriteProperty("^var",m.value),t.WriteIntProperty("ci",m.contextIndex),void t.WriteObjectEnd();if(s(e,I))return void t.Write("<>");let f=s(e,k);if(f)return void t.Write(q._controlCommandNames[f.commandType]);let g=s(e,j);if(g){let e=g.name;return"^"==e&&(e="L^"),void t.Write(e)}let S=s(e,L);if(S){t.WriteObjectStart();let e=S.pathStringForCount;return null!=e?t.WriteProperty("CNT?",e):t.WriteProperty("VAR?",S.name),void t.WriteObjectEnd()}let y=s(e,R);if(y){t.WriteObjectStart();let e=y.isGlobal?"VAR=":"temp=";return t.WriteProperty(e,y.variableName),y.isNewDeclaration||t.WriteProperty("re",!0),void t.WriteObjectEnd()}if(s(e,D))return void t.Write("void");let v=s(e,B);if(v)return t.WriteObjectStart(),t.WriteProperty("#",v.text),void t.WriteObjectEnd();let C=s(e,G);if(!C)throw new Error("Failed to convert runtime object to Json token: "+e);this.WriteChoice(t,C)}static JObjectToDictionaryRuntimeObjs(t){let e=new Map;for(let n in t)if(t.hasOwnProperty(n)){let i=this.JTokenToRuntimeObject(t[n]);if(null===i)return p("inkObject");e.set(n,i)}return e}static JObjectToIntDictionary(t){let e=new Map;for(let n in t)t.hasOwnProperty(n)&&e.set(n,parseInt(t[n]));return e}static JTokenToRuntimeObject(t){if("number"==typeof t&&!isNaN(t)||"boolean"==typeof t)return b.Create(t);if("string"==typeof t){let e=t.toString(),n=e[0];if("^"==n)return new E(e.substring(1));if("\n"==n&&1==e.length)return new E("\n");if("<>"==e)return new I;for(let t=0;t->"==e)return k.PopTunnel();if("~ret"==e)return k.PopFunction();if("void"==e)return new D}if("object"==typeof t&&!Array.isArray(t)){let n,i=t;if(i["^->"])return n=i["^->"],new P(new e(n.toString()));if(i["^var"]){n=i["^var"];let t=new N(n.toString());return"ci"in i&&(n=i.ci,t.contextIndex=parseInt(n)),t}let a=!1,s=!1,l=r.Function,o=!1;if((n=i["->"])?a=!0:(n=i["f()"])?(a=!0,s=!0,l=r.Function):(n=i["->t->"])?(a=!0,s=!0,l=r.Tunnel):(n=i["x()"])&&(a=!0,o=!0,s=!1,l=r.Function),a){let t=new W;t.pushesToStack=s,t.stackPushType=l,t.isExternal=o;let e=n.toString();return(n=i.var)?t.variableDivertName=e:t.targetPathString=e,t.isConditional=!!i.c,o&&(n=i.exArgs)&&(t.externalArgs=parseInt(n)),t}if(n=i["*"]){let t=new V;return t.pathStringOnChoice=n.toString(),(n=i.flg)&&(t.flags=parseInt(n)),t}if(n=i["VAR?"])return new L(n.toString());if(n=i["CNT?"]){let t=new L;return t.pathStringForCount=n.toString(),t}let h=!1,u=!1;if((n=i["VAR="])?(h=!0,u=!0):(n=i["temp="])&&(h=!0,u=!1),h){let t=n.toString(),e=!i.re,r=new R(t,e);return r.isGlobal=u,r}if(void 0!==i["#"])return n=i["#"],new B(n.toString());if(n=i.list){let t=n,e=new S;if(n=i.origins){let t=n;e.SetInitialOriginNames(t)}for(let n in t)if(t.hasOwnProperty(n)){let i=t[n],r=new g(n),a=parseInt(i);e.Add(r,a)}return new O(e)}if(null!=i.originalChoicePath)return this.JObjectToChoice(i)}if(Array.isArray(t))return this.JArrayToContainer(t);if(null==t)return null;throw new Error("Failed to convert token to runtime object: "+this.toJson(t,["parent"]))}static toJson(t,e,n){return JSON.stringify(t,((t,n)=>(null==e?void 0:e.some((e=>e===t)))?void 0:n),n)}static WriteRuntimeContainer(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.WriteArrayStart(),null===e)return p("container");for(let n of e.content)this.WriteRuntimeObject(t,n);let i=e.namedOnlyContent,r=e.countFlags,a=null!=e.name&&!n,l=null!=i||r>0||a;if(l&&t.WriteObjectStart(),null!=i)for(let[e,n]of i){let i=e,r=s(n,x);t.WritePropertyStart(i),this.WriteRuntimeContainer(t,r,!0),t.WritePropertyEnd()}r>0&&t.WriteIntProperty("#f",r),a&&t.WriteProperty("#n",e.name),l?t.WriteObjectEnd():t.WriteNull(),t.WriteArrayEnd()}static JArrayToContainer(t){let e=new x;e.content=this.JArrayToRuntimeObjList(t,!0);let n=t[t.length-1];if(null!=n){let t=new Map;for(let i in n)if("#f"==i)e.countFlags=parseInt(n[i]);else if("#n"==i)e.name=n[i].toString();else{let e=this.JTokenToRuntimeObject(n[i]),r=s(e,x);r&&(r.name=i),t.set(i,e)}e.namedOnlyContent=t}return e}static JObjectToChoice(t){let e=new G;return e.text=t.text.toString(),e.index=parseInt(t.index),e.sourcePath=t.originalChoicePath.toString(),e.originalThreadIndex=parseInt(t.originalThreadIndex),e.pathStringOnChoice=t.targetPath.toString(),t.tags&&(e.tags=t.tags),e}static WriteChoice(t,e){t.WriteObjectStart(),t.WriteProperty("text",e.text),t.WriteIntProperty("index",e.index),t.WriteProperty("originalChoicePath",e.sourcePath),t.WriteIntProperty("originalThreadIndex",e.originalThreadIndex),t.WriteProperty("targetPath",e.pathStringOnChoice),e.tags&&t.WriteProperty("tags",(t=>{t.WriteArrayStart();for(const n of e.tags)t.WriteStringStart(),t.WriteStringInner(n),t.WriteStringEnd();t.WriteArrayEnd()})),t.WriteObjectEnd()}static WriteInkList(t,e){let n=e.value;if(null===n)return p("rawList");t.WriteObjectStart(),t.WritePropertyStart("list"),t.WriteObjectStart();for(let[e,i]of n){let n=g.fromSerializedKey(e),r=i;if(null===n.itemName)return p("item.itemName");t.WritePropertyNameStart(),t.WritePropertyNameInner(n.originName?n.originName:"?"),t.WritePropertyNameInner("."),t.WritePropertyNameInner(n.itemName),t.WritePropertyNameEnd(),t.Write(r),t.WritePropertyEnd()}if(t.WriteObjectEnd(),t.WritePropertyEnd(),0==n.Count&&null!=n.originNames&&n.originNames.length>0){t.WritePropertyStart("origins"),t.WriteArrayStart();for(let e of n.originNames)t.Write(e);t.WriteArrayEnd(),t.WritePropertyEnd()}t.WriteObjectEnd()}static ListDefinitionsToJToken(t){let e={};for(let n of t.lists){let t={};for(let[e,i]of n.items){let n=g.fromSerializedKey(e);if(null===n.itemName)return p("item.itemName");t[n.itemName]=i}e[n.name]=t}return e}static JTokenToListDefinitions(t){let e=t,n=[];for(let t in e)if(e.hasOwnProperty(t)){let i=t.toString(),r=e[t],a=new Map;for(let n in r)if(e.hasOwnProperty(t)){let t=r[n];a.set(n,parseInt(t))}let s=new M(i,a);n.push(s)}return new J(n)}}q._controlCommandNames=(()=>{let t=[];t[k.CommandType.EvalStart]="ev",t[k.CommandType.EvalOutput]="out",t[k.CommandType.EvalEnd]="/ev",t[k.CommandType.Duplicate]="du",t[k.CommandType.PopEvaluatedValue]="pop",t[k.CommandType.PopFunction]="~ret",t[k.CommandType.PopTunnel]="->->",t[k.CommandType.BeginString]="str",t[k.CommandType.EndString]="/str",t[k.CommandType.NoOp]="nop",t[k.CommandType.ChoiceCount]="choiceCnt",t[k.CommandType.Turns]="turn",t[k.CommandType.TurnsSince]="turns",t[k.CommandType.ReadCount]="readc",t[k.CommandType.Random]="rnd",t[k.CommandType.SeedRandom]="srnd",t[k.CommandType.VisitIndex]="visit",t[k.CommandType.SequenceShuffleIndex]="seq",t[k.CommandType.StartThread]="thread",t[k.CommandType.Done]="done",t[k.CommandType.End]="end",t[k.CommandType.ListFromInt]="listInt",t[k.CommandType.ListRange]="range",t[k.CommandType.ListRandom]="lrnd",t[k.CommandType.BeginTag]="#",t[k.CommandType.EndTag]="/#";for(let e=0;e1}constructor(){if(this._threadCounter=0,this._startOfRoot=F.Null,arguments[0]instanceof Z){let t=arguments[0];this._startOfRoot=F.StartOf(t.rootContentContainer),this.Reset()}else{let t=arguments[0];this._threads=[];for(let e of t._threads)this._threads.push(e.Copy());this._threadCounter=t._threadCounter,this._startOfRoot=t._startOfRoot.copy()}}Reset(){this._threads=[],this._threads.push(new U.Thread),this._threads[0].callstack.push(new U.Element(r.Tunnel,this._startOfRoot))}SetJsonToken(t,e){this._threads.length=0;let n=t.threads;for(let t of n){let n=t,i=new U.Thread(n,e);this._threads.push(i)}this._threadCounter=parseInt(t.threadCounter),this._startOfRoot=F.StartOf(e.rootContentContainer)}WriteJson(t){t.WriteObject((t=>{t.WritePropertyStart("threads"),t.WriteArrayStart();for(let e of this._threads)e.WriteJson(t);t.WriteArrayEnd(),t.WritePropertyEnd(),t.WritePropertyStart("threadCounter"),t.WriteInt(this._threadCounter),t.WritePropertyEnd()}))}PushThread(){let t=this.currentThread.Copy();this._threadCounter++,t.threadIndex=this._threadCounter,this._threads.push(t)}ForkThread(){let t=this.currentThread.Copy();return this._threadCounter++,t.threadIndex=this._threadCounter,t}PopThread(){if(!this.canPopThread)throw new Error("Can't pop thread");this._threads.splice(this._threads.indexOf(this.currentThread),1)}get canPopThread(){return this._threads.length>1&&!this.elementIsEvaluateFromGame}get elementIsEvaluateFromGame(){return this.currentElement.type==r.FunctionEvaluationFromGame}Push(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=new U.Element(t,this.currentElement.currentPointer,!1);i.evaluationStackHeightWhenPushed=e,i.functionStartInOutputStream=n,this.callStack.push(i)}CanPop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return!!this.canPop&&(null==t||this.currentElement.type==t)}Pop(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.CanPop(t))throw new Error("Mismatched push/pop in Callstack");this.callStack.pop()}GetTemporaryVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;-1==e&&(e=this.currentElementIndex+1);let n=v(this.callStack[e-1].temporaryVariables,t,null);return n.exists?n.result:null}SetTemporaryVariable(t,e,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1;-1==i&&(i=this.currentElementIndex+1);let r=this.callStack[i-1];if(!n&&!r.temporaryVariables.get(t))throw new Error("Could not find temporary variable to set: "+t);let a=v(r.temporaryVariables,t,null);a.exists&&O.RetainListOriginsForAssignment(a.result,e),r.temporaryVariables.set(t,e)}ContextForVariableNamed(t){return this.currentElement.temporaryVariables.get(t)?this.currentElementIndex+1:0}ThreadWithIndex(t){let e=this._threads.filter((e=>{if(e.threadIndex==t)return e}));return e.length>0?e[0]:null}get callStack(){return this.currentThread.callstack}get callStackTrace(){let t=new f;for(let e=0;e")}}}return t.toString()}}!function(t){class n{constructor(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.evaluationStackHeightWhenPushed=0,this.functionStartInOutputStream=0,this.currentPointer=e.copy(),this.inExpressionEvaluation=n,this.temporaryVariables=new Map,this.type=t}Copy(){let t=new n(this.type,this.currentPointer,this.inExpressionEvaluation);return t.temporaryVariables=new Map(this.temporaryVariables),t.evaluationStackHeightWhenPushed=this.evaluationStackHeightWhenPushed,t.functionStartInOutputStream=this.functionStartInOutputStream,t}}t.Element=n;class i{constructor(){if(this.threadIndex=0,this.previousPointer=F.Null,this.callstack=[],arguments[0]&&arguments[1]){let t=arguments[0],i=arguments[1];this.threadIndex=parseInt(t.threadIndex);let r=t.callstack;for(let t of r){let r,a=t,s=parseInt(a.type),l=F.Null,o=a.cPath;if(void 0!==o){r=o.toString();let t=i.ContentAtPath(new e(r));if(l.container=t.container,l.index=parseInt(a.idx),null==t.obj)throw new Error("When loading state, internal story location couldn't be found: "+r+". Has the story changed since this save data was created?");if(t.approximate){if(null===l.container)return p("pointer.container");i.Warning("When loading state, exact internal story location couldn't be found: '"+r+"', so it was approximated to '"+l.container.path.toString()+"' to recover. Has the story changed since this save data was created?")}}let h=!!a.exp,u=new n(s,l,h),c=a.temp;void 0!==c?u.temporaryVariables=q.JObjectToDictionaryRuntimeObjs(c):u.temporaryVariables.clear(),this.callstack.push(u)}let a=t.previousContentObject;if(void 0!==a){let t=new e(a.toString());this.previousPointer=i.PointerAtPath(t)}}}Copy(){let t=new i;t.threadIndex=this.threadIndex;for(let e of this.callstack)t.callstack.push(e.Copy());return t.previousPointer=this.previousPointer.copy(),t}WriteJson(t){t.WriteObjectStart(),t.WritePropertyStart("callstack"),t.WriteArrayStart();for(let e of this.callstack){if(t.WriteObjectStart(),!e.currentPointer.isNull){if(null===e.currentPointer.container)return p("el.currentPointer.container");t.WriteProperty("cPath",e.currentPointer.container.path.componentsString),t.WriteIntProperty("idx",e.currentPointer.index)}t.WriteProperty("exp",e.inExpressionEvaluation),t.WriteIntProperty("type",e.type),e.temporaryVariables.size>0&&(t.WritePropertyStart("temp"),q.WriteDictionaryRuntimeObjs(t,e.temporaryVariables),t.WritePropertyEnd()),t.WriteObjectEnd()}if(t.WriteArrayEnd(),t.WritePropertyEnd(),t.WriteIntProperty("threadIndex",this.threadIndex),!this.previousPointer.isNull){let e=this.previousPointer.Resolve();if(null===e)return p("this.previousPointer.Resolve()");t.WriteProperty("previousContentObject",e.path.toString())}t.WriteObjectEnd()}}t.Thread=i}(U||(U={}));class K extends class{}{variableChangedEvent(t,e){for(let n of this.variableChangedEventCallbacks)n(t,e)}get batchObservingVariableChanges(){return this._batchObservingVariableChanges}set batchObservingVariableChanges(t){if(this._batchObservingVariableChanges=t,t)this._changedVariablesForBatchObs=new Set;else if(null!=this._changedVariablesForBatchObs){for(let t of this._changedVariablesForBatchObs){let e=this._globalVariables.get(t);e?this.variableChangedEvent(t,e):p("currentValue")}this._changedVariablesForBatchObs=null}}get callStack(){return this._callStack}set callStack(t){this._callStack=t}$(t,e){if(void 0===e){let e=null;return null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists)?e.result.valueObject:(e=this._globalVariables.get(t),void 0===e&&(e=this._defaultGlobalVariables.get(t)),void 0!==e?e.valueObject:null)}{if(void 0===this._defaultGlobalVariables.get(t))throw new y("Cannot assign to a variable ("+t+") that hasn't been declared in the story");let n=b.Create(e);if(null==n)throw null==e?new Error("Cannot pass null to VariableState"):new Error("Invalid value passed to VariableState: "+e.toString());this.SetGlobal(t,n)}}constructor(t,e){super(),this.variableChangedEventCallbacks=[],this.patch=null,this._batchObservingVariableChanges=!1,this._defaultGlobalVariables=new Map,this._changedVariablesForBatchObs=new Set,this._globalVariables=new Map,this._callStack=t,this._listDefsOrigin=e;try{return new Proxy(this,{get:(t,e)=>e in t?t[e]:t.$(e),set:(t,e,n)=>(e in t?t[e]=n:t.$(e,n),!0)})}catch(t){}}ApplyPatch(){if(null===this.patch)return p("this.patch");for(let[t,e]of this.patch.globals)this._globalVariables.set(t,e);if(null!==this._changedVariablesForBatchObs)for(let t of this.patch.changedVariables)this._changedVariablesForBatchObs.add(t);this.patch=null}SetJsonToken(t){this._globalVariables.clear();for(let[e,n]of this._defaultGlobalVariables){let i=t[e];if(void 0!==i){let t=q.JTokenToRuntimeObject(i);if(null===t)return p("tokenInkObject");this._globalVariables.set(e,t)}else this._globalVariables.set(e,n)}}WriteJson(t){t.WriteObjectStart();for(let[e,n]of this._globalVariables){let i=e,r=n;if(K.dontSaveDefaultValues&&this._defaultGlobalVariables.has(i)){let t=this._defaultGlobalVariables.get(i);if(this.RuntimeObjectsEqual(r,t))continue}t.WritePropertyStart(i),q.WriteRuntimeObject(t,r),t.WritePropertyEnd()}t.WriteObjectEnd()}RuntimeObjectsEqual(t,e){if(null===t)return p("obj1");if(null===e)return p("obj2");if(t.constructor!==e.constructor)return!1;let n=s(t,_);if(null!==n)return n.value===l(e,_).value;let i=s(t,w);if(null!==i)return i.value===l(e,w).value;let r=s(t,T);if(null!==r)return r.value===l(e,T).value;let a=s(t,b),o=s(e,b);if(null!==a&&null!==o)return u(a.valueObject)&&u(o.valueObject)?a.valueObject.Equals(o.valueObject):a.valueObject===o.valueObject;throw new Error("FastRoughDefinitelyEquals: Unsupported runtime object type: "+t.constructor.name)}GetVariableWithName(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=this.GetRawVariableWithName(t,e),i=s(n,N);return null!==i&&(n=this.ValueAtVariablePointer(i)),n}TryGetDefaultVariableValue(t){let e=v(this._defaultGlobalVariables,t,null);return e.exists?e.result:null}GlobalVariableExistsWithName(t){return this._globalVariables.has(t)||null!==this._defaultGlobalVariables&&this._defaultGlobalVariables.has(t)}GetRawVariableWithName(t,e){let n=null;if(0==e||-1==e){let e=null;if(null!==this.patch&&(e=this.patch.TryGetGlobal(t,null),e.exists))return e.result;if(e=v(this._globalVariables,t,null),e.exists)return e.result;if(null!==this._defaultGlobalVariables&&(e=v(this._defaultGlobalVariables,t,null),e.exists))return e.result;if(null===this._listDefsOrigin)return p("VariablesState._listDefsOrigin");let n=this._listDefsOrigin.FindSingleItemListWithName(t);if(n)return n}return n=this._callStack.GetTemporaryVariableWithName(t,e),n}ValueAtVariablePointer(t){return this.GetVariableWithName(t.variableName,t.contextIndex)}Assign(t,e){let n=t.variableName;if(null===n)return p("name");let i=-1,r=!1;if(r=t.isNewDeclaration?t.isGlobal:this.GlobalVariableExistsWithName(n),t.isNewDeclaration){let t=s(e,N);if(null!==t){e=this.ResolveVariablePointer(t)}}else{let t=null;do{t=s(this.GetRawVariableWithName(n,i),N),null!=t&&(n=t.variableName,i=t.contextIndex,r=0==i)}while(null!=t)}r?this.SetGlobal(n,e):this._callStack.SetTemporaryVariable(n,e,t.isNewDeclaration,i)}SnapshotDefaultGlobals(){this._defaultGlobalVariables=new Map(this._globalVariables)}RetainListOriginsForAssignment(t,e){let n=l(t,O),i=l(e,O);n.value&&i.value&&0==i.value.Count&&i.value.SetInitialOriginNames(n.value.originNames)}SetGlobal(t,e){let n=null;if(null===this.patch&&(n=v(this._globalVariables,t,null)),null!==this.patch&&(n=this.patch.TryGetGlobal(t,null),n.exists||(n=v(this._globalVariables,t,null))),O.RetainListOriginsForAssignment(n.result,e),null===t)return p("variableName");if(null!==this.patch?this.patch.SetGlobal(t,e):this._globalVariables.set(t,e),null!==this.variableChangedEvent&&null!==n&&e!==n.result)if(this.batchObservingVariableChanges){if(null===this._changedVariablesForBatchObs)return p("this._changedVariablesForBatchObs");null!==this.patch?this.patch.AddChangedVariable(t):null!==this._changedVariablesForBatchObs&&this._changedVariablesForBatchObs.add(t)}else this.variableChangedEvent(t,e)}ResolveVariablePointer(t){let e=t.contextIndex;-1==e&&(e=this.GetContextIndexOfVariableNamed(t.variableName));let n=s(this.GetRawVariableWithName(t.variableName,e),N);return null!=n?n:new N(t.variableName,e)}GetContextIndexOfVariableNamed(t){return this.GlobalVariableExistsWithName(t)?0:this._callStack.currentElementIndex}ObserveVariableChange(t){this.variableChangedEventCallbacks.push(t)}}K.dontSaveDefaultValues=!0;class z{constructor(t){this.seed=t%2147483647,this.seed<=0&&(this.seed+=2147483646)}next(){return this.seed=48271*this.seed%2147483647}nextFloat(){return(this.next()-1)/2147483646}}class H{get globals(){return this._globals}get changedVariables(){return this._changedVariables}get visitCounts(){return this._visitCounts}get turnIndices(){return this._turnIndices}constructor(){if(this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map,1===arguments.length&&null!==arguments[0]){let t=arguments[0];this._globals=new Map(t._globals),this._changedVariables=new Set(t._changedVariables),this._visitCounts=new Map(t._visitCounts),this._turnIndices=new Map(t._turnIndices)}else this._globals=new Map,this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map}TryGetGlobal(t,e){return null!==t&&this._globals.has(t)?{result:this._globals.get(t),exists:!0}:{result:e,exists:!1}}SetGlobal(t,e){this._globals.set(t,e)}AddChangedVariable(t){return this._changedVariables.add(t)}TryGetVisitCount(t,e){return this._visitCounts.has(t)?{result:this._visitCounts.get(t),exists:!0}:{result:e,exists:!1}}SetVisitCount(t,e){this._visitCounts.set(t,e)}SetTurnIndex(t,e){this._turnIndices.set(t,e)}TryGetTurnIndex(t,e){return this._turnIndices.has(t)?{result:this._turnIndices.get(t),exists:!0}:{result:e,exists:!1}}}class X{static TextToDictionary(t){return new X.Reader(t).ToDictionary()}static TextToArray(t){return new X.Reader(t).ToArray()}}!function(t){t.Reader=class{constructor(t){this._rootObject=JSON.parse(t)}ToDictionary(){return this._rootObject}ToArray(){return this._rootObject}};class e{constructor(){this._currentPropertyName=null,this._currentString=null,this._stateStack=[],this._collectionStack=[],this._propertyNameStack=[],this._jsonObject=null}WriteObject(t){this.WriteObjectStart(),t(this),this.WriteObjectEnd()}WriteObjectStart(){this.StartNewObject(!0);let e={};if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Object))}WriteObjectEnd(){this.Assert(this.state===t.Writer.State.Object),this._collectionStack.pop(),this._stateStack.pop()}WriteProperty(t,e){if(this.WritePropertyStart(t),arguments[1]instanceof Function){(0,arguments[1])(this)}else{let t=arguments[1];this.Write(t)}this.WritePropertyEnd()}WriteIntProperty(t,e){this.WritePropertyStart(t),this.WriteInt(e),this.WritePropertyEnd()}WriteFloatProperty(t,e){this.WritePropertyStart(t),this.WriteFloat(e),this.WritePropertyEnd()}WritePropertyStart(e){this.Assert(this.state===t.Writer.State.Object),this._propertyNameStack.push(e),this.IncrementChildCount(),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property))}WritePropertyEnd(){this.Assert(this.state===t.Writer.State.Property),this.Assert(1===this.childCount),this._stateStack.pop()}WritePropertyNameStart(){this.Assert(this.state===t.Writer.State.Object),this.IncrementChildCount(),this._currentPropertyName="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Property)),this._stateStack.push(new t.Writer.StateElement(t.Writer.State.PropertyName))}WritePropertyNameEnd(){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._propertyNameStack.push(this._currentPropertyName),this._currentPropertyName=null,this._stateStack.pop()}WritePropertyNameInner(e){this.Assert(this.state===t.Writer.State.PropertyName),this.Assert(null!==this._currentPropertyName),this._currentPropertyName+=e}WriteArrayStart(){this.StartNewObject(!0);let e=[];if(this.state===t.Writer.State.Property){this.Assert(null!==this.currentCollection),this.Assert(null!==this.currentPropertyName);let t=this._propertyNameStack.pop();this.currentCollection[t]=e,this._collectionStack.push(e)}else this.state===t.Writer.State.Array?(this.Assert(null!==this.currentCollection),this.currentCollection.push(e),this._collectionStack.push(e)):(this.Assert(this.state===t.Writer.State.None),this._jsonObject=e,this._collectionStack.push(e));this._stateStack.push(new t.Writer.StateElement(t.Writer.State.Array))}WriteArrayEnd(){this.Assert(this.state===t.Writer.State.Array),this._collectionStack.pop(),this._stateStack.pop()}Write(t){null!==t?(this.StartNewObject(!1),this._addToCurrentObject(t)):console.error("Warning: trying to write a null value")}WriteBool(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(t))}WriteInt(t){null!==t&&(this.StartNewObject(!1),this._addToCurrentObject(Math.floor(t)))}WriteFloat(t){null!==t&&(this.StartNewObject(!1),t==Number.POSITIVE_INFINITY?this._addToCurrentObject(34e37):t==Number.NEGATIVE_INFINITY?this._addToCurrentObject(-34e37):isNaN(t)?this._addToCurrentObject(0):this._addToCurrentObject(t))}WriteNull(){this.StartNewObject(!1),this._addToCurrentObject(null)}WriteStringStart(){this.StartNewObject(!1),this._currentString="",this._stateStack.push(new t.Writer.StateElement(t.Writer.State.String))}WriteStringEnd(){this.Assert(this.state==t.Writer.State.String),this._stateStack.pop(),this._addToCurrentObject(this._currentString),this._currentString=null}WriteStringInner(e){this.Assert(this.state===t.Writer.State.String),null!==e?this._currentString+=e:console.error("Warning: trying to write a null string")}toString(){return null===this._jsonObject?"":JSON.stringify(this._jsonObject)}StartNewObject(e){e?this.Assert(this.state===t.Writer.State.None||this.state===t.Writer.State.Property||this.state===t.Writer.State.Array):this.Assert(this.state===t.Writer.State.Property||this.state===t.Writer.State.Array),this.state===t.Writer.State.Property&&this.Assert(0===this.childCount),this.state!==t.Writer.State.Array&&this.state!==t.Writer.State.Property||this.IncrementChildCount()}get state(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].type:t.Writer.State.None}get childCount(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].childCount:0}get currentCollection(){return this._collectionStack.length>0?this._collectionStack[this._collectionStack.length-1]:null}get currentPropertyName(){return this._propertyNameStack.length>0?this._propertyNameStack[this._propertyNameStack.length-1]:null}IncrementChildCount(){this.Assert(this._stateStack.length>0);let t=this._stateStack.pop();t.childCount++,this._stateStack.push(t)}Assert(t){if(!t)throw Error("Assert failed while writing JSON")}_addToCurrentObject(e){this.Assert(null!==this.currentCollection),this.state===t.Writer.State.Array?(this.Assert(Array.isArray(this.currentCollection)),this.currentCollection.push(e)):this.state===t.Writer.State.Property&&(this.Assert(!Array.isArray(this.currentCollection)),this.Assert(null!==this.currentPropertyName),this.currentCollection[this.currentPropertyName]=e,this._propertyNameStack.pop())}}t.Writer=e,function(e){var n;(n=e.State||(e.State={}))[n.None=0]="None",n[n.Object=1]="Object",n[n.Array=2]="Array",n[n.Property=3]="Property",n[n.PropertyName=4]="PropertyName",n[n.String=5]="String";e.StateElement=class{constructor(e){this.type=t.Writer.State.None,this.childCount=0,this.type=e}}}(e=t.Writer||(t.Writer={}))}(X||(X={}));class ${constructor(){let t=arguments[0],e=arguments[1];if(this.name=t,this.callStack=new U(e),arguments[2]){let t=arguments[2];this.callStack.SetJsonToken(t.callstack,e),this.outputStream=q.JArrayToRuntimeObjList(t.outputStream),this.currentChoices=q.JArrayToRuntimeObjList(t.currentChoices);let n=t.choiceThreads;void 0!==n&&this.LoadFlowChoiceThreads(n,e)}else this.outputStream=[],this.currentChoices=[]}WriteJson(t){t.WriteObjectStart(),t.WriteProperty("callstack",(t=>this.callStack.WriteJson(t))),t.WriteProperty("outputStream",(t=>q.WriteListRuntimeObjs(t,this.outputStream)));let e=!1;for(let n of this.currentChoices){if(null===n.threadAtGeneration)return p("c.threadAtGeneration");n.originalThreadIndex=n.threadAtGeneration.threadIndex,null===this.callStack.ThreadWithIndex(n.originalThreadIndex)&&(e||(e=!0,t.WritePropertyStart("choiceThreads"),t.WriteObjectStart()),t.WritePropertyStart(n.originalThreadIndex),n.threadAtGeneration.WriteJson(t),t.WritePropertyEnd())}e&&(t.WriteObjectEnd(),t.WritePropertyEnd()),t.WriteProperty("currentChoices",(t=>{t.WriteArrayStart();for(let e of this.currentChoices)q.WriteChoice(t,e);t.WriteArrayEnd()})),t.WriteObjectEnd()}LoadFlowChoiceThreads(t,e){for(let n of this.currentChoices){let i=this.callStack.ThreadWithIndex(n.originalThreadIndex);if(null!==i)n.threadAtGeneration=i.Copy();else{let i=t["".concat(n.originalThreadIndex)];n.threadAtGeneration=new U.Thread(i,e)}}}}class Y{ToJson(){let t=new X.Writer;return this.WriteJson(t),t.toString()}toJson(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.ToJson(t)}LoadJson(t){let e=X.TextToDictionary(t);this.LoadJsonObj(e),null!==this.onDidLoadState&&this.onDidLoadState()}VisitCountAtPathString(t){let n;if(null!==this._patch){let i=this.story.ContentAtPath(new e(t)).container;if(null===i)throw new Error("Content at path not found: "+t);if(n=this._patch.TryGetVisitCount(i,0),n.exists)return n.result}return n=v(this._visitCounts,t,null),n.exists?n.result:0}VisitCountForContainer(t){if(null===t)return p("container");if(!t.visitsShouldBeCounted)return this.story.Error("Read count for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;if(null!==this._patch){let e=this._patch.TryGetVisitCount(t,0);if(e.exists)return e.result}let e=t.path.toString(),n=v(this._visitCounts,e,null);return n.exists?n.result:0}IncrementVisitCountForContainer(t){if(null!==this._patch){let e=this.VisitCountForContainer(t);return e++,void this._patch.SetVisitCount(t,e)}let e=t.path.toString(),n=v(this._visitCounts,e,null);n.exists?this._visitCounts.set(e,n.result+1):this._visitCounts.set(e,1)}RecordTurnIndexVisitToContainer(t){if(null!==this._patch)return void this._patch.SetTurnIndex(t,this.currentTurnIndex);let e=t.path.toString();this._turnIndices.set(e,this.currentTurnIndex)}TurnsSinceForContainer(t){if(t.turnIndexShouldBeCounted||this.story.Error("TURNS_SINCE() for target ("+t.name+" - on "+t.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),null!==this._patch){let e=this._patch.TryGetTurnIndex(t,0);if(e.exists)return this.currentTurnIndex-e.result}let e=t.path.toString(),n=v(this._turnIndices,e,0);return n.exists?this.currentTurnIndex-n.result:-1}get callstackDepth(){return this.callStack.depth}get outputStream(){return this._currentFlow.outputStream}get currentChoices(){return this.canContinue?[]:this._currentFlow.currentChoices}get generatedChoices(){return this._currentFlow.currentChoices}get currentErrors(){return this._currentErrors}get currentWarnings(){return this._currentWarnings}get variablesState(){return this._variablesState}set variablesState(t){this._variablesState=t}get callStack(){return this._currentFlow.callStack}get evaluationStack(){return this._evaluationStack}get currentTurnIndex(){return this._currentTurnIndex}set currentTurnIndex(t){this._currentTurnIndex=t}get currentPathString(){let t=this.currentPointer;return t.isNull?null:null===t.path?p("pointer.path"):t.path.toString()}get currentPointer(){return this.callStack.currentElement.currentPointer.copy()}set currentPointer(t){this.callStack.currentElement.currentPointer=t.copy()}get previousPointer(){return this.callStack.currentThread.previousPointer.copy()}set previousPointer(t){this.callStack.currentThread.previousPointer=t.copy()}get canContinue(){return!this.currentPointer.isNull&&!this.hasError}get hasError(){return null!=this.currentErrors&&this.currentErrors.length>0}get hasWarning(){return null!=this.currentWarnings&&this.currentWarnings.length>0}get currentText(){if(this._outputStreamTextDirty){let t=new f,e=!1;for(let n of this.outputStream){let i=s(n,E);if(e||null===i){let t=s(n,k);null!==t&&(t.commandType==k.CommandType.BeginTag?e=!0:t.commandType==k.CommandType.EndTag&&(e=!1))}else t.Append(i.value)}this._currentText=this.CleanOutputWhitespace(t.toString()),this._outputStreamTextDirty=!1}return this._currentText}CleanOutputWhitespace(t){let e=new f,n=-1,i=0;for(let r=0;r0&&n!=i&&e.Append(" "),n=-1),"\n"==a&&(i=r+1),s||e.Append(a)}return e.toString()}get currentTags(){if(this._outputStreamTagsDirty){this._currentTags=[];let t=!1,e=new f;for(let n of this.outputStream){let i=s(n,k);if(null!=i){if(i.commandType==k.CommandType.BeginTag){if(t&&e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!0}else if(i.commandType==k.CommandType.EndTag){if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}t=!1}}else if(t){let t=s(n,E);null!==t&&e.Append(t.value)}else{let t=s(n,B);null!=t&&null!=t.text&&t.text.length>0&&this._currentTags.push(t.text)}}if(e.Length>0){let t=this.CleanOutputWhitespace(e.toString());this._currentTags.push(t),e.Clear()}this._outputStreamTagsDirty=!1}return this._currentTags}get currentFlowName(){return this._currentFlow.name}get currentFlowIsDefaultFlow(){return this._currentFlow.name==this.kDefaultFlowName}get aliveFlowNames(){if(this._aliveFlowNamesDirty){if(this._aliveFlowNames=[],null!=this._namedFlows)for(let t of this._namedFlows.keys())t!=this.kDefaultFlowName&&this._aliveFlowNames.push(t);this._aliveFlowNamesDirty=!1}return this._aliveFlowNames}get inExpressionEvaluation(){return this.callStack.currentElement.inExpressionEvaluation}set inExpressionEvaluation(t){this.callStack.currentElement.inExpressionEvaluation=t}constructor(t){this.kInkSaveStateVersion=10,this.kMinCompatibleLoadVersion=8,this.onDidLoadState=null,this._currentErrors=null,this._currentWarnings=null,this.divertedPointer=F.Null,this._currentTurnIndex=0,this.storySeed=0,this.previousRandom=0,this.didSafeExit=!1,this._currentText=null,this._currentTags=null,this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0,this._patch=null,this._aliveFlowNames=null,this._namedFlows=null,this.kDefaultFlowName="DEFAULT_FLOW",this._aliveFlowNamesDirty=!0,this.story=t,this._currentFlow=new $(this.kDefaultFlowName,t),this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this._evaluationStack=[],this._variablesState=new K(this.callStack,t.listDefinitions),this._visitCounts=new Map,this._turnIndices=new Map,this.currentTurnIndex=-1;let e=(new Date).getTime();this.storySeed=new z(e).next()%100,this.previousRandom=0,this.GoToStart()}GoToStart(){this.callStack.currentElement.currentPointer=F.StartOf(this.story.mainContentContainer)}SwitchFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.SwitchFlow");if(null===this._namedFlows&&(this._namedFlows=new Map,this._namedFlows.set(this.kDefaultFlowName,this._currentFlow)),t===this._currentFlow.name)return;let e,n=v(this._namedFlows,t,null);n.exists?e=n.result:(e=new $(t,this.story),this._namedFlows.set(t,e),this._aliveFlowNamesDirty=!0),this._currentFlow=e,this.variablesState.callStack=this._currentFlow.callStack,this.OutputStreamDirty()}SwitchToDefaultFlow_Internal(){null!==this._namedFlows&&this.SwitchFlow_Internal(this.kDefaultFlowName)}RemoveFlow_Internal(t){if(null===t)throw new Error("Must pass a non-null string to Story.DestroyFlow");if(t===this.kDefaultFlowName)throw new Error("Cannot destroy default flow");if(this._currentFlow.name===t&&this.SwitchToDefaultFlow_Internal(),null===this._namedFlows)return p("this._namedFlows");this._namedFlows.delete(t),this._aliveFlowNamesDirty=!0}CopyAndStartPatching(){let t=new Y(this.story);if(t._patch=new H(this._patch),t._currentFlow.name=this._currentFlow.name,t._currentFlow.callStack=new U(this._currentFlow.callStack),t._currentFlow.currentChoices.push(...this._currentFlow.currentChoices),t._currentFlow.outputStream.push(...this._currentFlow.outputStream),t.OutputStreamDirty(),null!==this._namedFlows){t._namedFlows=new Map;for(let[e,n]of this._namedFlows)t._namedFlows.set(e,n),t._aliveFlowNamesDirty=!0;t._namedFlows.set(this._currentFlow.name,t._currentFlow)}return this.hasError&&(t._currentErrors=[],t._currentErrors.push(...this.currentErrors||[])),this.hasWarning&&(t._currentWarnings=[],t._currentWarnings.push(...this.currentWarnings||[])),t.variablesState=this.variablesState,t.variablesState.callStack=t.callStack,t.variablesState.patch=t._patch,t.evaluationStack.push(...this.evaluationStack),this.divertedPointer.isNull||(t.divertedPointer=this.divertedPointer.copy()),t.previousPointer=this.previousPointer.copy(),t._visitCounts=this._visitCounts,t._turnIndices=this._turnIndices,t.currentTurnIndex=this.currentTurnIndex,t.storySeed=this.storySeed,t.previousRandom=this.previousRandom,t.didSafeExit=this.didSafeExit,t}RestoreAfterPatch(){this.variablesState.callStack=this.callStack,this.variablesState.patch=this._patch}ApplyAnyPatch(){if(null!==this._patch){this.variablesState.ApplyPatch();for(let[t,e]of this._patch.visitCounts)this.ApplyCountChanges(t,e,!0);for(let[t,e]of this._patch.turnIndices)this.ApplyCountChanges(t,e,!1);this._patch=null}}ApplyCountChanges(t,e,n){(n?this._visitCounts:this._turnIndices).set(t.path.toString(),e)}WriteJson(t){if(t.WriteObjectStart(),t.WritePropertyStart("flows"),t.WriteObjectStart(),null!==this._namedFlows)for(let[e,n]of this._namedFlows)t.WriteProperty(e,(t=>n.WriteJson(t)));else t.WriteProperty(this._currentFlow.name,(t=>this._currentFlow.WriteJson(t)));if(t.WriteObjectEnd(),t.WritePropertyEnd(),t.WriteProperty("currentFlowName",this._currentFlow.name),t.WriteProperty("variablesState",(t=>this.variablesState.WriteJson(t))),t.WriteProperty("evalStack",(t=>q.WriteListRuntimeObjs(t,this.evaluationStack))),!this.divertedPointer.isNull){if(null===this.divertedPointer.path)return p("divertedPointer");t.WriteProperty("currentDivertTarget",this.divertedPointer.path.componentsString)}t.WriteProperty("visitCounts",(t=>q.WriteIntDictionary(t,this._visitCounts))),t.WriteProperty("turnIndices",(t=>q.WriteIntDictionary(t,this._turnIndices))),t.WriteIntProperty("turnIdx",this.currentTurnIndex),t.WriteIntProperty("storySeed",this.storySeed),t.WriteIntProperty("previousRandom",this.previousRandom),t.WriteIntProperty("inkSaveVersion",this.kInkSaveStateVersion),t.WriteIntProperty("inkFormatVersion",Z.inkVersionCurrent),t.WriteObjectEnd()}LoadJsonObj(t){let n=t,i=n.inkSaveVersion;if(null==i)throw new Error("ink save format incorrect, can't load.");if(parseInt(i)1){let t=n.currentFlowName;this._currentFlow=this._namedFlows.get(t)}}else{this._namedFlows=null,this._currentFlow.name=this.kDefaultFlowName,this._currentFlow.callStack.SetJsonToken(n.callstackThreads,this.story),this._currentFlow.outputStream=q.JArrayToRuntimeObjList(n.outputStream),this._currentFlow.currentChoices=q.JArrayToRuntimeObjList(n.currentChoices);let t=n.choiceThreads;this._currentFlow.LoadFlowChoiceThreads(t,this.story)}this.OutputStreamDirty(),this._aliveFlowNamesDirty=!0,this.variablesState.SetJsonToken(n.variablesState),this.variablesState.callStack=this._currentFlow.callStack,this._evaluationStack=q.JArrayToRuntimeObjList(n.evalStack);let a=n.currentDivertTarget;if(null!=a){let t=new e(a.toString());this.divertedPointer=this.story.PointerAtPath(t)}this._visitCounts=q.JObjectToIntDictionary(n.visitCounts),this._turnIndices=q.JObjectToIntDictionary(n.turnIndices),this.currentTurnIndex=parseInt(n.turnIdx),this.storySeed=parseInt(n.storySeed),this.previousRandom=parseInt(n.previousRandom)}ResetErrors(){this._currentErrors=null,this._currentWarnings=null}ResetOutput(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.outputStream.length=0,null!==t&&this.outputStream.push(...t),this.OutputStreamDirty()}PushToOutputStream(t){let e=s(t,E);if(null!==e){let t=this.TrySplittingHeadTailWhitespace(e);if(null!==t){for(let e of t)this.PushToOutputStreamIndividual(e);return void this.OutputStreamDirty()}}this.PushToOutputStreamIndividual(t),this.OutputStreamDirty()}PopFromOutputStream(t){this.outputStream.splice(this.outputStream.length-t,t),this.OutputStreamDirty()}TrySplittingHeadTailWhitespace(t){let e=t.value;if(null===e)return p("single.value");let n=-1,i=-1;for(let t=0;t=0;t--){let n=e[t];if("\n"!=n){if(" "==n||"\t"==n)continue;break}-1==r&&(r=t),a=t}if(-1==n&&-1==r)return null;let s=[],l=0,o=e.length;if(-1!=n){if(n>0){let t=new E(e.substring(0,n));s.push(t)}s.push(new E("\n")),l=i+1}if(-1!=r&&(o=a),o>l){let t=e.substring(l,o);s.push(new E(t))}if(-1!=r&&a>i&&(s.push(new E("\n")),r=0;e--){let n=this.outputStream[e],i=n instanceof k?n:null;if(null!=(n instanceof I?n:null)){a=e;break}if(null!=i&&i.commandType==k.CommandType.BeginString){e>=t&&(t=-1);break}}let s=-1;if(s=-1!=a&&-1!=t?Math.min(t,a):-1!=a?a:t,-1!=s){if(n.isNewline)i=!1;else if(n.isNonWhitespace&&(a>-1&&this.RemoveExistingGlue(),t>-1)){let t=this.callStack.elements;for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!=r.Function)break;n.functionStartInOutputStream=-1}}}else n.isNewline&&(!this.outputStreamEndsInNewline&&this.outputStreamContainsContent||(i=!1))}if(i){if(null===t)return p("obj");this.outputStream.push(t),this.OutputStreamDirty()}}TrimNewlinesFromOutputStream(){let t=-1,e=this.outputStream.length-1;for(;e>=0;){let n=this.outputStream[e],i=s(n,k),r=s(n,E);if(null!=i||null!=r&&r.isNonWhitespace)break;null!=r&&r.isNewline&&(t=e),e--}if(t>=0)for(e=t;e=0;t--){let e=this.outputStream[t];if(e instanceof I)this.outputStream.splice(t,1);else if(e instanceof k)break}this.OutputStreamDirty()}get outputStreamEndsInNewline(){if(this.outputStream.length>0)for(let t=this.outputStream.length-1;t>=0;t--){if(this.outputStream[t]instanceof k)break;let e=this.outputStream[t];if(e instanceof E){if(e.isNewline)return!0;if(e.isNonWhitespace)break}}return!1}get outputStreamContainsContent(){for(let t of this.outputStream)if(t instanceof E)return!0;return!1}get inStringEvaluation(){for(let t=this.outputStream.length-1;t>=0;t--){let e=s(this.outputStream[t],k);if(e instanceof k&&e.commandType==k.CommandType.BeginString)return!0}return!1}PushEvaluationStack(t){let e=s(t,O);if(e){let t=e.value;if(null===t)return p("rawList");if(null!=t.originNames){t.origins||(t.origins=[]),t.origins.length=0;for(let e of t.originNames){if(null===this.story.listDefinitions)return p("StoryState.story.listDefinitions");let n=this.story.listDefinitions.TryListGetDefinition(e,null);if(null===n.result)return p("StoryState def.result");t.origins.indexOf(n.result)<0&&t.origins.push(n.result)}}}if(null===t)return p("obj");this.evaluationStack.push(t)}PopEvaluationStack(t){if(void 0===t){return h(this.evaluationStack.pop())}if(t>this.evaluationStack.length)throw new Error("trying to pop too many objects");return h(this.evaluationStack.splice(this.evaluationStack.length-t,t))}PeekEvaluationStack(){return this.evaluationStack[this.evaluationStack.length-1]}ForceEnd(){this.callStack.Reset(),this._currentFlow.currentChoices.length=0,this.currentPointer=F.Null,this.previousPointer=F.Null,this.didSafeExit=!0}TrimWhitespaceFromFunctionEnd(){n.Assert(this.callStack.currentElement.type==r.Function);let t=this.callStack.currentElement.functionStartInOutputStream;-1==t&&(t=0);for(let e=this.outputStream.length-1;e>=t;e--){let t=this.outputStream[e],n=s(t,E),i=s(t,k);if(null!=n){if(i)break;if(!n.isNewline&&!n.isInlineWhitespace)break;this.outputStream.splice(e,1),this.OutputStreamDirty()}}}PopCallStack(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.callStack.currentElement.type==r.Function&&this.TrimWhitespaceFromFunctionEnd(),this.callStack.Pop(t)}SetChosenPath(t,e){this._currentFlow.currentChoices.length=0;let n=this.story.PointerAtPath(t);n.isNull||-1!=n.index||(n.index=0),this.currentPointer=n,e&&this.currentTurnIndex++}StartFunctionEvaluationFromGame(t,e){this.callStack.Push(r.FunctionEvaluationFromGame,this.evaluationStack.length),this.callStack.currentElement.currentPointer=F.StartOf(t),this.PassArgumentsToEvaluationStack(e)}PassArgumentsToEvaluationStack(t){if(null!==t)for(let e=0;et;){let t=this.PopEvaluationStack();null===e&&(e=t)}if(this.PopCallStack(r.FunctionEvaluationFromGame),e){if(e instanceof D)return null;let t=l(e,b);return t.valueType==i.DivertTarget?t.valueObject.toString():t.valueObject}return null}AddError(t,e){e?(null==this._currentWarnings&&(this._currentWarnings=[]),this._currentWarnings.push(t)):(null==this._currentErrors&&(this._currentErrors=[]),this._currentErrors.push(t))}OutputStreamDirty(){this._outputStreamTextDirty=!0,this._outputStreamTagsDirty=!0}}class Q{constructor(){this.startTime=void 0}get ElapsedMilliseconds(){return void 0===this.startTime?0:(new Date).getTime()-this.startTime}Start(){this.startTime=(new Date).getTime()}Stop(){this.startTime=void 0}}!function(t){t[t.Author=0]="Author",t[t.Warning=1]="Warning",t[t.Error=2]="Error"}(a||(a={})),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&t>-9007199254740992&&t<9007199254740992&&Math.floor(t)===t});class Z extends m{get currentChoices(){let t=[];if(null===this._state)return p("this._state");for(let e of this._state.currentChoices)e.isInvisibleDefault||(e.index=t.length,t.push(e));return t}get currentText(){return this.IfAsyncWeCant("call currentText since it's a work in progress"),this.state.currentText}get currentTags(){return this.IfAsyncWeCant("call currentTags since it's a work in progress"),this.state.currentTags}get currentErrors(){return this.state.currentErrors}get currentWarnings(){return this.state.currentWarnings}get currentFlowName(){return this.state.currentFlowName}get currentFlowIsDefaultFlow(){return this.state.currentFlowIsDefaultFlow}get aliveFlowNames(){return this.state.aliveFlowNames}get hasError(){return this.state.hasError}get hasWarning(){return this.state.hasWarning}get variablesState(){return this.state.variablesState}get listDefinitions(){return this._listDefinitions}get state(){return this._state}StartProfiling(){}EndProfiling(){}constructor(){let t;super(),this.inkVersionMinimumCompatible=18,this.onError=null,this.onDidContinue=null,this.onMakeChoice=null,this.onEvaluateFunction=null,this.onCompleteEvaluateFunction=null,this.onChoosePathString=null,this._prevContainers=[],this.allowExternalFunctionFallbacks=!1,this._listDefinitions=null,this._variableObservers=null,this._hasValidatedExternals=!1,this._temporaryEvaluationContainer=null,this._asyncContinueActive=!1,this._stateSnapshotAtLastNewline=null,this._sawLookaheadUnsafeFunctionAfterNewline=!1,this._recursiveContinueCount=0,this._asyncSaving=!1,this._profiler=null;let e=null,n=null;if(arguments[0]instanceof x)t=arguments[0],void 0!==arguments[1]&&(e=arguments[1]),this._mainContentContainer=t;else if("string"==typeof arguments[0]){let t=arguments[0];n=X.TextToDictionary(t)}else n=arguments[0];if(null!=e&&(this._listDefinitions=new J(e)),this._externals=new Map,null!==n){let t=n,e=t.inkVersion;if(null==e)throw new Error("ink version number not found. Are you sure it's a valid .ink.json file?");let i=parseInt(e);if(i>Z.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(iq.WriteRuntimeContainer(t,this._mainContentContainer))),null!=this._listDefinitions){t.WritePropertyStart("listDefs"),t.WriteObjectStart();for(let e of this._listDefinitions.lists){t.WritePropertyStart(e.name),t.WriteObjectStart();for(let[n,i]of e.items){let e=g.fromSerializedKey(n),r=i;t.WriteIntProperty(e.itemName,r)}t.WriteObjectEnd(),t.WritePropertyEnd()}t.WriteObjectEnd(),t.WritePropertyEnd()}if(t.WriteObjectEnd(),e)return t.toString()}ResetState(){this.IfAsyncWeCant("ResetState"),this._state=new Y(this),this._state.variablesState.ObserveVariableChange(this.VariableStateDidChangeEvent.bind(this)),this.ResetGlobals()}ResetErrors(){if(null===this._state)return p("this._state");this._state.ResetErrors()}ResetCallstack(){if(this.IfAsyncWeCant("ResetCallstack"),null===this._state)return p("this._state");this._state.ForceEnd()}ResetGlobals(){if(this._mainContentContainer.namedContent.get("global decl")){let t=this.state.currentPointer.copy();this.ChoosePath(new e("global decl"),!1),this.ContinueInternal(),this.state.currentPointer=t}this.state.variablesState.SnapshotDefaultGlobals()}SwitchFlow(t){if(this.IfAsyncWeCant("switch flow"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't switch flow to "+t);this.state.SwitchFlow_Internal(t)}RemoveFlow(t){this.state.RemoveFlow_Internal(t)}SwitchToDefaultFlow(){this.state.SwitchToDefaultFlow_Internal()}Continue(){return this.ContinueAsync(0),this.currentText}get canContinue(){return this.state.canContinue}get asyncContinueComplete(){return!this._asyncContinueActive}ContinueAsync(t){this._hasValidatedExternals||this.ValidateExternalBindings(),this.ContinueInternal(t)}ContinueInternal(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;null!=this._profiler&&this._profiler.PreContinue();let e=t>0;if(this._recursiveContinueCount++,!this._asyncContinueActive){if(this._asyncContinueActive=e,!this.canContinue)throw new Error("Can't continue - should check canContinue before calling Continue");this._state.didSafeExit=!1,this._state.ResetOutput(),1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!0)}let n=new Q;n.Start();let i=!1;this._sawLookaheadUnsafeFunctionAfterNewline=!1;do{try{i=this.ContinueSingleStep()}catch(t){if(!(t instanceof y))throw t;this.AddError(t.message,void 0,t.useEndLineNumber);break}if(i)break;if(this._asyncContinueActive&&n.ElapsedMilliseconds>t)break}while(this.canContinue);if(n.Stop(),!i&&this.canContinue||(null!==this._stateSnapshotAtLastNewline&&this.RestoreStateSnapshot(),this.canContinue||(this.state.callStack.canPopThread&&this.AddError("Thread available to pop, threads should always be flat by the end of evaluation?"),0!=this.state.generatedChoices.length||this.state.didSafeExit||null!=this._temporaryEvaluationContainer||(this.state.callStack.CanPop(r.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop(r.Function)?this.AddError("unexpectedly reached end of content. Do you need a '~ return'?"):this.state.callStack.canPop?this.AddError("unexpectedly reached end of content for unknown reason. Please debug compiler!"):this.AddError("ran out of content. Do you need a '-> DONE' or '-> END'?"))),this.state.didSafeExit=!1,this._sawLookaheadUnsafeFunctionAfterNewline=!1,1==this._recursiveContinueCount&&(this._state.variablesState.batchObservingVariableChanges=!1),this._asyncContinueActive=!1,null!==this.onDidContinue&&this.onDidContinue()),this._recursiveContinueCount--,null!=this._profiler&&this._profiler.PostContinue(),this.state.hasError||this.state.hasWarning){if(null===this.onError){let t=new f;throw t.Append("Ink had "),this.state.hasError&&(t.Append("".concat(this.state.currentErrors.length)),t.Append(1==this.state.currentErrors.length?" error":"errors"),this.state.hasWarning&&t.Append(" and ")),this.state.hasWarning&&(t.Append("".concat(this.state.currentWarnings.length)),t.Append(1==this.state.currentWarnings.length?" warning":"warnings"),this.state.hasWarning&&t.Append(" and ")),t.Append(". It is strongly suggested that you assign an error handler to story.onError. The first issue was: "),t.Append(this.state.hasError?this.state.currentErrors[0]:this.state.currentWarnings[0]),new y(t.toString())}if(this.state.hasError)for(let t of this.state.currentErrors)this.onError(t,a.Error);if(this.state.hasWarning)for(let t of this.state.currentWarnings)this.onError(t,a.Warning);this.ResetErrors()}}ContinueSingleStep(){if(null!=this._profiler&&this._profiler.PreStep(),this.Step(),null!=this._profiler&&this._profiler.PostStep(),this.canContinue||this.state.callStack.elementIsEvaluateFromGame||this.TryFollowDefaultInvisibleChoice(),null!=this._profiler&&this._profiler.PreSnapshot(),!this.state.inStringEvaluation){if(null!==this._stateSnapshotAtLastNewline){if(null===this._stateSnapshotAtLastNewline.currentTags)return p("this._stateAtLastNewline.currentTags");if(null===this.state.currentTags)return p("this.state.currentTags");let t=this.CalculateNewlineOutputStateChange(this._stateSnapshotAtLastNewline.currentText,this.state.currentText,this._stateSnapshotAtLastNewline.currentTags.length,this.state.currentTags.length);if(t==Z.OutputStateChange.ExtendedBeyondNewline||this._sawLookaheadUnsafeFunctionAfterNewline)return this.RestoreStateSnapshot(),!0;t==Z.OutputStateChange.NewlineRemoved&&this.DiscardSnapshot()}this.state.outputStreamEndsInNewline&&(this.canContinue?null==this._stateSnapshotAtLastNewline&&this.StateSnapshot():this.DiscardSnapshot())}return null!=this._profiler&&this._profiler.PostSnapshot(),!1}CalculateNewlineOutputStateChange(t,e,n,i){if(null===t)return p("prevText");if(null===e)return p("currText");let r=e.length>=t.length&&t.length>0&&"\n"==e.charAt(t.length-1);if(n==i&&t.length==e.length&&r)return Z.OutputStateChange.NoChange;if(!r)return Z.OutputStateChange.NewlineRemoved;if(i>n)return Z.OutputStateChange.ExtendedBeyondNewline;for(let n=t.length;n0?this.Error("Failed to find content at path '"+t+"', and no approximation of it was possible."):i.approximate&&this.Warning("Failed to find content at path '"+t+"', so it was approximated to: '"+i.obj.path+"'."),e)}StateSnapshot(){this._stateSnapshotAtLastNewline=this._state,this._state=this._state.CopyAndStartPatching()}RestoreStateSnapshot(){null===this._stateSnapshotAtLastNewline&&p("_stateSnapshotAtLastNewline"),this._stateSnapshotAtLastNewline.RestoreAfterPatch(),this._state=this._stateSnapshotAtLastNewline,this._stateSnapshotAtLastNewline=null,this._asyncSaving||this._state.ApplyAnyPatch()}DiscardSnapshot(){this._asyncSaving||this._state.ApplyAnyPatch(),this._stateSnapshotAtLastNewline=null}CopyStateForBackgroundThreadSave(){if(this.IfAsyncWeCant("start saving on a background thread"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!");let t=this._state;return this._state=this._state.CopyAndStartPatching(),this._asyncSaving=!0,t}BackgroundSaveComplete(){null===this._stateSnapshotAtLastNewline&&this._state.ApplyAnyPatch(),this._asyncSaving=!1}Step(){let t=!0,e=this.state.currentPointer.copy();if(e.isNull)return;let n=s(e.Resolve(),x);for(;n&&(this.VisitContainer(n,!0),0!=n.content.length);)e=F.StartOf(n),n=s(e.Resolve(),x);this.state.currentPointer=e.copy(),null!=this._profiler&&this._profiler.Step(this.state.callStack);let i=e.Resolve(),r=this.PerformLogicAndFlowControl(i);if(this.state.currentPointer.isNull)return;r&&(t=!1);let a=s(i,V);if(a){let e=this.ProcessChoice(a);e&&this.state.generatedChoices.push(e),i=null,t=!1}if(i instanceof x&&(t=!1),t){let t=s(i,N);if(t&&-1==t.contextIndex){let e=this.state.callStack.ContextForVariableNamed(t.variableName);i=new N(t.variableName,e)}this.state.inExpressionEvaluation?this.state.PushEvaluationStack(i):this.state.PushToOutputStream(i)}this.NextContent();let l=s(i,k);l&&l.commandType==k.CommandType.StartThread&&this.state.callStack.PushThread()}VisitContainer(t,e){t.countingAtStartOnly&&!e||(t.visitsShouldBeCounted&&this.state.IncrementVisitCountForContainer(t),t.turnIndexShouldBeCounted&&this.state.RecordTurnIndexVisitToContainer(t))}VisitChangedContainersDueToDivert(){let t=this.state.previousPointer.copy(),e=this.state.currentPointer.copy();if(e.isNull||-1==e.index)return;if(this._prevContainers.length=0,!t.isNull){let e=s(t.Resolve(),x)||s(t.container,x);for(;e;)this._prevContainers.push(e),e=s(e.parent,x)}let n=e.Resolve();if(null==n)return;let i=s(n.parent,x),r=!0;for(;i&&(this._prevContainers.indexOf(i)<0||i.countingAtStartOnly);){let t=i.content.length>0&&n==i.content[0]&&r;t||(r=!1),this.VisitContainer(i,t),n=i,i=s(i.parent,x)}}PopChoiceStringAndTags(t){let e=l(this.state.PopEvaluationStack(),E);for(;this.state.evaluationStack.length>0&&null!=s(this.state.PeekEvaluationStack(),B);){let e=s(this.state.PopEvaluationStack(),B);e&&t.push(e.text)}return e.value}ProcessChoice(t){let e=!0;if(t.hasCondition){let t=this.state.PopEvaluationStack();this.IsTruthy(t)||(e=!1)}let n="",i="",r=[];if(t.hasChoiceOnlyContent&&(i=this.PopChoiceStringAndTags(r)||""),t.hasStartContent&&(n=this.PopChoiceStringAndTags(r)||""),t.onceOnly){this.state.VisitCountForContainer(t.choiceTarget)>0&&(e=!1)}if(!e)return null;let a=new G;return a.targetPath=t.pathOnChoice,a.sourcePath=t.path.toString(),a.isInvisibleDefault=t.isInvisibleDefault,a.threadAtGeneration=this.state.callStack.ForkThread(),a.tags=r.reverse(),a.text=(n+i).replace(/^[ \t]+|[ \t]+$/g,""),a}IsTruthy(t){if(t instanceof b){let e=t;if(e instanceof P){let t=e;return this.Error("Shouldn't use a divert target (to "+t.targetPath+") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)"),!1}return e.isTruthy}return!1}PerformLogicAndFlowControl(t){if(null==t)return!1;if(t instanceof W){let e=t;if(e.isConditional){let t=this.state.PopEvaluationStack();if(!this.IsTruthy(t))return!0}if(e.hasVariableTarget){let t=e.variableDivertName,n=this.state.variablesState.GetVariableWithName(t);if(null==n)this.Error("Tried to divert using a target from a variable that could not be found ("+t+")");else if(!(n instanceof P)){let e=s(n,w),i="Tried to divert to a target from a variable, but the variable ("+t+") didn't contain a divert target, it ";e instanceof w&&0==e.value?i+="was empty/null (the value 0).":i+="contained '"+n+"'.",this.Error(i)}let i=l(n,P);this.state.divertedPointer=this.PointerAtPath(i.targetPath)}else{if(e.isExternal)return this.CallExternalFunction(e.targetPathString,e.externalArgs),!0;this.state.divertedPointer=e.targetPointer.copy()}return e.pushesToStack&&this.state.callStack.Push(e.stackPushType,void 0,this.state.outputStream.length),this.state.divertedPointer.isNull&&!e.isExternal&&(e&&e.debugMetadata&&null!=e.debugMetadata.sourceName?this.Error("Divert target doesn't exist: "+e.debugMetadata.sourceName):this.Error("Divert resolution failed: "+e)),!0}if(t instanceof k){let e=t;switch(e.commandType){case k.CommandType.EvalStart:this.Assert(!1===this.state.inExpressionEvaluation,"Already in expression evaluation?"),this.state.inExpressionEvaluation=!0;break;case k.CommandType.EvalEnd:this.Assert(!0===this.state.inExpressionEvaluation,"Not in expression evaluation mode"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.EvalOutput:if(this.state.evaluationStack.length>0){let t=this.state.PopEvaluationStack();if(!(t instanceof D)){let e=new E(t.toString());this.state.PushToOutputStream(e)}}break;case k.CommandType.NoOp:break;case k.CommandType.Duplicate:this.state.PushEvaluationStack(this.state.PeekEvaluationStack());break;case k.CommandType.PopEvaluatedValue:this.state.PopEvaluationStack();break;case k.CommandType.PopFunction:case k.CommandType.PopTunnel:let t=e.commandType==k.CommandType.PopFunction?r.Function:r.Tunnel,n=null;if(t==r.Tunnel){let t=this.state.PopEvaluationStack();n=s(t,P),null===n&&this.Assert(t instanceof D,"Expected void if ->-> doesn't override target")}if(this.state.TryExitFunctionEvaluationFromGame())break;if(this.state.callStack.currentElement.type==t&&this.state.callStack.canPop)this.state.PopCallStack(),n&&(this.state.divertedPointer=this.PointerAtPath(n.targetPath));else{let e=new Map;e.set(r.Function,"function return statement (~ return)"),e.set(r.Tunnel,"tunnel onwards statement (->->)");let n=e.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(n="end of flow (-> END or choice)");let i="Found "+e.get(t)+", when expected "+n;this.Error(i)}break;case k.CommandType.BeginString:this.state.PushToOutputStream(e),this.Assert(!0===this.state.inExpressionEvaluation,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=!1;break;case k.CommandType.BeginTag:this.state.PushToOutputStream(e);break;case k.CommandType.EndTag:if(this.state.inStringEvaluation){let t=[],e=0;for(let n=this.state.outputStream.length-1;n>=0;--n){let i=this.state.outputStream[n];e++;let r=s(i,k);if(null!=r){if(r.commandType==k.CommandType.BeginTag)break;this.Error("Unexpected ControlCommand while extracting tag from choice");break}i instanceof E&&t.push(i)}this.state.PopFromOutputStream(e);let n=new f;for(let e of t.reverse())n.Append(e.toString());let i=new B(this.state.CleanOutputWhitespace(n.toString()));this.state.PushEvaluationStack(i)}else this.state.PushToOutputStream(e);break;case k.CommandType.EndString:{let t=[],e=[],n=0;for(let i=this.state.outputStream.length-1;i>=0;--i){let r=this.state.outputStream[i];n++;let a=s(r,k);if(a&&a.commandType==k.CommandType.BeginString)break;r instanceof B&&e.push(r),r instanceof E&&t.push(r)}this.state.PopFromOutputStream(n);for(let t of e)this.state.PushToOutputStream(t);t=t.reverse();let i=new f;for(let e of t)i.Append(e.toString());this.state.inExpressionEvaluation=!0,this.state.PushEvaluationStack(new E(i.toString()));break}case k.CommandType.ChoiceCount:let i=this.state.generatedChoices.length;this.state.PushEvaluationStack(new w(i));break;case k.CommandType.Turns:this.state.PushEvaluationStack(new w(this.state.currentTurnIndex+1));break;case k.CommandType.TurnsSince:case k.CommandType.ReadCount:let a=this.state.PopEvaluationStack();if(!(a instanceof P)){let t="";a instanceof w&&(t=". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?"),this.Error("TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw "+a+t);break}let o,h=l(a,P),u=s(this.ContentAtPath(h.targetPath).correctObj,x);null!=u?o=e.commandType==k.CommandType.TurnsSince?this.state.TurnsSinceForContainer(u):this.state.VisitCountForContainer(u):(o=e.commandType==k.CommandType.TurnsSince?-1:0,this.Warning("Failed to find container for "+e.toString()+" lookup at "+h.targetPath.toString())),this.state.PushEvaluationStack(new w(o));break;case k.CommandType.Random:{let t=s(this.state.PopEvaluationStack(),w),e=s(this.state.PopEvaluationStack(),w);if(null==e||e instanceof w==!1)return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(null==t||t instanceof w==!1)return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(null===t.value)return p("maxInt.value");if(null===e.value)return p("minInt.value");let n=t.value-e.value+1;(!isFinite(n)||n>Number.MAX_SAFE_INTEGER)&&(n=Number.MAX_SAFE_INTEGER,this.Error("RANDOM was called with a range that exceeds the size that ink numbers can use.")),n<=0&&this.Error("RANDOM was called with minimum as "+e.value+" and maximum as "+t.value+". The maximum must be larger");let i=this.state.storySeed+this.state.previousRandom,r=new z(i).next(),a=r%n+e.value;this.state.PushEvaluationStack(new w(a)),this.state.previousRandom=r;break}case k.CommandType.SeedRandom:let c=s(this.state.PopEvaluationStack(),w);if(null==c||c instanceof w==!1)return this.Error("Invalid value passed to SEED_RANDOM");if(null===c.value)return p("minInt.value");this.state.storySeed=c.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new D);break;case k.CommandType.VisitIndex:let d=this.state.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new w(d));break;case k.CommandType.SequenceShuffleIndex:let m=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new w(m));break;case k.CommandType.StartThread:break;case k.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=!0,this.state.currentPointer=F.Null);break;case k.CommandType.End:this.state.ForceEnd();break;case k.CommandType.ListFromInt:let v=s(this.state.PopEvaluationStack(),w),C=l(this.state.PopEvaluationStack(),E);if(null===v)throw new y("Passed non-integer when creating a list element from a numerical value.");let _=null;if(null===this.listDefinitions)return p("this.listDefinitions");let T=this.listDefinitions.TryListGetDefinition(C.value,null);if(!T.exists)throw new y("Failed to find LIST called "+C.value);{if(null===v.value)return p("minInt.value");let t=T.result.TryGetItemWithValue(v.value,g.Null);t.exists&&(_=new O(t.result,v.value))}null==_&&(_=new O),this.state.PushEvaluationStack(_);break;case k.CommandType.ListRange:let N=s(this.state.PopEvaluationStack(),b),A=s(this.state.PopEvaluationStack(),b),I=s(this.state.PopEvaluationStack(),O);if(null===I||null===A||null===N)throw new y("Expected list, minimum and maximum for LIST_RANGE");if(null===I.value)return p("targetList.value");let W=I.value.ListWithSubRange(A.valueObject,N.valueObject);this.state.PushEvaluationStack(new O(W));break;case k.CommandType.ListRandom:{let t=this.state.PopEvaluationStack();if(null===t)throw new y("Expected list for LIST_RANDOM");let e=t.value,n=null;if(null===e)throw p("list");if(0==e.Count)n=new S;else{let t=this.state.storySeed+this.state.previousRandom,i=new z(t).next(),r=i%e.Count,a=e.entries();for(let t=0;t<=r-1;t++)a.next();let s=a.next().value,l={Key:g.fromSerializedKey(s[0]),Value:s[1]};if(null===l.Key.originName)return p("randomItem.Key.originName");n=new S(l.Key.originName,this),n.Add(l.Key,l.Value),this.state.previousRandom=i}this.state.PushEvaluationStack(new O(n));break}default:this.Error("unhandled ControlCommand: "+e)}return!0}if(t instanceof R){let e=t,n=this.state.PopEvaluationStack();return this.state.variablesState.Assign(e,n),!0}if(t instanceof L){let e=t,n=null;if(null!=e.pathForCount){let t=e.containerForCount,i=this.state.VisitCountForContainer(t);n=new w(i)}else n=this.state.variablesState.GetVariableWithName(e.name),null==n&&(this.Warning("Variable not found: '"+e.name+"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit. Globals are always given a default value on load if a value doesn't exist in the save state."),n=new w(0));return this.state.PushEvaluationStack(n),!0}if(t instanceof j){let e=t,n=this.state.PopEvaluationStack(e.numberOfParameters),i=e.Call(n);return this.state.PushEvaluationStack(i),!0}return!1}ChoosePathString(t){let n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(this.IfAsyncWeCant("call ChoosePathString right now"),null!==this.onChoosePathString&&this.onChoosePathString(t,i),n)this.ResetCallstack();else if(this.state.callStack.currentElement.type==r.Function){let e="",n=this.state.callStack.currentElement.currentPointer.container;throw null!=n&&(e="("+n.path.toString()+") "),new Error("Story was running a function "+e+"when you called ChoosePathString("+t+") - this is almost certainly not not what you want! Full stack trace: \n"+this.state.callStack.callStackTrace)}this.state.PassArgumentsToEvaluationStack(i),this.ChoosePath(new e(t))}IfAsyncWeCant(t){if(this._asyncContinueActive)throw new Error("Can't "+t+". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.")}ChoosePath(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.state.SetChosenPath(t,e),this.VisitChangedContainersDueToDivert()}ChooseChoiceIndex(t){let e=this.currentChoices;this.Assert(t>=0&&t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null!==this.onEvaluateFunction&&this.onEvaluateFunction(t,e),this.IfAsyncWeCant("evaluate a function"),null==t)throw new Error("Function is null");if(""==t||""==t.trim())throw new Error("Function is empty or white space.");let i=this.KnotContainerWithName(t);if(null==i)throw new Error("Function doesn't exist: '"+t+"'");let r=[];r.push(...this.state.outputStream),this._state.ResetOutput(),this.state.StartFunctionEvaluationFromGame(i,e);let a=new f;for(;this.canContinue;)a.Append(this.Continue());let s=a.toString();this._state.ResetOutput(r);let l=this.state.CompleteFunctionEvaluationFromGame();return null!=this.onCompleteEvaluateFunction&&this.onCompleteEvaluateFunction(t,e,s,l),n?{returned:l,output:s}:l}EvaluateExpression(t){let e=this.state.callStack.elements.length;this.state.callStack.Push(r.Tunnel),this._temporaryEvaluationContainer=t,this.state.GoToStart();let n=this.state.evaluationStack.length;return this.Continue(),this._temporaryEvaluationContainer=null,this.state.callStack.elements.length>e&&this.state.PopCallStack(),this.state.evaluationStack.length>n?this.state.PopEvaluationStack():null}CallExternalFunction(t,e){if(null===t)return p("funcName");let n=this._externals.get(t),i=null,a=void 0!==n;if(a&&!n.lookAheadSafe&&null!==this._stateSnapshotAtLastNewline)return void(this._sawLookaheadUnsafeFunctionAfterNewline=!0);if(!a){if(this.allowExternalFunctionFallbacks)return i=this.KnotContainerWithName(t),this.Assert(null!==i,"Trying to call EXTERNAL function '"+t+"' which has not been bound, and fallback ink function could not be found."),this.state.callStack.Push(r.Function,void 0,this.state.outputStream.length),void(this.state.divertedPointer=F.StartOf(i));this.Assert(!1,"Trying to call EXTERNAL function '"+t+"' which has not been bound (and ink fallbacks disabled).")}let s=[];for(let t=0;t2&&void 0!==arguments[2])||arguments[2];this.IfAsyncWeCant("bind an external function"),this.Assert(!this._externals.has(t),"Function '"+t+"' has already been bound."),this._externals.set(t,{function:e,lookAheadSafe:n})}TryCoerce(t){return t}BindExternalFunction(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.Assert(null!=e,"Can't bind a null function"),this.BindExternalFunctionGeneral(t,(t=>{this.Assert(t.length>=e.length,"External function expected "+e.length+" arguments");let n=[];for(let e=0,i=t.length;e1?"s":"",t+=": '",t+=Array.from(n).join("', '"),t+="' ",t+=this.allowExternalFunctionFallbacks?", and no fallback ink function found.":" (ink fallbacks disabled)",this.Error(t)}else if(null!=t){for(let e of t.content){null!=e&&e.hasValidName||this.ValidateExternalBindings(e,n)}for(let[,e]of t.namedContent)this.ValidateExternalBindings(s(e,m),n)}else if(null!=e){let t=s(e,W);if(t&&t.isExternal){let e=t.targetPathString;if(null===e)return p("name");if(!this._externals.has(e))if(this.allowExternalFunctionFallbacks){this.mainContentContainer.namedContent.has(e)||n.add(e)}else n.add(e)}}}ObserveVariable(t,e){if(this.IfAsyncWeCant("observe a new variable"),null===this._variableObservers&&(this._variableObservers=new Map),!this.state.variablesState.GlobalVariableExistsWithName(t))throw new Error("Cannot observe variable '"+t+"' because it wasn't declared in the ink story.");this._variableObservers.has(t)?this._variableObservers.get(t).push(e):this._variableObservers.set(t,[e])}ObserveVariables(t,e){for(let n=0,i=t.length;n=e.container.content.length;){t=!1;let n=s(e.container.parent,x);if(n instanceof x==!1)break;let i=n.content.indexOf(e.container);if(-1==i)break;if(e=new F(n,i),e.index++,t=!0,null===e.container)return p("pointer.container")}return t||(e=F.Null),this.state.callStack.currentElement.currentPointer=e.copy(),t}TryFollowDefaultInvisibleChoice(){let t=this._state.currentChoices,e=t.filter((t=>t.isInvisibleDefault));if(0==e.length||t.length>e.length)return!1;let n=e[0];return null===n.targetPath?p("choice.targetPath"):null===n.threadAtGeneration?p("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,null!==this._stateSnapshotAtLastNewline&&(this.state.callStack.currentThread=this.state.callStack.ForkThread()),this.ChoosePath(n.targetPath,!1),!0)}NextSequenceShuffleIndex(){let t=s(this.state.PopEvaluationStack(),w);if(!(t instanceof w))return this.Error("expected number of elements in sequence for shuffle index"),0;let e=this.state.currentPointer.container;if(null===e)return p("seqContainer");if(null===t.value)return p("numElementsIntVal.value");let n=t.value,i=l(this.state.PopEvaluationStack(),w).value;if(null===i)return p("seqCount");let r=i/n,a=i%n,o=e.path.toString(),h=0;for(let t=0,e=o.length;t1&&void 0!==arguments[1]&&arguments[1],n=new y(t);throw n.useEndLineNumber=e,n}Warning(t){this.AddError(t,!0)}AddError(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.currentDebugMetadata,r=e?"WARNING":"ERROR";if(null!=i){let e=n?i.endLineNumber:i.startLineNumber;t="RUNTIME "+r+": '"+i.fileName+"' line "+e+": "+t}else t=this.state.currentPointer.isNull?"RUNTIME "+r+": "+t:"RUNTIME "+r+": ("+this.state.currentPointer+"): "+t;this.state.AddError(t,e),e||this.state.ForceEnd()}Assert(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==t)throw null==e&&(e="Story assert"),new Error(e+" "+this.currentDebugMetadata)}get currentDebugMetadata(){let t,e=this.state.currentPointer;if(!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let n=this.state.callStack.elements.length-1;n>=0;--n)if(e=this.state.callStack.elements[n].currentPointer,!e.isNull&&null!==e.Resolve()&&(t=e.Resolve().debugMetadata,null!==t))return t;for(let e=this.state.outputStream.length-1;e>=0;--e){if(t=this.state.outputStream[e].debugMetadata,null!==t)return t}return null}get mainContentContainer(){return this._temporaryEvaluationContainer?this._temporaryEvaluationContainer:this._mainContentContainer}}Z.inkVersionCurrent=21,function(t){var e;(e=t.OutputStateChange||(t.OutputStateChange={}))[e.NoChange=0]="NoChange",e[e.ExtendedBeyondNewline=1]="ExtendedBeyondNewline",e[e.NewlineRemoved=2]="NewlineRemoved"}(Z||(Z={})),t.InkList=S,t.Story=Z,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=ink.js.map diff --git a/ruixi/ruixi/ruixi/main.js b/ruixi/ruixi/ruixi/main.js deleted file mode 100644 index f46a338..0000000 --- a/ruixi/ruixi/ruixi/main.js +++ /dev/null @@ -1,439 +0,0 @@ -(function(storyContent) { - - // Create ink story from the content using inkjs - var story = new inkjs.Story(storyContent); - - var savePoint = ""; - - let savedTheme; - let globalTagTheme; - - // Global tags - those at the top of the ink file - // We support: - // # theme: dark - // # author: Your Name - var globalTags = story.globalTags; - if( globalTags ) { - for(var i=0; i { - console.log(`scrollingto ${previousBottomEdge}`) - scrollDown(previousBottomEdge) - } - - showAfter(delay, imageElement); - delay += 200.0; - } - - // LINK: url - else if( splitTag && splitTag.property == "LINK" ) { - window.location.href = splitTag.val; - } - - // LINKOPEN: url - else if( splitTag && splitTag.property == "LINKOPEN" ) { - window.open(splitTag.val); - } - - // BACKGROUND: src - else if( splitTag && splitTag.property == "BACKGROUND" ) { - outerScrollContainer.style.backgroundImage = 'url('+splitTag.val+')'; - } - - // CLASS: className - else if( splitTag && splitTag.property == "CLASS" ) { - customClasses.push(splitTag.val); - } - - // CLEAR - removes all existing content. - // RESTART - clears everything and restarts the story from the beginning - else if( tag == "CLEAR" || tag == "RESTART" ) { - removeAll("p"); - removeAll("img"); - - // Comment out this line if you want to leave the header visible when clearing - setVisible(".header", false); - - if( tag == "RESTART" ) { - restart(); - return; - } - } - } - - // Check if paragraphText is empty - if (paragraphText.trim().length == 0) { - continue; // Skip empty paragraphs - } - - // Create paragraph element (initially hidden) - var paragraphElement = document.createElement('p'); - paragraphElement.innerHTML = paragraphText; - storyContainer.appendChild(paragraphElement); - - // Add any custom classes derived from ink tags - for(var i=0; i${choice.text}` - }else{ - choiceParagraphElement.innerHTML = `${choice.text}` - } - storyContainer.appendChild(choiceParagraphElement); - - // Fade choice in after a short delay - showAfter(delay, choiceParagraphElement); - delay += 200.0; - - // Click on choice - if(isClickable){ - var choiceAnchorEl = choiceParagraphElement.querySelectorAll("a")[0]; - choiceAnchorEl.addEventListener("click", function(event) { - - // Don't follow link - event.preventDefault(); - - // Extend height to fit - // We do this manually so that removing elements and creating new ones doesn't - // cause the height (and therefore scroll) to jump backwards temporarily. - storyContainer.style.height = contentBottomEdgeY()+"px"; - - // Remove all existing choices - removeAll(".choice"); - - // Tell the story where to go next - story.ChooseChoiceIndex(choice.index); - - // This is where the save button will save from - savePoint = story.state.toJson(); - - // Aaand loop - continueStory(); - }); - } - }); - - // Unset storyContainer's height, allowing it to resize itself - storyContainer.style.height = ""; - - if( !firstTime ) - scrollDown(previousBottomEdge); - - } - - function restart() { - story.ResetState(); - - setVisible(".header", true); - - // set save point to here - savePoint = story.state.toJson(); - - continueStory(true); - - outerScrollContainer.scrollTo(0, 0); - } - - // ----------------------------------- - // Various Helper functions - // ----------------------------------- - - // Detects whether the user accepts animations - function isAnimationEnabled() { - return window.matchMedia('(prefers-reduced-motion: no-preference)').matches; - } - - // Fades in an element after a specified delay - function showAfter(delay, el) { - if( isAnimationEnabled() ) { - el.classList.add("hide"); - setTimeout(function() { el.classList.remove("hide") }, delay); - } else { - // If the user doesn't want animations, show immediately - el.classList.remove("hide"); - } - } - - // Scrolls the page down, but no further than the bottom edge of what you could - // see previously, so it doesn't go too far. - function scrollDown(previousBottomEdge) { - // If the user doesn't want animations, let them scroll manually - if ( !isAnimationEnabled() ) { - return; - } - - // Line up top of screen with the bottom of where the previous content ended - var target = previousBottomEdge; - - // Can't go further than the very bottom of the page - var limit = outerScrollContainer.scrollHeight - outerScrollContainer.clientHeight; - if( target > limit ) target = limit; - - var start = outerScrollContainer.scrollTop; - - var dist = target - start; - var duration = 300 + 300*dist/100; - var startTime = null; - function step(time) { - if( startTime == null ) startTime = time; - var t = (time-startTime) / duration; - var lerp = 3*t*t - 2*t*t*t; // ease in/out - outerScrollContainer.scrollTo(0, (1.0-lerp)*start + lerp*target); - if( t < 1 ) requestAnimationFrame(step); - } - requestAnimationFrame(step); - } - - // The Y coordinate of the bottom end of all the story content, used - // for growing the container, and deciding how far to scroll. - function contentBottomEdgeY() { - var bottomElement = storyContainer.lastElementChild; - return bottomElement ? bottomElement.offsetTop + bottomElement.offsetHeight : 0; - } - - // Remove all elements that match the given selector. Used for removing choices after - // you've picked one, as well as for the CLEAR and RESTART tags. - function removeAll(selector) - { - var allElements = storyContainer.querySelectorAll(selector); - for(var i=0; i":"paragraph_2"},{"->":"0.g-0"},{"#f":5}],"g-0":["done",{"#f":5}]}],"done",{"paragraph_2":[["^Out of all people, you had to be the one to discover the body. You want to scream, but you can't, and you know that if you do, there'll be repercussions. The terror feels like daylight beneath your skin in the neon of night.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_3"},{"#f":5}]}],{"#f":1}],"paragraph_3":[["^\"Who could have done this?\" the thought repeats its presence in the white velvet-coated study as the blood crusts slowly to a mediocre brown stain across the parquet floor.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_4"},{"#f":5}]}],{"#f":1}],"paragraph_4":[["^Dmitry ran into Katya's mother, Dolores, on the way to the prison. She was silk, saying, \"I thought I meant birth like the apparation of Summer approaching the South, but how wrong I was to give the gift of life to such a cruel woman.\" There she stands with her moon-shaven eyes against the delicately placed watermelons on the table of the street vendor selling fruit.","\n","^\"Are you going to buy anything? I'm about ready to pack up.\" the street vendor said interrupting the intense conversation we were having.","\n","^Dolores's son was originally sent to die in a some unimportant war while her daughter amounted the social ladder to become a laywer with cunning ambition. She was responsible for more executions than holidays in the Hebrew year.","\n","ev","str","^Continue","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n",{"->":"paragraph_5"},{"#f":5}]}],{"#f":1}],"paragraph_5":["^You spot a black notebook left on the bench by the traintracks. This is nice, to have something to discover. People should leave their belongings in public more often.","\n","^Face-down you fall onto the bed into a straight-jacket sleep. Your eyes gently-pressing to the sheets reveal all sorts of hypnagogic decompressions, decompressing into memories that you're not sure you can trust.","\n","end",{"#f":1}],"#f":1}],"listDefs":{}}; \ No newline at end of file diff --git a/ruixi/ruixi/ruixi/style.css b/ruixi/ruixi/ruixi/style.css deleted file mode 100644 index 112959c..0000000 --- a/ruixi/ruixi/ruixi/style.css +++ /dev/null @@ -1,306 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,700|Quattrocento:700'); - -body { - font-family: 'Open Sans', sans-serif; - font-weight: lighter; - background: white; - overflow: hidden; -} - -@media screen and (prefers-reduced-motion: no-preference) { - body.switched { - transition: color 0.6s, background-color 0.6s; - } -} - -h1, -h2 { - text-align: center; - font-family: "Quattrocento", Georgia, 'Times New Roman', Times, serif; - margin: 0; - padding: 0; -} - -h1 { - font-size: 30pt; - margin-bottom: 10px; -} - -h2 { - font-size: 14pt; - font-style: italic; - font-family: sans-serif; - font-weight: lighter; - color: #BBB; -} - -.header { - padding-top: 3em; - padding-bottom: 3em; -} - -/* - Built-in class: - # author: Name -*/ -.byline { - font-style: italic; -} - -.written-in-ink { - z-index: 3; - font-size: 9pt; - font-family: sans-serif; - text-align: center; - font-weight: 700; - position: fixed; - display: block; - width: 100%; - background: white; - margin: 0; - padding-top: 6px; - padding-bottom: 6px; - height: 14px; - top: 0; -} - -@media screen and (prefers-reduced-motion: no-preference) { - .written-in-ink { - transition: color 0.6s, background 0.6s; - } -} - -/* - Enables
-

WRITTEN IN INK

- -
- restart - save - load - theme -
- -
-
-

ruixi

- -
-
-