This commit is contained in:
thepaperpilot 2023-10-15 16:11:55 +00:00
parent 34bcdcd4fc
commit 635e6bdac3
105 changed files with 131 additions and 131 deletions

File diff suppressed because one or more lines are too long

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/design/criticism/index.md","lastUpdated":1697385789000}'),o={name:"guide-to-incrementals/design/criticism/index.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}; 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/index.md","filePath":"guide-to-incrementals/design/criticism/index.md","lastUpdated":1697386254000}'),o={name:"guide-to-incrementals/design/criticism/index.md"},n=i("",11),s=[n];function r(c,l,d,u,m,h){return t(),a("div",null,s)}const f=e(o,[["render",r]]);export{p as __pageData,f as default};

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/design/introduction/index.md","lastUpdated":1697385789000}'),o={name:"guide-to-incrementals/design/introduction/index.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 d(s,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",d]]);export{h as __pageData,f as default}; 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/index.md","filePath":"guide-to-incrementals/design/introduction/index.md","lastUpdated":1697386254000}'),o={name:"guide-to-incrementals/design/introduction/index.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 d(s,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",d]]);export{h as __pageData,f as default};

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/design/introduction/index.md","lastUpdated":1697385789000}'),o={name:"guide-to-incrementals/design/introduction/index.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 d(s,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",d]]);export{h as __pageData,f as default}; 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/index.md","filePath":"guide-to-incrementals/design/introduction/index.md","lastUpdated":1697386254000}'),o={name:"guide-to-incrementals/design/introduction/index.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 d(s,m,l,g,_,u){return t(),a("div",null,c)}const f=n(o,[["render",d]]);export{h as __pageData,f as default};

View file

@ -1 +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":1697385789000}'),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}; 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":1697386254000}'),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

@ -1 +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":1697385789000}'),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}; 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":1697386254000}'),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 +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/index.md","filePath":"guide-to-incrementals/ludology/appeal-developers/index.md","lastUpdated":1697385789000}'),n={name:"guide-to-incrementals/ludology/appeal-developers/index.md"},i=o("",13),r=[i];function l(s,d,m,c,p,h){return a(),t("div",null,r)}const g=e(n,[["render",l]]);export{y as __pageData,g as default}; 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/index.md","filePath":"guide-to-incrementals/ludology/appeal-developers/index.md","lastUpdated":1697386254000}'),n={name:"guide-to-incrementals/ludology/appeal-developers/index.md"},i=o("",13),r=[i];function l(s,d,m,c,p,h){return a(),t("div",null,r)}const g=e(n,[["render",l]]);export{y as __pageData,g as default};

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/ludology/appeal-gamers/index.md","lastUpdated":1697385789000}'),o={name:"guide-to-incrementals/ludology/appeal-gamers/index.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}; 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/index.md","filePath":"guide-to-incrementals/ludology/appeal-gamers/index.md","lastUpdated":1697386254000}'),o={name:"guide-to-incrementals/ludology/appeal-gamers/index.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};

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/ludology/content/index.md","lastUpdated":1697385789000}'),n={name:"guide-to-incrementals/ludology/content/index.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}; 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/index.md","filePath":"guide-to-incrementals/ludology/content/index.md","lastUpdated":1697386254000}'),n={name:"guide-to-incrementals/ludology/content/index.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};

View file

@ -1 +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/index.md","filePath":"guide-to-incrementals/ludology/definition/index.md","lastUpdated":1697385789000}'),n={name:"guide-to-incrementals/ludology/definition/index.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}; 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/index.md","filePath":"guide-to-incrementals/ludology/definition/index.md","lastUpdated":1697386254000}'),n={name:"guide-to-incrementals/ludology/definition/index.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};

View file

@ -1 +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":1697385798000}`),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}; 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":1697386258000}`),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 +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":1697385798000}`),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}; 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":1697386258000}`),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 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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 +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":1697385798000}'),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}; 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":1697386258000}'),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};

File diff suppressed because one or more lines are too long

View file

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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};

View file

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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

