This commit is contained in:
thepaperpilot 2023-10-15 06:29:10 +00:00
parent e797c80faf
commit ab49ad1a8b
456 changed files with 4312 additions and 3271 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
assets/app.88fb6cf0.js Normal file
View file

@ -0,0 +1 @@
import{s,Z as i,$ as u,a0 as c,a1 as l,a2 as d,a3 as f,a4 as m,a5 as h,a6 as A,a7 as g,a8 as P,d as v,u as y,j as C,y as w,a9 as _,aa as b,ab as E,ac as R}from"./chunks/framework.1169fbc9.js";import{t as D}from"./chunks/theme.c36cb2db.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const o=p(D),j=v({name:"VitePressApp",setup(){const{site:e}=y();return C(()=>{w(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),_(),b(),E(),o.setup&&o.setup(),()=>R(o.Layout)}});async function O(){const e=T(),a=S();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",d),a.component("ClientOnly",f),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),o.enhanceApp&&await o.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function S(){return h(j)}function T(){let e=s,a;return A(t=>{let n=g(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),[])),s&&(e=!1),r},o.NotFound)}s&&O().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{O as createApp};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as i}from"./chunks/framework.1169fbc9.js";const p=JSON.parse('{"title":"Navigating Criticism","description":"","frontmatter":{"title":"Navigating Criticism"},"headers":[],"relativePath":"guide-to-incrementals/design/criticism.md","filePath":"guide-to-incrementals/design/criticism.md","lastUpdated":1697349928000}'),o={name:"guide-to-incrementals/design/criticism.md"},n=i("",11),r=[n];function s(c,l,d,m,u,h){return t(),a("div",null,r)}const f=e(o,[["render",s]]);export{p as __pageData,f as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as i}from"./app.0f100cc5.js";const p=JSON.parse('{"title":"Navigating Criticism","description":"","frontmatter":{"title":"Navigating Criticism"},"headers":[{"level":2,"title":"Reading Feedback","slug":"reading-feedback","link":"#reading-feedback","children":[]},{"level":2,"title":"Seeking Feedback","slug":"seeking-feedback","link":"#seeking-feedback","children":[]},{"level":2,"title":"Responding to Feedback","slug":"responding-to-feedback","link":"#responding-to-feedback","children":[]}],"relativePath":"guide-to-incrementals/design/criticism.md","lastUpdated":null}'),n={name:"guide-to-incrementals/design/criticism.md"},o=i("",11),r=[o];function s(c,l,d,h,u,m){return a(),t("div",null,r)}const f=e(n,[["render",s]]);export{p as __pageData,f as default};

View file

@ -1 +0,0 @@
import{_ as t,c as n,o as a,b as e,d as o}from"./app.0f100cc5.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 +0,0 @@
import{_ as t,c as n,o as a,b as e,d as o}from"./app.0f100cc5.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

@ -0,0 +1 @@
import{_ as n,o as t,c as a,k as e,a as i}from"./chunks/framework.1169fbc9.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","filePath":"guide-to-incrementals/design/introduction.md","lastUpdated":1697349928000}'),o={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[i("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-label":'Permalink to "Making an Incremental Game"'},"")],-1),c=[r];function s(d,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",s]]);export{h as __pageData,f as default};

View file

@ -0,0 +1 @@
import{_ as n,o as t,c as a,k as e,a as i}from"./chunks/framework.1169fbc9.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","filePath":"guide-to-incrementals/design/introduction.md","lastUpdated":1697349928000}'),o={name:"guide-to-incrementals/design/introduction.md"},r=e("h1",{id:"making-an-incremental-game",tabindex:"-1"},[i("Making an Incremental Game "),e("a",{class:"header-anchor",href:"#making-an-incremental-game","aria-label":'Permalink to "Making an Incremental Game"'},"")],-1),c=[r];function s(d,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",s]]);export{h as __pageData,f as default};

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as o}from"./chunks/framework.1169fbc9.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide-to-incrementals/index.md","filePath":"guide-to-incrementals/index.md","lastUpdated":1697349928000}'),n={name:"guide-to-incrementals/index.md"},i=o('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></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-label="Permalink to &quot;Who am I?&quot;"></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,m,h,p){return t(),a("div",null,r)}const _=e(n,[["render",s]]);export{u as __pageData,_ as default};

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as o}from"./chunks/framework.1169fbc9.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide-to-incrementals/index.md","filePath":"guide-to-incrementals/index.md","lastUpdated":1697349928000}'),n={name:"guide-to-incrementals/index.md"},i=o("",6),r=[i];function s(l,d,c,m,h,p){return t(),a("div",null,r)}const _=e(n,[["render",s]]);export{u as __pageData,_ as default};

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as n}from"./app.0f100cc5.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 +0,0 @@
import{_ as e,c as t,o as a,a as n}from"./app.0f100cc5.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};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as t,a as n}from"./app.0f100cc5.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};

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.1169fbc9.js";const y=JSON.parse('{"title":"Appeal to Developers","description":"","frontmatter":{"title":"Appeal to Developers"},"headers":[],"relativePath":"guide-to-incrementals/ludology/appeal-developers.md","filePath":"guide-to-incrementals/ludology/appeal-developers.md","lastUpdated":1697349928000}'),n={name:"guide-to-incrementals/ludology/appeal-developers.md"},i=o("",13),r=[i];function l(s,m,d,c,p,h){return a(),t("div",null,r)}const g=e(n,[["render",l]]);export{y as __pageData,g as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as i}from"./app.0f100cc5.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};

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as i}from"./chunks/framework.1169fbc9.js";const u=JSON.parse('{"title":"Appeal to Players","description":"","frontmatter":{"title":"Appeal to Players"},"headers":[],"relativePath":"guide-to-incrementals/ludology/appeal-gamers.md","filePath":"guide-to-incrementals/ludology/appeal-gamers.md","lastUpdated":1697349928000}'),o={name:"guide-to-incrementals/ludology/appeal-gamers.md"},n=i("",28),s=[n];function r(l,h,m,g,d,c){return t(),a("div",null,s)}const y=e(o,[["render",r]]);export{u as __pageData,y as default};

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as o}from"./chunks/framework.1169fbc9.js";const p=JSON.parse('{"title":"What is Content?","description":"","frontmatter":{"title":"What is Content?"},"headers":[],"relativePath":"guide-to-incrementals/ludology/content.md","filePath":"guide-to-incrementals/ludology/content.md","lastUpdated":1697349928000}'),n={name:"guide-to-incrementals/ludology/content.md"},i=o("",23),s=[i];function r(h,l,c,u,m,d){return t(),a("div",null,s)}const f=e(n,[["render",r]]);export{p as __pageData,f as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as n}from"./app.0f100cc5.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};

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as r}from"./chunks/framework.1169fbc9.js";const p=JSON.parse('{"title":"Defining the Genre","description":"","frontmatter":{"title":"Defining the Genre"},"headers":[],"relativePath":"guide-to-incrementals/ludology/definition.md","filePath":"guide-to-incrementals/ludology/definition.md","lastUpdated":1697349928000}'),n={name:"guide-to-incrementals/ludology/definition.md"},o=r("",61),i=[o];function s(l,h,m,g,c,u){return t(),a("div",null,i)}const f=e(n,[["render",s]]);export{p as __pageData,f as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as r}from"./app.0f100cc5.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

