This commit is contained in:
thepaperpilot 2023-05-18 15:19:08 +00:00
parent 5a4feaff89
commit 9aa275eee0
225 changed files with 455 additions and 455 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{_ as t,c as n,o as a,a as e,b as o}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Introduction to Incremental Game Design","description":"","frontmatter":{"title":"Introduction to Incremental Game Design"},"headers":[],"relativePath":"guide-to-incrementals/design/introduction.md","lastUpdated":null}'),i={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[o("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-hidden":"true"},"#")],-1),c=[r];function s(d,m,l,_,u,g){return a(),n("div",null,c)}const f=t(i,[["render",s]]);export{h as __pageData,f as default};
import{_ as t,c as n,o as a,a as e,b as o}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Introduction to Incremental Game Design","description":"","frontmatter":{"title":"Introduction to Incremental Game Design"},"headers":[],"relativePath":"guide-to-incrementals/design/introduction.md","lastUpdated":null}'),i={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[o("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-hidden":"true"},"#")],-1),c=[r];function s(d,m,l,_,u,g){return a(),n("div",null,c)}const f=t(i,[["render",s]]);export{h as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as t,c as n,o as a,a as e,b as o}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Introduction to Incremental Game Design","description":"","frontmatter":{"title":"Introduction to Incremental Game Design"},"headers":[],"relativePath":"guide-to-incrementals/design/introduction.md","lastUpdated":null}'),i={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[o("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-hidden":"true"},"#")],-1),c=[r];function s(d,m,l,_,u,g){return a(),n("div",null,c)}const f=t(i,[["render",s]]);export{h as __pageData,f as default};
import{_ as t,c as n,o as a,a as e,b as o}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Introduction to Incremental Game Design","description":"","frontmatter":{"title":"Introduction to Incremental Game Design"},"headers":[],"relativePath":"guide-to-incrementals/design/introduction.md","lastUpdated":null}'),i={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[o("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-hidden":"true"},"#")],-1),c=[r];function s(d,m,l,_,u,g){return a(),n("div",null,c)}const f=t(i,[["render",s]]);export{h as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as n}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[{"level":2,"title":"Who am I?","slug":"who-am-i","link":"#who-am-i","children":[]}],"relativePath":"guide-to-incrementals/index.md","lastUpdated":null}'),o={name:"guide-to-incrementals/index.md"},i=n('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-hidden="true">#</a></h1><p>This is a comprehensive guide to Incremental Games, a genre of video games. It will explore defining the genre, why it&#39;s appealing, and how to design and build your own incremental game. Along the way will be interactive examples, snippets from other creators, and relevant material to contextualize everything.</p><blockquote><p>Note: This is an incomplete document. I want to keep adding opinions and opposing views from other incremental games developers, and add interactive examples to illustrate various points regarding game design and balancing. Consider this a living document - and see the changelog at the end.</p></blockquote><h2 id="who-am-i" tabindex="-1">Who am I? <a class="header-anchor" href="#who-am-i" aria-hidden="true">#</a></h2><p>That&#39;s a good question! What authority do I have to be making this site? I haven&#39;t made the best incremental games, nor the most incremental games, certainly not the most popular ones either. I do have some formal education in game development, know a lot of incremental game devs, as well as other game devs, and an interest in ludology, classifying genres, etc. I&#39;ve also made <a href="https://thepaperpilot.org" target="_blank" rel="noreferrer">a couple of incremental games</a> myself.</p><p>If you have any additional questions about my credentials or anything on this site, feel free to contact me: I&#39;m &quot;The Paper Pilot&quot; on most social media. You&#39;ll probably get a response fastest via <a href="https://discord.gg/F3xveHV" target="_blank" rel="noreferrer">my discord server</a>, or if you just want to suggest changes to the website you can click the &quot;Edit this page&quot; link present on every single page.</p>',6),r=[i];function s(l,d,c,h,m,p){return a(),t("div",null,r)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default};
import{_ as e,c as t,o as a,d as n}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[{"level":2,"title":"Who am I?","slug":"who-am-i","link":"#who-am-i","children":[]}],"relativePath":"guide-to-incrementals/index.md","lastUpdated":null}'),o={name:"guide-to-incrementals/index.md"},i=n('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-hidden="true">#</a></h1><p>This is a comprehensive guide to Incremental Games, a genre of video games. It will explore defining the genre, why it&#39;s appealing, and how to design and build your own incremental game. Along the way will be interactive examples, snippets from other creators, and relevant material to contextualize everything.</p><blockquote><p>Note: This is an incomplete document. I want to keep adding opinions and opposing views from other incremental games developers, and add interactive examples to illustrate various points regarding game design and balancing. Consider this a living document - and see the changelog at the end.</p></blockquote><h2 id="who-am-i" tabindex="-1">Who am I? <a class="header-anchor" href="#who-am-i" aria-hidden="true">#</a></h2><p>That&#39;s a good question! What authority do I have to be making this site? I haven&#39;t made the best incremental games, nor the most incremental games, certainly not the most popular ones either. I do have some formal education in game development, know a lot of incremental game devs, as well as other game devs, and an interest in ludology, classifying genres, etc. I&#39;ve also made <a href="https://thepaperpilot.org" target="_blank" rel="noreferrer">a couple of incremental games</a> myself.</p><p>If you have any additional questions about my credentials or anything on this site, feel free to contact me: I&#39;m &quot;The Paper Pilot&quot; on most social media. You&#39;ll probably get a response fastest via <a href="https://discord.gg/F3xveHV" target="_blank" rel="noreferrer">my discord server</a>, or if you just want to suggest changes to the website you can click the &quot;Edit this page&quot; link present on every single page.</p>',6),r=[i];function s(l,d,c,h,m,p){return a(),t("div",null,r)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as n}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[{"level":2,"title":"Who am I?","slug":"who-am-i","link":"#who-am-i","children":[]}],"relativePath":"guide-to-incrementals/index.md","lastUpdated":null}'),o={name:"guide-to-incrementals/index.md"},i=n("",6),r=[i];function s(l,d,c,h,m,p){return a(),t("div",null,r)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default};
import{_ as e,c as t,o as a,d as n}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[{"level":2,"title":"Who am I?","slug":"who-am-i","link":"#who-am-i","children":[]}],"relativePath":"guide-to-incrementals/index.md","lastUpdated":null}'),o={name:"guide-to-incrementals/index.md"},i=n("",6),r=[i];function s(l,d,c,h,m,p){return a(),t("div",null,r)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as n}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Appeal to Developers","description":"","frontmatter":{"title":"Appeal to Developers"},"headers":[{"level":2,"title":"Incrementals are Easy to Make","slug":"incrementals-are-easy-to-make","link":"#incrementals-are-easy-to-make","children":[]},{"level":2,"title":"Players are Easy to Find","slug":"players-are-easy-to-find","link":"#players-are-easy-to-find","children":[]},{"level":2,"title":"Monetization","slug":"monetization","link":"#monetization","children":[]}],"relativePath":"guide-to-incrementals/ludology/appeal-developers.md","lastUpdated":null}'),o={name:"guide-to-incrementals/ludology/appeal-developers.md"},i=n("",13),r=[i];function l(s,d,m,c,p,h){return t(),a("div",null,r)}const g=e(o,[["render",l]]);export{y as __pageData,g as default};
import{_ as e,c as a,o as t,d as n}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Appeal to Developers","description":"","frontmatter":{"title":"Appeal to Developers"},"headers":[{"level":2,"title":"Incrementals are Easy to Make","slug":"incrementals-are-easy-to-make","link":"#incrementals-are-easy-to-make","children":[]},{"level":2,"title":"Players are Easy to Find","slug":"players-are-easy-to-find","link":"#players-are-easy-to-find","children":[]},{"level":2,"title":"Monetization","slug":"monetization","link":"#monetization","children":[]}],"relativePath":"guide-to-incrementals/ludology/appeal-developers.md","lastUpdated":null}'),o={name:"guide-to-incrementals/ludology/appeal-developers.md"},i=n("",13),r=[i];function l(s,d,m,c,p,h){return t(),a("div",null,r)}const g=e(o,[["render",l]]);export{y as __pageData,g as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as i}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Appeal to Players","description":"","frontmatter":{"title":"Appeal to Players"},"headers":[{"level":2,"title":"Numbers Going Up","slug":"numbers-going-up","link":"#numbers-going-up","children":[]},{"level":2,"title":"Progression","slug":"progression","link":"#progression","children":[]},{"level":2,"title":"Effortlessness","slug":"effortlessness","link":"#effortlessness","children":[]},{"level":2,"title":"Addiction","slug":"addiction","link":"#addiction","children":[]},{"level":2,"title":"Strategy","slug":"strategy","link":"#strategy","children":[]},{"level":2,"title":"Avoiding Staleness","slug":"avoiding-staleness","link":"#avoiding-staleness","children":[]},{"level":2,"title":"Good Game Design","slug":"good-game-design","link":"#good-game-design","children":[]},{"level":2,"title":"Artistic Merit","slug":"artistic-merit","link":"#artistic-merit","children":[]}],"relativePath":"guide-to-incrementals/ludology/appeal-gamers.md","lastUpdated":null}'),n={name:"guide-to-incrementals/ludology/appeal-gamers.md"},o=i("",28),s=[o];function r(l,h,m,g,d,c){return a(),t("div",null,s)}const y=e(n,[["render",r]]);export{u as __pageData,y as default};
import{_ as e,c as t,o as a,d as i}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Appeal to Players","description":"","frontmatter":{"title":"Appeal to Players"},"headers":[{"level":2,"title":"Numbers Going Up","slug":"numbers-going-up","link":"#numbers-going-up","children":[]},{"level":2,"title":"Progression","slug":"progression","link":"#progression","children":[]},{"level":2,"title":"Effortlessness","slug":"effortlessness","link":"#effortlessness","children":[]},{"level":2,"title":"Addiction","slug":"addiction","link":"#addiction","children":[]},{"level":2,"title":"Strategy","slug":"strategy","link":"#strategy","children":[]},{"level":2,"title":"Avoiding Staleness","slug":"avoiding-staleness","link":"#avoiding-staleness","children":[]},{"level":2,"title":"Good Game Design","slug":"good-game-design","link":"#good-game-design","children":[]},{"level":2,"title":"Artistic Merit","slug":"artistic-merit","link":"#artistic-merit","children":[]}],"relativePath":"guide-to-incrementals/ludology/appeal-gamers.md","lastUpdated":null}'),n={name:"guide-to-incrementals/ludology/appeal-gamers.md"},o=i("",28),s=[o];function r(l,h,m,g,d,c){return a(),t("div",null,s)}const y=e(n,[["render",r]]);export{u as __pageData,y as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as n}from"./app.c95a51e0.js";const p=JSON.parse('{"title":"What is Content?","description":"","frontmatter":{"title":"What is Content?"},"headers":[{"level":2,"title":"Interaction","slug":"interaction","link":"#interaction","children":[{"level":3,"title":"Repeatable Purchases","slug":"repeatable-purchases","link":"#repeatable-purchases","children":[]}]},{"level":2,"title":"Following Instructions","slug":"following-instructions","link":"#following-instructions","children":[]},{"level":2,"title":"Automation","slug":"automation","link":"#automation","children":[]},{"level":2,"title":"Tips for Developers","slug":"tips-for-developers","link":"#tips-for-developers","children":[]}],"relativePath":"guide-to-incrementals/ludology/content.md","lastUpdated":null}'),o={name:"guide-to-incrementals/ludology/content.md"},i=n("",23),s=[i];function r(h,l,c,u,m,d){return a(),t("div",null,s)}const f=e(o,[["render",r]]);export{p as __pageData,f as default};
import{_ as e,c as t,o as a,d as n}from"./app.830f7d24.js";const p=JSON.parse('{"title":"What is Content?","description":"","frontmatter":{"title":"What is Content?"},"headers":[{"level":2,"title":"Interaction","slug":"interaction","link":"#interaction","children":[{"level":3,"title":"Repeatable Purchases","slug":"repeatable-purchases","link":"#repeatable-purchases","children":[]}]},{"level":2,"title":"Following Instructions","slug":"following-instructions","link":"#following-instructions","children":[]},{"level":2,"title":"Automation","slug":"automation","link":"#automation","children":[]},{"level":2,"title":"Tips for Developers","slug":"tips-for-developers","link":"#tips-for-developers","children":[]}],"relativePath":"guide-to-incrementals/ludology/content.md","lastUpdated":null}'),o={name:"guide-to-incrementals/ludology/content.md"},i=n("",23),s=[i];function r(h,l,c,u,m,d){return a(),t("div",null,s)}const f=e(o,[["render",r]]);export{p as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as r}from"./app.c95a51e0.js";const p=JSON.parse('{"title":"Defining the Genre","description":"","frontmatter":{"title":"Defining the Genre"},"headers":[{"level":2,"title":"Incrementals vs Idlers vs Clickers","slug":"incrementals-vs-idlers-vs-clickers","link":"#incrementals-vs-idlers-vs-clickers","children":[]},{"level":2,"title":"Incrementals as Parodies","slug":"incrementals-as-parodies","link":"#incrementals-as-parodies","children":[]},{"level":2,"title":"Incrementals as NGU","slug":"incrementals-as-ngu","link":"#incrementals-as-ngu","children":[]},{"level":2,"title":"Incrementals as Strategies","slug":"incrementals-as-strategies","link":"#incrementals-as-strategies","children":[]},{"level":2,"title":"Roguelites as Incrementals?","slug":"roguelites-as-incrementals","link":"#roguelites-as-incrementals","children":[{"level":3,"title":"The Berlin Interpretation","slug":"the-berlin-interpretation","link":"#the-berlin-interpretation","children":[]},{"level":3,"title":"The Incremental Games Canon","slug":"the-incremental-games-canon","link":"#the-incremental-games-canon","children":[]},{"level":3,"title":"The Paradigm Shift","slug":"the-paradigm-shift","link":"#the-paradigm-shift","children":[]},{"level":3,"title":"High-Value Factors","slug":"high-value-factors","link":"#high-value-factors","children":[]},{"level":3,"title":"Low-Value Factors","slug":"low-value-factors","link":"#low-value-factors","children":[]},{"level":3,"title":"Are Roguelites Incrementals?","slug":"are-roguelites-incrementals","link":"#are-roguelites-incrementals","children":[]}]},{"level":2,"title":"Sub-Genres","slug":"sub-genres","link":"#sub-genres","children":[]},{"level":2,"title":"Other Related Genres","slug":"other-related-genres","link":"#other-related-genres","children":[]}],"relativePath":"guide-to-incrementals/ludology/definition.md","lastUpdated":null}'),n={name:"guide-to-incrementals/ludology/definition.md"},i=r("",61),o=[i];function s(l,h,m,c,g,d){return a(),t("div",null,o)}const f=e(n,[["render",s]]);export{p as __pageData,f as default};
import{_ as e,c as t,o as a,d as r}from"./app.830f7d24.js";const p=JSON.parse('{"title":"Defining the Genre","description":"","frontmatter":{"title":"Defining the Genre"},"headers":[{"level":2,"title":"Incrementals vs Idlers vs Clickers","slug":"incrementals-vs-idlers-vs-clickers","link":"#incrementals-vs-idlers-vs-clickers","children":[]},{"level":2,"title":"Incrementals as Parodies","slug":"incrementals-as-parodies","link":"#incrementals-as-parodies","children":[]},{"level":2,"title":"Incrementals as NGU","slug":"incrementals-as-ngu","link":"#incrementals-as-ngu","children":[]},{"level":2,"title":"Incrementals as Strategies","slug":"incrementals-as-strategies","link":"#incrementals-as-strategies","children":[]},{"level":2,"title":"Roguelites as Incrementals?","slug":"roguelites-as-incrementals","link":"#roguelites-as-incrementals","children":[{"level":3,"title":"The Berlin Interpretation","slug":"the-berlin-interpretation","link":"#the-berlin-interpretation","children":[]},{"level":3,"title":"The Incremental Games Canon","slug":"the-incremental-games-canon","link":"#the-incremental-games-canon","children":[]},{"level":3,"title":"The Paradigm Shift","slug":"the-paradigm-shift","link":"#the-paradigm-shift","children":[]},{"level":3,"title":"High-Value Factors","slug":"high-value-factors","link":"#high-value-factors","children":[]},{"level":3,"title":"Low-Value Factors","slug":"low-value-factors","link":"#low-value-factors","children":[]},{"level":3,"title":"Are Roguelites Incrementals?","slug":"are-roguelites-incrementals","link":"#are-roguelites-incrementals","children":[]}]},{"level":2,"title":"Sub-Genres","slug":"sub-genres","link":"#sub-genres","children":[]},{"level":2,"title":"Other Related Genres","slug":"other-related-genres","link":"#other-related-genres","children":[]}],"relativePath":"guide-to-incrementals/ludology/definition.md","lastUpdated":null}'),n={name:"guide-to-incrementals/ludology/definition.md"},i=r("",61),o=[i];function s(l,h,m,c,g,d){return a(),t("div",null,o)}const f=e(n,[["render",s]]);export{p as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a}from"./app.c95a51e0.js";const m=JSON.parse(`{"title":"The Paper Pilot","description":"","frontmatter":{"title":"The Paper Pilot","layout":"home","hero":{"name":"The Paper Pilot","tagline":"I'm Anthony, or The Paper Pilot, and I make fun games and tools!","actions":[{"theme":"brand","text":"My Projects","link":"/projects/"}]}},"headers":[],"relativePath":"index.md","lastUpdated":1684372048000}`),o={name:"index.md"};function n(r,s,i,c,d,p){return a(),t("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};
import{_ as e,c as t,o as a}from"./app.830f7d24.js";const m=JSON.parse(`{"title":"The Paper Pilot","description":"","frontmatter":{"title":"The Paper Pilot","layout":"home","hero":{"name":"The Paper Pilot","tagline":"I'm Anthony, or The Paper Pilot, and I make fun games and tools!","actions":[{"theme":"brand","text":"My Projects","link":"/projects/"}]}},"headers":[],"relativePath":"index.md","lastUpdated":1684423091000}`),o={name:"index.md"};function n(r,s,i,c,d,p){return a(),t("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a}from"./app.c95a51e0.js";const m=JSON.parse(`{"title":"The Paper Pilot","description":"","frontmatter":{"title":"The Paper Pilot","layout":"home","hero":{"name":"The Paper Pilot","tagline":"I'm Anthony, or The Paper Pilot, and I make fun games and tools!","actions":[{"theme":"brand","text":"My Projects","link":"/projects/"}]}},"headers":[],"relativePath":"index.md","lastUpdated":1684372048000}`),o={name:"index.md"};function n(r,s,i,c,d,p){return a(),t("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};
import{_ as e,c as t,o as a}from"./app.830f7d24.js";const m=JSON.parse(`{"title":"The Paper Pilot","description":"","frontmatter":{"title":"The Paper Pilot","layout":"home","hero":{"name":"The Paper Pilot","tagline":"I'm Anthony, or The Paper Pilot, and I make fun games and tools!","actions":[{"theme":"brand","text":"My Projects","link":"/projects/"}]}},"headers":[],"relativePath":"index.md","lastUpdated":1684423091000}`),o={name:"index.md"};function n(r,s,i,c,d,p){return a(),t("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as r}from"./app.c95a51e0.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[{"level":2,"title":"Engine","slug":"engine","link":"#engine","children":[]},{"level":2,"title":"Babble Movie Maker","slug":"babble-movie-maker","link":"#babble-movie-maker","children":[]}],"relativePath":"projects/babble/index.md","lastUpdated":1684372048000}'),n={name:"projects/babble/index.md"},i=r('<h1 id="babble-buds" tabindex="-1">Babble Buds <a class="header-anchor" href="#babble-buds" aria-hidden="true">#</a></h1><p><a href="http://babblebuds.xyz/" target="_blank" rel="noreferrer">Babble Buds Homepage</a></p><p>Source Code:</p><ul><li><a href="https://github.com/thepaperpilot/Babble-Buds" target="_blank" rel="noreferrer">Babble Buds</a></li><li><a href="https://github.com/thepaperpilot/BabbleMovieMaker" target="_blank" rel="noreferrer">Babble Movie Maker</a></li><li><a href="https://github.com/thepaperpilot/babble.js" target="_blank" rel="noreferrer">babble.js</a></li><li><a href="https://github.com/thepaperpilot/babble.cs" target="_blank" rel="noreferrer">babble.cs</a></li></ul><p>Babble buds is a free, open-source virtual puppet show software. It is heavily based on the non-public software called &quot;Puppet Pals&quot;, used in URealms Live. The software is written in javascript using React, a rendering library called PIXI.js, and electron.</p><p>Users can create puppets with different faces for different emotions, and then use the puppet on a stage where you and other users can each make your respective puppets move, change emotions, and &quot;babble&quot; at each other. The stage has a green screen feature and can be popped out, which gives the users tons of possibilities in terms of using the program for a role-playing live stream, faux video chatting with friends, game development, or whatever else you want!</p><p>Users can connect to the public server and create private rooms so that they and their friends can see each other&#39;s puppets and use the software however they please. For the security conscious, you can also use the server&#39;s source code to self-host your private server.</p><p><img src="'+s+'" alt="Babble Buds Screenshot"></p><h2 id="engine" tabindex="-1">Engine <a class="header-anchor" href="#engine" aria-hidden="true">#</a></h2><p>The engine originally made to make the Babble Buds program was separated into a separate engine called <code>babble.js</code>, so that projects created in Babble Buds can be used in other projects. For example, a game can create puppets in Babble Buds and then use them for cutscenes or player agency inside of the game. Additionally, it has been ported to C# (called <code>babble.cs</code>) for use with Unity, for the same kinds of purposes. You can check out <a href="https://thepaperpilot.itch.io/tower-offense" target="_blank" rel="noreferrer">Tower Offense</a> for a pixi.js game using Babble Buds puppets for the cutscenes, or <a href="./../dice/">Dice Armor</a> for a unity game using Babble Buds puppets for the cutscenes.</p><h2 id="babble-movie-maker" tabindex="-1">Babble Movie Maker <a class="header-anchor" href="#babble-movie-maker" aria-hidden="true">#</a></h2><p>Babble Movie Maker is a cutscene editor for Babble Buds puppets. You open a babble buds project in it, and you can add actors to a stage and have them move and change expressions, etc., on a timeline. You can then use the cutscene in a game using <code>babble.js</code> or <code>babble.cs</code>, or export the cutscene into a video file. There is even support for defining custom commands with custom fields, so that if you&#39;ve expanded upon the default actions provided in <code>babble.js</code> or <code>babble.cs</code>, you can still use Movie Maker to create your cutscenes.</p><p><img src="'+o+'" alt="Babble MM Screenshot"></p>',13),b=[i];function c(l,p,d,h,u,f){return t(),a("div",null,b)}const v=e(n,[["render",c]]);export{g as __pageData,v as default};
import{_ as e,c as a,o as t,d as r}from"./app.830f7d24.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[{"level":2,"title":"Engine","slug":"engine","link":"#engine","children":[]},{"level":2,"title":"Babble Movie Maker","slug":"babble-movie-maker","link":"#babble-movie-maker","children":[]}],"relativePath":"projects/babble/index.md","lastUpdated":1684423091000}'),n={name:"projects/babble/index.md"},i=r('<h1 id="babble-buds" tabindex="-1">Babble Buds <a class="header-anchor" href="#babble-buds" aria-hidden="true">#</a></h1><p><a href="http://babblebuds.xyz/" target="_blank" rel="noreferrer">Babble Buds Homepage</a></p><p>Source Code:</p><ul><li><a href="https://github.com/thepaperpilot/Babble-Buds" target="_blank" rel="noreferrer">Babble Buds</a></li><li><a href="https://github.com/thepaperpilot/BabbleMovieMaker" target="_blank" rel="noreferrer">Babble Movie Maker</a></li><li><a href="https://github.com/thepaperpilot/babble.js" target="_blank" rel="noreferrer">babble.js</a></li><li><a href="https://github.com/thepaperpilot/babble.cs" target="_blank" rel="noreferrer">babble.cs</a></li></ul><p>Babble buds is a free, open-source virtual puppet show software. It is heavily based on the non-public software called &quot;Puppet Pals&quot;, used in URealms Live. The software is written in javascript using React, a rendering library called PIXI.js, and electron.</p><p>Users can create puppets with different faces for different emotions, and then use the puppet on a stage where you and other users can each make your respective puppets move, change emotions, and &quot;babble&quot; at each other. The stage has a green screen feature and can be popped out, which gives the users tons of possibilities in terms of using the program for a role-playing live stream, faux video chatting with friends, game development, or whatever else you want!</p><p>Users can connect to the public server and create private rooms so that they and their friends can see each other&#39;s puppets and use the software however they please. For the security conscious, you can also use the server&#39;s source code to self-host your private server.</p><p><img src="'+s+'" alt="Babble Buds Screenshot"></p><h2 id="engine" tabindex="-1">Engine <a class="header-anchor" href="#engine" aria-hidden="true">#</a></h2><p>The engine originally made to make the Babble Buds program was separated into a separate engine called <code>babble.js</code>, so that projects created in Babble Buds can be used in other projects. For example, a game can create puppets in Babble Buds and then use them for cutscenes or player agency inside of the game. Additionally, it has been ported to C# (called <code>babble.cs</code>) for use with Unity, for the same kinds of purposes. You can check out <a href="https://thepaperpilot.itch.io/tower-offense" target="_blank" rel="noreferrer">Tower Offense</a> for a pixi.js game using Babble Buds puppets for the cutscenes, or <a href="./../dice/">Dice Armor</a> for a unity game using Babble Buds puppets for the cutscenes.</p><h2 id="babble-movie-maker" tabindex="-1">Babble Movie Maker <a class="header-anchor" href="#babble-movie-maker" aria-hidden="true">#</a></h2><p>Babble Movie Maker is a cutscene editor for Babble Buds puppets. You open a babble buds project in it, and you can add actors to a stage and have them move and change expressions, etc., on a timeline. You can then use the cutscene in a game using <code>babble.js</code> or <code>babble.cs</code>, or export the cutscene into a video file. There is even support for defining custom commands with custom fields, so that if you&#39;ve expanded upon the default actions provided in <code>babble.js</code> or <code>babble.cs</code>, you can still use Movie Maker to create your cutscenes.</p><p><img src="'+o+'" alt="Babble MM Screenshot"></p>',13),b=[i];function c(l,p,d,h,u,f){return t(),a("div",null,b)}const v=e(n,[["render",c]]);export{g as __pageData,v as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as r}from"./app.c95a51e0.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[{"level":2,"title":"Engine","slug":"engine","link":"#engine","children":[]},{"level":2,"title":"Babble Movie Maker","slug":"babble-movie-maker","link":"#babble-movie-maker","children":[]}],"relativePath":"projects/babble/index.md","lastUpdated":1684372048000}'),n={name:"projects/babble/index.md"},i=r("",13),b=[i];function c(l,p,d,h,u,f){return t(),a("div",null,b)}const v=e(n,[["render",c]]);export{g as __pageData,v as default};
import{_ as e,c as a,o as t,d as r}from"./app.830f7d24.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[{"level":2,"title":"Engine","slug":"engine","link":"#engine","children":[]},{"level":2,"title":"Babble Movie Maker","slug":"babble-movie-maker","link":"#babble-movie-maker","children":[]}],"relativePath":"projects/babble/index.md","lastUpdated":1684423091000}'),n={name:"projects/babble/index.md"},i=r("",13),b=[i];function c(l,p,d,h,u,f){return t(),a("div",null,b)}const v=e(n,[["render",c]]);export{g as __pageData,v as default};

View file

@ -1 +1 @@
import{_ as a,c as r,o as s,a as e,b as t}from"./app.c95a51e0.js";const n="/assets/screenshot.f2631300.png",C=JSON.parse('{"title":"Capture the Citadel","description":"","frontmatter":{"title":"Capture the Citadel"},"headers":[],"relativePath":"projects/citadel/index.md","lastUpdated":1684372048000}'),o={name:"projects/citadel/index.md"},i=e("h1",{id:"capture-the-citadel",tabindex:"-1"},[t("Capture the Citadel "),e("a",{class:"header-anchor",href:"#capture-the-citadel","aria-hidden":"true"},"#")],-1),c=e("p",null,"A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee for their VR class in college's final project.",-1),d=e("p",null,[t("For more details, visit "),e("a",{href:"https://grantcbarbee.github.io/conquer-the-citadel.html",target:"_blank",rel:"noreferrer"},"Grant's page on the game"),t(".")],-1),l=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,d,l];function p(_,u,f,m,g,b){return s(),r("div",null,h)}const v=a(o,[["render",p]]);export{C as __pageData,v as default};
import{_ as a,c as r,o as s,a as e,b as t}from"./app.830f7d24.js";const n="/assets/screenshot.f2631300.png",C=JSON.parse('{"title":"Capture the Citadel","description":"","frontmatter":{"title":"Capture the Citadel"},"headers":[],"relativePath":"projects/citadel/index.md","lastUpdated":1684423091000}'),o={name:"projects/citadel/index.md"},i=e("h1",{id:"capture-the-citadel",tabindex:"-1"},[t("Capture the Citadel "),e("a",{class:"header-anchor",href:"#capture-the-citadel","aria-hidden":"true"},"#")],-1),c=e("p",null,"A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee for their VR class in college's final project.",-1),d=e("p",null,[t("For more details, visit "),e("a",{href:"https://grantcbarbee.github.io/conquer-the-citadel.html",target:"_blank",rel:"noreferrer"},"Grant's page on the game"),t(".")],-1),l=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,d,l];function p(_,u,f,m,g,b){return s(),r("div",null,h)}const v=a(o,[["render",p]]);export{C as __pageData,v as default};

View file

@ -1 +1 @@
import{_ as a,c as r,o as s,a as e,b as t}from"./app.c95a51e0.js";const n="/assets/screenshot.f2631300.png",C=JSON.parse('{"title":"Capture the Citadel","description":"","frontmatter":{"title":"Capture the Citadel"},"headers":[],"relativePath":"projects/citadel/index.md","lastUpdated":1684372048000}'),o={name:"projects/citadel/index.md"},i=e("h1",{id:"capture-the-citadel",tabindex:"-1"},[t("Capture the Citadel "),e("a",{class:"header-anchor",href:"#capture-the-citadel","aria-hidden":"true"},"#")],-1),c=e("p",null,"A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee for their VR class in college's final project.",-1),d=e("p",null,[t("For more details, visit "),e("a",{href:"https://grantcbarbee.github.io/conquer-the-citadel.html",target:"_blank",rel:"noreferrer"},"Grant's page on the game"),t(".")],-1),l=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,d,l];function p(_,u,f,m,g,b){return s(),r("div",null,h)}const v=a(o,[["render",p]]);export{C as __pageData,v as default};
import{_ as a,c as r,o as s,a as e,b as t}from"./app.830f7d24.js";const n="/assets/screenshot.f2631300.png",C=JSON.parse('{"title":"Capture the Citadel","description":"","frontmatter":{"title":"Capture the Citadel"},"headers":[],"relativePath":"projects/citadel/index.md","lastUpdated":1684423091000}'),o={name:"projects/citadel/index.md"},i=e("h1",{id:"capture-the-citadel",tabindex:"-1"},[t("Capture the Citadel "),e("a",{class:"header-anchor",href:"#capture-the-citadel","aria-hidden":"true"},"#")],-1),c=e("p",null,"A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee for their VR class in college's final project.",-1),d=e("p",null,[t("For more details, visit "),e("a",{href:"https://grantcbarbee.github.io/conquer-the-citadel.html",target:"_blank",rel:"noreferrer"},"Grant's page on the game"),t(".")],-1),l=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,d,l];function p(_,u,f,m,g,b){return s(),r("div",null,h)}const v=a(o,[["render",p]]);export{C as __pageData,v as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as i}from"./app.c95a51e0.js";const o="/assets/da2.57c7af0b.png",s="/assets/editors.c2eaa93b.png",n="/assets/simulator.7ede7b83.jpg",r="/assets/da1.ae7a2bb1.png",h="/assets/da6.5b5d63de.png",d="/assets/da7.b7b33663.png",l="/assets/da8.d623c64f.png",c="/assets/da3.e16fb4de.png",p="/assets/da9.35a2db61.png",I=JSON.parse('{"title":"Dice Armor","description":"","frontmatter":{"title":"Dice Armor"},"headers":[],"relativePath":"projects/dice/index.md","lastUpdated":1684372048000}'),g={name:"projects/dice/index.md"},m=i("",22),u=[m];function f(y,b,w,_,v,k){return a(),t("div",null,u)}const q=e(g,[["render",f]]);export{I as __pageData,q as default};
import{_ as e,c as t,o as a,d as i}from"./app.830f7d24.js";const o="/assets/da2.57c7af0b.png",s="/assets/editors.c2eaa93b.png",n="/assets/simulator.7ede7b83.jpg",r="/assets/da1.ae7a2bb1.png",h="/assets/da6.5b5d63de.png",d="/assets/da7.b7b33663.png",l="/assets/da8.d623c64f.png",c="/assets/da3.e16fb4de.png",p="/assets/da9.35a2db61.png",I=JSON.parse('{"title":"Dice Armor","description":"","frontmatter":{"title":"Dice Armor"},"headers":[],"relativePath":"projects/dice/index.md","lastUpdated":1684423091000}'),g={name:"projects/dice/index.md"},m=i("",22),u=[m];function f(y,b,w,_,v,k){return a(),t("div",null,u)}const q=e(g,[["render",f]]);export{I as __pageData,q as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as r}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1684372048000}'),n={name:"projects/index.md"},s=r('<h1 id="games" tabindex="-1">Games! <a class="header-anchor" href="#games" aria-hidden="true">#</a></h1><p>I make games regularly! Check them out in the sidebar or on my <a href="https://thepaperpilot.itch.io/" target="_blank" rel="noreferrer">itch.io</a> page.</p><h1 id="profectus" tabindex="-1">Profectus! <a class="header-anchor" href="#profectus" aria-hidden="true">#</a></h1><p>I contributed to a modding framework called The Modding Tree and then made <a href="https://moddingtree.com" target="_blank" rel="noreferrer">Profectus</a> as an alternative that gives developers more control. Profectus is a game engine for the web that uses TS and Vue.</p><h1 id="v-ecs" tabindex="-1"><a href="./vecs/">V-ecs!</a> <a class="header-anchor" href="#v-ecs" aria-hidden="true">#</a></h1><p>V-ecs (pronounced &quot;Vex&quot;) is a Vulkan-based engine I made for making highly moddable games and tools in Lua centered around the ECS design pattern and a work-stealing job system.</p><h1 id="optispeech" tabindex="-1"><a href="./optispeech/">OptiSpeech!</a> <a class="header-anchor" href="#optispeech" aria-hidden="true">#</a></h1><p>I led a team updating a legacy Unity project for research on speech therapy to use a modern version with a focus on extensibility to facilitate future maintenance and features.</p><h1 id="babble-buds" tabindex="-1"><a href="./babble/">Babble Buds!</a> <a class="header-anchor" href="#babble-buds" aria-hidden="true">#</a></h1><p>Babble Buds is a free, open-source virtual puppet show engine I made for various platforms including HTLM5 and Unity, as well as an accompanying electron-based puppet editor and multiplayer stage.</p><h1 id="dice-armor" tabindex="-1"><a href="./dice/">Dice Armor</a> <a class="header-anchor" href="#dice-armor" aria-hidden="true">#</a></h1><p>I was the lead programmer on a team of nine creating this game in a semester-long college course. I programmed all the gameplay systems as well as incorporated Babble Buds for the cutscenes and tutorial.</p><h1 id="capture-the-citadel" tabindex="-1"><a href="./citadel/">Capture the Citadel</a> <a class="header-anchor" href="#capture-the-citadel" aria-hidden="true">#</a></h1><p>A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee.</p>',14),i=[s];function o(d,h,c,l,p,u){return t(),a("div",null,i)}const b=e(n,[["render",o]]);export{f as __pageData,b as default};
import{_ as e,c as a,o as t,d as r}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1684423091000}'),n={name:"projects/index.md"},s=r('<h1 id="games" tabindex="-1">Games! <a class="header-anchor" href="#games" aria-hidden="true">#</a></h1><p>I make games regularly! Check them out in the sidebar or on my <a href="https://thepaperpilot.itch.io/" target="_blank" rel="noreferrer">itch.io</a> page.</p><h1 id="profectus" tabindex="-1">Profectus! <a class="header-anchor" href="#profectus" aria-hidden="true">#</a></h1><p>I contributed to a modding framework called The Modding Tree and then made <a href="https://moddingtree.com" target="_blank" rel="noreferrer">Profectus</a> as an alternative that gives developers more control. Profectus is a game engine for the web that uses TS and Vue.</p><h1 id="v-ecs" tabindex="-1"><a href="./vecs/">V-ecs!</a> <a class="header-anchor" href="#v-ecs" aria-hidden="true">#</a></h1><p>V-ecs (pronounced &quot;Vex&quot;) is a Vulkan-based engine I made for making highly moddable games and tools in Lua centered around the ECS design pattern and a work-stealing job system.</p><h1 id="optispeech" tabindex="-1"><a href="./optispeech/">OptiSpeech!</a> <a class="header-anchor" href="#optispeech" aria-hidden="true">#</a></h1><p>I led a team updating a legacy Unity project for research on speech therapy to use a modern version with a focus on extensibility to facilitate future maintenance and features.</p><h1 id="babble-buds" tabindex="-1"><a href="./babble/">Babble Buds!</a> <a class="header-anchor" href="#babble-buds" aria-hidden="true">#</a></h1><p>Babble Buds is a free, open-source virtual puppet show engine I made for various platforms including HTLM5 and Unity, as well as an accompanying electron-based puppet editor and multiplayer stage.</p><h1 id="dice-armor" tabindex="-1"><a href="./dice/">Dice Armor</a> <a class="header-anchor" href="#dice-armor" aria-hidden="true">#</a></h1><p>I was the lead programmer on a team of nine creating this game in a semester-long college course. I programmed all the gameplay systems as well as incorporated Babble Buds for the cutscenes and tutorial.</p><h1 id="capture-the-citadel" tabindex="-1"><a href="./citadel/">Capture the Citadel</a> <a class="header-anchor" href="#capture-the-citadel" aria-hidden="true">#</a></h1><p>A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant Barbee.</p>',14),i=[s];function o(d,h,c,l,p,u){return t(),a("div",null,i)}const b=e(n,[["render",o]]);export{f as __pageData,b as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as r}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1684372048000}'),n={name:"projects/index.md"},s=r("",14),i=[s];function o(d,h,c,l,p,u){return t(),a("div",null,i)}const b=e(n,[["render",o]]);export{f as __pageData,b as default};
import{_ as e,c as a,o as t,d as r}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1684423091000}'),n={name:"projects/index.md"},s=r("",14),i=[s];function o(d,h,c,l,p,u){return t(),a("div",null,i)}const b=e(n,[["render",o]]);export{f as __pageData,b as default};

