{"id":537,"date":"2025-07-19T16:46:34","date_gmt":"2025-07-19T06:46:34","guid":{"rendered":"https:\/\/nonlinearexperience.com\/?p=537"},"modified":"2025-07-19T16:57:19","modified_gmt":"2025-07-19T06:57:19","slug":"events","status":"publish","type":"post","link":"https:\/\/nonlinearexperience.com\/index.php\/2025\/07\/19\/events\/","title":{"rendered":"Events"},"content":{"rendered":"<h1 class=\"wp-block-post-title\">Events<\/h1>\n\n\n<p class=\"wp-block-paragraph\">See also:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">System:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><strong>Event cues<\/strong><\/h6>\n\n\n\n<p class=\"wp-block-paragraph\">two types:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>person behaviour loop<\/li>\n\n\n\n<li>global map cutscene<\/li>\n\n\n\n<li><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These are canned behaviours<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keep in mind when authoring &#8211; that if you keep going in a direction, you need to be aware about the edge of the map\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An example of a loop that a characer could walk in:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nCODE HERE\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">{type: &#8220;walk&#8221;, direction: &#8220;left&#8221;},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{type: &#8220;stand&#8221;, direction: &#8220;up&#8221;, time: 800 },<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{type: &#8220;walk&#8221;, direction: &#8220;up&#8221;},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{type: &#8220;walk&#8221;, direction: &#8220;right&#8221;},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{type: &#8220;walk&#8221;, direction: &#8220;down&#8221;},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider having these stored somewhere that then they can swap between randomly\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Event system<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is the battle system as an example of creating something &#8211;&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To make an absolute basic battle event that we can go into, do the following (and this is a starting point for any other sub-game concepts etc.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make a folder<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Battle<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Then, make 4 js files:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Battle.js<\/li>\n\n\n\n<li>Combatant.js<\/li>\n\n\n\n<li>SubmissionMenu.js<\/li>\n\n\n\n<li>Team.js<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Also, make 4 CSS files:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Battle.css<\/li>\n\n\n\n<li>Combatant.css<\/li>\n\n\n\n<li>SubmissionMenu.css<\/li>\n\n\n\n<li>Team.css<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In <strong>index.html<\/strong>, make a section called &#8216;&#8211; Battle \u2013&#8217; Order doesn&#8217;t matter for these\u2026- but make sure you add the Battle folder into the path\u2026 Do this both for CSS and JS files:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;!-- Battle css --&gt;\n&lt;link href=&quot;styles\/Battle.css&quot; type=&quot;text\/css&quot; rel=&quot;stylesheet&quot;&gt;\n&lt;link href=&quot;styles\/Combatant.css&quot; type=&quot;text\/css&quot; rel=&quot;stylesheet&quot;&gt;\n&lt;link href=&quot;styles\/SubmissionMenu.css&quot; type=&quot;text\/css&quot; rel=&quot;stylesheet&quot;&gt;\n&lt;link href=&quot;styles\/Team.css&quot; type=&quot;text\/css&quot; rel=&quot;stylesheet&quot;&gt;\n\n&lt;!-- Battle --&gt;\n&lt;script src=&quot;Battle\/Battle.js&quot;&gt;&lt;\/script&gt;\n&lt;script src=&quot;Battle\/Combatant.js&quot;&gt;&lt;\/script&gt;\n&lt;script src=&quot;Battle\/SubmissionMenu.js&quot;&gt;&lt;\/script&gt;\n&lt;script src=&quot;Battle\/Team.js&quot;&gt;&lt;\/script&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Battle.js<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Makes some dom and injects it<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is all created in &#8216;createElement&#8217;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ncreateElement() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ our starting state: &lt;div&gt;&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.element = document.createElement(&quot;div&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ &lt;div class=&quot;Battle&quot;&gt;&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.element.classList.add(&quot;Battle&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ This is then added to the Battle div...\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.element.innerHTML = (`\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=&quot;Battle_hero&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img src=&quot;${&#039;images\/characters\/people\/hero.png&#039;}&quot; alt=&quot;Hero&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=&quot;Battle_enemy&quot;&gt;\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img src=&quot;${&#039;images\/characters\/people\/npc3.png&#039;}&quot; alt=&quot;Enemy&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0`)\n\u00a0\u00a0\u00a0\u00a0}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Then, init it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ninit(container) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.createElement();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0container.appendChild(this.element);\n\u00a0\u00a0\u00a0\u00a0}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Will need a LOT of CSS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Battle.css<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hugs corners of screen and overlays on top of everything\u2026<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n.Battle {\n\u00a0\u00a0\u00a0\u00a0position: absolute;\n\u00a0\u00a0\u00a0\u00a0left: 0;\n\u00a0\u00a0\u00a0\u00a0right: 0;\n\u00a0\u00a0\u00a0\u00a0top: 0;\n\u00a0\u00a0\u00a0\u00a0bottom: 0;\n\u00a0\u00a0\u00a0\u00a0background-image: url(..\/images\/maps\/StreetBattle.png);\n\u00a0\u00a0\u00a0\u00a0background-size: cover;\n\u00a0\u00a0\u00a0\u00a0image-rendering: pixelated;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Then, add it into <strong>Overworld.js<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;this.map.startCutscene([<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{type: &#8220;battle&#8221; }&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;])<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, we need to handle this type of event in <strong>OverworldEvent.js<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;battle(resolve){<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const battle = new Battle({<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onComplete: () =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Element we want to inject battle into<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;battle.init(document.querySelector(&#8220;.game-container&#8221;));<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If doing this standalone, we just need to create a battle instance and inject it into the dam (e.g. don&#8217;t need resolvers)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, it works, but it UGLY.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See also: System: Event cues two types: These are canned behaviours Keep in mind when authoring &#8211; that if you keep going in a direction, you need to be aware about the edge of the map\u2026 An example of a loop that a characer could walk in: {type: &#8220;walk&#8221;, direction: &#8220;left&#8221;}, {type: &#8220;stand&#8221;, direction: &#8220;up&#8221;, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"wp-custom-template-nlx-the-knowledge-page","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-537","post","type-post","status-publish","format-standard","hentry","category-the-knowledge"],"_links":{"self":[{"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/posts\/537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/comments?post=537"}],"version-history":[{"count":2,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/posts\/537\/revisions"}],"predecessor-version":[{"id":541,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/posts\/537\/revisions\/541"}],"wp:attachment":[{"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/media?parent=537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/categories?post=537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nonlinearexperience.com\/index.php\/wp-json\/wp\/v2\/tags?post=537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}