@ -0,0 +1 @@
import{_ as e,o as t,c as a}from"./chunks/framework.1169fbc9.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","filePath":"index.md","lastUpdated":1697351300000}`),o={name:"index.md"};function n(r,i,s,d,c,l){return t(),a("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as a}from"./chunks/framework.1169fbc9.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","filePath":"index.md","lastUpdated":1697351300000}`),o={name:"index.md"};function n(r,i,s,d,c,l){return t(),a("div")}const h=e(o,[["render",n]]);export{m as __pageData,h as default};

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a}from"./app.0f100cc5.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":1697349976000}`),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 +0,0 @@
import{_ as e,c as t,o as a}from"./app.0f100cc5.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":1697349976000}`),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};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as t,a as r}from"./app.0f100cc5.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":1697349976000}'),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 +0,0 @@
import{_ as e,c as a,o as t,a as r}from"./app.0f100cc5.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":1697349976000}'),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

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as r}from"./chunks/framework.1169fbc9.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[],"relativePath":"projects/babble/index.md","filePath":"projects/babble/index.md","lastUpdated":1697351300000}'),n={name:"projects/babble/index.md"},i=r('<h1 id="babble-buds" tabindex="-1">Babble Buds <a class="header-anchor" href="#babble-buds" aria-label="Permalink to &quot;Babble Buds&quot;"></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-label="Permalink to &quot;Engine&quot;"></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-label="Permalink to &quot;Babble Movie Maker&quot;"></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 a(),t("div",null,b)}const B=e(n,[["render",c]]);export{g as __pageData,B as default};

View file

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as r}from"./chunks/framework.1169fbc9.js";const s="/assets/screenshot.3bf794a2.png",o="/assets/babblemmscreenshot.7646b6c2.png",g=JSON.parse('{"title":"Babble Buds","description":"","frontmatter":{"title":"Babble Buds"},"headers":[],"relativePath":"projects/babble/index.md","filePath":"projects/babble/index.md","lastUpdated":1697351300000}'),n={name:"projects/babble/index.md"},i=r("",13),b=[i];function c(l,p,d,h,u,f){return a(),t("div",null,b)}const B=e(n,[["render",c]]);export{g as __pageData,B as default};

View file

@ -0,0 +1 @@
import{_ as a,o as r,c as s,k as e,a as t}from"./chunks/framework.1169fbc9.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","filePath":"projects/citadel/index.md","lastUpdated":1697351300000}'),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-label":'Permalink to "Capture the Citadel"'},"")],-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),l=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),d=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,l,d];function p(_,m,u,f,g,x){return r(),s("div",null,h)}const k=a(o,[["render",p]]);export{C as __pageData,k as default};

View file

@ -0,0 +1 @@
import{_ as a,o as r,c as s,k as e,a as t}from"./chunks/framework.1169fbc9.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","filePath":"projects/citadel/index.md","lastUpdated":1697351300000}'),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-label":'Permalink to "Capture the Citadel"'},"")],-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),l=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),d=e("p",null,[e("img",{src:n,alt:"Screenshot"})],-1),h=[i,c,l,d];function p(_,m,u,f,g,x){return r(),s("div",null,h)}const k=a(o,[["render",p]]);export{C as __pageData,k as default};

View file

@ -1 +0,0 @@
import{_ as a,c as r,o as s,b as e,d as t}from"./app.0f100cc5.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":1697349976000}'),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 +0,0 @@
import{_ as a,c as r,o as s,b as e,d as t}from"./app.0f100cc5.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":1697349976000}'),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

@ -0,0 +1 @@
import{_ as e,o as t,c as a,Q as i}from"./chunks/framework.1169fbc9.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","filePath":"projects/dice/index.md","lastUpdated":1697351300000}'),m={name:"projects/dice/index.md"},u=i("",22),g=[u];function f(y,b,w,_,v,k){return t(),a("div",null,g)}const q=e(m,[["render",f]]);export{I as __pageData,q as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as a,a as i}from"./app.0f100cc5.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":1697349976000}'),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

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as r}from"./chunks/framework.1169fbc9.js";const b=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","filePath":"projects/index.md","lastUpdated":1697351300000}'),o={name:"projects/index.md"},s=r('<h1 id="games" tabindex="-1">Games! <a class="header-anchor" href="#games" aria-label="Permalink to &quot;Games!&quot;"></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-label="Permalink to &quot;Profectus!&quot;"></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-label="Permalink to &quot;[V-ecs!](./vecs/)&quot;"></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-label="Permalink to &quot;[OptiSpeech!](./optispeech/)&quot;"></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-label="Permalink to &quot;[Babble Buds!](./babble/)&quot;"></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-label="Permalink to &quot;[Dice Armor](./dice/)&quot;"></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-label="Permalink to &quot;[Capture the Citadel](./citadel/)&quot;"></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 n(c,d,l,h,p,u){return a(),t("div",null,i)}const f=e(o,[["render",n]]);export{b as __pageData,f as default};

View file

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

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as t,a as r}from"./app.0f100cc5.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1697349976000}'),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 +0,0 @@
import{_ as e,c as a,o as t,a as r}from"./app.0f100cc5.js";const f=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects","lastUpdated":false},"headers":[],"relativePath":"projects/index.md","lastUpdated":1697349976000}'),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 +0,0 @@
import{_ as t,c as s,o as a,b as e,d as o}from"./app.0f100cc5.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":1697349976000}'),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 +0,0 @@
import{_ as t,c as s,o as a,b as e,d as o}from"./app.0f100cc5.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":1697349976000}'),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

@ -0,0 +1 @@
import{_ as t,o as s,c as a,k as e,a as o}from"./chunks/framework.1169fbc9.js";const n="/assets/system-architecture-600.254c8a7e.jpg",i="/assets/new-interface.99f03ba7.png",r="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","filePath":"projects/optispeech/index.md","lastUpdated":1697351300000}'),l={name:"projects/optispeech/index.md"},p=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-label":'Permalink to "OptiSpeech"'},"")],-1),d=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 — 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:i,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:r,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),k=[p,d,h,u,m,g,_,f,w,y,b,v];function T(x,S,j,A,I,N){return s(),a("div",null,k)}const D=t(l,[["render",T]]);export{U as __pageData,D as default};

View file