View file

@ -1 +1 @@
import{_ as t,c as s,o as a,a as e,b as o}from"./app.c95a51e0.js";const n="/assets/system-architecture-600.254c8a7e.jpg",r="/assets/new-interface.99f03ba7.png",i="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","lastUpdated":1684372048000}'),l={name:"projects/optispeech/index.md"},d=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-hidden":"true"},"#")],-1),p=e("p",null,"The Optispeech project involves designing and testing a real-time tongue model that can be viewed in a transparent head while a subject talks \u2014 for the purposes of treating speech errors and teaching foreign language sounds. This work has been conducted in partnership with Vulintus and with support from the National Institutes of Health (NIH). The UT Dallas Speech Production Lab is currently updating the program to use updated versions of Unity and adding support for more features and hardware.",-1),h=e("p",null,[e("img",{src:n,alt:"System Architecture"})],-1),u=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/9uHqIRs7ZjM",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),m=e("p",null,"This video shows a talker with WAVE sensors placed on the tongue hitting a virtual target sphere located at the alveolar ridge. When an alveolar consonant is hit (e.g., /s/, /n/, /d/) the sphere changes color from red to green.",-1),g=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Oz42mKvlzqI",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),_=e("p",null,"This video shows an American talker learning a novel sound not found in English. When the post-alveolar consonant is hit, the target sphere changes color from red to green. Here, the NDI WAVE system serves as input.",-1),f=e("p",null,"The program is being updated by a team in the UT Dallas Speech Production Lab led by Anthony Lawn, so the program uses a more modern version of Unity, has an easier-to-use interface, can more easily support new features, and can connect to additional EMA systems, namely the Carstens AG501.",-1),w=e("p",null,[e("img",{src:r,alt:"New Interface"})],-1),y=e("p",null,"In addition, the program now includes documentation and unit tests to improve program stability and maintainability going forward.",-1),b=e("p",null,[e("img",{src:i,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),T=[d,p,h,u,m,g,_,f,w,y,b,v];function k(x,A,I,N,S,j){return a(),s("div",null,T)}const D=t(l,[["render",k]]);export{U as __pageData,D as default};
import{_ as t,c as s,o as a,a as e,b as o}from"./app.830f7d24.js";const n="/assets/system-architecture-600.254c8a7e.jpg",r="/assets/new-interface.99f03ba7.png",i="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","lastUpdated":1684423091000}'),l={name:"projects/optispeech/index.md"},d=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-hidden":"true"},"#")],-1),p=e("p",null,"The Optispeech project involves designing and testing a real-time tongue model that can be viewed in a transparent head while a subject talks \u2014 for the purposes of treating speech errors and teaching foreign language sounds. This work has been conducted in partnership with Vulintus and with support from the National Institutes of Health (NIH). The UT Dallas Speech Production Lab is currently updating the program to use updated versions of Unity and adding support for more features and hardware.",-1),h=e("p",null,[e("img",{src:n,alt:"System Architecture"})],-1),u=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/9uHqIRs7ZjM",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),m=e("p",null,"This video shows a talker with WAVE sensors placed on the tongue hitting a virtual target sphere located at the alveolar ridge. When an alveolar consonant is hit (e.g., /s/, /n/, /d/) the sphere changes color from red to green.",-1),g=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Oz42mKvlzqI",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),_=e("p",null,"This video shows an American talker learning a novel sound not found in English. When the post-alveolar consonant is hit, the target sphere changes color from red to green. Here, the NDI WAVE system serves as input.",-1),f=e("p",null,"The program is being updated by a team in the UT Dallas Speech Production Lab led by Anthony Lawn, so the program uses a more modern version of Unity, has an easier-to-use interface, can more easily support new features, and can connect to additional EMA systems, namely the Carstens AG501.",-1),w=e("p",null,[e("img",{src:r,alt:"New Interface"})],-1),y=e("p",null,"In addition, the program now includes documentation and unit tests to improve program stability and maintainability going forward.",-1),b=e("p",null,[e("img",{src:i,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),T=[d,p,h,u,m,g,_,f,w,y,b,v];function k(x,A,I,N,S,j){return a(),s("div",null,T)}const D=t(l,[["render",k]]);export{U as __pageData,D as default};