@ -1 +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":1697385798000}'),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}; 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":1697386258000}'),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};

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

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

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"guide-to-incrementals_design_introduction_index.md":"98e54bb7","guide-to-incrementals_design_criticism_index.md":"4065524d","guide-to-incrementals_index.md":"c3320b57","guide-to-incrementals_ludology_definition_index.md":"c6f38bd1","projects_babble_index.md":"6dba4e4f","projects_dice_index.md":"a30291f3","public_gamedevtree_readme.md":"c8727831","projects_vecs_index.md":"dd4ba7d2","projects_index.md":"4e282b14","projects_citadel_index.md":"200a5eb0","public_kronos_docs_subtabs-and-microtabs.md":"6172e2b9","public_kronos_docs_trees-and-tree-customization.md":"50820db8","public_lit_docs_bars.md":"12a2ea1f","public_lit_docs_basic-layer-breakdown.md":"537c8e8d","public_lit_docs_challenges.md":"cdc3d397","public_lit_docs_clickables.md":"e36de12e","public_lit_docs_getting-started.md":"1c4d3077","public_lit_docs_infoboxes.md":"fb00fba0","public_kronos_docs_updating-tmt.md":"6ef74952","public_lit_docs_buyables.md":"59dff372","public_gamedevtree_docs_custom-tab-layouts.md":"88f2716c","public_lit_docs_custom-tab-layouts.md":"f908e848","public_gamedevtree_docs_clickables.md":"071614e7","public_lit_changelog.md":"07a3430c","public_lit_docs_!general-info.md":"a19e7dda","public_gamedevtree_docs_challenges.md":"2aededa1","public_gamedevtree_docs_buyables.md":"aaf2dbf0","public_gamedevtree_docs_getting-started.md":"728b1c5a","public_gamedevtree_docs_infoboxes.md":"20dc07f1","public_kronos_docs_upgrades.md":"33de426a","public_lit_old things_2.0-format-changes.md":"1c4753bc","public_gamedevtree_docs_layer-features.md":"358536c6","public_gamedevtree_docs_main-mod-info.md":"e47f311e","public_gamedevtree_docs_milestones.md":"d3d14cdf","public_gamedevtree_docs_subtabs-and-microtabs.md":"7e17729a","public_gamedevtree_docs_updating-tmt.md":"3abb786e","public_gamedevtree_docs_upgrades.md":"f2da5968","public_kronos_old things_2.0-format-changes.md":"01e6cf21","public_kronos_readme.md":"1d24f81b","public_kronos_changelog.md":"214bb4a9","public_kronos_docs_!general-info.md":"a2b0cacb","public_kronos_docs_achievements.md":"87e51d9c","public_kronos_docs_bars.md":"d76e8fe1","public_kronos_docs_basic-layer-breakdown.md":"21ce399d","public_kronos_docs_buyables.md":"1fc0cb4b","public_kronos_docs_challenges.md":"8e58ea7f","public_kronos_docs_clickables.md":"6b6e0c98","public_kronos_docs_getting-started.md":"d3fc63be","public_kronos_docs_custom-tab-layouts.md":"419753ca","public_kronos_docs_infoboxes.md":"aaf3ac06","public_kronos_docs_layer-features.md":"162192ee","public_kronos_docs_main-mod-info.md":"07830185","public_kronos_docs_milestones.md":"943678fc","public_kronos_docs_particles.md":"f44e1f6e","public_lit_readme.md":"37700f83","public_lit_docs_main-mod-info.md":"8b9794d9","public_lit_docs_milestones.md":"65084c13","public_lit_docs_subtabs-and-microtabs.md":"9c5c6883","public_lit_docs_trees-and-tree-customization.md":"5cb2e22e","public_lit_docs_updating-tmt.md":"81e44c79","public_lit_docs_upgrades.md":"02ce1421","guide-to-incrementals_ludology_appeal-developers_index.md":"d65f0b78","projects_optispeech_index.md":"ba412c4b","public_gamedevtree_docs_!general-info.md":"edf0e4f0","index.md":"e9272e80","public_gamedevtree_2.0-format-changes.md":"b269d5ac","public_gamedevtree_changelog.md":"359863a4","public_gamedevtree_docs_achievements.md":"b946ed90","public_gamedevtree_docs_bars.md":"8820f30f","public_kronos_docs_grids.md":"d08f6e38","guide-to-incrementals_ludology_content_index.md":"af210661","public_lit_docs_achievements.md":"da2fc65b","guide-to-incrementals_ludology_appeal-gamers_index.md":"6fbb2be3","public_gamedevtree_docs_basic-layer-breakdown.md":"a0080021","public_lit_docs_layer-features.md":"107a6243"} {"guide-to-incrementals_ludology_appeal-gamers_index.md":"cc18f4cc","guide-to-incrementals_ludology_definition_index.md":"2d700f3c","index.md":"17b4ca0c","projects_babble_index.md":"b397ac5e","projects_citadel_index.md":"f2d6e12c","public_gamedevtree_docs_achievements.md":"b946ed90","public_gamedevtree_docs_bars.md":"8820f30f","public_gamedevtree_docs_basic-layer-breakdown.md":"a0080021","public_gamedevtree_docs_buyables.md":"aaf2dbf0","public_gamedevtree_docs_clickables.md":"071614e7","public_gamedevtree_docs_layer-features.md":"358536c6","guide-to-incrementals_design_criticism_index.md":"c03c43ef","public_gamedevtree_docs_challenges.md":"2aededa1","guide-to-incrementals_design_introduction_index.md":"e42aeae1","public_kronos_docs_subtabs-and-microtabs.md":"6172e2b9","public_gamedevtree_docs_milestones.md":"d3d14cdf","public_gamedevtree_docs_subtabs-and-microtabs.md":"7e17729a","public_gamedevtree_docs_updating-tmt.md":"3abb786e","public_gamedevtree_docs_upgrades.md":"f2da5968","public_kronos_old things_2.0-format-changes.md":"01e6cf21","public_kronos_readme.md":"1d24f81b","public_kronos_changelog.md":"214bb4a9","public_kronos_docs_!general-info.md":"a2b0cacb","public_kronos_docs_achievements.md":"87e51d9c","public_kronos_docs_bars.md":"d76e8fe1","public_kronos_docs_basic-layer-breakdown.md":"21ce399d","public_kronos_docs_buyables.md":"1fc0cb4b","public_kronos_docs_challenges.md":"8e58ea7f","public_kronos_docs_clickables.md":"6b6e0c98","public_kronos_docs_custom-tab-layouts.md":"419753ca","public_kronos_docs_getting-started.md":"d3fc63be","public_kronos_docs_grids.md":"d08f6e38","public_kronos_docs_trees-and-tree-customization.md":"50820db8","public_kronos_docs_updating-tmt.md":"6ef74952","public_lit_old things_2.0-format-changes.md":"1c4753bc","public_lit_readme.md":"37700f83","public_lit_changelog.md":"07a3430c","public_gamedevtree_docs_custom-tab-layouts.md":"88f2716c","public_kronos_docs_main-mod-info.md":"07830185","public_lit_docs_!general-info.md":"a19e7dda","public_lit_docs_achievements.md":"da2fc65b","public_lit_docs_bars.md":"12a2ea1f","public_lit_docs_custom-tab-layouts.md":"f908e848","public_lit_docs_main-mod-info.md":"8b9794d9","public_lit_docs_milestones.md":"65084c13","public_lit_docs_subtabs-and-microtabs.md":"9c5c6883","public_lit_docs_trees-and-tree-customization.md":"5cb2e22e","public_lit_docs_updating-tmt.md":"81e44c79","public_lit_docs_upgrades.md":"02ce1421","projects_dice_index.md":"22090f26","public_kronos_docs_upgrades.md":"33de426a","public_gamedevtree_docs_getting-started.md":"728b1c5a","public_gamedevtree_2.0-format-changes.md":"b269d5ac","projects_optispeech_index.md":"cc1c2c05","projects_vecs_index.md":"ec842603","public_gamedevtree_docs_infoboxes.md":"20dc07f1","public_gamedevtree_readme.md":"c8727831","public_lit_docs_infoboxes.md":"fb00fba0","projects_index.md":"7ee9b7d0","guide-to-incrementals_ludology_appeal-developers_index.md":"d54da3c8","public_lit_docs_basic-layer-breakdown.md":"537c8e8d","public_lit_docs_buyables.md":"59dff372","public_lit_docs_challenges.md":"cdc3d397","public_lit_docs_clickables.md":"e36de12e","public_kronos_docs_infoboxes.md":"aaf3ac06","public_lit_docs_getting-started.md":"1c4d3077","public_kronos_docs_particles.md":"f44e1f6e","guide-to-incrementals_index.md":"15e8a709","public_kronos_docs_layer-features.md":"162192ee","guide-to-incrementals_ludology_content_index.md":"0335dc81","public_kronos_docs_milestones.md":"943678fc","public_gamedevtree_changelog.md":"359863a4","public_gamedevtree_docs_!general-info.md":"edf0e4f0","public_gamedevtree_docs_main-mod-info.md":"e47f311e","public_lit_docs_layer-features.md":"107a6243"}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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