@ -0,0 +1 @@
import{_ as t,o as s,c as a,k as e,a as o}from"./chunks/framework.1169fbc9.js";const n="/assets/system-architecture-600.254c8a7e.jpg",i="/assets/new-interface.99f03ba7.png",r="/assets/documentation.4e9ae6e0.png",c="/assets/unittests.e8833eb5.png",U=JSON.parse('{"title":"OptiSpeech","description":"","frontmatter":{"title":"OptiSpeech"},"headers":[],"relativePath":"projects/optispeech/index.md","filePath":"projects/optispeech/index.md","lastUpdated":1697351300000}'),l={name:"projects/optispeech/index.md"},p=e("h1",{id:"optispeech",tabindex:"-1"},[o("OptiSpeech "),e("a",{class:"header-anchor",href:"#optispeech","aria-label":'Permalink to "OptiSpeech"'},"")],-1),d=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 — 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:i,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:r,alt:"Documentation"})],-1),v=e("p",null,[e("img",{src:c,alt:"Unit Tests"})],-1),k=[p,d,h,u,m,g,_,f,w,y,b,v];function T(x,S,j,A,I,N){return s(),a("div",null,k)}const D=t(l,[["render",T]]);export{U as __pageData,D as default};

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as s,Q as a}from"./chunks/framework.1169fbc9.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","filePath":"projects/vecs/index.md","lastUpdated":1697351300000}'),i={name:"projects/vecs/index.md"},l=a('<h1 id="v-ecs" tabindex="-1">V-ecs <a class="header-anchor" href="#v-ecs" aria-label="Permalink to &quot;V-ecs&quot;"></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),c=[l];function d(p,m,h,u,_,g){return t(),s("div",null,c)}const v=e(i,[["render",d]]);export{w as __pageData,v as default};

View file

@ -0,0 +1 @@
import{_ as e,o as t,c as s,Q as a}from"./chunks/framework.1169fbc9.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","filePath":"projects/vecs/index.md","lastUpdated":1697351300000}'),i={name:"projects/vecs/index.md"},l=a("",8),c=[l];function d(p,m,h,u,_,g){return t(),s("div",null,c)}const v=e(i,[["render",d]]);export{w as __pageData,v as default};

View file

@ -1 +0,0 @@
import{_ as e,c as t,o as s,a}from"./app.0f100cc5.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":1697349976000}'),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 +0,0 @@
import{_ as e,c as t,o as s,a}from"./app.0f100cc5.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":1697349976000}'),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 +0,0 @@
import{_ as e,c as a,o as t,a as i}from"./app.0f100cc5.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 +0,0 @@
import{_ as e,c as a,o as t,a as i}from"./app.0f100cc5.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

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.1169fbc9.js";const f=JSON.parse('{"title":"2.0 format changes","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/2.0-format-changes.md","filePath":"public/gamedevtree/2.0-format-changes.md","lastUpdated":1621388509000}'),i={name:"public/gamedevtree/2.0-format-changes.md"},l=o('<h1 id="_2-0-format-changes" tabindex="-1">2.0 format changes <a class="header-anchor" href="#_2-0-format-changes" aria-label="Permalink to &quot;2.0 format changes&quot;"></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),n=[l];function s(r,c,d,g,h,m){return a(),t("div",null,n)}const u=e(i,[["render",s]]);export{f as __pageData,u as default};

View file

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

View file

@ -0,0 +1 @@
import{_ as o,o as a,c as r,k as e,a as t}from"./chunks/framework.1169fbc9.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","filePath":"public/gamedevtree/README.md","lastUpdated":1621388509000}'),i={name:"public/gamedevtree/README.md"},n=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-label":'Permalink to "The-Modding-Tree"'},"")],-1),s=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=[n,s,d,l];function h(m,p,g,_,f,u){return a(),r("div",null,c)}const E=o(i,[["render",h]]);export{T as __pageData,E as default};

View file

@ -0,0 +1 @@
import{_ as o,o as a,c as r,k as e,a as t}from"./chunks/framework.1169fbc9.js";const T=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/README.md","filePath":"public/gamedevtree/README.md","lastUpdated":1621388509000}'),i={name:"public/gamedevtree/README.md"},n=e("h1",{id:"the-modding-tree",tabindex:"-1"},[t("The-Modding-Tree "),e("a",{class:"header-anchor",href:"#the-modding-tree","aria-label":'Permalink to "The-Modding-Tree"'},"")],-1),s=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=[n,s,d,l];function h(m,p,g,_,f,u){return a(),r("div",null,c)}const E=o(i,[["render",h]]);export{T as __pageData,E as default};

View file

@ -1 +0,0 @@
import{_ as o,c as a,o as r,b as e,d as t}from"./app.0f100cc5.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 +0,0 @@
import{_ as o,c as a,o as r,b as e,d as t}from"./app.0f100cc5.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