View file

@ -1 +1 @@
import{_ as t,c as s,o as a,a as e,b as o}from"./app.c95a51e0.js";const n="/assets/system-architecture-600.254c8a7e.jpg",r="/assets/new-interface.99f03ba7.png",i="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","lastUpdated":1684372048000}'),l={name:"projects/optispeech/index.md"},d=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-hidden":"true"},"#")],-1),p=e("p",null,"The Optispeech project involves designing and testing a real-time tongue model that can be viewed in a transparent head while a subject talks \u2014 for the purposes of treating speech errors and teaching foreign language sounds. This work has been conducted in partnership with Vulintus and with support from the National Institutes of Health (NIH). The UT Dallas Speech Production Lab is currently updating the program to use updated versions of Unity and adding support for more features and hardware.",-1),h=e("p",null,[e("img",{src:n,alt:"System Architecture"})],-1),u=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/9uHqIRs7ZjM",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),m=e("p",null,"This video shows a talker with WAVE sensors placed on the tongue hitting a virtual target sphere located at the alveolar ridge. When an alveolar consonant is hit (e.g., /s/, /n/, /d/) the sphere changes color from red to green.",-1),g=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Oz42mKvlzqI",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),_=e("p",null,"This video shows an American talker learning a novel sound not found in English. When the post-alveolar consonant is hit, the target sphere changes color from red to green. Here, the NDI WAVE system serves as input.",-1),f=e("p",null,"The program is being updated by a team in the UT Dallas Speech Production Lab led by Anthony Lawn, so the program uses a more modern version of Unity, has an easier-to-use interface, can more easily support new features, and can connect to additional EMA systems, namely the Carstens AG501.",-1),w=e("p",null,[e("img",{src:r,alt:"New Interface"})],-1),y=e("p",null,"In addition, the program now includes documentation and unit tests to improve program stability and maintainability going forward.",-1),b=e("p",null,[e("img",{src:i,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),T=[d,p,h,u,m,g,_,f,w,y,b,v];function k(x,A,I,N,S,j){return a(),s("div",null,T)}const D=t(l,[["render",k]]);export{U as __pageData,D as default};
import{_ as t,c as s,o as a,a as e,b as o}from"./app.830f7d24.js";const n="/assets/system-architecture-600.254c8a7e.jpg",r="/assets/new-interface.99f03ba7.png",i="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","lastUpdated":1684423091000}'),l={name:"projects/optispeech/index.md"},d=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-hidden":"true"},"#")],-1),p=e("p",null,"The Optispeech project involves designing and testing a real-time tongue model that can be viewed in a transparent head while a subject talks \u2014 for the purposes of treating speech errors and teaching foreign language sounds. This work has been conducted in partnership with Vulintus and with support from the National Institutes of Health (NIH). The UT Dallas Speech Production Lab is currently updating the program to use updated versions of Unity and adding support for more features and hardware.",-1),h=e("p",null,[e("img",{src:n,alt:"System Architecture"})],-1),u=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/9uHqIRs7ZjM",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),m=e("p",null,"This video shows a talker with WAVE sensors placed on the tongue hitting a virtual target sphere located at the alveolar ridge. When an alveolar consonant is hit (e.g., /s/, /n/, /d/) the sphere changes color from red to green.",-1),g=e("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Oz42mKvlzqI",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"",style:{display:"block",margin:"auto"}},null,-1),_=e("p",null,"This video shows an American talker learning a novel sound not found in English. When the post-alveolar consonant is hit, the target sphere changes color from red to green. Here, the NDI WAVE system serves as input.",-1),f=e("p",null,"The program is being updated by a team in the UT Dallas Speech Production Lab led by Anthony Lawn, so the program uses a more modern version of Unity, has an easier-to-use interface, can more easily support new features, and can connect to additional EMA systems, namely the Carstens AG501.",-1),w=e("p",null,[e("img",{src:r,alt:"New Interface"})],-1),y=e("p",null,"In addition, the program now includes documentation and unit tests to improve program stability and maintainability going forward.",-1),b=e("p",null,[e("img",{src:i,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),T=[d,p,h,u,m,g,_,f,w,y,b,v];function k(x,A,I,N,S,j){return a(),s("div",null,T)}const D=t(l,[["render",k]]);export{U as __pageData,D as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as s,d as a}from"./app.c95a51e0.js";const o="/assets/screenshot.78830a30.png",n="/assets/debug.0a8c47b7.png",r="/assets/sandsoftime.ba63f865.png",w=JSON.parse('{"title":"V-ecs","description":"","frontmatter":{"title":"V-ecs"},"headers":[],"relativePath":"projects/vecs/index.md","lastUpdated":1684372048000}'),i={name:"projects/vecs/index.md"},d=a('<h1 id="v-ecs" tabindex="-1">V-ecs <a class="header-anchor" href="#v-ecs" aria-hidden="true">#</a></h1><p><img src="'+o+'" alt="V-ecs Screenshot"></p><p>V-ecs (pronounced &quot;Vex&quot;) is a Vulkan-based engine I made for making highly moddable games and tools in Lua centered around the ECS design pattern and a work-stealing job system.</p><p>The engine works with &quot;worlds&quot;, which are collections of systems and renderers. The engine comes with several worlds using systems and renderers I made, including a voxel world, an incremental game, and some test scenes. All of these include systems to render the fps as well as show a debug console by typing the grave key (`). The default world is a title screen that detects any worlds in the &quot;worlds&quot; folder and displays a button for each of them.</p><p><img src="'+n+'" alt="Debug Menu"></p><p>The original plans were to eventually put it on the steam workshop so people could more easily share their creations amongst each other, but I never became happy enough with the performance of the engine - the parallelization of the lua code involved a lot of overhead that severely limited performance.</p><p>Instead, I made a couple of worlds by myself - an infinite procedurally generated voxel world, a simple incremental game, and a more complex incremental game I call &quot;Sands of Time&quot;.</p><p><img src="'+r+'" alt="Sands of Time"></p>',8),l=[d];function c(p,h,m,u,_,g){return s(),t("div",null,l)}const y=e(i,[["render",c]]);export{w as __pageData,y as default};
import{_ as e,c as t,o as s,d as a}from"./app.830f7d24.js";const o="/assets/screenshot.78830a30.png",n="/assets/debug.0a8c47b7.png",r="/assets/sandsoftime.ba63f865.png",w=JSON.parse('{"title":"V-ecs","description":"","frontmatter":{"title":"V-ecs"},"headers":[],"relativePath":"projects/vecs/index.md","lastUpdated":1684423091000}'),i={name:"projects/vecs/index.md"},d=a('<h1 id="v-ecs" tabindex="-1">V-ecs <a class="header-anchor" href="#v-ecs" aria-hidden="true">#</a></h1><p><img src="'+o+'" alt="V-ecs Screenshot"></p><p>V-ecs (pronounced &quot;Vex&quot;) is a Vulkan-based engine I made for making highly moddable games and tools in Lua centered around the ECS design pattern and a work-stealing job system.</p><p>The engine works with &quot;worlds&quot;, which are collections of systems and renderers. The engine comes with several worlds using systems and renderers I made, including a voxel world, an incremental game, and some test scenes. All of these include systems to render the fps as well as show a debug console by typing the grave key (`). The default world is a title screen that detects any worlds in the &quot;worlds&quot; folder and displays a button for each of them.</p><p><img src="'+n+'" alt="Debug Menu"></p><p>The original plans were to eventually put it on the steam workshop so people could more easily share their creations amongst each other, but I never became happy enough with the performance of the engine - the parallelization of the lua code involved a lot of overhead that severely limited performance.</p><p>Instead, I made a couple of worlds by myself - an infinite procedurally generated voxel world, a simple incremental game, and a more complex incremental game I call &quot;Sands of Time&quot;.</p><p><img src="'+r+'" alt="Sands of Time"></p>',8),l=[d];function c(p,h,m,u,_,g){return s(),t("div",null,l)}const y=e(i,[["render",c]]);export{w as __pageData,y as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as s,d as a}from"./app.c95a51e0.js";const o="/assets/screenshot.78830a30.png",n="/assets/debug.0a8c47b7.png",r="/assets/sandsoftime.ba63f865.png",w=JSON.parse('{"title":"V-ecs","description":"","frontmatter":{"title":"V-ecs"},"headers":[],"relativePath":"projects/vecs/index.md","lastUpdated":1684372048000}'),i={name:"projects/vecs/index.md"},d=a("",8),l=[d];function c(p,h,m,u,_,g){return s(),t("div",null,l)}const y=e(i,[["render",c]]);export{w as __pageData,y as default};
import{_ as e,c as t,o as s,d as a}from"./app.830f7d24.js";const o="/assets/screenshot.78830a30.png",n="/assets/debug.0a8c47b7.png",r="/assets/sandsoftime.ba63f865.png",w=JSON.parse('{"title":"V-ecs","description":"","frontmatter":{"title":"V-ecs"},"headers":[],"relativePath":"projects/vecs/index.md","lastUpdated":1684423091000}'),i={name:"projects/vecs/index.md"},d=a("",8),l=[d];function c(p,h,m,u,_,g){return s(),t("div",null,l)}const y=e(i,[["render",c]]);export{w as __pageData,y as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as i}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/2.0-format-changes.md","lastUpdated":null}'),n={name:"public/gamedevtree/2.0-format-changes.md"},l=i('<h1 id="_2-0-format-changes" tabindex="-1">2.0 format changes <a class="header-anchor" href="#_2-0-format-changes" aria-hidden="true">#</a></h1><ul><li>Temp format is changed from <code>temp.something[layer]</code> to <code>temp[layer].something</code>, for consistency</li><li>Challenges are now saved as an object with the amount of completions in each spot. (This will break saves.)</li><li><code>effectDisplay</code> in Challenges and Upgrades no longer takes an argument, and neither does <code>effect</code> for Buyables</li><li>Buyable cost can take an argument for amount of buyables, but it needs to function if no argument is supplied (it should do the cost for the next purchase).</li><li>Generation of Points now happens in the main game loop (not in a layer update function), enabled by <code>canGenPoints</code> in <a href="js/game.js">game.js</a>.</li><li>Changed <code>fullLayerReset</code> to <code>layerDataReset</code>, which takes an array of names of values to keep</li></ul><p>In addition, many names were changed, mostly expanding abbreviations:</p><p>All instances of:</p><ul><li>chall -&gt; challenge</li><li>unl -&gt; unlocked</li><li>upg -&gt; upgrade (besides CSS)</li><li>amt -&gt; amount</li><li>desc -&gt; description</li><li>resCeil -&gt; roundUpCost</li><li>order -&gt; unlockOrder</li><li>incr_order -&gt; increaseUnlockOrder</li></ul><p>Challenges:</p><ul><li>desc -&gt; challengeDescription</li><li>reward -&gt; rewardDescription</li><li>effect -&gt; rewardEffect</li><li>effectDisplay -&gt; rewardDisplay</li><li>active -&gt; challengeActive</li></ul>',7),o=[l];function s(r,c,d,g,h,p){return t(),a("div",null,o)}const u=e(n,[["render",s]]);export{m as __pageData,u as default};
import{_ as e,c as a,o as t,d as i}from"./app.830f7d24.js";const m=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/2.0-format-changes.md","lastUpdated":null}'),n={name:"public/gamedevtree/2.0-format-changes.md"},l=i('<h1 id="_2-0-format-changes" tabindex="-1">2.0 format changes <a class="header-anchor" href="#_2-0-format-changes" aria-hidden="true">#</a></h1><ul><li>Temp format is changed from <code>temp.something[layer]</code> to <code>temp[layer].something</code>, for consistency</li><li>Challenges are now saved as an object with the amount of completions in each spot. (This will break saves.)</li><li><code>effectDisplay</code> in Challenges and Upgrades no longer takes an argument, and neither does <code>effect</code> for Buyables</li><li>Buyable cost can take an argument for amount of buyables, but it needs to function if no argument is supplied (it should do the cost for the next purchase).</li><li>Generation of Points now happens in the main game loop (not in a layer update function), enabled by <code>canGenPoints</code> in <a href="js/game.js">game.js</a>.</li><li>Changed <code>fullLayerReset</code> to <code>layerDataReset</code>, which takes an array of names of values to keep</li></ul><p>In addition, many names were changed, mostly expanding abbreviations:</p><p>All instances of:</p><ul><li>chall -&gt; challenge</li><li>unl -&gt; unlocked</li><li>upg -&gt; upgrade (besides CSS)</li><li>amt -&gt; amount</li><li>desc -&gt; description</li><li>resCeil -&gt; roundUpCost</li><li>order -&gt; unlockOrder</li><li>incr_order -&gt; increaseUnlockOrder</li></ul><p>Challenges:</p><ul><li>desc -&gt; challengeDescription</li><li>reward -&gt; rewardDescription</li><li>effect -&gt; rewardEffect</li><li>effectDisplay -&gt; rewardDisplay</li><li>active -&gt; challengeActive</li></ul>',7),o=[l];function s(r,c,d,g,h,p){return t(),a("div",null,o)}const u=e(n,[["render",s]]);export{m as __pageData,u as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as i}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/2.0-format-changes.md","lastUpdated":null}'),n={name:"public/gamedevtree/2.0-format-changes.md"},l=i("",7),o=[l];function s(r,c,d,g,h,p){return t(),a("div",null,o)}const u=e(n,[["render",s]]);export{m as __pageData,u as default};
import{_ as e,c as a,o as t,d as i}from"./app.830f7d24.js";const m=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/2.0-format-changes.md","lastUpdated":null}'),n={name:"public/gamedevtree/2.0-format-changes.md"},l=i("",7),o=[l];function s(r,c,d,g,h,p){return t(),a("div",null,o)}const u=e(n,[["render",s]]);export{m as __pageData,u as default};

View file

@ -1 +1 @@
import{_ as o,c as a,o as r,a as e,b as t}from"./app.c95a51e0.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","lastUpdated":null}'),n={name:"public/gamedevtree/README.md"},s=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-hidden":"true"},"#")],-1),i=e("p",null,"A modified version of The Prestige Tree that is much easier to mod. It still requires programming knowledge, but it's mostly pretty easy things and copy/pasting.",-1),d=e("p",null,[e("a",{href:"./docs/getting-started"},"Look here for a tutorial on getting started with modding with TMT")],-1),l=e("p",null,[t("You can look in the "),e("a",{href:"./docs/!general-info"},"documentation"),t(" for more information on how it all works, or look at the code in layers.js to see what it all looks like.")],-1),c=[s,i,d,l];function h(m,p,_,g,u,f){return r(),a("div",null,c)}const E=o(n,[["render",h]]);export{T as __pageData,E as default};
import{_ as o,c as a,o as r,a as e,b as t}from"./app.830f7d24.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","lastUpdated":null}'),n={name:"public/gamedevtree/README.md"},s=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-hidden":"true"},"#")],-1),i=e("p",null,"A modified version of The Prestige Tree that is much easier to mod. It still requires programming knowledge, but it's mostly pretty easy things and copy/pasting.",-1),d=e("p",null,[e("a",{href:"./docs/getting-started"},"Look here for a tutorial on getting started with modding with TMT")],-1),l=e("p",null,[t("You can look in the "),e("a",{href:"./docs/!general-info"},"documentation"),t(" for more information on how it all works, or look at the code in layers.js to see what it all looks like.")],-1),c=[s,i,d,l];function h(m,p,_,g,u,f){return r(),a("div",null,c)}const E=o(n,[["render",h]]);export{T as __pageData,E as default};

View file

@ -1 +1 @@
import{_ as o,c as a,o as r,a as e,b as t}from"./app.c95a51e0.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","lastUpdated":null}'),n={name:"public/gamedevtree/README.md"},s=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-hidden":"true"},"#")],-1),i=e("p",null,"A modified version of The Prestige Tree that is much easier to mod. It still requires programming knowledge, but it's mostly pretty easy things and copy/pasting.",-1),d=e("p",null,[e("a",{href:"./docs/getting-started"},"Look here for a tutorial on getting started with modding with TMT")],-1),l=e("p",null,[t("You can look in the "),e("a",{href:"./docs/!general-info"},"documentation"),t(" for more information on how it all works, or look at the code in layers.js to see what it all looks like.")],-1),c=[s,i,d,l];function h(m,p,_,g,u,f){return r(),a("div",null,c)}const E=o(n,[["render",h]]);export{T as __pageData,E as default};
import{_ as o,c as a,o as r,a as e,b as t}from"./app.830f7d24.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","lastUpdated":null}'),n={name:"public/gamedevtree/README.md"},s=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-hidden":"true"},"#")],-1),i=e("p",null,"A modified version of The Prestige Tree that is much easier to mod. It still requires programming knowledge, but it's mostly pretty easy things and copy/pasting.",-1),d=e("p",null,[e("a",{href:"./docs/getting-started"},"Look here for a tutorial on getting started with modding with TMT")],-1),l=e("p",null,[t("You can look in the "),e("a",{href:"./docs/!general-info"},"documentation"),t(" for more information on how it all works, or look at the code in layers.js to see what it all looks like.")],-1),c=[s,i,d,l];function h(m,p,_,g,u,f){return r(),a("div",null,c)}const E=o(n,[["render",h]]);export{T as __pageData,E as default};

View file