@ -0,0 +1 @@
import{_ as e,o as a,c as l,Q as i}from"./chunks/framework.1169fbc9.js";const m=JSON.parse('{"title":"The Game Dev Tree changelog:","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/changelog.md","filePath":"public/gamedevtree/changelog.md","lastUpdated":1621388509000}'),r={name:"public/gamedevtree/changelog.md"},o=i('<h1 id="the-game-dev-tree-changelog" tabindex="-1">The Game Dev Tree changelog: <a class="header-anchor" href="#the-game-dev-tree-changelog" aria-label="Permalink to &quot;The Game Dev Tree changelog:&quot;"></a></h1><h3 id="v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09" tabindex="-1">v1.0.4 Version Bump [rebalanced,debuggedx3] - 2020-11-09 <a class="header-anchor" href="#v1-0-4-version-bump-rebalanced-debuggedx3-2020-11-09" aria-label="Permalink to &quot;v1.0.4 Version Bump [rebalanced,debuggedx3] - 2020-11-09&quot;"></a></h3><ul><li>Fixed refactorings 2, 3, and 4 not actually affecting productivity</li></ul><h3 id="v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08" tabindex="-1">v1.0.3 Version Bump [rebalanced,debuggedx2] - 2020-11-08 <a class="header-anchor" href="#v1-0-3-version-bump-rebalanced-debuggedx2-2020-11-08" aria-label="Permalink to &quot;v1.0.3 Version Bump [rebalanced,debuggedx2] - 2020-11-08&quot;"></a></h3><ul><li>Fixed API milestone 4 not working</li></ul><h3 id="v1-0-2-version-bump-rebalanced-debugged-2020-11-08" tabindex="-1">v1.0.2 Version Bump [rebalanced,debugged] - 2020-11-08 <a class="header-anchor" href="#v1-0-2-version-bump-rebalanced-debugged-2020-11-08" aria-label="Permalink to &quot;v1.0.2 Version Bump [rebalanced,debugged] - 2020-11-08&quot;"></a></h3><ul><li>Fixed tree lines being hidden after hitting &quot;keepGoing&quot; in the victory screen</li></ul><h3 id="v1-0-1-version-bump-rebalanced-2020-11-08" tabindex="-1">v1.0.1 Version Bump [rebalanced] - 2020-11-08 <a class="header-anchor" href="#v1-0-1-version-bump-rebalanced-2020-11-08" aria-label="Permalink to &quot;v1.0.1 Version Bump [rebalanced] - 2020-11-08&quot;"></a></h3><ul><li>Buffed several TAs</li></ul><h3 id="v1-0-version-bump-2020-11-08" tabindex="-1">v1.0 Version Bump - 2020-11-08 <a class="header-anchor" href="#v1-0-version-bump-2020-11-08" aria-label="Permalink to &quot;v1.0 Version Bump - 2020-11-08&quot;"></a></h3><ul><li>Finished row 4</li><li>Added colored text to lore</li><li>Fixed some visual bugs with milestones</li><li>Probably other stuff lol its been a week</li></ul><h3 id="v0-2-3-stylish-2020-10-30" tabindex="-1">v0.2.3 Stylish - 2020-10-30 <a class="header-anchor" href="#v0-2-3-stylish-2020-10-30" aria-label="Permalink to &quot;v0.2.3 Stylish - 2020-10-30&quot;"></a></h3><ul><li>Re-styled basically everything</li><li>Added favicon</li><li>Added header bar</li><li>Added changelog</li></ul><h3 id="v0-2-2-row-3-2020-10-22" tabindex="-1">v0.2.2 Row 3 - 2020-10-22 <a class="header-anchor" href="#v0-2-2-row-3-2020-10-22" aria-label="Permalink to &quot;v0.2.2 Row 3 - 2020-10-22&quot;"></a></h3><ul><li>Removed debug statement</li><li>Moved milestones in F layer beneath the buyables</li></ul><h3 id="v0-2-1-row-3-2020-10-21" tabindex="-1">v0.2.1 Row 3 - 2020-10-21 <a class="header-anchor" href="#v0-2-1-row-3-2020-10-21" aria-label="Permalink to &quot;v0.2.1 Row 3 - 2020-10-21&quot;"></a></h3><ul><li>Fixed layers hiding</li><li>Fixed typos/minor issues</li><li>Fixed S layer being highlighted before you can unlock the layer</li></ul><h3 id="v0-2-row-3-2020-10-21" tabindex="-1">v0.2 Row 3 - 2020-10-21 <a class="header-anchor" href="#v0-2-row-3-2020-10-21" aria-label="Permalink to &quot;v0.2 Row 3 - 2020-10-21&quot;"></a></h3><ul><li>Implemented row 3</li></ul><h3 id="v0-1-1-cash-influx-rebalanced-2020-10-19" tabindex="-1">v0.1.1 Cash Influx [rebalanced] - 2020-10-19 <a class="header-anchor" href="#v0-1-1-cash-influx-rebalanced-2020-10-19" aria-label="Permalink to &quot;v0.1.1 Cash Influx [rebalanced] - 2020-10-19&quot;"></a></h3><ul><li>Fixed notification issue</li><li>Rebalanced to make early game faster and late game slower</li><li>Fixed other minor issues</li></ul><h3 id="v0-1-cash-influx-2020-10-19" tabindex="-1">v0.1 Cash Influx - 2020-10-19 <a class="header-anchor" href="#v0-1-cash-influx-2020-10-19" aria-label="Permalink to &quot;v0.1 Cash Influx - 2020-10-19&quot;"></a></h3><ul><li>Implemented row 2</li></ul><h3 id="v0-0-initial-commit-2020-10-18" tabindex="-1">v0.0 Initial Commit - 2020-10-18 <a class="header-anchor" href="#v0-0-initial-commit-2020-10-18" aria-label="Permalink to &quot;v0.0 Initial Commit - 2020-10-18&quot;"></a></h3><ul><li>Implemented row 1</li></ul>',25),n=[o];function t(d,h,s,u,c,b){return a(),l("div",null,n)}const g=e(r,[["render",t]]);export{m as __pageData,g as default};

View file

@ -0,0 +1 @@
import{_ as e,o as a,c as l,Q as i}from"./chunks/framework.1169fbc9.js";const m=JSON.parse('{"title":"The Game Dev Tree changelog:","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/changelog.md","filePath":"public/gamedevtree/changelog.md","lastUpdated":1621388509000}'),r={name:"public/gamedevtree/changelog.md"},o=i("",25),n=[o];function t(d,h,s,u,c,b){return a(),l("div",null,n)}const g=e(r,[["render",t]]);export{m as __pageData,g as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as e,c as i,o as l,a}from"./app.0f100cc5.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 +0,0 @@
import{_ as e,c as a,o as t,a as o}from"./app.0f100cc5.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 +0,0 @@
import{_ as e,c as a,o as t,a as o}from"./app.0f100cc5.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

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.1169fbc9.js";const b=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/!general-info.md","filePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":1621388509000}'),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-label="Permalink to &quot;The-Modding-Tree&quot;"></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-label="Permalink to &quot;Table of Contents:&quot;"></a></h1><h2 id="general" tabindex="-1">General: <a class="header-anchor" href="#general" aria-label="Permalink to &quot;General:&quot;"></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-label="Permalink to &quot;Common components&quot;"></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-label="Permalink to &quot;Other components&quot;"></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 a(),t("div",null,i)}const p=e(n,[["render",s]]);export{b as __pageData,p as default};

View file

@ -0,0 +1 @@
import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.1169fbc9.js";const b=JSON.parse('{"title":"The-Modding-Tree","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/!general-info.md","filePath":"public/gamedevtree/docs/!general-info.md","lastUpdated":1621388509000}'),n={name:"public/gamedevtree/docs/!general-info.md"},r=o("",14),i=[r];function s(l,d,c,h,u,m){return a(),t("div",null,i)}const p=e(n,[["render",s]]);export{b as __pageData,p as default};

View file

@ -1,10 +0,0 @@
import{_ as e,c as a,o as s,a as t}from"./app.0f100cc5.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>
<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>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"></span></code></pre></div><p>Each achievement should have an id where the first digit is the row and the second digit is the column. Individual achievement can have these features:</p><ul><li><p>name: <strong>optional</strong>, displayed at the top of the achievement. The only visible text. It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>done(): A function returning a boolean to determine if the achievement should be awarded.</p></li><li><p>tooltip: Default tooltip for the achievement, appears when it is hovered over. Should convey the goal and any reward for completing the achievement. It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>effect(): <strong>optional</strong>, A function that calculates and returns the current values of any bonuses from the achievement. Can return a value or an object containing multiple values.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the achievement is visible or not. Default is unlocked.</p></li><li><p>onComplete() - <strong>optional</strong>, this function will be called when the achievement is completed.</p></li><li><p>style: <strong>Optional</strong>, Applies CSS to this achievement, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings)</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the achievement was stored under, for convenient access. The achievement in the example&#39;s id is 11.</p></li><li><p>goalTooltip: <strong>optional, depracated</strong> Appears when the achievement is hovered over and locked, overrides the basic tooltip. This is to display the goal (or a hint). It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>doneTooltip: <strong>optional, depracated</strong> Appears when the achievement is hovered over and completed, overrides the basic tooltip. This can display what the player achieved (the goal), and the rewards, if any. It can also be a function that returns updating text. Can use basic HTML.</p></li></ul>`,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 +0,0 @@
import{_ as e,c as a,o as s,a as t}from"./app.0f100cc5.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

@ -0,0 +1,17 @@
import{_ as e,o as s,c as a,Q as n}from"./chunks/framework.1169fbc9.js";const y=JSON.parse('{"title":"Achievements","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/achievements.md","filePath":"public/gamedevtree/docs/achievements.md","lastUpdated":1621388509000}'),t={name:"public/gamedevtree/docs/achievements.md"},o=n(`<h1 id="achievements" tabindex="-1">Achievements <a class="header-anchor" href="#achievements" aria-label="Permalink to &quot;Achievements&quot;"></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 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">achievements</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">rows</span><span style="color:#E1E4E8;">: # </span><span style="color:#F97583;">of</span><span style="color:#E1E4E8;"> rows</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">cols</span><span style="color:#E1E4E8;">: # </span><span style="color:#F97583;">of</span><span style="color:#E1E4E8;"> columns</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">11</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> name: </span><span style="color:#9ECBFF;">&quot;Blah&quot;</span><span style="color:#E1E4E8;">,</span></span>
<span class="line"><span style="color:#E1E4E8;"> more features</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span>
<span class="line"><span style="color:#E1E4E8;"> etc</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">achievements</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">rows</span><span style="color:#24292E;">: # </span><span style="color:#D73A49;">of</span><span style="color:#24292E;"> rows</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">cols</span><span style="color:#24292E;">: # </span><span style="color:#D73A49;">of</span><span style="color:#24292E;"> columns</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">11</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> name: </span><span style="color:#032F62;">&quot;Blah&quot;</span><span style="color:#24292E;">,</span></span>
<span class="line"><span style="color:#24292E;"> more features</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span>
<span class="line"><span style="color:#24292E;"> etc</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span></code></pre></div><p>Each achievement should have an id where the first digit is the row and the second digit is the column. Individual achievement can have these features:</p><ul><li><p>name: <strong>optional</strong>, displayed at the top of the achievement. The only visible text. It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>done(): A function returning a boolean to determine if the achievement should be awarded.</p></li><li><p>tooltip: Default tooltip for the achievement, appears when it is hovered over. Should convey the goal and any reward for completing the achievement. It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>effect(): <strong>optional</strong>, A function that calculates and returns the current values of any bonuses from the achievement. Can return a value or an object containing multiple values.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the achievement is visible or not. Default is unlocked.</p></li><li><p>onComplete() - <strong>optional</strong>, this function will be called when the achievement is completed.</p></li><li><p>style: <strong>Optional</strong>, Applies CSS to this achievement, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings)</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the achievement was stored under, for convenient access. The achievement in the example&#39;s id is 11.</p></li><li><p>goalTooltip: <strong>optional, depracated</strong> Appears when the achievement is hovered over and locked, overrides the basic tooltip. This is to display the goal (or a hint). It can also be a function that returns updating text. Can use basic HTML.</p></li><li><p>doneTooltip: <strong>optional, depracated</strong> Appears when the achievement is hovered over and completed, overrides the basic tooltip. This can display what the player achieved (the goal), and the rewards, if any. It can also be a function that returns updating text. Can use basic HTML.</p></li></ul>`,9),l=[o];function p(i,c,r,h,d,u){return s(),a("div",null,l)}const E=e(t,[["render",p]]);export{y as __pageData,E as default};

View file

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

View file

@ -0,0 +1,13 @@
import{_ as s,o as a,c as e,Q as t}from"./chunks/framework.1169fbc9.js";const E=JSON.parse('{"title":"Bars","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/bars.md","filePath":"public/gamedevtree/docs/bars.md","lastUpdated":1621388509000}'),n={name:"public/gamedevtree/docs/bars.md"},o=t(`<h1 id="bars" tabindex="-1">Bars <a class="header-anchor" href="#bars" aria-label="Permalink to &quot;Bars&quot;"></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 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">bars</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">bigBar</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">display</span><span style="color:#E1E4E8;">() {</span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">&quot;Blah&quot;</span><span style="color:#E1E4E8;">},</span></span>
<span class="line"><span style="color:#E1E4E8;"> etc</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span>
<span class="line"><span style="color:#E1E4E8;"> etc</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">bars</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">bigBar</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">display</span><span style="color:#24292E;">() {</span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> </span><span style="color:#032F62;">&quot;Blah&quot;</span><span style="color:#24292E;">},</span></span>
<span class="line"><span style="color:#24292E;"> etc</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span>
<span class="line"><span style="color:#24292E;"> etc</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span></code></pre></div><p>Features:</p><ul><li><p>direction: UP, DOWN, LEFT, or RIGHT (not Strings). Determines the direction that the bar is filled as it progresses. RIGHT means from left to right.</p></li><li><p>width, height: The size in pixels of the bar, but as Numbers (no &quot;px&quot; at the end)</p></li><li><p>progress(): A function that returns the portion of the bar that is filled, from &quot;empty&quot; at 0 to &quot;full&quot; at 1. (Nothing bad happens if the value goes out of these bounds, and it can be a number or Decimal).</p></li><li><p>display(): <strong>optional</strong>, A function that returns text to be displayed on top of the bar, can use HTML.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the bar is visible or not. Default is unlocked.</p></li><li><p>baseStyle, fillStyle, borderStyle, textStyle: <strong>Optional</strong>, Apply CSS to the unfilled portion, filled portion, border, and display text on the bar, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the bar was stored under, for convenient access. The bar in the example&#39;s id is &quot;bigBar&quot;.</p></li></ul>`,6),l=[o];function p(r,i,c,d,h,u){return a(),e("div",null,l)}const b=s(n,[["render",p]]);export{E as __pageData,b as default};

View file

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

View file