@ -1 +1 @@
import{_ as e,c as i,o as l,d as a}from"./app.c95a51e0.js";const g=JSON.parse('{"title":"The Game Dev Tree changelog:","description":"","frontmatter":{},"headers":[{"level":3,"title":"v1.0.4 Version Bump [rebalanced,debuggedx3] - 2020-11-09","slug":"v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09","link":"#v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09","children":[]},{"level":3,"title":"v1.0.3 Version Bump [rebalanced,debuggedx2] - 2020-11-08","slug":"v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08","link":"#v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08","children":[]},{"level":3,"title":"v1.0.2 Version Bump [rebalanced,debugged] - 2020-11-08","slug":"v1-0-2-version-bump-rebalanced-debugged-2020-11-08","link":"#v1-0-2-version-bump-rebalanced-debugged-2020-11-08","children":[]},{"level":3,"title":"v1.0.1 Version Bump [rebalanced] - 2020-11-08","slug":"v1-0-1-version-bump-rebalanced-2020-11-08","link":"#v1-0-1-version-bump-rebalanced-2020-11-08","children":[]},{"level":3,"title":"v1.0 Version Bump - 2020-11-08","slug":"v1-0-version-bump-2020-11-08","link":"#v1-0-version-bump-2020-11-08","children":[]},{"level":3,"title":"v0.2.3 Stylish - 2020-10-30","slug":"v0-2-3-stylish-2020-10-30","link":"#v0-2-3-stylish-2020-10-30","children":[]},{"level":3,"title":"v0.2.2 Row 3 - 2020-10-22","slug":"v0-2-2-row-3-2020-10-22","link":"#v0-2-2-row-3-2020-10-22","children":[]},{"level":3,"title":"v0.2.1 Row 3 - 2020-10-21","slug":"v0-2-1-row-3-2020-10-21","link":"#v0-2-1-row-3-2020-10-21","children":[]},{"level":3,"title":"v0.2 Row 3 - 2020-10-21","slug":"v0-2-row-3-2020-10-21","link":"#v0-2-row-3-2020-10-21","children":[]},{"level":3,"title":"v0.1.1 Cash Influx [rebalanced] - 2020-10-19","slug":"v0-1-1-cash-influx-rebalanced-2020-10-19","link":"#v0-1-1-cash-influx-rebalanced-2020-10-19","children":[]},{"level":3,"title":"v0.1 Cash Influx - 2020-10-19","slug":"v0-1-cash-influx-2020-10-19","link":"#v0-1-cash-influx-2020-10-19","children":[]},{"level":3,"title":"v0.0 Initial Commit - 2020-10-18","slug":"v0-0-initial-commit-2020-10-18","link":"#v0-0-initial-commit-2020-10-18","children":[]}],"relativePath":"public/gamedevtree/changelog.md","lastUpdated":null}'),r={name:"public/gamedevtree/changelog.md"},n=a("",25),d=[n];function t(s,h,o,u,c,v){return l(),i("div",null,d)}const m=e(r,[["render",t]]);export{g as __pageData,m as default};
import{_ as e,c as i,o as l,d as a}from"./app.830f7d24.js";const g=JSON.parse('{"title":"The Game Dev Tree changelog:","description":"","frontmatter":{},"headers":[{"level":3,"title":"v1.0.4 Version Bump [rebalanced,debuggedx3] - 2020-11-09","slug":"v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09","link":"#v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09","children":[]},{"level":3,"title":"v1.0.3 Version Bump [rebalanced,debuggedx2] - 2020-11-08","slug":"v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08","link":"#v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08","children":[]},{"level":3,"title":"v1.0.2 Version Bump [rebalanced,debugged] - 2020-11-08","slug":"v1-0-2-version-bump-rebalanced-debugged-2020-11-08","link":"#v1-0-2-version-bump-rebalanced-debugged-2020-11-08","children":[]},{"level":3,"title":"v1.0.1 Version Bump [rebalanced] - 2020-11-08","slug":"v1-0-1-version-bump-rebalanced-2020-11-08","link":"#v1-0-1-version-bump-rebalanced-2020-11-08","children":[]},{"level":3,"title":"v1.0 Version Bump - 2020-11-08","slug":"v1-0-version-bump-2020-11-08","link":"#v1-0-version-bump-2020-11-08","children":[]},{"level":3,"title":"v0.2.3 Stylish - 2020-10-30","slug":"v0-2-3-stylish-2020-10-30","link":"#v0-2-3-stylish-2020-10-30","children":[]},{"level":3,"title":"v0.2.2 Row 3 - 2020-10-22","slug":"v0-2-2-row-3-2020-10-22","link":"#v0-2-2-row-3-2020-10-22","children":[]},{"level":3,"title":"v0.2.1 Row 3 - 2020-10-21","slug":"v0-2-1-row-3-2020-10-21","link":"#v0-2-1-row-3-2020-10-21","children":[]},{"level":3,"title":"v0.2 Row 3 - 2020-10-21","slug":"v0-2-row-3-2020-10-21","link":"#v0-2-row-3-2020-10-21","children":[]},{"level":3,"title":"v0.1.1 Cash Influx [rebalanced] - 2020-10-19","slug":"v0-1-1-cash-influx-rebalanced-2020-10-19","link":"#v0-1-1-cash-influx-rebalanced-2020-10-19","children":[]},{"level":3,"title":"v0.1 Cash Influx - 2020-10-19","slug":"v0-1-cash-influx-2020-10-19","link":"#v0-1-cash-influx-2020-10-19","children":[]},{"level":3,"title":"v0.0 Initial Commit - 2020-10-18","slug":"v0-0-initial-commit-2020-10-18","link":"#v0-0-initial-commit-2020-10-18","children":[]}],"relativePath":"public/gamedevtree/changelog.md","lastUpdated":null}'),r={name:"public/gamedevtree/changelog.md"},n=a("",25),d=[n];function t(s,h,o,u,c,v){return l(),i("div",null,d)}const m=e(r,[["render",t]]);export{g as __pageData,m as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as o}from"./app.c95a51e0.js";const p=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"General:","slug":"general","link":"#general","children":[]},{"level":2,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":2,"title":"Other components","slug":"other-components","link":"#other-components","children":[]}],"relativePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/!general-info.md"},r=o('<h1 id="the-modding-tree" tabindex="-1">The-Modding-Tree <a class="header-anchor" href="#the-modding-tree" aria-hidden="true">#</a></h1><p>The main way to add content is through creating layers. You can either add a layer directly in the layers object in layersSupportjs, or declare it in another file and then do &quot;<code>addLayer(layername, layerdata)</code>&quot; (good for breaking things up into smaller files). The existing layers are just examples and can be freely deleted. You can also use them as references and a base for your own layers.</p><p>The first thing you need to do is to edit the modInfo at the top of game.js to set your modID (a string). A unique modId will prevent your mod&#39;s saves from conflicting with other mods.</p><p>Most of the time, you won&#39;t need to dive deep into the code to create things, but you still can if you really want to.</p><p>The Modding Tree uses break_eternity.js to store large values. This means that many numbers are Decimal objects, and must be treated differently. For example, you have to use <code>new Decimal(x)</code> to create a Decimal value instead of a plain number, and perform operations on them by calling functions. e.g, instead of <code>x = x + y</code>, use <code>x = x.add(y)</code>.</p><p>Almost all values can be either a constant value, or a dynamic value. Dynamic values are defined by putting a function that returns what the value should be at any given time.</p><p>All display text can be basic HTML instead (But you can&#39;t use most Vue features there).</p><h1 id="table-of-contents" tabindex="-1">Table of Contents: <a class="header-anchor" href="#table-of-contents" aria-hidden="true">#</a></h1><h2 id="general" tabindex="-1">General: <a class="header-anchor" href="#general" aria-hidden="true">#</a></h2><ul><li><a href="./getting-started">Getting Started</a>: Getting your own copy of the code set up with Github Desktop.</li><li><a href="./main-mod-info">Main mod info</a>: How to set up general things for your mod in mod.js.</li><li><a href="./basic-layer-breakdown">Basic layer breakdown</a>: Breaking down the components of a layer with minimal features.</li><li><a href="./layer-features">Layer features</a>: Explanations of all of the different properties that you can give a layer.</li><li><a href="./custom-tab-layouts">Custom Tab Layouts</a>: An optional way to give your tabs a different layout. You can even create entirely new components to use.</li><li><a href="./updating-tmt">Updating TMT</a>: Using Github Desktop to update your mod&#39;s version of TMT.</li></ul><h2 id="common-components" tabindex="-1">Common components <a class="header-anchor" href="#common-components" aria-hidden="true">#</a></h2><ul><li><a href="./upgrades">Upgrades</a>: How to create upgrades for a layer.</li><li><a href="./milestones">Milestones</a>: How to create milestones for a layer.</li><li><a href="./buyables">Buyables</a>: Create rebuyable upgrades for your layer (with the option to make them respec-able). Can be used to make Enhancers or Space Buildings.</li><li><a href="./clickables">Clickables</a>: A more generalized variant of buyables, for any kind of thing that is sometimes clickable. Between these and Buyables, you can do just about anything.</li></ul><h2 id="other-components" tabindex="-1">Other components <a class="header-anchor" href="#other-components" aria-hidden="true">#</a></h2><ul><li><a href="./challenges">Challenges</a>: How to create challenges for a layer.</li><li><a href="./bars">Bars</a>: Display some information as a progress bar, gague, or similar. They are highly customizable, and can be horizontal and vertical as well.</li><li><a href="./subtabs-and-microtabs">Subtabs and Microtabs</a>: Create subtabs for your tabs, as well as &quot;microtab&quot; components that you can put inside the tabs.</li><li><a href="./milestones">Achievements</a>: How to create achievements for a layer (or for the whole game).</li><li><a href="./infoboxes">Infoboxes</a>: Boxes containing text that can be shown or hidden.</li></ul>',14),i=[r];function s(l,d,c,h,u,m){return t(),a("div",null,i)}const y=e(n,[["render",s]]);export{p as __pageData,y as default};
import{_ as e,c as a,o as t,d as o}from"./app.830f7d24.js";const p=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"General:","slug":"general","link":"#general","children":[]},{"level":2,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":2,"title":"Other components","slug":"other-components","link":"#other-components","children":[]}],"relativePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/!general-info.md"},r=o('<h1 id="the-modding-tree" tabindex="-1">The-Modding-Tree <a class="header-anchor" href="#the-modding-tree" aria-hidden="true">#</a></h1><p>The main way to add content is through creating layers. You can either add a layer directly in the layers object in layersSupportjs, or declare it in another file and then do &quot;<code>addLayer(layername, layerdata)</code>&quot; (good for breaking things up into smaller files). The existing layers are just examples and can be freely deleted. You can also use them as references and a base for your own layers.</p><p>The first thing you need to do is to edit the modInfo at the top of game.js to set your modID (a string). A unique modId will prevent your mod&#39;s saves from conflicting with other mods.</p><p>Most of the time, you won&#39;t need to dive deep into the code to create things, but you still can if you really want to.</p><p>The Modding Tree uses break_eternity.js to store large values. This means that many numbers are Decimal objects, and must be treated differently. For example, you have to use <code>new Decimal(x)</code> to create a Decimal value instead of a plain number, and perform operations on them by calling functions. e.g, instead of <code>x = x + y</code>, use <code>x = x.add(y)</code>.</p><p>Almost all values can be either a constant value, or a dynamic value. Dynamic values are defined by putting a function that returns what the value should be at any given time.</p><p>All display text can be basic HTML instead (But you can&#39;t use most Vue features there).</p><h1 id="table-of-contents" tabindex="-1">Table of Contents: <a class="header-anchor" href="#table-of-contents" aria-hidden="true">#</a></h1><h2 id="general" tabindex="-1">General: <a class="header-anchor" href="#general" aria-hidden="true">#</a></h2><ul><li><a href="./getting-started">Getting Started</a>: Getting your own copy of the code set up with Github Desktop.</li><li><a href="./main-mod-info">Main mod info</a>: How to set up general things for your mod in mod.js.</li><li><a href="./basic-layer-breakdown">Basic layer breakdown</a>: Breaking down the components of a layer with minimal features.</li><li><a href="./layer-features">Layer features</a>: Explanations of all of the different properties that you can give a layer.</li><li><a href="./custom-tab-layouts">Custom Tab Layouts</a>: An optional way to give your tabs a different layout. You can even create entirely new components to use.</li><li><a href="./updating-tmt">Updating TMT</a>: Using Github Desktop to update your mod&#39;s version of TMT.</li></ul><h2 id="common-components" tabindex="-1">Common components <a class="header-anchor" href="#common-components" aria-hidden="true">#</a></h2><ul><li><a href="./upgrades">Upgrades</a>: How to create upgrades for a layer.</li><li><a href="./milestones">Milestones</a>: How to create milestones for a layer.</li><li><a href="./buyables">Buyables</a>: Create rebuyable upgrades for your layer (with the option to make them respec-able). Can be used to make Enhancers or Space Buildings.</li><li><a href="./clickables">Clickables</a>: A more generalized variant of buyables, for any kind of thing that is sometimes clickable. Between these and Buyables, you can do just about anything.</li></ul><h2 id="other-components" tabindex="-1">Other components <a class="header-anchor" href="#other-components" aria-hidden="true">#</a></h2><ul><li><a href="./challenges">Challenges</a>: How to create challenges for a layer.</li><li><a href="./bars">Bars</a>: Display some information as a progress bar, gague, or similar. They are highly customizable, and can be horizontal and vertical as well.</li><li><a href="./subtabs-and-microtabs">Subtabs and Microtabs</a>: Create subtabs for your tabs, as well as &quot;microtab&quot; components that you can put inside the tabs.</li><li><a href="./milestones">Achievements</a>: How to create achievements for a layer (or for the whole game).</li><li><a href="./infoboxes">Infoboxes</a>: Boxes containing text that can be shown or hidden.</li></ul>',14),i=[r];function s(l,d,c,h,u,m){return t(),a("div",null,i)}const y=e(n,[["render",s]]);export{p as __pageData,y as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as o}from"./app.c95a51e0.js";const p=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"General:","slug":"general","link":"#general","children":[]},{"level":2,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":2,"title":"Other components","slug":"other-components","link":"#other-components","children":[]}],"relativePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/!general-info.md"},r=o("",14),i=[r];function s(l,d,c,h,u,m){return t(),a("div",null,i)}const y=e(n,[["render",s]]);export{p as __pageData,y as default};
import{_ as e,c as a,o as t,d as o}from"./app.830f7d24.js";const p=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"General:","slug":"general","link":"#general","children":[]},{"level":2,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":2,"title":"Other components","slug":"other-components","link":"#other-components","children":[]}],"relativePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/!general-info.md"},r=o("",14),i=[r];function s(l,d,c,h,u,m){return t(),a("div",null,i)}const y=e(n,[["render",s]]);export{p as __pageData,y as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as a,o as s,d as t}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/achievements.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/achievements.md"},o=t(`<h1 id="achievements" tabindex="-1">Achievements <a class="header-anchor" href="#achievements" aria-hidden="true">#</a></h1><p>Achievements are awarded to the player when they meet a certain goal, and give some benefit. Currently, they are pretty basic, but additional features will be added later to help.</p><p>You can make global achievements by putting them in a side layer (make its row &quot;side&quot; instead of a number)</p><p>Useful functions for dealing with achievements and implementing their effects:</p><ul><li>hasAchievement(layer, id): determine if the player has the Achievement</li><li>achievementEffect(layer, id): Returns the current effects of the achievement, if any</li></ul><p>Achievements should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">achievements</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as a,o as s,d as t}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/achievements.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/achievements.md"},o=t(`<h1 id="achievements" tabindex="-1">Achievements <a class="header-anchor" href="#achievements" aria-hidden="true">#</a></h1><p>Achievements are awarded to the player when they meet a certain goal, and give some benefit. Currently, they are pretty basic, but additional features will be added later to help.</p><p>You can make global achievements by putting them in a side layer (make its row &quot;side&quot; instead of a number)</p><p>Useful functions for dealing with achievements and implementing their effects:</p><ul><li>hasAchievement(layer, id): determine if the player has the Achievement</li><li>achievementEffect(layer, id): Returns the current effects of the achievement, if any</li></ul><p>Achievements should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">achievements</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">rows</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">columns</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>

View file

@ -1 +1 @@
import{_ as e,c as a,o as s,d as t}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/achievements.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/achievements.md"},o=t("",9),l=[o];function i(p,r,c,h,d,u){return s(),a("div",null,l)}const v=e(n,[["render",i]]);export{y as __pageData,v as default};
import{_ as e,c as a,o as s,d as t}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/achievements.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/achievements.md"},o=t("",9),l=[o];function i(p,r,c,h,d,u){return s(),a("div",null,l)}const v=e(n,[["render",i]]);export{y as __pageData,v as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as e,d as t}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/bars.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/bars.md"},o=t(`<h1 id="bars" tabindex="-1">Bars <a class="header-anchor" href="#bars" aria-hidden="true">#</a></h1><p>Bars let you display information in a more direct way. It can be a progress bar, health bar, capacity gague, or anything else.</p><p>Bars are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">bars</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as e,d as t}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/bars.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/bars.md"},o=t(`<h1 id="bars" tabindex="-1">Bars <a class="header-anchor" href="#bars" aria-hidden="true">#</a></h1><p>Bars let you display information in a more direct way. It can be a progress bar, health bar, capacity gague, or anything else.</p><p>Bars are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">bars</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">bigBar</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">display</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">},</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as e,d as t}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/bars.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/bars.md"},o=t("",6),l=[o];function r(p,i,c,d,u,h){return e(),a("div",null,l)}const F=s(n,[["render",r]]);export{b as __pageData,F as default};
import{_ as s,c as a,o as e,d as t}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/bars.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/bars.md"},o=t("",6),l=[o];function r(p,i,c,d,u,h){return e(),a("div",null,l)}const F=s(n,[["render",r]]);export{b as __pageData,F as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as n,o as a,d as l}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/basic-layer-breakdown.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/basic-layer-breakdown.md"},p=l(`<h1 id="basic-layer-breakdown" tabindex="-1">Basic layer breakdown <a class="header-anchor" href="#basic-layer-breakdown" aria-hidden="true">#</a></h1><p>This is a very minimal layer with minimal features. Most things will require additional features.</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">p</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as n,o as a,d as l}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/basic-layer-breakdown.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/basic-layer-breakdown.md"},p=l(`<h1 id="basic-layer-breakdown" tabindex="-1">Basic layer breakdown <a class="header-anchor" href="#basic-layer-breakdown" aria-hidden="true">#</a></h1><p>This is a very minimal layer with minimal features. Most things will require additional features.</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">p</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">startData</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// startData is a function that returns default data for a layer. </span></span>
<span class="line"><span style="color:#F07178;"> unlocked</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#FF9CAC;">false</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// You can add more variables here to add them to your layer.</span></span>
<span class="line"><span style="color:#F07178;"> points</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">new</span><span style="color:#F07178;"> </span><span style="color:#82AAFF;">Decimal</span><span style="color:#F07178;">(</span><span style="color:#F78C6C;">0</span><span style="color:#F07178;">)</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// &quot;points&quot; is the internal name for the main resource of the layer.</span></span>

View file

@ -1 +1 @@
import{_ as s,c as n,o as a,d as l}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/basic-layer-breakdown.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/basic-layer-breakdown.md"},p=l("",3),e=[p];function t(r,c,F,y,i,D){return a(),n("div",null,e)}const h=s(o,[["render",t]]);export{d as __pageData,h as default};
import{_ as s,c as n,o as a,d as l}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/basic-layer-breakdown.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/basic-layer-breakdown.md"},p=l("",3),e=[p];function t(r,c,F,y,i,D){return a(),n("div",null,e)}const h=s(o,[["render",t]]);export{d as __pageData,h as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as e,o as a,d as n}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","lastUpdated":null}'),t={name:"public/gamedevtree/docs/buyables.md"},l=n(`<h1 id="buyables" tabindex="-1">Buyables <a class="header-anchor" href="#buyables" aria-hidden="true">#</a></h1><p>Buyables are usually things that can be bought multiple times with scaling costs. If you set a respec function, the player can reset the purchases to get their currency back.</p><p>The amount of a buyable owned is a Decimal. You can get or set the amount of a buyable with getBuyableAmt(layer, id) and setBuyableAmt(layer, id, amt). You can use buyableEffect(layer, id) to get the current effects of a buyable.</p><p>Buyables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">buyables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as e,o as a,d as n}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","lastUpdated":null}'),t={name:"public/gamedevtree/docs/buyables.md"},l=n(`<h1 id="buyables" tabindex="-1">Buyables <a class="header-anchor" href="#buyables" aria-hidden="true">#</a></h1><p>Buyables are usually things that can be bought multiple times with scaling costs. If you set a respec function, the player can reset the purchases to get their currency back.</p><p>The amount of a buyable owned is a Decimal. You can get or set the amount of a buyable with getBuyableAmt(layer, id) and setBuyableAmt(layer, id, amt). You can use buyableEffect(layer, id) to get the current effects of a buyable.</p><p>Buyables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">buyables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">rows</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">columns</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">respec</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{},</span><span style="color:#F07178;"> </span><span style="color:#676E95;">//**optional**, implement it to reset things and give back your currency.</span></span>

View file

@ -1 +1 @@
import{_ as s,c as e,o as a,d as n}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","lastUpdated":null}'),t={name:"public/gamedevtree/docs/buyables.md"},l=n("",11),o=[l];function p(r,c,i,u,y,b){return a(),e("div",null,o)}const d=s(t,[["render",p]]);export{F as __pageData,d as default};
import{_ as s,c as e,o as a,d as n}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","lastUpdated":null}'),t={name:"public/gamedevtree/docs/buyables.md"},l=n("",11),o=[l];function p(r,c,i,u,y,b){return a(),e("div",null,o)}const d=s(t,[["render",p]]);export{F as __pageData,d as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as a,o as n,d as s}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/challenges.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/challenges.md"},t=s(`<h1 id="challenges" tabindex="-1">Challenges <a class="header-anchor" href="#challenges" aria-hidden="true">#</a></h1><p>Useful functions for dealing with Challenges and implementing their effects:</p><ul><li>inChallenge(layer, id): determine if the player is in a given challenge (or another challenge on the same layer that counts as this one)</li><li>hasChallenge(layer, id): determine if the player has completed the challenge</li><li>challengeCompletions(layer, id): determine how many times the player completed the challenge</li><li>challEffect(layer, id): Returns the current effects of the challenge, if any</li></ul><p>Challenges are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">challenges</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as a,o as n,d as s}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/challenges.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/challenges.md"},t=s(`<h1 id="challenges" tabindex="-1">Challenges <a class="header-anchor" href="#challenges" aria-hidden="true">#</a></h1><p>Useful functions for dealing with Challenges and implementing their effects:</p><ul><li>inChallenge(layer, id): determine if the player is in a given challenge (or another challenge on the same layer that counts as this one)</li><li>hasChallenge(layer, id): determine if the player has completed the challenge</li><li>challengeCompletions(layer, id): determine how many times the player completed the challenge</li><li>challEffect(layer, id): Returns the current effects of the challenge, if any</li></ul><p>Challenges are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">challenges</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">rows</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">columns</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>

View file

@ -1 +1 @@
import{_ as e,c as a,o as n,d as s}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/challenges.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/challenges.md"},t=s("",9),o=[t];function i(r,c,p,h,u,y){return n(),a("div",null,o)}const f=e(l,[["render",i]]);export{d as __pageData,f as default};
import{_ as e,c as a,o as n,d as s}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/challenges.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/challenges.md"},t=s("",9),o=[t];function i(r,c,p,h,u,y){return n(),a("div",null,o)}const f=e(l,[["render",i]]);export{d as __pageData,f as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as e,d as n}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/clickables.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/clickables.md"},t=n(`<h1 id="clickables" tabindex="-1">Clickables <a class="header-anchor" href="#clickables" aria-hidden="true">#</a></h1><p>Clickables are any kind of thing that you can click for an effect. They&#39;re a more generalized version of Buyables.</p><p>DO NOT USE THESE TO MAKE THINGS THAT YOU CLICK REPEATEDLY FOR A BONUS BECAUSE THOSE ARE AWFUL.</p><p>There are several differences between the two. One is that a buyable&#39;s saved data is its amount as a Decimal, while Clickables store a &quot;state&quot; which can be a number or string, but not Decimal, array, or object). Buyables have a number of extra features which you can see on their page. Clickables also have a smaller default size.</p><p>You can get and set a clickable&#39;s state with getClickableState(layer, id) and setClickableState(layer, id, state). You can use clickableEffect(layer, id) to get the current effects of a clickable.</p><p>Clickables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">clickables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as e,d as n}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/clickables.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/clickables.md"},t=n(`<h1 id="clickables" tabindex="-1">Clickables <a class="header-anchor" href="#clickables" aria-hidden="true">#</a></h1><p>Clickables are any kind of thing that you can click for an effect. They&#39;re a more generalized version of Buyables.</p><p>DO NOT USE THESE TO MAKE THINGS THAT YOU CLICK REPEATEDLY FOR A BONUS BECAUSE THOSE ARE AWFUL.</p><p>There are several differences between the two. One is that a buyable&#39;s saved data is its amount as a Decimal, while Clickables store a &quot;state&quot; which can be a number or string, but not Decimal, array, or object). Buyables have a number of extra features which you can see on their page. Clickables also have a smaller default size.</p><p>You can get and set a clickable&#39;s state with getClickableState(layer, id) and setClickableState(layer, id, state). You can use clickableEffect(layer, id) to get the current effects of a clickable.</p><p>Clickables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">clickables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">rows</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">columns</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">masterButtonPress</span><span style="color:#F07178;">() </span><span style="color:#676E95;">// **optional** If this is present, an additional button will appear above the clickables.</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as e,d as n}from"./app.c95a51e0.js";const d=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/clickables.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/clickables.md"},t=n("",9),o=[t];function p(c,r,i,y,u,F){return e(),a("div",null,o)}const b=s(l,[["render",p]]);export{d as __pageData,b as default};
import{_ as s,c as a,o as e,d as n}from"./app.830f7d24.js";const d=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/clickables.md","lastUpdated":null}'),l={name:"public/gamedevtree/docs/clickables.md"},t=n("",9),o=[t];function p(c,r,i,y,u,F){return e(),a("div",null,o)}const b=s(l,[["render",p]]);export{d as __pageData,b as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o,d as t}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/custom-tab-layouts.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/custom-tab-layouts.md"},e=t(`<h1 id="custom-tab-layouts" tabindex="-1">Custom tab layouts <a class="header-anchor" href="#custom-tab-layouts" aria-hidden="true">#</a></h1><p>Note: If you are using subtabs, tabFormat is used differently, but you still use the same format within each subtabs. <a href="./subtabs-and-microtabs">See here for more on subtabs</a></p><p>Custom tab layouts can be used to do basically anything in a tab window, especially combined with the &quot;style&quot; layer feature. The tabFormat feature is an array of things, like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">main-display</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
import{_ as s,c as a,o,d as t}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/custom-tab-layouts.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/custom-tab-layouts.md"},e=t(`<h1 id="custom-tab-layouts" tabindex="-1">Custom tab layouts <a class="header-anchor" href="#custom-tab-layouts" aria-hidden="true">#</a></h1><p>Note: If you are using subtabs, tabFormat is used differently, but you still use the same format within each subtabs. <a href="./subtabs-and-microtabs">See here for more on subtabs</a></p><p>Custom tab layouts can be used to do basically anything in a tab window, especially combined with the &quot;style&quot; layer feature. The tabFormat feature is an array of things, like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">main-display</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">prestige-button</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#89DDFF;">(){</span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Melt your points into </span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;">]</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">blank</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">display-text</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o,d as t}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/custom-tab-layouts.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/custom-tab-layouts.md"},e=t("",9),l=[e];function p(r,c,i,y,D,u){return o(),a("div",null,l)}const b=s(n,[["render",p]]);export{h as __pageData,b as default};
import{_ as s,c as a,o,d as t}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/custom-tab-layouts.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/custom-tab-layouts.md"},e=t("",9),l=[e];function p(r,c,i,y,D,u){return o(),a("div",null,l)}const b=s(n,[["render",p]]);export{h as __pageData,b as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o,d as i}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github and The Modding Tree:","slug":"getting-set-up-with-github-and-the-modding-tree","link":"#getting-set-up-with-github-and-the-modding-tree","children":[]},{"level":2,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}],"relativePath":"public/gamedevtree/docs/getting-started.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/getting-started.md"},a=i('<h1 id="getting-started" tabindex="-1">Getting started <a class="header-anchor" href="#getting-started" aria-hidden="true">#</a></h1><p>Welcome to The Modding Tree!</p><p>Using the Modding Tree, at its simplest level, just requires getting a copy of it onto your computer. However, if you do it the right way, it will help in many ways.</p><p>Don&#39;t let the word &quot;Github&quot; scare you away. It&#39;s actually much easier to use than most people think, especially because most people use it the hard way. The key is Github Desktop, which lets you do everything you need to, without even touching the command line.</p><p>The benefits of using Github:</p><ul><li>It makes it much, much easier to update The Modding Tree.</li><li>You can share your work without any extra effort using githack, or with a bit more effort, set up a <a href="http://github.io" target="_blank" rel="noreferrer">github.io</a> site.</li><li>It lets you undo changes to your code, and to have multiple versions of it.</li><li>It lets you collaborate with other people, if you want to.</li></ul><h2 id="getting-set-up-with-github-and-the-modding-tree" tabindex="-1">Getting set up with Github and The Modding Tree: <a class="header-anchor" href="#getting-set-up-with-github-and-the-modding-tree" aria-hidden="true">#</a></h2><ol><li><p>Install <a href="https://desktop.github.com/" target="_blank" rel="noreferrer">Github Desktop</a> and <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer">Visual Studio Code</a>.</p></li><li><p>Make a Github account. You can handle this on your own.</p></li><li><p>Log in on your browser, and go back to <a href="https://github.com/Acamaeda/The-Modding-Tree" target="_blank" rel="noreferrer">The Modding Tree page</a>. At the top right, there should be a button that says &quot;fork&quot;. Click on it, and then on your username. You now have your own fork, or copy, of The Modding Tree.</p></li><li><p>Open Github Desktop and log in. Ignore everything else and choose &quot;clone a repository&quot;. A &quot;repository&quot; is basically a &quot;Github project&quot;, like The Modding Tree. &quot;Cloning&quot; is downloading a copy of the repository to your computer.</p></li><li><p>Look for The Modding Tree in the list of repositiories (it should be the only one) and click &quot;clone&quot;.</p></li><li><p>Select that you&#39;re using it for your own purposes, and click continue. It will download the files and handle everything.</p></li></ol><h2 id="using-your-repository" tabindex="-1">Using your repository <a class="header-anchor" href="#using-your-repository" aria-hidden="true">#</a></h2><ol><li><p>Click on &quot;show in finder&quot; to the right, and then open index.html. This will let you view and test your project!</p></li><li><p>To edit your project, click &quot;open in VSCode&quot; in Github Desktop.</p></li><li><p>Open mod.js in VSCode, and look at the top part where it says &quot;modInfo&quot;. On the lines below that, change the mod&#39;s name to whatever you want, and change the id as well. (It can be any string value, and it&#39;s used to determine where the savefile is. Make it something that&#39;s probably unique, and don&#39;t change it again later.)</p></li><li><p>Save game.js, and then reload index.html. The title on the tab, as well as on the info page, will now be the new ones!</p></li><li><p>Go back to Github Desktop. It&#39;s time to save your changes into the git system by making a &quot;commit&quot;.</p></li><li><p>At the bottom right corner, add a summary of your changes, and then click &quot;commit to master&quot;.</p></li><li><p>Finally, at the top middle, click &quot;push origin&quot; to push your changes out onto the online repository.</p></li><li><p>You can view your project on line, or share it with others, by going to <a href="https://raw.githack.com/%5BYOUR-GITHUB-USERNAME%5D/The-Modding-Tree/master/index.html" target="_blank" rel="noreferrer">https://raw.githack.com/[YOUR-GITHUB-USERNAME]/The-Modding-Tree/master/index.html</a></p></li></ol><p>And now, you have successfully used Github! You can look at the <a href="./!general-info">documentation</a> to see how The Modding Tree&#39;s system works and to make your mod a reality.</p>',11),r=[a];function h(s,l,u,d,p,g){return o(),t("div",null,r)}const m=e(n,[["render",h]]);export{y as __pageData,m as default};
import{_ as e,c as t,o,d as i}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github and The Modding Tree:","slug":"getting-set-up-with-github-and-the-modding-tree","link":"#getting-set-up-with-github-and-the-modding-tree","children":[]},{"level":2,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}],"relativePath":"public/gamedevtree/docs/getting-started.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/getting-started.md"},a=i('<h1 id="getting-started" tabindex="-1">Getting started <a class="header-anchor" href="#getting-started" aria-hidden="true">#</a></h1><p>Welcome to The Modding Tree!</p><p>Using the Modding Tree, at its simplest level, just requires getting a copy of it onto your computer. However, if you do it the right way, it will help in many ways.</p><p>Don&#39;t let the word &quot;Github&quot; scare you away. It&#39;s actually much easier to use than most people think, especially because most people use it the hard way. The key is Github Desktop, which lets you do everything you need to, without even touching the command line.</p><p>The benefits of using Github:</p><ul><li>It makes it much, much easier to update The Modding Tree.</li><li>You can share your work without any extra effort using githack, or with a bit more effort, set up a <a href="http://github.io" target="_blank" rel="noreferrer">github.io</a> site.</li><li>It lets you undo changes to your code, and to have multiple versions of it.</li><li>It lets you collaborate with other people, if you want to.</li></ul><h2 id="getting-set-up-with-github-and-the-modding-tree" tabindex="-1">Getting set up with Github and The Modding Tree: <a class="header-anchor" href="#getting-set-up-with-github-and-the-modding-tree" aria-hidden="true">#</a></h2><ol><li><p>Install <a href="https://desktop.github.com/" target="_blank" rel="noreferrer">Github Desktop</a> and <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer">Visual Studio Code</a>.</p></li><li><p>Make a Github account. You can handle this on your own.</p></li><li><p>Log in on your browser, and go back to <a href="https://github.com/Acamaeda/The-Modding-Tree" target="_blank" rel="noreferrer">The Modding Tree page</a>. At the top right, there should be a button that says &quot;fork&quot;. Click on it, and then on your username. You now have your own fork, or copy, of The Modding Tree.</p></li><li><p>Open Github Desktop and log in. Ignore everything else and choose &quot;clone a repository&quot;. A &quot;repository&quot; is basically a &quot;Github project&quot;, like The Modding Tree. &quot;Cloning&quot; is downloading a copy of the repository to your computer.</p></li><li><p>Look for The Modding Tree in the list of repositiories (it should be the only one) and click &quot;clone&quot;.</p></li><li><p>Select that you&#39;re using it for your own purposes, and click continue. It will download the files and handle everything.</p></li></ol><h2 id="using-your-repository" tabindex="-1">Using your repository <a class="header-anchor" href="#using-your-repository" aria-hidden="true">#</a></h2><ol><li><p>Click on &quot;show in finder&quot; to the right, and then open index.html. This will let you view and test your project!</p></li><li><p>To edit your project, click &quot;open in VSCode&quot; in Github Desktop.</p></li><li><p>Open mod.js in VSCode, and look at the top part where it says &quot;modInfo&quot;. On the lines below that, change the mod&#39;s name to whatever you want, and change the id as well. (It can be any string value, and it&#39;s used to determine where the savefile is. Make it something that&#39;s probably unique, and don&#39;t change it again later.)</p></li><li><p>Save game.js, and then reload index.html. The title on the tab, as well as on the info page, will now be the new ones!</p></li><li><p>Go back to Github Desktop. It&#39;s time to save your changes into the git system by making a &quot;commit&quot;.</p></li><li><p>At the bottom right corner, add a summary of your changes, and then click &quot;commit to master&quot;.</p></li><li><p>Finally, at the top middle, click &quot;push origin&quot; to push your changes out onto the online repository.</p></li><li><p>You can view your project on line, or share it with others, by going to <a href="https://raw.githack.com/%5BYOUR-GITHUB-USERNAME%5D/The-Modding-Tree/master/index.html" target="_blank" rel="noreferrer">https://raw.githack.com/[YOUR-GITHUB-USERNAME]/The-Modding-Tree/master/index.html</a></p></li></ol><p>And now, you have successfully used Github! You can look at the <a href="./!general-info">documentation</a> to see how The Modding Tree&#39;s system works and to make your mod a reality.</p>',11),r=[a];function h(s,l,u,d,p,g){return o(),t("div",null,r)}const m=e(n,[["render",h]]);export{y as __pageData,m as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o,d as i}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github and The Modding Tree:","slug":"getting-set-up-with-github-and-the-modding-tree","link":"#getting-set-up-with-github-and-the-modding-tree","children":[]},{"level":2,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}],"relativePath":"public/gamedevtree/docs/getting-started.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/getting-started.md"},a=i("",11),r=[a];function h(s,l,u,d,p,g){return o(),t("div",null,r)}const m=e(n,[["render",h]]);export{y as __pageData,m as default};
import{_ as e,c as t,o,d as i}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github and The Modding Tree:","slug":"getting-set-up-with-github-and-the-modding-tree","link":"#getting-set-up-with-github-and-the-modding-tree","children":[]},{"level":2,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}],"relativePath":"public/gamedevtree/docs/getting-started.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/getting-started.md"},a=i("",11),r=[a];function h(s,l,u,d,p,g){return o(),t("div",null,r)}const m=e(n,[["render",h]]);export{y as __pageData,m as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as e,o as a,d as o}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/infoboxes.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/infoboxes.md"},t=o(`<h1 id="infoboxes" tabindex="-1">Infoboxes <a class="header-anchor" href="#infoboxes" aria-hidden="true">#</a></h1><p>Infoboxes are good for displaying &quot;lore&quot;, or story elements, as well as for explaining complicated things.</p><p>In the default tab layout, the first infobox will be displayed at the very top of the tab.</p><p>Infoboxes are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">infoboxes</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as e,o as a,d as o}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/infoboxes.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/infoboxes.md"},t=o(`<h1 id="infoboxes" tabindex="-1">Infoboxes <a class="header-anchor" href="#infoboxes" aria-hidden="true">#</a></h1><p>Infoboxes are good for displaying &quot;lore&quot;, or story elements, as well as for explaining complicated things.</p><p>In the default tab layout, the first infobox will be displayed at the very top of the tab.</p><p>Infoboxes are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">infoboxes</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">infobox</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">display</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">},</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>