@ -1,8 +0,0 @@
import{_ as s,c as a,o as e,a as t}from"./app.0f100cc5.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>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"></span></code></pre></div><p>Features:</p><ul><li><p>direction: UP, DOWN, LEFT, or RIGHT (not Strings). Determines the direction that the bar is filled as it progresses. RIGHT means from left to right.</p></li><li><p>width, height: The size in pixels of the bar, but as Numbers (no &quot;px&quot; at the end)</p></li><li><p>progress(): A function that returns the portion of the bar that is filled, from &quot;empty&quot; at 0 to &quot;full&quot; at 1. (Nothing bad happens if the value goes out of these bounds, and it can be a number or Decimal).</p></li><li><p>display(): <strong>optional</strong>, A function that returns text to be displayed on top of the bar, can use HTML.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the bar is visible or not. Default is unlocked.</p></li><li><p>baseStyle, fillStyle, borderStyle, textStyle: <strong>Optional</strong>, Apply CSS to the unfilled portion, filled portion, border, and display text on the bar, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the bar was stored under, for convenient access. The bar in the example&#39;s id is &quot;bigBar&quot;.</p></li></ul>`,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 +0,0 @@
import{_ as s,c as a,o as e,a as t}from"./app.0f100cc5.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,29 +0,0 @@
import{_ as s,c as a,o as n,a as l}from"./app.0f100cc5.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>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}},</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">color</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">#FE0102</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// The color for this layer, which affects many elements</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">resource</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">prestige points</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// The name of this layer&#39;s main prestige resource</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">row</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">0</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// The row this layer is on (0 is the first row)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">baseResource</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">points</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// The name of the resource your prestige gain is based on</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">baseAmount</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:#A6ACCD;">player</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">points</span><span style="color:#89DDFF;">},</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// A function to return the current value of that resource</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">requires</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;">200</span><span style="color:#F07178;">)</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// The amount of the base needed to gain 1 of the prestige currency.</span></span>
<span class="line"><span style="color:#89DDFF;"> </span><span style="color:#676E95;">// Also the amount required to unlock the layer.</span></span>
<span class="line"><span style="color:#F07178;"> </span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">type</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">normal</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// Determines the formula used for calculating prestige currency.</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">exponent</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">0.5</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// &quot;normal&quot; prestige gain is (currency^exponent)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">gainMult</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// Returns your multiplier to your gain of the prestige resource</span></span>
<span class="line"><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:#676E95;">// Factor in any bonuses multiplying gain here</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">gainExp</span><span style="color:#F07178;">() </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// Returns your exponent to your gain of the prestige resource</span></span>
<span class="line"><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>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">layerShown</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:#FF9CAC;">true</span><span style="color:#89DDFF;">},</span><span style="color:#F07178;"> </span><span style="color:#676E95;">// Returns a bool for if this layer&#39;s node should be visible in the tree.</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span></span>
<span class="line"></span></code></pre></div>`,3),e=[p];function t(r,c,F,y,i,D){return n(),a("div",null,e)}const h=s(o,[["render",t]]);export{d as __pageData,h as default};

View file

@ -1 +0,0 @@
import{_ as s,c as a,o as n,a as l}from"./app.0f100cc5.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 n(),a("div",null,e)}const h=s(o,[["render",t]]);export{d as __pageData,h as default};

View file

@ -0,0 +1,55 @@
import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.1169fbc9.js";const d=JSON.parse('{"title":"Basic layer breakdown","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/basic-layer-breakdown.md","filePath":"public/gamedevtree/docs/basic-layer-breakdown.md","lastUpdated":1621388509000}'),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-label="Permalink to &quot;Basic layer breakdown&quot;"></a></h1><p>This is a very minimal layer with minimal features. Most things will require additional features.</p><div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">p</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">startData</span><span style="color:#E1E4E8;">() { </span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> { </span><span style="color:#6A737D;">// startData is a function that returns default data for a layer. </span></span>
<span class="line"><span style="color:#E1E4E8;"> unlocked: </span><span style="color:#79B8FF;">false</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// You can add more variables here to add them to your layer.</span></span>
<span class="line"><span style="color:#E1E4E8;"> points: </span><span style="color:#F97583;">new</span><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">Decimal</span><span style="color:#E1E4E8;">(</span><span style="color:#79B8FF;">0</span><span style="color:#E1E4E8;">), </span><span style="color:#6A737D;">// &quot;points&quot; is the internal name for the main resource of the layer.</span></span>
<span class="line"><span style="color:#E1E4E8;"> }},</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">color</span><span style="color:#E1E4E8;">: </span><span style="color:#9ECBFF;">&quot;#FE0102&quot;</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// The color for this layer, which affects many elements</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">resource</span><span style="color:#E1E4E8;">: </span><span style="color:#9ECBFF;">&quot;prestige points&quot;</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// The name of this layer&#39;s main prestige resource</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">row</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">0</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// The row this layer is on (0 is the first row)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">baseResource</span><span style="color:#E1E4E8;">: </span><span style="color:#9ECBFF;">&quot;points&quot;</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// The name of the resource your prestige gain is based on</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">baseAmount</span><span style="color:#E1E4E8;">() {</span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> player.points}, </span><span style="color:#6A737D;">// A function to return the current value of that resource</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">requires</span><span style="color:#E1E4E8;">: </span><span style="color:#F97583;">new</span><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">Decimal</span><span style="color:#E1E4E8;">(</span><span style="color:#79B8FF;">200</span><span style="color:#E1E4E8;">), </span><span style="color:#6A737D;">// The amount of the base needed to gain 1 of the prestige currency.</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#6A737D;">// Also the amount required to unlock the layer.</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">type</span><span style="color:#E1E4E8;">: </span><span style="color:#9ECBFF;">&quot;normal&quot;</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// Determines the formula used for calculating prestige currency.</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">exponent</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">0.5</span><span style="color:#E1E4E8;">, </span><span style="color:#6A737D;">// &quot;normal&quot; prestige gain is (currency^exponent)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">gainMult</span><span style="color:#E1E4E8;">() { </span><span style="color:#6A737D;">// Returns your multiplier to your gain of the prestige resource</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> </span><span style="color:#F97583;">new</span><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">Decimal</span><span style="color:#E1E4E8;">(</span><span style="color:#79B8FF;">1</span><span style="color:#E1E4E8;">) </span><span style="color:#6A737D;">// Factor in any bonuses multiplying gain here</span></span>
<span class="line"><span style="color:#E1E4E8;"> },</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">gainExp</span><span style="color:#E1E4E8;">() { </span><span style="color:#6A737D;">// Returns your exponent to your gain of the prestige resource</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> </span><span style="color:#F97583;">new</span><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">Decimal</span><span style="color:#E1E4E8;">(</span><span style="color:#79B8FF;">1</span><span style="color:#E1E4E8;">)</span></span>
<span class="line"><span style="color:#E1E4E8;"> },</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">layerShown</span><span style="color:#E1E4E8;">() {</span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">true</span><span style="color:#E1E4E8;">}, </span><span style="color:#6A737D;">// Returns a bool for if this layer&#39;s node should be visible in the tree.</span></span>
<span class="line"><span style="color:#E1E4E8;"> },</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">p</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">startData</span><span style="color:#24292E;">() { </span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> { </span><span style="color:#6A737D;">// startData is a function that returns default data for a layer. </span></span>
<span class="line"><span style="color:#24292E;"> unlocked: </span><span style="color:#005CC5;">false</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// You can add more variables here to add them to your layer.</span></span>
<span class="line"><span style="color:#24292E;"> points: </span><span style="color:#D73A49;">new</span><span style="color:#24292E;"> </span><span style="color:#6F42C1;">Decimal</span><span style="color:#24292E;">(</span><span style="color:#005CC5;">0</span><span style="color:#24292E;">), </span><span style="color:#6A737D;">// &quot;points&quot; is the internal name for the main resource of the layer.</span></span>
<span class="line"><span style="color:#24292E;"> }},</span></span>
<span class="line"></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">color</span><span style="color:#24292E;">: </span><span style="color:#032F62;">&quot;#FE0102&quot;</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// The color for this layer, which affects many elements</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">resource</span><span style="color:#24292E;">: </span><span style="color:#032F62;">&quot;prestige points&quot;</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// The name of this layer&#39;s main prestige resource</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">row</span><span style="color:#24292E;">: </span><span style="color:#005CC5;">0</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// The row this layer is on (0 is the first row)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">baseResource</span><span style="color:#24292E;">: </span><span style="color:#032F62;">&quot;points&quot;</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// The name of the resource your prestige gain is based on</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">baseAmount</span><span style="color:#24292E;">() {</span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> player.points}, </span><span style="color:#6A737D;">// A function to return the current value of that resource</span></span>
<span class="line"></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">requires</span><span style="color:#24292E;">: </span><span style="color:#D73A49;">new</span><span style="color:#24292E;"> </span><span style="color:#6F42C1;">Decimal</span><span style="color:#24292E;">(</span><span style="color:#005CC5;">200</span><span style="color:#24292E;">), </span><span style="color:#6A737D;">// The amount of the base needed to gain 1 of the prestige currency.</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6A737D;">// Also the amount required to unlock the layer.</span></span>
<span class="line"><span style="color:#24292E;"> </span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">type</span><span style="color:#24292E;">: </span><span style="color:#032F62;">&quot;normal&quot;</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// Determines the formula used for calculating prestige currency.</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">exponent</span><span style="color:#24292E;">: </span><span style="color:#005CC5;">0.5</span><span style="color:#24292E;">, </span><span style="color:#6A737D;">// &quot;normal&quot; prestige gain is (currency^exponent)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">gainMult</span><span style="color:#24292E;">() { </span><span style="color:#6A737D;">// Returns your multiplier to your gain of the prestige resource</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> </span><span style="color:#D73A49;">new</span><span style="color:#24292E;"> </span><span style="color:#6F42C1;">Decimal</span><span style="color:#24292E;">(</span><span style="color:#005CC5;">1</span><span style="color:#24292E;">) </span><span style="color:#6A737D;">// Factor in any bonuses multiplying gain here</span></span>
<span class="line"><span style="color:#24292E;"> },</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">gainExp</span><span style="color:#24292E;">() { </span><span style="color:#6A737D;">// Returns your exponent to your gain of the prestige resource</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> </span><span style="color:#D73A49;">new</span><span style="color:#24292E;"> </span><span style="color:#6F42C1;">Decimal</span><span style="color:#24292E;">(</span><span style="color:#005CC5;">1</span><span style="color:#24292E;">)</span></span>
<span class="line"><span style="color:#24292E;"> },</span></span>
<span class="line"></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">layerShown</span><span style="color:#24292E;">() {</span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">true</span><span style="color:#24292E;">}, </span><span style="color:#6A737D;">// Returns a bool for if this layer&#39;s node should be visible in the tree.</span></span>
<span class="line"><span style="color:#24292E;"> },</span></span></code></pre></div>`,3),e=[p];function t(r,c,y,E,i,u){return n(),a("div",null,e)}const F=s(o,[["render",t]]);export{d as __pageData,F as default};

View file

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

View file

@ -0,0 +1,27 @@
import{_ as s,o as a,c as n,Q as e}from"./chunks/framework.1169fbc9.js";const E=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","filePath":"public/gamedevtree/docs/buyables.md","lastUpdated":1621388509000}'),l={name:"public/gamedevtree/docs/buyables.md"},t=e(`<h1 id="buyables" tabindex="-1">Buyables <a class="header-anchor" href="#buyables" aria-label="Permalink to &quot;Buyables&quot;"></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 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">buyables</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">rows</span><span style="color:#E1E4E8;">: # </span><span style="color:#F97583;">of</span><span style="color:#E1E4E8;"> rows</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">cols</span><span style="color:#E1E4E8;">: # </span><span style="color:#F97583;">of</span><span style="color:#E1E4E8;"> columns</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">respec</span><span style="color:#E1E4E8;">() {}, </span><span style="color:#6A737D;">//**optional**, implement it to reset things and give back your currency.</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#6A737D;">// Having this function makes a respec button appear</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">respecText</span><span style="color:#E1E4E8;">:</span><span style="color:#6A737D;">// **optional**, text that appears on the respec button</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">showRespecButton</span><span style="color:#E1E4E8;">(){} </span><span style="color:#6A737D;">//**optional**, a function determining whether or not to show the button. Defaults to true if absent.</span></span>
<span class="line"><span style="color:#E1E4E8;"> sellOneText, </span><span style="color:#B392F0;">sellAllText</span><span style="color:#E1E4E8;">:</span><span style="color:#6A737D;">// **optional**, text that appears on the &quot;sell one&quot; and &quot;sell all&quot; buttons respectively (if you are using them)</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">11</span><span style="color:#E1E4E8;">: {</span></span>
<span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#B392F0;">display</span><span style="color:#E1E4E8;">() {</span><span style="color:#F97583;">return</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">&quot;Blah&quot;</span><span style="color:#E1E4E8;">},</span></span>
<span class="line"><span style="color:#E1E4E8;"> etc</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span>
<span class="line"><span style="color:#E1E4E8;"> etc</span></span>
<span class="line"><span style="color:#E1E4E8;"> }</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">buyables</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">rows</span><span style="color:#24292E;">: # </span><span style="color:#D73A49;">of</span><span style="color:#24292E;"> rows</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">cols</span><span style="color:#24292E;">: # </span><span style="color:#D73A49;">of</span><span style="color:#24292E;"> columns</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">respec</span><span style="color:#24292E;">() {}, </span><span style="color:#6A737D;">//**optional**, implement it to reset things and give back your currency.</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6A737D;">// Having this function makes a respec button appear</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">respecText</span><span style="color:#24292E;">:</span><span style="color:#6A737D;">// **optional**, text that appears on the respec button</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">showRespecButton</span><span style="color:#24292E;">(){} </span><span style="color:#6A737D;">//**optional**, a function determining whether or not to show the button. Defaults to true if absent.</span></span>
<span class="line"><span style="color:#24292E;"> sellOneText, </span><span style="color:#6F42C1;">sellAllText</span><span style="color:#24292E;">:</span><span style="color:#6A737D;">// **optional**, text that appears on the &quot;sell one&quot; and &quot;sell all&quot; buttons respectively (if you are using them)</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">11</span><span style="color:#24292E;">: {</span></span>
<span class="line"><span style="color:#24292E;"> </span><span style="color:#6F42C1;">display</span><span style="color:#24292E;">() {</span><span style="color:#D73A49;">return</span><span style="color:#24292E;"> </span><span style="color:#032F62;">&quot;Blah&quot;</span><span style="color:#24292E;">},</span></span>
<span class="line"><span style="color:#24292E;"> etc</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span>
<span class="line"><span style="color:#24292E;"> etc</span></span>
<span class="line"><span style="color:#24292E;"> }</span></span></code></pre></div><p>Features:</p><ul><li><p>title: <strong>optional</strong>, displayed at the top in a larger font It can also be a function that returns updating text.</p></li><li><p>cost(): cost for buying the next buyable. Can have an optional argument &quot;x&quot; to calculate the cost of the x+1th object, but needs to use &quot;current amount&quot; as a default value for x. (x is a Decimal). Can return an object if there are multiple currencies.</p></li><li><p>effect(): <strong>optional</strong>, A function that calculates and returns the current values of bonuses of this buyable. Can return a value or an object containing multiple values.</p></li><li><p>display(): A function returning everything that should be displayed on the buyable after the title, likely including the description, amount bought, cost, and current effect. Can use basic HTML.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the buyable is visible or not. Default is unlocked.</p></li><li><p>canAfford(): A function returning a bool to determine if you can buy one of the buyables.</p></li><li><p>buy(): A function that implements buying one of the buyable, including spending the currency.</p></li><li><p>buyMax(): <strong>optional</strong>, A function that implements buying as many of the buyable as possible.</p></li><li><p>style: <strong>Optional</strong>, Applies CSS to this buyable, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings)</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the buyable was stored under, for convenient access. The buyable in the example&#39;s id is 11.</p></li></ul><p>Sell One/Sell All:</p><p>Including a sellOne or sellAll function will cause an additional button to appear beneath the buyable. They are functionally identical, but &quot;sell one&quot; appears above &quot;sell all&quot;. You can also use them for other things.</p><p>sellOne/sellAll(): <strong>optional</strong>, Called when the button is pressed. The standard use would be to decrease/reset the amount of the buyable, And possibly return some currency to the player.</p><p>canSellOne/canSellAll(): <strong>optional</strong>, booleans determining whether or not to show the buttons. If &quot;canSellOne/All&quot; is absent but &quot;sellOne/All&quot; is present, the appropriate button will always show.</p>`,11),o=[t];function p(r,c,i,u,y,h){return a(),n("div",null,o)}const d=s(l,[["render",p]]);export{E as __pageData,d as default};