View file

@ -1 +1 @@
import{_ as s,c as e,o as a,d as o}from"./app.c95a51e0.js";const h=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/infoboxes.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/infoboxes.md"},t=o("",7),l=[t];function p(i,r,c,d,y,u){return a(),e("div",null,l)}const f=s(n,[["render",p]]);export{h as __pageData,f as default};
import{_ as s,c as e,o as a,d as o}from"./app.830f7d24.js";const h=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/infoboxes.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/infoboxes.md"},t=o("",7),l=[t];function p(i,r,c,d,y,u){return a(),e("div",null,l)}const f=s(n,[["render",p]]);export{h as __pageData,f as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/gamedevtree/docs/layer-features.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/layer-features.md"},n=s(`<h1 id="layer-features" tabindex="-1">Layer Features <a class="header-anchor" href="#layer-features" aria-hidden="true">#</a></h1><p>This is a more comprehensive list of established features to add to layers. You can add more freely, if you want to have other functions or values associated with your layer. These have special functionality, though.</p><p>You can make almost any value dynamic by using a function in its place, including all display strings and styling/color features.</p><p>Key:</p><ul><li>No label: This is required and the game will crash if it isn&#39;t included.</li><li><strong>sometimes required</strong>: This is may be required, depending on other things in the layer.</li><li><strong>optional</strong>: You can leave this out if you don&#39;t intend to use that feature for the layer.</li></ul><h2 id="layer-definition-features" tabindex="-1">Layer Definition features <a class="header-anchor" href="#layer-definition-features" aria-hidden="true">#</a></h2><ul><li><p>layer: <strong>Assigned automagically</strong>. It&#39;s the same value as the name of this layer, so you can do player[this.layer].points or similar to access the save value. It makes copying code to new layers easier. It is also assigned to all upgrades and buyables and such.</p></li><li><p>name: <strong>Optional</strong>, used in reset confirmations (and maybe other places). If absent, it just uses the layer&#39;s id.</p></li><li><p>startData(): A function to return the default save data for this layer. Add any variables you have to it. Any nonstandard Decimal variables need to be added to convertToDecimal as well. Standard values: Required: unlocked: a bool determining if this layer is unlocked or not points: a Decimal, the main currency for the layer Optional: total: A Decimal, tracks total amount of main prestige currency best: A Decimal, tracks highest amount of main prestige currency unlockOrder: used to keep track of relevant layers unlocked before this one.</p></li><li><p>color: A color associated with this layer, used in many places. (A string in hex format with a #)</p></li><li><p>row: The row of the layer, starting at 0. This affects where the node appears on the tree, and which resets affect the layer.</p><pre><code> Using &quot;side&quot; instead of a number will cause the layer to appear off to the side as a smaller node (useful for achievements
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/gamedevtree/docs/layer-features.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/layer-features.md"},n=s(`<h1 id="layer-features" tabindex="-1">Layer Features <a class="header-anchor" href="#layer-features" aria-hidden="true">#</a></h1><p>This is a more comprehensive list of established features to add to layers. You can add more freely, if you want to have other functions or values associated with your layer. These have special functionality, though.</p><p>You can make almost any value dynamic by using a function in its place, including all display strings and styling/color features.</p><p>Key:</p><ul><li>No label: This is required and the game will crash if it isn&#39;t included.</li><li><strong>sometimes required</strong>: This is may be required, depending on other things in the layer.</li><li><strong>optional</strong>: You can leave this out if you don&#39;t intend to use that feature for the layer.</li></ul><h2 id="layer-definition-features" tabindex="-1">Layer Definition features <a class="header-anchor" href="#layer-definition-features" aria-hidden="true">#</a></h2><ul><li><p>layer: <strong>Assigned automagically</strong>. It&#39;s the same value as the name of this layer, so you can do player[this.layer].points or similar to access the save value. It makes copying code to new layers easier. It is also assigned to all upgrades and buyables and such.</p></li><li><p>name: <strong>Optional</strong>, used in reset confirmations (and maybe other places). If absent, it just uses the layer&#39;s id.</p></li><li><p>startData(): A function to return the default save data for this layer. Add any variables you have to it. Any nonstandard Decimal variables need to be added to convertToDecimal as well. Standard values: Required: unlocked: a bool determining if this layer is unlocked or not points: a Decimal, the main currency for the layer Optional: total: A Decimal, tracks total amount of main prestige currency best: A Decimal, tracks highest amount of main prestige currency unlockOrder: used to keep track of relevant layers unlocked before this one.</p></li><li><p>color: A color associated with this layer, used in many places. (A string in hex format with a #)</p></li><li><p>row: The row of the layer, starting at 0. This affects where the node appears on the tree, and which resets affect the layer.</p><pre><code> Using &quot;side&quot; instead of a number will cause the layer to appear off to the side as a smaller node (useful for achievements
and statistics). Side layers are not affected by resets unless you add a doReset to them.
</code></pre></li><li><p>resource: Name of the main currency you gain by resetting on this layer.</p></li><li><p>effect(): <strong>optional</strong>, A function that calculates and returns the current values of any bonuses inherent to the main currency. Can return a value or an object containing multiple values. <em>You will also have to implement the effect where it is applied.</em></p></li><li><p>effectDescription: <strong>optional</strong>, A function that returns a description of this effect. If the text stays constant, it can just be a string.</p></li><li><p>layerShown(): A function returning a bool which determines if this layer&#39;s node should be visible on the tree. It can also return &quot;ghost&quot;, which will hide the layer, but its node will still take up space in the tree.</p></li><li><p>hotkeys: <strong>optional</strong>, An array containing information on any hotkeys associated with this layer:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">hotkeys</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">p</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#676E95;">// What the hotkey button is. Use uppercase if it&#39;s combined with shift, or &quot;ctrl+x&quot; if ctrl is.</span></span>

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/gamedevtree/docs/layer-features.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/layer-features.md"},n=s("",18),r=[n];function l(i,p,c,u,h,y){return a(),t("div",null,r)}const g=e(o,[["render",l]]);export{f as __pageData,g as default};
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/gamedevtree/docs/layer-features.md","lastUpdated":null}'),o={name:"public/gamedevtree/docs/layer-features.md"},n=s("",18),r=[n];function l(i,p,c,u,h,y){return a(),t("div",null,r)}const g=e(o,[["render",l]]);export{f as __pageData,g as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/main-mod-info.md"},o=t(`<h1 id="mod-js" tabindex="-1">mod.js <a class="header-anchor" href="#mod-js" aria-hidden="true">#</a></h1><p>All of the code and data that you&#39;re likely to edit is here in mod.js! Everything in mod.js will not be altered by updates, besides the addition of new things.</p><p>Here&#39;s a breakdown of what&#39;s in it:</p><ul><li><p>modInfo is where most of the basic configuration for the mod is. It contains:</p><ul><li>name: The name of your mod. (a string)</li><li>id: The id for your mod, a unique string that is used to determine savefile location. Setting it is important!</li><li>author: The name of the author, displayed in the info tab.</li><li>pointsName: This changes what is displayed instead of &quot;points&quot; for the main currency. (It does not affect it in the code.)</li><li>discordName, discordLink: If you have a Discord server or other discussion place, you can add a link to it. &quot;discordName&quot; is the text on the link, and &quot;discordLink&quot; is the url of an invite. If you&#39;re using a Discord invite, please make sure it&#39;s set to never expire.</li><li>changelogLink: You can use this to set a link to a page where your changelog for the game is displayed.</li><li>offlineLimit: The maximum amount of offline time that the player can accumulate, in hours. Any extra time is lost. (a number) This is useful because most of these mods are fast-paced enough that too much offline time ruins the balance, such as the time in between updates. That is why I suggest developers disable offline time on their own savefile.</li><li>initialStartPoints: A Decimal for the amount of points a new player should start with.</li></ul></li><li><p>VERSION is used to describe the current version of your mod. It contains: num: The mod&#39;s version number, displayed at the top right of the tree tab. name: The version&#39;s name, displayed alongside the number in the info tab.</p></li><li><p>doNotCallTheseFunctionsEveryTick is very important. TMT calls every function anywhere in &quot;layers&quot; every tick to store the result, unless specifically told not to. Functions that have are used to do an action need to be identified. &quot;Official&quot; functions (those in the documentation) are all fine, but if you make any new ones, add their names to this array.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#676E95;">// (The ones here are examples, all official functions are already taken care of)</span></span>
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/main-mod-info.md"},o=t(`<h1 id="mod-js" tabindex="-1">mod.js <a class="header-anchor" href="#mod-js" aria-hidden="true">#</a></h1><p>All of the code and data that you&#39;re likely to edit is here in mod.js! Everything in mod.js will not be altered by updates, besides the addition of new things.</p><p>Here&#39;s a breakdown of what&#39;s in it:</p><ul><li><p>modInfo is where most of the basic configuration for the mod is. It contains:</p><ul><li>name: The name of your mod. (a string)</li><li>id: The id for your mod, a unique string that is used to determine savefile location. Setting it is important!</li><li>author: The name of the author, displayed in the info tab.</li><li>pointsName: This changes what is displayed instead of &quot;points&quot; for the main currency. (It does not affect it in the code.)</li><li>discordName, discordLink: If you have a Discord server or other discussion place, you can add a link to it. &quot;discordName&quot; is the text on the link, and &quot;discordLink&quot; is the url of an invite. If you&#39;re using a Discord invite, please make sure it&#39;s set to never expire.</li><li>changelogLink: You can use this to set a link to a page where your changelog for the game is displayed.</li><li>offlineLimit: The maximum amount of offline time that the player can accumulate, in hours. Any extra time is lost. (a number) This is useful because most of these mods are fast-paced enough that too much offline time ruins the balance, such as the time in between updates. That is why I suggest developers disable offline time on their own savefile.</li><li>initialStartPoints: A Decimal for the amount of points a new player should start with.</li></ul></li><li><p>VERSION is used to describe the current version of your mod. It contains: num: The mod&#39;s version number, displayed at the top right of the tree tab. name: The version&#39;s name, displayed alongside the number in the info tab.</p></li><li><p>doNotCallTheseFunctionsEveryTick is very important. TMT calls every function anywhere in &quot;layers&quot; every tick to store the result, unless specifically told not to. Functions that have are used to do an action need to be identified. &quot;Official&quot; functions (those in the documentation) are all fine, but if you make any new ones, add their names to this array.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#676E95;">// (The ones here are examples, all official functions are already taken care of)</span></span>
<span class="line"><span style="color:#C792EA;">var</span><span style="color:#A6ACCD;"> doNotCallTheseFunctionsEveryTick </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">doReset</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">buy</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">onPurchase</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">blowUpEverything</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">]</span></span>
<span class="line"></span></code></pre></div><ul><li><p>getStartPoints(): A function to determine the amount of points the player starts with after a reset. (returns a Decimal value)</p></li><li><p>canGenPoints(): A function returning a boolean for if points should be generated. Use this if you want an upgrade to unlock generating points.</p></li><li><p>getPointGen(): A function that calculates your points per second. Anything that affects your point gain should go into the calculation here.</p></li><li><p>addedPlayerData(): A function that returns any non-layer-related data that you want to be added to the save data and &quot;player&quot; object.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">addedPlayerData</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> weather</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Yes</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/main-mod-info.md"},o=t("",10),l=[o];function i(p,r,c,u,d,h){return a(),s("div",null,l)}const m=e(n,[["render",i]]);export{f as __pageData,m as default};
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/main-mod-info.md"},o=t("",10),l=[o];function i(p,r,c,u,d,h){return a(),s("div",null,l)}const m=e(n,[["render",i]]);export{f as __pageData,m as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as s,o as t,d as n}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/milestones.md","lastUpdated":null}'),a={name:"public/gamedevtree/docs/milestones.md"},o=n(`<h1 id="milestones" tabindex="-1">Milestones <a class="header-anchor" href="#milestones" aria-hidden="true">#</a></h1><p>Milestones are awarded to the player when they meet a certain goal, and give some benefit. Milestones should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">milestones</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as s,o as t,d as n}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/milestones.md","lastUpdated":null}'),a={name:"public/gamedevtree/docs/milestones.md"},o=n(`<h1 id="milestones" tabindex="-1">Milestones <a class="header-anchor" href="#milestones" aria-hidden="true">#</a></h1><p>Milestones are awarded to the player when they meet a certain goal, and give some benefit. Milestones should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">milestones</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">0</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> requirementDesc</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">123 waffles</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>

View file

@ -1 +1 @@
import{_ as e,c as s,o as t,d as n}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/milestones.md","lastUpdated":null}'),a={name:"public/gamedevtree/docs/milestones.md"},o=n("",6),l=[o];function i(r,p,c,h,d,u){return t(),s("div",null,l)}const y=e(a,[["render",i]]);export{m as __pageData,y as default};
import{_ as e,c as s,o as t,d as n}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/milestones.md","lastUpdated":null}'),a={name:"public/gamedevtree/docs/milestones.md"},o=n("",6),l=[o];function i(r,p,c,h,d,u){return t(),s("div",null,l)}const y=e(a,[["render",i]]);export{m as __pageData,y as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as n,d as t}from"./app.c95a51e0.js";const D=JSON.parse('{"title":"Subtabs and Microtabs","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/subtabs-and-microtabs.md","lastUpdated":null}'),e={name:"public/gamedevtree/docs/subtabs-and-microtabs.md"},o=t(`<h1 id="subtabs-and-microtabs" tabindex="-1">Subtabs and Microtabs <a class="header-anchor" href="#subtabs-and-microtabs" aria-hidden="true">#</a></h1><p>Subtabs are separate sections of a tab that you can view by selecting one at the top of the tab. Microtabs are smaller areas that function in much the same way.</p><p>Subtabs are defined by using the tab format like this, where each element of tabFormat is given the name of that subtab:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as n,d as t}from"./app.830f7d24.js";const D=JSON.parse('{"title":"Subtabs and Microtabs","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/subtabs-and-microtabs.md","lastUpdated":null}'),e={name:"public/gamedevtree/docs/subtabs-and-microtabs.md"},o=t(`<h1 id="subtabs-and-microtabs" tabindex="-1">Subtabs and Microtabs <a class="header-anchor" href="#subtabs-and-microtabs" aria-hidden="true">#</a></h1><p>Subtabs are separate sections of a tab that you can view by selecting one at the top of the tab. Microtabs are smaller areas that function in much the same way.</p><p>Subtabs are defined by using the tab format like this, where each element of tabFormat is given the name of that subtab:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Main tab</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> *subtab features*</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as n,d as t}from"./app.c95a51e0.js";const D=JSON.parse('{"title":"Subtabs and Microtabs","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/subtabs-and-microtabs.md","lastUpdated":null}'),e={name:"public/gamedevtree/docs/subtabs-and-microtabs.md"},o=t("",9),l=[o];function p(c,r,i,F,u,y){return n(),a("div",null,l)}const h=s(e,[["render",p]]);export{D as __pageData,h as default};
import{_ as s,c as a,o as n,d as t}from"./app.830f7d24.js";const D=JSON.parse('{"title":"Subtabs and Microtabs","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/subtabs-and-microtabs.md","lastUpdated":null}'),e={name:"public/gamedevtree/docs/subtabs-and-microtabs.md"},o=t("",9),l=[o];function p(c,r,i,F,u,y){return n(),a("div",null,l)}const h=s(e,[["render",p]]);export{D as __pageData,h as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as o}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Updating The Modding Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/updating-tmt.md","lastUpdated":null}'),i={name:"public/gamedevtree/docs/updating-tmt.md"},n=o('<h1 id="updating-the-modding-tree" tabindex="-1">Updating The Modding Tree <a class="header-anchor" href="#updating-the-modding-tree" aria-hidden="true">#</a></h1><p>This tutorial assumes that you have used <a href="./getting-started">the Getting Started Tutorial</a>, and are using Github Desktop and VSCode for your mod.</p><p>Here&#39;s what you have to do when there&#39;s a TMT update:</p><ol><li><p>Look at the changelog. It will warn you if the update will break anything or require any changes. Decide if you want to try to update.</p></li><li><p>Open Github Desktop, and at the top middle, click &quot;fetch origin&quot;. This will make Github Desktop get information about the update.</p></li><li><p>Click where it says &quot;current branch: master&quot; at the top middle, and at the bottom of the thing that appears, click &quot;choose a branch to merge into master.</p></li><li><p>Select upstream/master. It will likely say there are conflicts, but you have tools to resolve them. Click &quot;Merge upstream/master into master&quot;.</p></li><li><p>A conflict happens when the things you&#39;re trying to merge have both made changes in the same place. Click &quot;open in Visual Studio Code&quot; next to the first file.</p></li><li><p>Scroll down through the file, and look for the parts highlighted in red and green. One of these is your code, and the other is some code that will be modified by the update. Do your best to try to edit things to keep the updated changes, but keep your content.</p></li><li><p>Continue to do this for all remaining challenges.</p></li><li><p>Do any other changes required by the update, run the game, fix issues, etc.</p></li></ol>',4),r=[n];function d(h,s,l,p,u,c){return a(),t("div",null,r)}const _=e(i,[["render",d]]);export{m as __pageData,_ as default};
import{_ as e,c as t,o as a,d as o}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Updating The Modding Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/updating-tmt.md","lastUpdated":null}'),i={name:"public/gamedevtree/docs/updating-tmt.md"},n=o('<h1 id="updating-the-modding-tree" tabindex="-1">Updating The Modding Tree <a class="header-anchor" href="#updating-the-modding-tree" aria-hidden="true">#</a></h1><p>This tutorial assumes that you have used <a href="./getting-started">the Getting Started Tutorial</a>, and are using Github Desktop and VSCode for your mod.</p><p>Here&#39;s what you have to do when there&#39;s a TMT update:</p><ol><li><p>Look at the changelog. It will warn you if the update will break anything or require any changes. Decide if you want to try to update.</p></li><li><p>Open Github Desktop, and at the top middle, click &quot;fetch origin&quot;. This will make Github Desktop get information about the update.</p></li><li><p>Click where it says &quot;current branch: master&quot; at the top middle, and at the bottom of the thing that appears, click &quot;choose a branch to merge into master.</p></li><li><p>Select upstream/master. It will likely say there are conflicts, but you have tools to resolve them. Click &quot;Merge upstream/master into master&quot;.</p></li><li><p>A conflict happens when the things you&#39;re trying to merge have both made changes in the same place. Click &quot;open in Visual Studio Code&quot; next to the first file.</p></li><li><p>Scroll down through the file, and look for the parts highlighted in red and green. One of these is your code, and the other is some code that will be modified by the update. Do your best to try to edit things to keep the updated changes, but keep your content.</p></li><li><p>Continue to do this for all remaining challenges.</p></li><li><p>Do any other changes required by the update, run the game, fix issues, etc.</p></li></ol>',4),r=[n];function d(h,s,l,p,u,c){return a(),t("div",null,r)}const _=e(i,[["render",d]]);export{m as __pageData,_ as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as o}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Updating The Modding Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/updating-tmt.md","lastUpdated":null}'),i={name:"public/gamedevtree/docs/updating-tmt.md"},n=o("",4),r=[n];function d(h,s,l,p,u,c){return a(),t("div",null,r)}const _=e(i,[["render",d]]);export{m as __pageData,_ as default};
import{_ as e,c as t,o as a,d as o}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Updating The Modding Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/updating-tmt.md","lastUpdated":null}'),i={name:"public/gamedevtree/docs/updating-tmt.md"},n=o("",4),r=[n];function d(h,s,l,p,u,c){return a(),t("div",null,r)}const _=e(i,[["render",d]]);export{m as __pageData,_ as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const g=JSON.parse('{"title":"Upgrades","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/upgrades.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/upgrades.md"},o=t(`<h1 id="upgrades" tabindex="-1">Upgrades <a class="header-anchor" href="#upgrades" aria-hidden="true">#</a></h1><p>Useful functions for dealing with Upgrades and implementing their effects:</p><ul><li>hasUpgrade(layer, id): determine if the player has the upgrade</li><li>upgradeEffect(layer, id): Returns the current effects of the upgrade, if any</li><li>buyUpgrade(layer, id): Buys an upgrade directly (if affordable)</li></ul><p>Hint: Basic point gain is calculated in mod.js&#39;s &quot;getPointGen&quot;.</p><p>Upgrades are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">upgrades</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const g=JSON.parse('{"title":"Upgrades","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/upgrades.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/upgrades.md"},o=t(`<h1 id="upgrades" tabindex="-1">Upgrades <a class="header-anchor" href="#upgrades" aria-hidden="true">#</a></h1><p>Useful functions for dealing with Upgrades and implementing their effects:</p><ul><li>hasUpgrade(layer, id): determine if the player has the upgrade</li><li>upgradeEffect(layer, id): Returns the current effects of the upgrade, if any</li><li>buyUpgrade(layer, id): Buys an upgrade directly (if affordable)</li></ul><p>Hint: Basic point gain is calculated in mod.js&#39;s &quot;getPointGen&quot;.</p><p>Upgrades are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">upgrades</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">rows</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> # </span><span style="color:#89DDFF;">of</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">columns</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>

View file

@ -1 +1 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const g=JSON.parse('{"title":"Upgrades","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/upgrades.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/upgrades.md"},o=t("",10),l=[o];function r(p,i,c,u,d,h){return a(),s("div",null,l)}const f=e(n,[["render",r]]);export{g as __pageData,f as default};
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const g=JSON.parse('{"title":"Upgrades","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/upgrades.md","lastUpdated":null}'),n={name:"public/gamedevtree/docs/upgrades.md"},o=t("",10),l=[o];function r(p,i,c,u,d,h){return a(),s("div",null,l)}const f=e(n,[["render",r]]);export{g as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as n}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/Old Things/2.0-format-changes.md","lastUpdated":null}'),i={name:"public/kronos/Old Things/2.0-format-changes.md"},o=n('<h1 id="_2-0-format-changes" tabindex="-1">2.0 format changes <a class="header-anchor" href="#_2-0-format-changes" aria-hidden="true">#</a></h1><ul><li>Temp format is changed from <code>temp.something[layer]</code> to <code>temp[layer].something</code>, for consistency</li><li>Challenges are now saved as an object with the amount of completions in each spot. (This will break saves.)</li><li><code>effectDisplay</code> in Challenges and Upgrades no longer takes an argument, and neither does <code>effect</code> for Buyables</li><li>Buyable cost can take an argument for amount of buyables, but it needs to function if no argument is supplied (it should do the cost for the next purchase).</li><li>Generation of Points now happens in the main game loop (not in a layer update function), enabled by <code>canGenPoints</code> in <a href="js/game.js">game.js</a>.</li><li>Changed <code>fullLayerReset</code> to <code>layerDataReset</code>, which takes an array of names of values to keep</li></ul><p>In addition, many names were changed, mostly expanding abbreviations:</p><p>All instances of:</p><ul><li>chall -&gt; challenge</li><li>unl -&gt; unlocked</li><li>upg -&gt; upgrade (besides CSS)</li><li>amt -&gt; amount</li><li>desc -&gt; description</li><li>resCeil -&gt; roundUpCost</li><li>order -&gt; unlockOrder</li><li>incr_order -&gt; increaseUnlockOrder</li></ul><p>Challenges:</p><ul><li>desc -&gt; challengeDescription</li><li>reward -&gt; rewardDescription</li><li>effect -&gt; rewardEffect</li><li>effectDisplay -&gt; rewardDisplay</li><li>active -&gt; challengeActive</li></ul>',7),l=[o];function s(r,c,d,h,g,p){return t(),a("div",null,l)}const m=e(i,[["render",s]]);export{u as __pageData,m as default};
import{_ as e,c as a,o as t,d as n}from"./app.830f7d24.js";const u=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/Old Things/2.0-format-changes.md","lastUpdated":null}'),i={name:"public/kronos/Old Things/2.0-format-changes.md"},o=n('<h1 id="_2-0-format-changes" tabindex="-1">2.0 format changes <a class="header-anchor" href="#_2-0-format-changes" aria-hidden="true">#</a></h1><ul><li>Temp format is changed from <code>temp.something[layer]</code> to <code>temp[layer].something</code>, for consistency</li><li>Challenges are now saved as an object with the amount of completions in each spot. (This will break saves.)</li><li><code>effectDisplay</code> in Challenges and Upgrades no longer takes an argument, and neither does <code>effect</code> for Buyables</li><li>Buyable cost can take an argument for amount of buyables, but it needs to function if no argument is supplied (it should do the cost for the next purchase).</li><li>Generation of Points now happens in the main game loop (not in a layer update function), enabled by <code>canGenPoints</code> in <a href="js/game.js">game.js</a>.</li><li>Changed <code>fullLayerReset</code> to <code>layerDataReset</code>, which takes an array of names of values to keep</li></ul><p>In addition, many names were changed, mostly expanding abbreviations:</p><p>All instances of:</p><ul><li>chall -&gt; challenge</li><li>unl -&gt; unlocked</li><li>upg -&gt; upgrade (besides CSS)</li><li>amt -&gt; amount</li><li>desc -&gt; description</li><li>resCeil -&gt; roundUpCost</li><li>order -&gt; unlockOrder</li><li>incr_order -&gt; increaseUnlockOrder</li></ul><p>Challenges:</p><ul><li>desc -&gt; challengeDescription</li><li>reward -&gt; rewardDescription</li><li>effect -&gt; rewardEffect</li><li>effectDisplay -&gt; rewardDisplay</li><li>active -&gt; challengeActive</li></ul>',7),l=[o];function s(r,c,d,h,g,p){return t(),a("div",null,l)}const m=e(i,[["render",s]]);export{u as __pageData,m as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as n}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/Old Things/2.0-format-changes.md","lastUpdated":null}'),i={name:"public/kronos/Old Things/2.0-format-changes.md"},o=n("",7),l=[o];function s(r,c,d,h,g,p){return t(),a("div",null,l)}const m=e(i,[["render",s]]);export{u as __pageData,m as default};
import{_ as e,c as a,o as t,d as n}from"./app.830f7d24.js";const u=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/Old Things/2.0-format-changes.md","lastUpdated":null}'),i={name:"public/kronos/Old Things/2.0-format-changes.md"},o=n("",7),l=[o];function s(r,c,d,h,g,p){return t(),a("div",null,l)}const m=e(i,[["render",s]]);export{u as __pageData,m as default};

View file

@ -1 +1 @@
import{_ as e,c as o,o as t,d as r}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Kronos","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/README.md","lastUpdated":null}'),a={name:"public/kronos/README.md"},s=r('<h1 id="kronos" tabindex="-1">Kronos <a class="header-anchor" href="#kronos" aria-hidden="true">#</a></h1><p>Play <a href="https://thepaperpilot.org/kronos" target="_blank" rel="noreferrer">here</a>.</p><p>Updating the website:</p><ul><li><code>git submodule update --remote</code></li><li><code>git add -A</code></li><li><code>git commit -m &quot;Updated kronos&quot;</code></li><li><code>git push</code></li></ul>',4),d=[s];function i(n,c,l,_,p,h){return t(),o("div",null,d)}const f=e(a,[["render",i]]);export{m as __pageData,f as default};
import{_ as e,c as o,o as t,d as r}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Kronos","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/README.md","lastUpdated":null}'),a={name:"public/kronos/README.md"},s=r('<h1 id="kronos" tabindex="-1">Kronos <a class="header-anchor" href="#kronos" aria-hidden="true">#</a></h1><p>Play <a href="https://thepaperpilot.org/kronos" target="_blank" rel="noreferrer">here</a>.</p><p>Updating the website:</p><ul><li><code>git submodule update --remote</code></li><li><code>git add -A</code></li><li><code>git commit -m &quot;Updated kronos&quot;</code></li><li><code>git push</code></li></ul>',4),d=[s];function i(n,c,l,_,p,h){return t(),o("div",null,d)}const f=e(a,[["render",i]]);export{m as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as o,o as t,d as r}from"./app.c95a51e0.js";const m=JSON.parse('{"title":"Kronos","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/README.md","lastUpdated":null}'),a={name:"public/kronos/README.md"},s=r("",4),d=[s];function i(n,c,l,_,p,h){return t(),o("div",null,d)}const f=e(a,[["render",i]]);export{m as __pageData,f as default};
import{_ as e,c as o,o as t,d as r}from"./app.830f7d24.js";const m=JSON.parse('{"title":"Kronos","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/README.md","lastUpdated":null}'),a={name:"public/kronos/README.md"},s=r("",4),d=[s];function i(n,c,l,_,p,h){return t(),o("div",null,d)}const f=e(a,[["render",i]]);export{m as __pageData,f as default};

View file

@ -1 +1 @@
import{_ as e,c as a,o as t,d as o}from"./app.c95a51e0.js";const g=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"Table of Contents","slug":"table-of-contents","link":"#table-of-contents","children":[{"level":3,"title":"General","slug":"general","link":"#general","children":[]},{"level":3,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":3,"title":"Other components and features","slug":"other-components-and-features","link":"#other-components-and-features","children":[]}]}],"relativePath":"public/kronos/docs/!general-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/!general-info.md"},r=o("",16),s=[r];function i(l,d,c,h,u,m){return t(),a("div",null,s)}const b=e(n,[["render",i]]);export{g as __pageData,b as default};
import{_ as e,c as a,o as t,d as o}from"./app.830f7d24.js";const g=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[{"level":2,"title":"Table of Contents","slug":"table-of-contents","link":"#table-of-contents","children":[{"level":3,"title":"General","slug":"general","link":"#general","children":[]},{"level":3,"title":"Common components","slug":"common-components","link":"#common-components","children":[]},{"level":3,"title":"Other components and features","slug":"other-components-and-features","link":"#other-components-and-features","children":[]}]}],"relativePath":"public/kronos/docs/!general-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/!general-info.md"},r=o("",16),s=[r];function i(l,d,c,h,u,m){return t(),a("div",null,s)}const b=e(n,[["render",i]]);export{g as __pageData,b as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const v=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/achievements.md","lastUpdated":null}'),n={name:"public/kronos/docs/achievements.md"},o=s(`<h1 id="achievements" tabindex="-1">Achievements <a class="header-anchor" href="#achievements" aria-hidden="true">#</a></h1><p>Achievements are awarded to the player when they meet a certain goal, and optionally give some benefit.</p><p>You can make global achievements by putting them in a side layer by making its row equal to &quot;side&quot; instead of a number.</p><p>Useful functions for dealing with achievements and implementing their effects:</p><ul><li>hasAchievement(layer, id): determine if the player has the Achievement.</li><li>achievementEffect(layer, id): Returns the current effects of the achievement, if any.</li></ul><p>Achievements should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">achievements</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const v=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/achievements.md","lastUpdated":null}'),n={name:"public/kronos/docs/achievements.md"},o=s(`<h1 id="achievements" tabindex="-1">Achievements <a class="header-anchor" href="#achievements" aria-hidden="true">#</a></h1><p>Achievements are awarded to the player when they meet a certain goal, and optionally give some benefit.</p><p>You can make global achievements by putting them in a side layer by making its row equal to &quot;side&quot; instead of a number.</p><p>Useful functions for dealing with achievements and implementing their effects:</p><ul><li>hasAchievement(layer, id): determine if the player has the Achievement.</li><li>achievementEffect(layer, id): Returns the current effects of the achievement, if any.</li></ul><p>Achievements should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">achievements</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> name</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> more </span><span style="color:#A6ACCD;">features</span></span>

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const v=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/achievements.md","lastUpdated":null}'),n={name:"public/kronos/docs/achievements.md"},o=s("",11),i=[o];function l(p,r,c,h,d,u){return a(),t("div",null,i)}const g=e(n,[["render",l]]);export{v as __pageData,g as default};
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const v=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/achievements.md","lastUpdated":null}'),n={name:"public/kronos/docs/achievements.md"},o=s("",11),i=[o];function l(p,r,c,h,d,u){return a(),t("div",null,i)}const g=e(n,[["render",l]]);export{v as __pageData,g as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/bars.md","lastUpdated":null}'),o={name:"public/kronos/docs/bars.md"},t=e(`<h1 id="bars" tabindex="-1">Bars <a class="header-anchor" href="#bars" aria-hidden="true">#</a></h1><p>Bars let you display information in a more direct way. It can be a progress bar, health bar, capacity gauge, or anything else.</p><p>Bars are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">bars</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/bars.md","lastUpdated":null}'),o={name:"public/kronos/docs/bars.md"},t=e(`<h1 id="bars" tabindex="-1">Bars <a class="header-anchor" href="#bars" aria-hidden="true">#</a></h1><p>Bars let you display information in a more direct way. It can be a progress bar, health bar, capacity gauge, or anything else.</p><p>Bars are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">bars</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">bigBar</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">direction</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">RIGHT</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">width</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">200</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/bars.md","lastUpdated":null}'),o={name:"public/kronos/docs/bars.md"},t=e("",6),l=[t];function p(r,i,c,y,d,F){return n(),a("div",null,l)}const b=s(o,[["render",p]]);export{u as __pageData,b as default};
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/bars.md","lastUpdated":null}'),o={name:"public/kronos/docs/bars.md"},t=e("",6),l=[t];function p(r,i,c,y,d,F){return n(),a("div",null,l)}const b=s(o,[["render",p]]);export{u as __pageData,b as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as n,o as a,d as o}from"./app.c95a51e0.js";const A=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/basic-layer-breakdown.md","lastUpdated":null}'),l={name:"public/kronos/docs/basic-layer-breakdown.md"},p=o(`<h1 id="basic-layer-breakdown" tabindex="-1">Basic layer breakdown <a class="header-anchor" href="#basic-layer-breakdown" aria-hidden="true">#</a></h1><p>This is a very minimal layer with minimal features. Most things will require additional features.</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#82AAFF;">addLayer</span><span style="color:#A6ACCD;">(</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">p</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as n,o as a,d as o}from"./app.830f7d24.js";const A=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/basic-layer-breakdown.md","lastUpdated":null}'),l={name:"public/kronos/docs/basic-layer-breakdown.md"},p=o(`<h1 id="basic-layer-breakdown" tabindex="-1">Basic layer breakdown <a class="header-anchor" href="#basic-layer-breakdown" aria-hidden="true">#</a></h1><p>This is a very minimal layer with minimal features. Most things will require additional features.</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#82AAFF;">addLayer</span><span style="color:#A6ACCD;">(</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">p</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#F07178;">startData</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// startData is a function that returns default data for a layer. </span></span>
<span class="line"><span style="color:#F07178;"> unlocked</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#FF9CAC;">true</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// You can add more variables here to add them to your layer.</span></span>
<span class="line"><span style="color:#F07178;"> points</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">new</span><span style="color:#F07178;"> </span><span style="color:#82AAFF;">Decimal</span><span style="color:#F07178;">(</span><span style="color:#F78C6C;">0</span><span style="color:#F07178;">)</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// &quot;points&quot; is the internal name for the main resource of the layer.</span></span>

View file

@ -1 +1 @@
import{_ as s,c as n,o as a,d as o}from"./app.c95a51e0.js";const A=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/basic-layer-breakdown.md","lastUpdated":null}'),l={name:"public/kronos/docs/basic-layer-breakdown.md"},p=o("",3),e=[p];function t(r,c,y,F,D,i){return a(),n("div",null,e)}const u=s(l,[["render",t]]);export{A as __pageData,u as default};
import{_ as s,c as n,o as a,d as o}from"./app.830f7d24.js";const A=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/basic-layer-breakdown.md","lastUpdated":null}'),l={name:"public/kronos/docs/basic-layer-breakdown.md"},p=o("",3),e=[p];function t(r,c,y,F,D,i){return a(),n("div",null,e)}const u=s(l,[["render",t]]);export{A as __pageData,u as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/buyables.md","lastUpdated":null}'),l={name:"public/kronos/docs/buyables.md"},o=e(`<h1 id="buyables" tabindex="-1">Buyables <a class="header-anchor" href="#buyables" aria-hidden="true">#</a></h1><p>Buyables are usually things that can be bought multiple times with scaling costs. They come with optional buttons that can be used for respeccing or selling buyables, among other things.</p><p>The amount of a buyable owned is a <code>Decimal</code>.</p><p>Useful functions for dealing with buyables and implementing their effects:</p><ul><li>getBuyableAmount(layer, id): get the amount of the buyable the player has</li><li>setBuyableAmount(layer, id, amount): set the amount of the buyable the player has</li><li>buyableEffect(layer, id): Returns the current effects of the buyable, if any.</li></ul><p>Buyables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">buyables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/buyables.md","lastUpdated":null}'),l={name:"public/kronos/docs/buyables.md"},o=e(`<h1 id="buyables" tabindex="-1">Buyables <a class="header-anchor" href="#buyables" aria-hidden="true">#</a></h1><p>Buyables are usually things that can be bought multiple times with scaling costs. They come with optional buttons that can be used for respeccing or selling buyables, among other things.</p><p>The amount of a buyable owned is a <code>Decimal</code>.</p><p>Useful functions for dealing with buyables and implementing their effects:</p><ul><li>getBuyableAmount(layer, id): get the amount of the buyable the player has</li><li>setBuyableAmount(layer, id, amount): set the amount of the buyable the player has</li><li>buyableEffect(layer, id): Returns the current effects of the buyable, if any.</li></ul><p>Buyables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">buyables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> cost</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;">x</span><span style="color:#89DDFF;">)</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">new</span><span style="color:#F07178;"> </span><span style="color:#82AAFF;">Decimal</span><span style="color:#F07178;">(</span><span style="color:#F78C6C;">1</span><span style="color:#F07178;">)</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">mul</span><span style="color:#F07178;">(</span><span style="color:#A6ACCD;">x</span><span style="color:#F07178;">) </span><span style="color:#89DDFF;">},</span></span>
<span class="line"><span style="color:#F07178;"> display</span><span style="color:#89DDFF;">()</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/buyables.md","lastUpdated":null}'),l={name:"public/kronos/docs/buyables.md"},o=e("",14),t=[o];function p(r,c,i,y,u,F){return n(),a("div",null,t)}const D=s(l,[["render",p]]);export{b as __pageData,D as default};
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/buyables.md","lastUpdated":null}'),l={name:"public/kronos/docs/buyables.md"},o=e("",14),t=[o];function p(r,c,i,y,u,F){return n(),a("div",null,t)}const D=s(l,[["render",p]]);export{b as __pageData,D as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as n,o as a,d as l}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/challenges.md","lastUpdated":null}'),s={name:"public/kronos/docs/challenges.md"},t=l(`<h1 id="challenges" tabindex="-1">Challenges <a class="header-anchor" href="#challenges" aria-hidden="true">#</a></h1><p>Challenges can have fully customizable win conditions. Useful functions for dealing with Challenges and implementing their effects:</p><ul><li>inChallenge(layer, id): determine if the player is in a given challenge (or another challenge on the same layer that counts as this one).</li><li>hasChallenge(layer, id): determine if the player has completed the challenge.</li><li>challengeCompletions(layer, id): determine how many times the player completed the challenge.</li><li>maxedChallenge(layer, id): determines if the player has reached the maximum completions.</li><li>challengeEffect(layer, id): Returns the current effects of the challenge, if any.</li></ul><p>Challenges are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">challenges</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as n,o as a,d as l}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/challenges.md","lastUpdated":null}'),s={name:"public/kronos/docs/challenges.md"},t=l(`<h1 id="challenges" tabindex="-1">Challenges <a class="header-anchor" href="#challenges" aria-hidden="true">#</a></h1><p>Challenges can have fully customizable win conditions. Useful functions for dealing with Challenges and implementing their effects:</p><ul><li>inChallenge(layer, id): determine if the player is in a given challenge (or another challenge on the same layer that counts as this one).</li><li>hasChallenge(layer, id): determine if the player has completed the challenge.</li><li>challengeCompletions(layer, id): determine how many times the player completed the challenge.</li><li>maxedChallenge(layer, id): determines if the player has reached the maximum completions.</li><li>challengeEffect(layer, id): Returns the current effects of the challenge, if any.</li></ul><p>Challenges are stored in the following format:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">challenges</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> name</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Ouch</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> challengeDescription</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">description of ouchie</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as e,c as n,o as a,d as l}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/challenges.md","lastUpdated":null}'),s={name:"public/kronos/docs/challenges.md"},t=l("",10),o=[t];function i(r,p,c,h,u,g){return a(),n("div",null,o)}const f=e(s,[["render",i]]);export{y as __pageData,f as default};
import{_ as e,c as n,o as a,d as l}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Challenges","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/challenges.md","lastUpdated":null}'),s={name:"public/kronos/docs/challenges.md"},t=l("",10),o=[t];function i(r,p,c,h,u,g){return a(),n("div",null,o)}const f=e(s,[["render",i]]);export{y as __pageData,f as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/clickables.md","lastUpdated":null}'),l={name:"public/kronos/docs/clickables.md"},n=s(`<h1 id="clickables" tabindex="-1">Clickables <a class="header-anchor" href="#clickables" aria-hidden="true">#</a></h1><p>Clickables are any kind of thing that you can click for an effect. They&#39;re a more generalized version of Buyables.</p><p>DO NOT USE THESE TO MAKE THINGS THAT YOU CLICK REPEATEDLY FOR A BONUS BECAUSE THOSE ARE AWFUL.</p><p>There are several differences between the two. One is that a buyable&#39;s saved data is its amount as a <code>Decimal</code>, while Clickables store a &quot;state&quot; which can be a number or string, but not <code>Decimal</code>, array, or object). Buyables have a number of extra features which you can see on their page. Clickables also have a smaller default size.</p><p>Useful functions for dealing with clickables and implementing their effects:</p><ul><li>getClickableState(layer, id): get the state of the clickable the player has</li><li>setClickableState(layer, id, state): set the state of the clickable the player has</li><li>clickableEffect(layer, id): Returns the current effects of the clickable, if any.</li></ul><p>Clickables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">clickables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/clickables.md","lastUpdated":null}'),l={name:"public/kronos/docs/clickables.md"},n=s(`<h1 id="clickables" tabindex="-1">Clickables <a class="header-anchor" href="#clickables" aria-hidden="true">#</a></h1><p>Clickables are any kind of thing that you can click for an effect. They&#39;re a more generalized version of Buyables.</p><p>DO NOT USE THESE TO MAKE THINGS THAT YOU CLICK REPEATEDLY FOR A BONUS BECAUSE THOSE ARE AWFUL.</p><p>There are several differences between the two. One is that a buyable&#39;s saved data is its amount as a <code>Decimal</code>, while Clickables store a &quot;state&quot; which can be a number or string, but not <code>Decimal</code>, array, or object). Buyables have a number of extra features which you can see on their page. Clickables also have a smaller default size.</p><p>Useful functions for dealing with clickables and implementing their effects:</p><ul><li>getClickableState(layer, id): get the state of the clickable the player has</li><li>setClickableState(layer, id, state): set the state of the clickable the player has</li><li>clickableEffect(layer, id): Returns the current effects of the clickable, if any.</li></ul><p>Clickables should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">clickables</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">11</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> display</span><span style="color:#89DDFF;">()</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">},</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>

View file

@ -1 +1 @@
import{_ as e,c as t,o as a,d as s}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/clickables.md","lastUpdated":null}'),l={name:"public/kronos/docs/clickables.md"},n=s("",12),o=[n];function i(c,r,p,u,h,d){return a(),t("div",null,o)}const y=e(l,[["render",i]]);export{f as __pageData,y as default};
import{_ as e,c as t,o as a,d as s}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Clickables","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/clickables.md","lastUpdated":null}'),l={name:"public/kronos/docs/clickables.md"},n=s("",12),o=[n];function i(c,r,p,u,h,d){return a(),t("div",null,o)}const y=e(l,[["render",i]]);export{f as __pageData,y as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o,d as e}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/custom-tab-layouts.md","lastUpdated":null}'),t={name:"public/kronos/docs/custom-tab-layouts.md"},n=e(`<h1 id="custom-tab-layouts" tabindex="-1">Custom tab layouts <a class="header-anchor" href="#custom-tab-layouts" aria-hidden="true">#</a></h1><p>Note: If you are using subtabs, <code>tabFormat</code> is used differently, but the same format is used for defining their layouts. <a href="./subtabs-and-microtabs">See here for more on subtabs</a>.</p><p>Custom tab layouts can be used to do basically anything in a tab window, especially combined with the &quot;style&quot; layer feature. The <code>tabFormat</code> feature is an array of things, like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span></span>
import{_ as s,c as a,o,d as e}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/custom-tab-layouts.md","lastUpdated":null}'),t={name:"public/kronos/docs/custom-tab-layouts.md"},n=e(`<h1 id="custom-tab-layouts" tabindex="-1">Custom tab layouts <a class="header-anchor" href="#custom-tab-layouts" aria-hidden="true">#</a></h1><p>Note: If you are using subtabs, <code>tabFormat</code> is used differently, but the same format is used for defining their layouts. <a href="./subtabs-and-microtabs">See here for more on subtabs</a>.</p><p>Custom tab layouts can be used to do basically anything in a tab window, especially combined with the &quot;style&quot; layer feature. The <code>tabFormat</code> feature is an array of things, like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">tabFormat</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">main-display</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">prestige-button</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Melt your points into </span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;">]</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">blank</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o,d as e}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/custom-tab-layouts.md","lastUpdated":null}'),t={name:"public/kronos/docs/custom-tab-layouts.md"},n=e("",9),l=[n];function p(r,i,c,y,D,u){return o(),a("div",null,l)}const d=s(t,[["render",p]]);export{F as __pageData,d as default};
import{_ as s,c as a,o,d as e}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Custom tab layouts","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/custom-tab-layouts.md","lastUpdated":null}'),t={name:"public/kronos/docs/custom-tab-layouts.md"},n=e("",9),l=[n];function p(r,i,c,y,D,u){return o(),a("div",null,l)}const d=s(t,[["render",p]]);export{F as __pageData,d as default};

View file

@ -1 +1 @@
import{_ as e,c as t,o,d as i}from"./app.c95a51e0.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github Desktop, Visual Studio Code, and The Modding Tree:","slug":"getting-set-up-with-github-desktop-visual-studio-code-and-the-modding-tree","link":"#getting-set-up-with-github-desktop-visual-studio-code-and-the-modding-tree","children":[{"level":3,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}]}],"relativePath":"public/kronos/docs/getting-started.md","lastUpdated":null}'),a={name:"public/kronos/docs/getting-started.md"},n=i("",11),r=[n];function s(l,h,u,d,p,c){return o(),t("div",null,r)}const m=e(a,[["render",s]]);export{y as __pageData,m as default};
import{_ as e,c as t,o,d as i}from"./app.830f7d24.js";const y=JSON.parse('{"title":"Getting started","description":"","frontmatter":{},"headers":[{"level":2,"title":"Getting set up with Github Desktop, Visual Studio Code, and The Modding Tree:","slug":"getting-set-up-with-github-desktop-visual-studio-code-and-the-modding-tree","link":"#getting-set-up-with-github-desktop-visual-studio-code-and-the-modding-tree","children":[{"level":3,"title":"Using your repository","slug":"using-your-repository","link":"#using-your-repository","children":[]}]}],"relativePath":"public/kronos/docs/getting-started.md","lastUpdated":null}'),a={name:"public/kronos/docs/getting-started.md"},n=i("",11),r=[n];function s(l,h,u,d,p,c){return o(),t("div",null,r)}const m=e(a,[["render",s]]);export{y as __pageData,m as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Grids","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/grids.md","lastUpdated":null}'),l={name:"public/kronos/docs/grids.md"},o=e(`<h1 id="grids" tabindex="-1">Grids <a class="header-anchor" href="#grids" aria-hidden="true">#</a></h1><p>Grids are an easier way of making a group of similar clickables. They all have the same behavior, but are different based on their data.</p><p><strong>NOTE: Gridables are similar to clickables in some respects, but are fundamentally different from normal TMT components in quite a few ways. Be sure to keep these in mind:</strong></p><ul><li>Gridable ids use base 100 instead of base 10, so you can have more than 10 tiles in a row. This means that a grid might look like this: 101 102 201 202</li><li>Individual gridables are not defined individually. All properties go directly into the &quot;grid&quot; object. Functions are called with arguments for the id of the gridables and its associated data, so you can give them the appropriate appearance and properties based on that.</li><li>If you need two unrelated grids in a layer, you&#39;ll need to use a layer proxy component.</li></ul><p>Useful functions for dealing with grids:</p><ul><li>getGridData(layer, id): get the data for the chosen gridable</li><li>setGridData(layer, id, state): set the data for the chosen gridable</li><li>gridEffect(layer, id): get the effect for the chosen gridable</li></ul><p>The grid should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">grid</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Grids","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/grids.md","lastUpdated":null}'),l={name:"public/kronos/docs/grids.md"},o=e(`<h1 id="grids" tabindex="-1">Grids <a class="header-anchor" href="#grids" aria-hidden="true">#</a></h1><p>Grids are an easier way of making a group of similar clickables. They all have the same behavior, but are different based on their data.</p><p><strong>NOTE: Gridables are similar to clickables in some respects, but are fundamentally different from normal TMT components in quite a few ways. Be sure to keep these in mind:</strong></p><ul><li>Gridable ids use base 100 instead of base 10, so you can have more than 10 tiles in a row. This means that a grid might look like this: 101 102 201 202</li><li>Individual gridables are not defined individually. All properties go directly into the &quot;grid&quot; object. Functions are called with arguments for the id of the gridables and its associated data, so you can give them the appropriate appearance and properties based on that.</li><li>If you need two unrelated grids in a layer, you&#39;ll need to use a layer proxy component.</li></ul><p>Useful functions for dealing with grids:</p><ul><li>getGridData(layer, id): get the data for the chosen gridable</li><li>setGridData(layer, id, state): set the data for the chosen gridable</li><li>gridEffect(layer, id): get the effect for the chosen gridable</li></ul><p>The grid should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">grid</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">rows</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">4</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// If these are dynamic make sure to have a max value as well!</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">cols</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">5</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">getStartData</span><span style="color:#F07178;">(</span><span style="color:#A6ACCD;">id</span><span style="color:#F07178;">) </span><span style="color:#89DDFF;">{</span></span>

View file

@ -1 +1 @@
import{_ as s,c as a,o as n,d as e}from"./app.c95a51e0.js";const u=JSON.parse('{"title":"Grids","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/grids.md","lastUpdated":null}'),l={name:"public/kronos/docs/grids.md"},o=e("",10),t=[o];function p(r,i,c,d,y,F){return n(),a("div",null,t)}const g=s(l,[["render",p]]);export{u as __pageData,g as default};
import{_ as s,c as a,o as n,d as e}from"./app.830f7d24.js";const u=JSON.parse('{"title":"Grids","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/grids.md","lastUpdated":null}'),l={name:"public/kronos/docs/grids.md"},o=e("",10),t=[o];function p(r,i,c,d,y,F){return n(),a("div",null,t)}const g=s(l,[["render",p]]);export{u as __pageData,g as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as o,o as a,d as n}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/infoboxes.md","lastUpdated":null}'),e={name:"public/kronos/docs/infoboxes.md"},t=n(`<h1 id="infoboxes" tabindex="-1">Infoboxes <a class="header-anchor" href="#infoboxes" aria-hidden="true">#</a></h1><p>Infoboxes are good for displaying &quot;lore&quot;, or story elements, as well as for explaining complicated things.</p><p>In the default tab layout, the first infobox will be displayed at the very top of the tab.</p><p>Infoboxes are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">infoboxes</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as o,o as a,d as n}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/infoboxes.md","lastUpdated":null}'),e={name:"public/kronos/docs/infoboxes.md"},t=n(`<h1 id="infoboxes" tabindex="-1">Infoboxes <a class="header-anchor" href="#infoboxes" aria-hidden="true">#</a></h1><p>Infoboxes are good for displaying &quot;lore&quot;, or story elements, as well as for explaining complicated things.</p><p>In the default tab layout, the first infobox will be displayed at the very top of the tab.</p><p>Infoboxes are defined like other Big Features:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">infoboxes</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">lore</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">title</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">foo</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">body</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">bar</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>

View file

@ -1 +1 @@
import{_ as s,c as o,o as a,d as n}from"./app.c95a51e0.js";const b=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/infoboxes.md","lastUpdated":null}'),e={name:"public/kronos/docs/infoboxes.md"},t=n("",7),l=[t];function p(r,i,c,y,d,F){return a(),o("div",null,l)}const h=s(e,[["render",p]]);export{b as __pageData,h as default};
import{_ as s,c as o,o as a,d as n}from"./app.830f7d24.js";const b=JSON.parse('{"title":"Infoboxes","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/infoboxes.md","lastUpdated":null}'),e={name:"public/kronos/docs/infoboxes.md"},t=n("",7),l=[t];function p(r,i,c,y,d,F){return a(),o("div",null,l)}const h=s(e,[["render",p]]);export{b as __pageData,h as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as t,o as s,d as a}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Other prestige-related features","slug":"other-prestige-related-features","link":"#other-prestige-related-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/kronos/docs/layer-features.md","lastUpdated":null}'),o={name:"public/kronos/docs/layer-features.md"},n=a(`<h1 id="layer-features" tabindex="-1">Layer Features <a class="header-anchor" href="#layer-features" aria-hidden="true">#</a></h1><p>This is a more comprehensive list of established features to add to layers. You can add more freely, if you want to have other functions or values associated with your layer. These have special functionality, though.</p><p>You can make almost any value dynamic by using a function in its place, including all display strings and styling/color features.</p><h2 id="layer-definition-features" tabindex="-1">Layer Definition features <a class="header-anchor" href="#layer-definition-features" aria-hidden="true">#</a></h2><ul><li><p>layer: <strong>assigned automagically</strong>. It&#39;s the same value as the name of this layer, so you can do <code>player[this.layer].points</code> or similar to access the saved value. It makes copying code to new layers easier. It is also assigned to all upgrades and buyables and such.</p></li><li><p>name: <strong>optional</strong>. used in reset confirmations (and the default infobox title). If absent, it just uses the layer&#39;s id.</p></li><li><p>startData(): A function to return the default save data for this layer. Add any variables you have to it. Make sure to use <code>Decimal</code> values rather than normal numbers.</p><p>Standard values: - Required: - unlocked: a bool determining if this layer is unlocked or not - points: a Decimal, the main currency for the layer - Optional: - total: A Decimal, tracks total amount of main prestige currency. Always tracked, but only shown if you add it here. - best: A Decimal, tracks highest amount of main prestige currency. Always tracked, but only shown if you add it here. - unlockOrder: used to keep track of relevant layers unlocked before this one. - resetTime: A number, time since this layer was last prestiged (or reset by another layer)</p></li><li><p>color: A color associated with this layer, used in many places. (A string in hex format with a #)</p></li><li><p>row: The row of the layer, starting at 0. This affects where the node appears on the standard tree, and which resets affect the layer.</p><p>Using &quot;side&quot; instead of a number will cause the layer to appear off to the side as a smaller node (useful for achievements and statistics). Side layers are not affected by resets unless you add a doReset to them.</p></li><li><p>displayRow: <strong>OVERRIDE</strong> Changes where the layer node appears without changing where it is in the reset order.</p></li><li><p>resource: Name of the main currency you gain by resetting on this layer.</p></li><li><p>effect(): <strong>optional</strong>. A function that calculates and returns the current values of any bonuses inherent to the main currency. Can return a value or an object containing multiple values. <em>You will also have to implement the effect where it is applied.</em></p></li><li><p>effectDescription: <strong>optional</strong>. A function that returns a description of this effect. If the text stays constant, it can just be a string.</p></li><li><p>layerShown(): <strong>optional</strong>, A function returning a bool which determines if this layer&#39;s node should be visible on the tree. It can also return &quot;ghost&quot;, which will hide the layer, but its node will still take up space in the tree. Defaults to true.</p></li><li><p>hotkeys: <strong>optional</strong>. An array containing information on any hotkeys associated with this layer:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">hotkeys</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span></span>
import{_ as e,c as t,o as s,d as a}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Other prestige-related features","slug":"other-prestige-related-features","link":"#other-prestige-related-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/kronos/docs/layer-features.md","lastUpdated":null}'),o={name:"public/kronos/docs/layer-features.md"},n=a(`<h1 id="layer-features" tabindex="-1">Layer Features <a class="header-anchor" href="#layer-features" aria-hidden="true">#</a></h1><p>This is a more comprehensive list of established features to add to layers. You can add more freely, if you want to have other functions or values associated with your layer. These have special functionality, though.</p><p>You can make almost any value dynamic by using a function in its place, including all display strings and styling/color features.</p><h2 id="layer-definition-features" tabindex="-1">Layer Definition features <a class="header-anchor" href="#layer-definition-features" aria-hidden="true">#</a></h2><ul><li><p>layer: <strong>assigned automagically</strong>. It&#39;s the same value as the name of this layer, so you can do <code>player[this.layer].points</code> or similar to access the saved value. It makes copying code to new layers easier. It is also assigned to all upgrades and buyables and such.</p></li><li><p>name: <strong>optional</strong>. used in reset confirmations (and the default infobox title). If absent, it just uses the layer&#39;s id.</p></li><li><p>startData(): A function to return the default save data for this layer. Add any variables you have to it. Make sure to use <code>Decimal</code> values rather than normal numbers.</p><p>Standard values: - Required: - unlocked: a bool determining if this layer is unlocked or not - points: a Decimal, the main currency for the layer - Optional: - total: A Decimal, tracks total amount of main prestige currency. Always tracked, but only shown if you add it here. - best: A Decimal, tracks highest amount of main prestige currency. Always tracked, but only shown if you add it here. - unlockOrder: used to keep track of relevant layers unlocked before this one. - resetTime: A number, time since this layer was last prestiged (or reset by another layer)</p></li><li><p>color: A color associated with this layer, used in many places. (A string in hex format with a #)</p></li><li><p>row: The row of the layer, starting at 0. This affects where the node appears on the standard tree, and which resets affect the layer.</p><p>Using &quot;side&quot; instead of a number will cause the layer to appear off to the side as a smaller node (useful for achievements and statistics). Side layers are not affected by resets unless you add a doReset to them.</p></li><li><p>displayRow: <strong>OVERRIDE</strong> Changes where the layer node appears without changing where it is in the reset order.</p></li><li><p>resource: Name of the main currency you gain by resetting on this layer.</p></li><li><p>effect(): <strong>optional</strong>. A function that calculates and returns the current values of any bonuses inherent to the main currency. Can return a value or an object containing multiple values. <em>You will also have to implement the effect where it is applied.</em></p></li><li><p>effectDescription: <strong>optional</strong>. A function that returns a description of this effect. If the text stays constant, it can just be a string.</p></li><li><p>layerShown(): <strong>optional</strong>, A function returning a bool which determines if this layer&#39;s node should be visible on the tree. It can also return &quot;ghost&quot;, which will hide the layer, but its node will still take up space in the tree. Defaults to true.</p></li><li><p>hotkeys: <strong>optional</strong>. An array containing information on any hotkeys associated with this layer:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">hotkeys</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> [</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">p</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#676E95;">// What the hotkey button is. Use uppercase if it&#39;s combined with shift, or &quot;ctrl+x&quot; for holding down ctrl.</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#F07178;">description</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">p: reset your points for prestige points</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#676E95;">// The description of the hotkey that is displayed in the game&#39;s How To Play tab</span></span>

View file

@ -1 +1 @@
import{_ as e,c as t,o as s,d as a}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Other prestige-related features","slug":"other-prestige-related-features","link":"#other-prestige-related-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/kronos/docs/layer-features.md","lastUpdated":null}'),o={name:"public/kronos/docs/layer-features.md"},n=a("",20),r=[n];function l(i,p,c,u,h,d){return s(),t("div",null,r)}const g=e(o,[["render",l]]);export{f as __pageData,g as default};
import{_ as e,c as t,o as s,d as a}from"./app.830f7d24.js";const f=JSON.parse('{"title":"Layer Features","description":"","frontmatter":{},"headers":[{"level":2,"title":"Layer Definition features","slug":"layer-definition-features","link":"#layer-definition-features","children":[]},{"level":2,"title":"Big features (all optional)","slug":"big-features-all-optional","link":"#big-features-all-optional","children":[]},{"level":2,"title":"Prestige formula features","slug":"prestige-formula-features","link":"#prestige-formula-features","children":[]},{"level":2,"title":"Other prestige-related features","slug":"other-prestige-related-features","link":"#other-prestige-related-features","children":[]},{"level":2,"title":"Tree/node features","slug":"tree-node-features","link":"#tree-node-features","children":[]},{"level":2,"title":"Other features","slug":"other-features","link":"#other-features","children":[]},{"level":2,"title":"Custom Prestige type","slug":"custom-prestige-type","link":"#custom-prestige-type","children":[]}],"relativePath":"public/kronos/docs/layer-features.md","lastUpdated":null}'),o={name:"public/kronos/docs/layer-features.md"},n=a("",20),r=[n];function l(i,p,c,u,h,d){return s(),t("div",null,r)}const g=e(o,[["render",l]]);export{f as __pageData,g as default};

View file

@ -1,4 +1,4 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/main-mod-info.md"},o=t(`<h1 id="mod-js" tabindex="-1">mod.js <a class="header-anchor" href="#mod-js" aria-hidden="true">#</a></h1><p>Most of the non-layer code and data that you&#39;re likely to edit is here in <a href="/js/mod.js">mod.js</a>. Everything in <a href="/js/mod.js">mod.js</a> will not be altered by updates, besides the addition of new things.</p><p>Here&#39;s a breakdown of what&#39;s in it:</p><ul><li><p>modInfo is where most of the basic configuration for the mod is. It contains:</p><ul><li><p>name: The name of your mod. (a string)</p></li><li><p>id: The id for your mod, a unique string that is used to determine savefile location. Be sure to set it when you start making a mod, and don&#39;t change it later because it will erase all saves.</p></li><li><p>author: The name of the author, displayed in the info tab.</p></li><li><p>pointsName: This changes what is displayed instead of &quot;points&quot; for the main currency. (It does not affect it in the code.)</p></li><li><p>discordName, discordLink: If you have a Discord server or other discussion place, you can add a link to it.</p><p>&quot;discordName&quot; is the text on the link, and &quot;discordLink&quot; is the url of an invite. If you&#39;re using a Discord invite, please make sure it&#39;s set to never expire.</p></li><li><p>offlineLimit: The maximum amount of offline time that the player can accumulate, in hours. Any extra time is lost. (a number)</p><p>This is useful because most of these mods are fast-paced enough that too much offline time ruins the balance, such as the time in between updates. That is why I suggest developers disable offline time on their own savefile.</p></li><li><p>initialStartPoints: A Decimal for the amount of points a new player should start with.</p></li></ul></li><li><p>VERSION is used to describe the current version of your mod. It contains:</p><ul><li>num: The mod&#39;s version number, displayed at the top right of the tree tab.</li><li>name: The version&#39;s name, displayed alongside the number in the info tab.</li></ul></li><li><p>changelog is the HTML displayed in the changelog tab. If this gets particularly long, it might be good to put in a separate file (be sure to add the file to index.html)</p></li><li><p>doNotCallTheseFunctionsEveryTick is very important, if you are adding non-standard functions. TMT calls every function anywhere in &quot;layers&quot; every tick to store the result, unless specifically told not to. Functions that have are used to do an action need to be identified. &quot;Official&quot; functions (those in the documentation) are all fine, but if you make any new ones, add their names to this array.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#676E95;">// (The ones here are examples, all official functions are already taken care of)</span></span>
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/main-mod-info.md"},o=t(`<h1 id="mod-js" tabindex="-1">mod.js <a class="header-anchor" href="#mod-js" aria-hidden="true">#</a></h1><p>Most of the non-layer code and data that you&#39;re likely to edit is here in <a href="/js/mod.js">mod.js</a>. Everything in <a href="/js/mod.js">mod.js</a> will not be altered by updates, besides the addition of new things.</p><p>Here&#39;s a breakdown of what&#39;s in it:</p><ul><li><p>modInfo is where most of the basic configuration for the mod is. It contains:</p><ul><li><p>name: The name of your mod. (a string)</p></li><li><p>id: The id for your mod, a unique string that is used to determine savefile location. Be sure to set it when you start making a mod, and don&#39;t change it later because it will erase all saves.</p></li><li><p>author: The name of the author, displayed in the info tab.</p></li><li><p>pointsName: This changes what is displayed instead of &quot;points&quot; for the main currency. (It does not affect it in the code.)</p></li><li><p>discordName, discordLink: If you have a Discord server or other discussion place, you can add a link to it.</p><p>&quot;discordName&quot; is the text on the link, and &quot;discordLink&quot; is the url of an invite. If you&#39;re using a Discord invite, please make sure it&#39;s set to never expire.</p></li><li><p>offlineLimit: The maximum amount of offline time that the player can accumulate, in hours. Any extra time is lost. (a number)</p><p>This is useful because most of these mods are fast-paced enough that too much offline time ruins the balance, such as the time in between updates. That is why I suggest developers disable offline time on their own savefile.</p></li><li><p>initialStartPoints: A Decimal for the amount of points a new player should start with.</p></li></ul></li><li><p>VERSION is used to describe the current version of your mod. It contains:</p><ul><li>num: The mod&#39;s version number, displayed at the top right of the tree tab.</li><li>name: The version&#39;s name, displayed alongside the number in the info tab.</li></ul></li><li><p>changelog is the HTML displayed in the changelog tab. If this gets particularly long, it might be good to put in a separate file (be sure to add the file to index.html)</p></li><li><p>doNotCallTheseFunctionsEveryTick is very important, if you are adding non-standard functions. TMT calls every function anywhere in &quot;layers&quot; every tick to store the result, unless specifically told not to. Functions that have are used to do an action need to be identified. &quot;Official&quot; functions (those in the documentation) are all fine, but if you make any new ones, add their names to this array.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#676E95;">// (The ones here are examples, all official functions are already taken care of)</span></span>
<span class="line"><span style="color:#C792EA;">var</span><span style="color:#A6ACCD;"> doNotCallTheseFunctionsEveryTick </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> [</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">doReset</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">buy</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">onPurchase</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">blowUpEverything</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">]</span></span>
<span class="line"></span></code></pre></div><ul><li><p>getStartPoints(): A function to determine the amount of points the player starts with after a reset. (returns a Decimal value)</p></li><li><p>canGenPoints(): A function returning a boolean for if points should be generated. Use this if you want an upgrade to unlock generating points.</p></li><li><p>getPointGen(): A function that calculates your points per second. Anything that affects your point gain should go into the calculation here.</p></li><li><p>addedPlayerData(): A function that returns any non-layer-related data that you want to be added to the save data and &quot;player&quot; object.</p></li></ul><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">addedPlayerData</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> weather</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">Yes</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as e,c as s,o as a,d as t}from"./app.c95a51e0.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/main-mod-info.md"},o=t("",10),i=[o];function l(p,r,c,d,u,h){return a(),s("div",null,i)}const m=e(n,[["render",l]]);export{f as __pageData,m as default};
import{_ as e,c as s,o as a,d as t}from"./app.830f7d24.js";const f=JSON.parse('{"title":"mod.js","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/main-mod-info.md","lastUpdated":null}'),n={name:"public/kronos/docs/main-mod-info.md"},o=t("",10),i=[o];function l(p,r,c,d,u,h){return a(),s("div",null,i)}const m=e(n,[["render",l]]);export{f as __pageData,m as default};