View file

@ -0,0 +1 @@
import{_ as s,o as a,c as n,Q as e}from"./chunks/framework.1169fbc9.js";const E=JSON.parse('{"title":"Buyables","description":"","frontmatter":{},"headers":[],"relativePath":"public/gamedevtree/docs/buyables.md","filePath":"public/gamedevtree/docs/buyables.md","lastUpdated":1621388509000}'),l={name:"public/gamedevtree/docs/buyables.md"},t=e("",11),o=[t];function p(r,c,i,u,y,h){return a(),n("div",null,o)}const d=s(l,[["render",p]]);export{E as __pageData,d as default};

View file

@ -1,15 +0,0 @@
import{_ as s,c as e,o as a,a as n}from"./app.0f100cc5.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>
<span class="line"><span style="color:#89DDFF;"> </span><span style="color:#676E95;">// Having this function makes a respec button appear</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">respecText</span><span style="color:#89DDFF;">:</span><span style="color:#676E95;">// **optional**, text that appears on the respec button</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#82AAFF;">showRespecButton</span><span style="color:#F07178;">()</span><span style="color:#89DDFF;">{}</span><span style="color:#F07178;"> </span><span style="color:#676E95;">//**optional**, a function determining whether or not to show the button. Defaults to true if absent.</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">sellOneText</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#FFCB6B;">sellAllText</span><span style="color:#89DDFF;">:</span><span style="color:#676E95;">// **optional**, text that appears on the &quot;sell one&quot; and &quot;sell all&quot; buttons respectively (if you are using them)</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>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">etc</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"></span></code></pre></div><p>Features:</p><ul><li><p>title: <strong>optional</strong>, displayed at the top in a larger font It can also be a function that returns updating text.</p></li><li><p>cost(): cost for buying the next buyable. Can have an optional argument &quot;x&quot; to calculate the cost of the x+1th object, but needs to use &quot;current amount&quot; as a default value for x. (x is a Decimal). Can return an object if there are multiple currencies.</p></li><li><p>effect(): <strong>optional</strong>, A function that calculates and returns the current values of bonuses of this buyable. Can return a value or an object containing multiple values.</p></li><li><p>display(): A function returning everything that should be displayed on the buyable after the title, likely including the description, amount bought, cost, and current effect. Can use basic HTML.</p></li><li><p>unlocked(): <strong>optional</strong>, A function returning a bool to determine if the buyable is visible or not. Default is unlocked.</p></li><li><p>canAfford(): A function returning a bool to determine if you can buy one of the buyables.</p></li><li><p>buy(): A function that implements buying one of the buyable, including spending the currency.</p></li><li><p>buyMax(): <strong>optional</strong>, A function that implements buying as many of the buyable as possible.</p></li><li><p>style: <strong>Optional</strong>, Applies CSS to this buyable, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings)</p></li><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</p></li><li><p>id: <strong>Assigned automagically</strong>. It&#39;s the &quot;key&quot; which the buyable was stored under, for convenient access. The buyable in the example&#39;s id is 11.</p></li></ul><p>Sell One/Sell All:</p><p>Including a sellOne or sellAll function will cause an additional button to appear beneath the buyable. They are functionally identical, but &quot;sell one&quot; appears above &quot;sell all&quot;. You can also use them for other things.</p><p>sellOne/sellAll(): <strong>optional</strong>, Called when the button is pressed. The standard use would be to decrease/reset the amount of the buyable, And possibly return some currency to the player.</p><p>canSellOne/canSellAll(): <strong>optional</strong>, booleans determining whether or not to show the buttons. If &quot;canSellOne/All&quot; is absent but &quot;sellOne/All&quot; is present, the appropriate button will always show.</p>`,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 +0,0 @@
import{_ as s,c as e,o as a,a as n}from"./app.0f100cc5.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};

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