View file

@ -1,4 +1,4 @@
import{_ as s,c as e,o as n,d as o}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/milestones.md","lastUpdated":null}'),a={name:"public/kronos/docs/milestones.md"},t=o(`<h1 id="milestones" tabindex="-1">Milestones <a class="header-anchor" href="#milestones" aria-hidden="true">#</a></h1><p>Milestones are awarded to the player when they meet a certain goal, and give some benefit. Milestones should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">milestones</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
import{_ as s,c as e,o as n,d as o}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/milestones.md","lastUpdated":null}'),a={name:"public/kronos/docs/milestones.md"},t=o(`<h1 id="milestones" tabindex="-1">Milestones <a class="header-anchor" href="#milestones" aria-hidden="true">#</a></h1><p>Milestones are awarded to the player when they meet a certain goal, and give some benefit. Milestones should be formatted like this:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki"><code><span class="line"><span style="color:#FFCB6B;">milestones</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#F78C6C;">0</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#F07178;"> requirementDescription</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">123 waffles</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> effectDescription</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">blah</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>

View file

@ -1 +1 @@
import{_ as s,c as e,o as n,d as o}from"./app.c95a51e0.js";const F=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/milestones.md","lastUpdated":null}'),a={name:"public/kronos/docs/milestones.md"},t=o("",7),l=[t];function p(i,r,c,d,u,h){return n(),e("div",null,l)}const g=s(a,[["render",p]]);export{F as __pageData,g as default};
import{_ as s,c as e,o as n,d as o}from"./app.830f7d24.js";const F=JSON.parse('{"title":"Milestones","description":"","frontmatter":{},"headers":[],"relativePath":"public/kronos/docs/milestones.md","lastUpdated":null}'),a={name:"public/kronos/docs/milestones.md"},t=o("",7),l=[t];function p(i,r,c,d,u,h){return n(),e("div",null,l)}const g=s(a,[["render",p]]);export{F as __pageData,g as default};

Some files were not shown because too many files have changed in this diff Show more