<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog on Timmy Kokke</title>
    <link>https://timmykokke.com/blog/</link>
    <description>Recent content in Blog on Timmy Kokke</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 29 Jun 2026 01:00:00 +0000</lastBuildDate>
    <atom:link href="https://timmykokke.com/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>MVVM In Web Games</title>
      <link>https://timmykokke.com/blog/2026/2026-06-29-mvvm-in-web-games/</link>
      <pubDate>Mon, 29 Jun 2026 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2026/2026-06-29-mvvm-in-web-games/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Back in the days of Silverlight and later WPF MVVM was my go-to pattern to bind my &lt;em&gt;models&lt;/em&gt; to the &lt;em&gt;views&lt;/em&gt;. It is a great way to separate concerns in a project. I realized it works pretty well for games too! Back then, I used C# with the INotifyPropertyChanged interface. In this post, I will be using &lt;strong&gt;TypeScript&lt;/strong&gt; and a reactive state system. The principles are the same though. It&amp;rsquo;s all about separating concerns and keeping the code maintainable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatic GitHub Deploy to itch.io</title>
      <link>https://timmykokke.com/blog/2026/2026-05-01-github-deploy-to-itch/</link>
      <pubDate>Mon, 11 May 2026 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2026/2026-05-01-github-deploy-to-itch/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Automating itch.io uploads from GitHub Actions saves me time and removes the manual upload step when I want to release a new version. In this post I show the workflow I use in production for my little games: push a version tag, let GitHub Actions build the project, and push it to itch.io with &lt;a href=&#34;https://itch.io/docs/butler/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Butler&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-automate-itchio-deployment&#34;&gt;Why automate itch.io deployment&lt;/h2&gt;&#xA;&lt;p&gt;The biggest benefit is consistency. The same workflow runs every time I push a version tag, so the build that GitHub creates is also the build that ends up on itch.io. I do not need to build locally, zip files by hand, or remember the exact butler command. Separating the build and publish steps also makes it easy to see whether a failure happened during the build or during the upload.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatic Imports</title>
      <link>https://timmykokke.com/blog/2026/2026-04-01-automatic-imports/</link>
      <pubDate>Wed, 01 Apr 2026 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2026/2026-04-01-automatic-imports/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I keep running into the same problem in almost every game I build, especially when the project gets a bit bigger. Once I have a few components, systems, and helper modules, my main file turns into a long wall of imports. Then I add one extra file, forget one import, and lose time debugging something silly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;let-vite-do-the-work&#34;&gt;Let Vite Do The Work&lt;/h2&gt;&#xA;&lt;p&gt;I recently (finally) switched to &lt;a href=&#34;https://vite.dev/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Vite&#xD;&#xA;  &lt;/a&gt;. One small feature made my life much easier right away: automatic imports with glob patterns. Instead of manually importing every file, I can tell Vite to load whole groups based on naming.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatic Font Parsing for A-Frame</title>
      <link>https://timmykokke.com/blog/2026/2026-03-30-aframe-font-asset/</link>
      <pubDate>Mon, 30 Mar 2026 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2026/2026-03-30-aframe-font-asset/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;When I work with text in A-Frame, the most annoying part usually is not the &lt;code&gt;text&lt;/code&gt; component itself. The annoying part is getting a font into the format that A-Frame expects. Most fonts I have around are normal TTF or OTF files, and I don&amp;rsquo;t want to manually convert them every time I start a new WebXR prototype.&lt;/p&gt;&#xA;&lt;p&gt;To keep that process simple, I use PixiJS AssetPack to automatically convert those font files into an SDF font asset during my asset build step. That way I can keep working with regular font files in my project and let the tooling handle the conversion for me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started in Game Development</title>
      <link>https://timmykokke.com/blog/2026/2026-03-23-getting-started/</link>
      <pubDate>Mon, 23 Mar 2026 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2026/2026-03-23-getting-started/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;When I gave talks at conferences and while speaking with people at meetups, I get sometimes asked how to get started as&#xA;a game developer. Even people that straight out ask how to get as good as I am. First, I think this is really overrating&#xA;me, as I don’t consider myself a particularly good game developer, but I guess I earned my stripes and probably suffer&#xA;from some imposter syndrome. My first answer, a bit jokingly, is to just start and do it for 25 years. Which is actually&#xA;the truth. The only way to get good at anything is to do it. Practice it. The weird thing is that with software and game&#xA;development, people expect to somehow watch a few videos and be good at it. With learning anything, you need to start&#xA;small and practice. Personally, I won’t get into a plane when the pilot told me he started a couple of weeks ago and&#xA;watched a few videos, so we will be fine as he knows what the buttons do. You can’t learn from just watching a video or&#xA;just reading some texts. You’ll have to actively do it. No matter the skill. Playing the guitar, juggling, flying a&#xA;plane or developing a game.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OSS LLM Model Name Codes Explained</title>
      <link>https://timmykokke.com/blog/2025/2025-12-12-llm-codes/</link>
      <pubDate>Fri, 12 Dec 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-12-12-llm-codes/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever looked into working with open-source LLMs in tools like &lt;a href=&#34;https://lmstudio.ai/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    LM Studio&#xD;&#xA;  &lt;/a&gt;, then you&amp;rsquo;ve probably seen model names like &lt;code&gt;Qwen3-14B-Claude-Sonnet-4.5-Reasoning-Distill-GGUF&lt;/code&gt; or &lt;code&gt;Llama-3.1-8B-GPT-4-CodeInstruct-bnb-4bit&lt;/code&gt;. At first you notice the well-known names in there, like &amp;lsquo;Claude-Sonnet&amp;rsquo; or &amp;lsquo;GPT-4&amp;rsquo;, but then these names start to look like almost random words, codes and numbers. But they actually follow a logical structure that reveals a lot about the model&amp;rsquo;s architecture, training method, and intended use. To make it a bit easier to remember this myself I wrote it down in this blogpost.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Closing the MVP Chapter</title>
      <link>https://timmykokke.com/blog/2025/2025-07-12-closing-mvp-chapter/</link>
      <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-07-12-closing-mvp-chapter/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;After (almost) 16 incredible years, my journey as a Microsoft MVP has come to an end. It&amp;rsquo;s a moment I knew might come someday, but it still feels a bit surreal to actually write these words.&lt;/p&gt;&#xA;&lt;p&gt;My MVP journey began back in 2009, during the early years of Silverlight and HTML5. I spent countless late nights experimenting and exploring how I could bring rich graphics and interactive experiences to browsers. Expression Blend and Silverlight were my playground, and I loved sharing that enthusiasm through writing and speaking. I&amp;rsquo;m still proud that my first tutorials are still online (useless, but they&amp;rsquo;re there). For example one on how to transform a button to a nice looking glass orb using Expression Blend and Xaml.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why WebXR</title>
      <link>https://timmykokke.com/blog/2025/2025-06-14-why-webxr/</link>
      <pubDate>Sat, 14 Jun 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-06-14-why-webxr/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been working with WebXR for quite some time now, and there&amp;rsquo;s something that&amp;rsquo;s been bothering me. Whether I&amp;rsquo;m talking to someone about WebXR, reading comments on Reddit or X, or checking out news articles, people always tend to compare it to titles like &lt;em&gt;Half-Life: Alyx&lt;/em&gt; or &lt;em&gt;Beat Saber&lt;/em&gt;. And while those are fantastic games, this comparison completely misses what makes WebXR special.&lt;/p&gt;&#xA;&lt;p&gt;I think it&amp;rsquo;s time we talk more about what WebXR really is and where it shines. Because I believe WebXR isn&amp;rsquo;t trying to replace AAA native VR — it&amp;rsquo;s creating its own unique space, and that space is incredibly exciting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smooth Camera Follow</title>
      <link>https://timmykokke.com/blog/2025/2025-04-30-player-follow/</link>
      <pubDate>Wed, 30 Apr 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-04-30-player-follow/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In this short tutorial, I&amp;rsquo;ll show you how I created a smooth camera follow component for my &lt;a href=&#34;https://sorskoot.itch.io/equilibrium&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev.js 2025 jam entry&#xD;&#xA;  &lt;/a&gt; I made &lt;a href=&#34;https://wonderlandengine.com/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    with Wonderland Engine&#xD;&#xA;  &lt;/a&gt;. This component smoothly moves the camera to follow the player character, keeping a consistent distance and height offset. I used it specifically in a platformer game, so the camera angle is limited to one direction. You might want to adjust it if you&amp;rsquo;re using it in a different type of game or need more flexibility.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loading Json</title>
      <link>https://timmykokke.com/blog/2025/2025-04-28-loading-json/</link>
      <pubDate>Mon, 28 Apr 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-04-28-loading-json/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;When I&amp;rsquo;m &lt;a href=&#34;https://timmykokke.com/#games&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    developing my games&#xD;&#xA;  &lt;/a&gt; with &lt;a href=&#34;https://wonderlandengine.com/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Wonderland Engine&#xD;&#xA;  &lt;/a&gt;, I often need to load external data like level configurations or game settings from files at runtime. In this short tutorial, I&amp;rsquo;ll show you a simple and effective way to load JSON files directly within your Wonderland components.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-a-json-loader-component&#34;&gt;Create a JSON Loader Component&lt;/h2&gt;&#xA;&lt;p&gt;First, I create a new component class that inherits from Wonderland Engine&amp;rsquo;s &lt;code&gt;Component&lt;/code&gt; class. This component will handle fetching and parsing JSON data:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Supercharging Game Development with GitHub Copilot</title>
      <link>https://timmykokke.com/blog/2025/2025-03-31-gamedev-with-copilot/</link>
      <pubDate>Mon, 31 Mar 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-03-31-gamedev-with-copilot/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Over the past year, AI-powered development tools have completely transformed how I build games. GitHub Copilot has become an essential part of my workflow when developing WebXR games with Wonderland Engine. Today, I want to share how I leverage Copilot to streamline my game development process and some practical tips to make it work better for your specific needs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-i-use-copilot-for-game-development&#34;&gt;How I Use Copilot for Game Development&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-scaffolding-components-quickly&#34;&gt;1. Scaffolding Components Quickly&lt;/h3&gt;&#xA;&lt;p&gt;One of my favorite uses for Copilot is quickly generating Wonderland Engine component scaffolding with basic logic. While it&amp;rsquo;s not always perfect (and sometimes creates completely incorrect code), it&amp;rsquo;s often significantly faster than writing everything manually. For example, when I need a new physics component, I can describe what I want, and Copilot will generate a starting point.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Vibecoding Illusion</title>
      <link>https://timmykokke.com/blog/2025/2025-03-25-vibe-coding/</link>
      <pubDate>Tue, 25 Mar 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-03-25-vibe-coding/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve all seen the trend emerging in the development community. This has me both fascinated and concerned. They call it &amp;ldquo;vibecoding&amp;rdquo; - this idea that AI can now handle all the coding while developers just vibe and provide occasional prompts. While I appreciate a good meme as much as anyone, this concept misrepresents what professional development actually involves.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vibecoding-misconception&#34;&gt;The Vibecoding Misconception&lt;/h2&gt;&#xA;&lt;p&gt;Let me be clear - I&amp;rsquo;m not against AI tools in development. I use GitHub Copilot and my own Rosie every single day, and it genuinely makes me more productive. The autocompletion features, snippet suggestions, and ability to transform natural language into code templates save me significant time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic Character Movement</title>
      <link>https://timmykokke.com/blog/2025/2025-03-04-wle-character-movement/</link>
      <pubDate>Tue, 04 Mar 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-03-04-wle-character-movement/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we will explore how to create a simple character movement system in Wonderland Engine. This will include setting up basic movement, adding animations, and switching between different states. The complete example project can be found at the &lt;a href=&#34;https://github.com/sorskoot/BasicCharacterMovement&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GitHub Repository&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Inspiration for this tutorial came from &lt;a href=&#34;https://www.youtube.com/@CodeMonkeyUnity&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    CodeMonkey&#xD;&#xA;  &lt;/a&gt;&amp;rsquo;s great tutorials for Unity. Let&amp;rsquo;s get started!&lt;/p&gt;&#xA;&lt;h4 id=&#34;setting-up-the-scene&#34;&gt;Setting Up the Scene&lt;/h4&gt;&#xA;&lt;p&gt;First, let&amp;rsquo;s set up our scene. For this demo I&amp;rsquo;ve used the Hooded Rogue from the &lt;a href=&#34;https://kaylousberg.itch.io/kaykit-adventurers&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Adventurers pack&#xD;&#xA;  &lt;/a&gt; from KayKit. This comes with various animation we can use. I just placed this in the assets folder, draged/dropped the character into the editor to a &lt;code&gt;Player&lt;/code&gt; object and set up the materials. I also added a couple of tiles for the character to walk on. These do nothing, and are only there as a visual. For this tutorial I&amp;rsquo;ll assume you know how to do these things. Let me know in the comments if anyone needs help with that, I&amp;rsquo;ll gladly do a tutorial specifically on that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Singletons in Wonderland Engine</title>
      <link>https://timmykokke.com/blog/2025/2025-02-14-wle-singletons/</link>
      <pubDate>Fri, 14 Feb 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-02-14-wle-singletons/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Singletons are a common design pattern used to make a class only have one instance and provide an easy point of access to it. In game development, this can be particularly useful for managing game states, configurations, or other resources that need to be accessed throughout. This tutorial will guide you through creating a singleton component for use in Wonderland Engine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-singleton&#34;&gt;What is a Singleton?&lt;/h2&gt;&#xA;&lt;p&gt;A Singleton is a design pattern that restricts the instantiation of a class to one single instance. This single instance is then shared across the game, providing a global point of access to it. This can be useful for managing shared resources or maintaining a consistent state across your game&amp;rsquo;s codebase.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Demystifying Event Handling in Wonderland Engine</title>
      <link>https://timmykokke.com/blog/2025/2025-01-23-wonderlandevents/</link>
      <pubDate>Thu, 23 Jan 2025 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2025/2025-01-23-wonderlandevents/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, I&amp;rsquo;m going to walk you through how to work with event handlers using the &lt;code&gt;Emitter&lt;/code&gt; class in Wonderland Engine, specifically focusing on how to add parameters. As someone who works extensively with Wonderland Engine, I found this to be a somewhat unclear topic, so I believe it will be helpful for others as well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-emitter-class&#34;&gt;The Emitter Class&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;Emitter&lt;/code&gt; class in Wonderland Engine allows you to register listeners that will get notified when an event occurs. A key feature of the &lt;code&gt;Emitter&lt;/code&gt; class is its ability to handle parameters. The generic type &lt;code&gt;T&lt;/code&gt; for the &lt;code&gt;Emitter&lt;/code&gt; is an array of types, meaning you can pass multiple arguments to the listeners.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eliza Effect</title>
      <link>https://timmykokke.com/blog/2024/2024-12-10-eliza-effect/</link>
      <pubDate>Tue, 10 Dec 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-12-10-eliza-effect/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I recently learned about a fascinating phenomenon around AI called the &lt;strong&gt;Eliza effect&lt;/strong&gt;. This effects highlights our tendency to attribute more understanding or intelligence to AI systems than they really have. The effect reflects our natural behavior to see human-like qualities in machines, despite their underlying simplicity.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-is-it-called-the-eliza-effect&#34;&gt;Why is it called the Eliza Effect?&lt;/h2&gt;&#xA;&lt;p&gt;The term &amp;ldquo;Eliza effect&amp;rdquo; originates from &lt;a href=&#34;https://en.wikipedia.org/wiki/ELIZA&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    ELIZA&#xD;&#xA;  &lt;/a&gt;, a pioneering natural language processing program developed in the mid-1960s by Joseph Weizenbaum at MIT. ELIZA was crafted to simulate conversation by employing pattern matching and substitution techniques, famously mimicking a Rogerian psychotherapist. Although ELIZA lacked true comprehension, many users attributed a human-like understanding to the program, engaging emotionally and sometimes confiding in it as if it were a real therapist. This reaction underscores how easily we can be deceived into overestimating the cognitive capabilities of machines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Demystifying Blend Modes</title>
      <link>https://timmykokke.com/blog/2024/2024-10-10-gl-blendmodes/</link>
      <pubDate>Thu, 17 Oct 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-10-10-gl-blendmodes/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Understanding GL blend modes can be challenging, especially when dealing with visual effects like smoke or fire in your projects. Today I (finally) want to break down these blend modes, focusing on how they work in the pipeline settings of Wonderland Engine, without diving into coding specifics or getting too technical.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-gl-blend-modes&#34;&gt;What are GL Blend Modes?&lt;/h2&gt;&#xA;&lt;p&gt;Blend modes in graphics are ways to combine two images (or colors) to achieve various visual effects. These modes manipulate how the source (your object) and destination (what’s already on the screen) colors blend. In Wonderland Engine you can configure the blending modes in the pipeline settings. You&amp;rsquo;ll need to do this when you need transparent materials or to achieve certain particle effects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Discriminating Union Types In Typescript</title>
      <link>https://timmykokke.com/blog/2024/2024-10-05-discriminating-union-types-in-typescript/</link>
      <pubDate>Tue, 08 Oct 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-10-05-discriminating-union-types-in-typescript/</guid>
      <description>&lt;p&gt;Hello Coders!👾&lt;/p&gt;&#xA;&lt;p&gt;Recently I&amp;rsquo;ve been working on porting an ancient Unity game to the Wonderland Engine, and it&amp;rsquo;s been an interesting process to rework the game’s features to fit into a new environment.&lt;/p&gt;&#xA;&lt;p&gt;During this port, I ran into Unity’s way of handling two specific types of properties in particle systems: Min/Max Gradients and Min/Max Curves. In Unity, you can choose the type of MinMaxCurve or GradientMode you want from a dropdown, and the editor adjusts the properties accordingly. While this setup works fine in Unity’s editor, the underlying logic is also managed by the editor, and the type itself includes all different variations of properties. Moving to the Wonderland Engine gave me a chance to rethink and possibly improve this implementation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On The Fly Meshes</title>
      <link>https://timmykokke.com/blog/2024/2024-10-02-on-the-fly-meshes/</link>
      <pubDate>Wed, 02 Oct 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-10-02-on-the-fly-meshes/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I was working on a project in Wonderland Engine today and wanted to create a mesh at runtime. It&amp;rsquo;s a very powerful feature, but might seem a bit complicated at first. So, let me walk you through a simple example of creating a mesh. Generating geometry on the fly is incredibly useful for all kinds of effects.&lt;/p&gt;&#xA;&lt;p&gt;Here’s the code and a breakdown of what it does:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Component&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Material&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;MeshAttribute&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;MeshComponent&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;MeshIndexType&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;@wonderlandengine/api&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; {&lt;span style=&#34;color:#a6e22e&#34;&gt;property&lt;/span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;@wonderlandengine/api/decorators.js&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OnTheFlyMeshTest&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Component&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TypeName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;on-the-fly-mesh-test&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;@property&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;material&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;material?&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;Material&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_meshComp&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;MeshComponent&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;start() {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_meshComp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addComponent&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;MeshComponent&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;vertexCount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;indexData&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Uint16Array&lt;/span&gt;([&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;meshes&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;indexData&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;vertexCount&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;indexType&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;MeshIndexType.UnsignedInt&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;attribute&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;MeshAttribute&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Position&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, [&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, [&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;positions&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;attribute&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;MeshAttribute&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TextureCoordinate&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;texCoords&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;attribute&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;MeshAttribute&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Normal&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;normals&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_meshComp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mesh&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_meshComp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;material&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;material&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-by-step-breakdown&#34;&gt;Step-by-Step Breakdown&lt;/h3&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s review the code in the &lt;code&gt;start&lt;/code&gt; method, since the rest is just there for completeness.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Take on LLMs for Code</title>
      <link>https://timmykokke.com/blog/2024/2024-07-31-using-llms-for-coding/</link>
      <pubDate>Wed, 31 Jul 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-07-31-using-llms-for-coding/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;The conversation around Large Language Models and their capability (or incapability) in writing quality code has been heating up. As someone deeply embedded in the coding community and as someone using LLMs (Rosie) on a day to day basis, I want to share my perspective on this topic. Recently, I came across a couple of tweets from &lt;a href=&#34;https://x.com/burkov&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Andriy Burkov (@burkov)&#xD;&#xA;  &lt;/a&gt;, who compares the rejection of LLMs by some coders to past technological shifts. He argues that resistance to LLMs often comes from outdated experiences or an inability to communicate effectively through code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualizing Rosie using Wonderland Engine</title>
      <link>https://timmykokke.com/blog/2024/2024-06-23-rosie-visualization/</link>
      <pubDate>Thu, 27 Jun 2024 01:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-06-23-rosie-visualization/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m excited to talk about the journey of bringing Rosie, my AI assistant, to life through the power of 3D visualization. This project has been a blend of technology and creativity, featuring tools like AvatarSDK, Blender, and the Wonderland Engine, along with the Azure Speech SDK. The path from a simple idea to a detailed 3D avatar was not without challenges, but each step brought us closer to creating something truly special.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preventing Burnout as a Game Developer</title>
      <link>https://timmykokke.com/blog/2024/2024-05-21-burnout-as-gamedev/</link>
      <pubDate>Tue, 21 May 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-05-21-burnout-as-gamedev/</guid>
      <description>&lt;p class=&#34;subtitle&#34;&gt;&#xD;&#xA;    Balancing Passion and Well-being&#xD;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Game development is an incredibly rewarding field, merging creativity, technology, and storytelling into one exciting package. However, it’s also a demanding career that can lead to burnout if not managed properly. As a game developer and content creator who also enjoys a fulfilling personal life, I’ve learned to balance my work and life effectively.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recognize-the-signs-of-burnout&#34;&gt;Recognize the Signs of Burnout&lt;/h2&gt;&#xA;&lt;p&gt;Being able to identify the early signs of burnout is crucial for any professional, especially in the demanding world of game development. Burnout can manifest in several ways, and recognizing these symptoms can help you take action before they escalate. Here are some key signs to watch out for:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Road to AGI</title>
      <link>https://timmykokke.com/blog/2024/2024-05-08-chatgpt-agi/</link>
      <pubDate>Wed, 08 May 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-05-08-chatgpt-agi/</guid>
      <description>&lt;p&gt;&lt;em&gt;Why ChatGPT May Not Get Us There&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Over the past few year we&amp;rsquo;ve seen a huge development in artificial intelligence. One of the most notable developments is ChatGPT, the language model that appears to understand and generate human-like text. It&amp;rsquo;s a great piece of engineering, no doubt, but is it the gateway to achieving Artificial General Intelligence? Is it even intelligent?&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-chatgpt-to-agi&#34;&gt;From ChatGPT to AGI&lt;/h2&gt;&#xA;&lt;p&gt;Artificial General Intelligence, or maybe better known as AGI, represents highly autonomous systems that are capable of outperforming humans at most economically valuable work. It&amp;rsquo;s the holy grail of AI, the point where machines can truly understand, learn, and apply knowledge across a wide range of tasks. The key word here is &amp;lsquo;understand&amp;rsquo;. And that&amp;rsquo;s where the road might get a bit rocky for ChatGPT. At its core, ChatGPT is a prediction machine, a statistical model. It uses complicated vector algebra and other mathematical techniques to predict what comes next in a sequence of words. It does not actually &amp;lsquo;understand&amp;rsquo; the text in the way humans do. It&amp;rsquo;s like a parrot that&amp;rsquo;s been trained to mimic human speech. It can sound incredibly convincing, but does the parrot really understand what it&amp;rsquo;s saying? Probably not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Jams</title>
      <link>https://timmykokke.com/blog/2024/2024-04-30-gamejam/</link>
      <pubDate>Tue, 30 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-04-30-gamejam/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Today I&amp;rsquo;d like to talk about &lt;em&gt;Game Jams&lt;/em&gt;. Events where programmers, artists, and others come together to create small games, can be a thrilling and rewarding experience. Not only are they a fun way to improve your skills, but they also offer the chance to meet new people, collaborate, and test out creative ideas in a dynamic environment. I&amp;rsquo;ve participated in a couple of jams. Most of &lt;a href=&#34;https://timmykokke.com/#games&#34;&gt;&#xD;&#xA;    my games&#xD;&#xA;  &lt;/a&gt; started out as a jam entry. But recently I teamed up with a couple of colleagues for the gamedev.js 2024 game jam. Our entry, &lt;em&gt;&lt;a href=&#34;https://wonderlandengine.itch.io/power-fruits&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Power Fruits&#xD;&#xA;  &lt;/a&gt;&lt;/em&gt; is a &amp;ldquo;Blox Fruit&amp;rdquo;-inspired third-person brawler where collecting powerful fruits is your key to success. I personally don&amp;rsquo;t do the really short game jame of a weekend or even a day. With family and work, this takes too big of a chunk out of my time. Luckily there are plenty of jams that span 10 days to even a month.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Escape from tutorial hell</title>
      <link>https://timmykokke.com/blog/2024/2024-03-26-escape-tutorial-hell/</link>
      <pubDate>Tue, 26 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-03-26-escape-tutorial-hell/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In the journey of learning to develop games, many of us fall into a seductive trap known as &lt;em&gt;&amp;rsquo;tutorial hell&amp;rsquo;&lt;/em&gt;. It&amp;rsquo;s a place where the comfort of guided instructions creates an illusion of progress, but in reality, it can hinder growth and the development of problem-solving skills. Tutorial hell is characterized by an endless cycle of hopping from one tutorial to another without ever leaping into building your own independent projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Responsible AI</title>
      <link>https://timmykokke.com/blog/2024/2024-03-14-responsibleai/</link>
      <pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-03-14-responsibleai/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Artificial Intelligence is no longer a futuristic concept. It has become a part of our daily developer lives (well, for me at least). From voice assistants to CoPilots all over the place, AI is rapidly evolving and expanding its horizons. With this growth comes an awesome playground for tech enthusiasts, where the art of &lt;em&gt;&amp;lsquo;hacking&amp;rsquo;&lt;/em&gt;, or creative problem-solving, is celebrated and encouraged. But, in the middle of all this excitement, we must not overlook an essential aspect of technological progression: Responsibility.&lt;/p&gt;</description>
    </item>
    <item>
      <title>80-20 rule in game development</title>
      <link>https://timmykokke.com/blog/2024/2024-03-05-80-20-rule/</link>
      <pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-03-05-80-20-rule/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Have you ever heard of the &lt;strong&gt;80-20 Rule&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;p&gt;This principle tells us that for many things, 80% of our results come from just 20% of our efforts. This isn&amp;rsquo;t just theory; it applies to our work in game development as well.&lt;/p&gt;&#xA;&lt;p&gt;In my experience, when we focus on the key 20% of our game development tasks—the parts that have the biggest impact—we can make our workflow much more efficient. This leads to better quality games and smarter use of our time and resources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Different types of LLM models</title>
      <link>https://timmykokke.com/blog/2024/2024-02-27-llms/</link>
      <pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-27-llms/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In today&amp;rsquo;s post, I hope to demystify Large Language Models and break down their functionality a bit without any confusing terminology (I hope) since it got me confused for a while. And I still have some questions I want to get answered in this post.&lt;/p&gt;&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2024/02/AITreeOfKnowledge.jpg&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2024/02/AITreeOfKnowledge.jpg&#34; title=&#34;The AI Tree of Knowledge&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Imagine that instead of spelling out words letter by letter, like &amp;ldquo;C-O-D-E&amp;rdquo; for &amp;ldquo;code,&amp;rdquo; LLMs use extensive lists of numbers to capture the essence of words. So, &amp;ldquo;code&amp;rdquo; could be represented by a sequence such as [0.0074, 0.0030, -0.0105, &amp;hellip;]. These number sequences, known as word vectors, are particularly adept at conveying the nuanced relationships between words. And, because of these vectors they &amp;ldquo;know&amp;rdquo; what words are related, like &lt;code&gt;king&lt;/code&gt; and &lt;code&gt;queen&lt;/code&gt; for example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding Knowledge to Rosie</title>
      <link>https://timmykokke.com/blog/2024/2024-02-20-rosie-embeddings/</link>
      <pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-20-rosie-embeddings/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;In the ongoing series about my AI Assistant Rosie, I&amp;rsquo;d like to shed some light on how I gave her access to accurate and up-to-date information about topics I often use.&lt;/p&gt;&#xA;&lt;p&gt;Equipped with Azure AI Search and Azure OpenAI Services, I gave Rosie access to the latest information on WebXR (mainly Wonderland Engine), parts of Azure, Semantic Kernel, and Web Development. To provide me with not just answers, but the right answers, exactly when needed. By embedding data and adding it to Azure to be semantically searched in Azure AI Search (formally Azure Cognitive Search) she has less chance of &amp;lsquo;hallucinating&amp;rsquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Semantic Kernel in VSCode</title>
      <link>https://timmykokke.com/blog/2024/2024-02-18-prompt-development/</link>
      <pubDate>Sun, 18 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-18-prompt-development/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Remember when I mentioned &lt;a href=&#34;https://timmykokke.com/blog/2024/2024-02-13-rosie-and-semantic-kernel/&#34;&gt;&#xD;&#xA;    Rosie and how much it relies on Semantic Kernel&#xD;&#xA;  &lt;/a&gt;? Well, I&amp;rsquo;ve been diving deeper into this world and guess what? I stumbled upon a fantastic tool that&amp;rsquo;s been a game-changer for me – the Semantic Kernel VS Code extension. A great tool for testing and debugging prompts used within SK.&lt;/p&gt;&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2024/02/prompts-design.jpeg&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2024/02/prompts-design.jpeg&#34; title=&#34;AI engineer designing prompts in augmented reality&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-the-workspace&#34;&gt;Setting Up the Workspace&lt;/h2&gt;&#xA;&lt;p&gt;First things first, getting the Semantic Kernel extension up and running in Visual Studio Code was easy. I just had to pop open the Extensions view (you know, that little square icon on the sidebar), type in &amp;ldquo;Semantic Kernel Tools&amp;rdquo;, and hit install. Voilà! I was ready to roll. You can also find the &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=ms-semantic-kernel.semantic-kernel&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Semantic Kernel extension&#xD;&#xA;  &lt;/a&gt; online if you prefer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rosie and Azure OpenAI</title>
      <link>https://timmykokke.com/blog/2024/2024-02-17-rosie-and-chatgpt/</link>
      <pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-17-rosie-and-chatgpt/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Today I&amp;rsquo;d like to dive a little deeper into the inner workings of my assistant Rosie. She&amp;rsquo;s not just any virtual assistant; she&amp;rsquo;s an intelligent, creative, and downright helpful entity that&amp;rsquo;s been helping me on a daily basis. And yes, of course, this blog post was written with the help of Rosie. &lt;em&gt;(not by&amp;hellip;, with 😉)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now. My main goal of this blog post is not to show off Rosie (ok, all little), but to show that it&amp;rsquo;s not really hard to build your own integration with Azure OpenAI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rosie and Semantic Kernel</title>
      <link>https://timmykokke.com/blog/2024/2024-02-13-rosie-and-semantic-kernel/</link>
      <pubDate>Tue, 13 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-13-rosie-and-semantic-kernel/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been itching to share some updates about my AI assistant, &lt;a href=&#34;https://timmykokke.com/blog/2023/2023-02-16-rosie/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Rosie&#xD;&#xA;  &lt;/a&gt;. She&amp;rsquo;s been my silent partner for quite some time, and I&amp;rsquo;ve been tweaking her abilities to make her even more helpful in my daily grind. One of the coolest upgrades I&amp;rsquo;ve made is getting her to chat with Azure Functions and something called &lt;a href=&#34;https://learn.microsoft.com/en-us/semantic-kernel/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Semantic Kernel&#xD;&#xA;  &lt;/a&gt;. Let&amp;rsquo;s unwrap this Semantic Kernel today, so we can get our hands dirty with some code in the next posts!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quest Passthrough</title>
      <link>https://timmykokke.com/blog/2024/2024-02-07-passthrough/</link>
      <pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-07-passthrough/</guid>
      <description>&lt;p&gt;Hello Coders!👾&lt;/p&gt;&#xA;&lt;p&gt;The advancements in AR technology have opened up new possibilities for mixed reality experiences, and today, I&amp;rsquo;d like to share insights on a feature that stands out in this evolving space. The introduction of AR plane and mesh detection on the Meta Quest 3, particularly with the advent of color passthrough on Quest 3 and Meta Quest Pro (and maybe others, I have not tested those), marks a significant leap in how we perceive and interact with our environment. We&amp;rsquo;re now able to harness these capabilities through Wonderland Engine as well, setting the stage for innovative AR/Mixed Reality applications that are not just limited to games, but extend to various realms of immersive experiences. Let&amp;rsquo;s explore how these technologies are shaping the future of virtual interaction. First I will explain how everything works on the Quest. Then I&amp;rsquo;ll show you how you can set this up in Wonderland Engine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wonderland Component Life Cycle</title>
      <link>https://timmykokke.com/blog/2024/2024-02-05-componentlifecycle/</link>
      <pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-02-05-componentlifecycle/</guid>
      <description>&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;Today, I want to talk about something that often puzzles people: the lifecycle of a component. You know, those moments when you&amp;rsquo;re left scratching your head, wondering when and in what order functions like &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;onActivate&lt;/code&gt; are being called. 🤔&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve seen plenty of documents from Unity and other platforms, but I thought it was high time we had one for Wonderland. So, let&amp;rsquo;s dive right in!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-basics&#34;&gt;The Basics&lt;/h2&gt;&#xA;&lt;p&gt;First, let&amp;rsquo;s have a look at all the steps in the lifecycle of a Wonderland component. These are all the different places you can hook into. This doesn&amp;rsquo;t mean you have to, but you could.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wonderland Components: JS vs TS</title>
      <link>https://timmykokke.com/blog/2024/2024-01-28-componentjsvsts/</link>
      <pubDate>Mon, 29 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2024/2024-01-28-componentjsvsts/</guid>
      <description>&lt;p&gt;Hello Coders! 👾 Today, I want to chat about something that&amp;rsquo;s been asked me quite a few times. &lt;strong&gt;What is the difference between JavaScript and TypeScript components in Wonderland Engine?&lt;/strong&gt; In the past, I swore by JavaScript, but last year I switched over and I have to say it&amp;rsquo;s my preferred way of writing components now.&lt;/p&gt;&#xA;&lt;p&gt;But I hear you think, &amp;ldquo;I already have all my code in JavaScript, and I don&amp;rsquo;t want to write everything again and I don&amp;rsquo;t even know TypeScript&amp;rdquo;. Well. Getting started is very easy and you don&amp;rsquo;t have to rewrite your code. Because Wonderland Engine is using &lt;a href=&#34;https://esbuild.github.io/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    ESBuild&#xD;&#xA;  &lt;/a&gt; by default, you can use both at the same time! But to get the most out of it, I would suggest adding a &lt;code&gt;tsconfig&lt;/code&gt; file (I&amp;rsquo;ll add a basic one at the end to get you going 😉).&lt;/p&gt;</description>
    </item>
    <item>
      <title>HMD.Link bookmarklet</title>
      <link>https://timmykokke.com/blog/2023/2023-10-29-hmd.link-bookmarklet/</link>
      <pubDate>Sun, 29 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-10-29-hmd.link-bookmarklet/</guid>
      <description>&lt;h1 id=&#34;lets-make-url-sharing-with-hmdlink-even-easier&#34;&gt;Let&amp;rsquo;s make URL Sharing with hmd.link even easier!&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 👾 I&amp;rsquo;m super excited to let you in on a nifty trick that I&amp;rsquo;ve conjured. It&amp;rsquo;s all about sprinkling a little convenience on those devs who often find themselves juggling URLs across devices. Imagine a bookmarklet that tacks on &amp;ldquo;&lt;a href=&#34;https://hmd.link?%22&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    https://hmd.link?&#34;&#xD;&#xA;  &lt;/a&gt; to the front of any URL, enabling swift sharing via hmd.link. Cool, right?&lt;/p&gt;&#xA;&lt;h2 id=&#34;bookmarklet-whats-that-&#34;&gt;Bookmarklet? What&amp;rsquo;s That? 🤔&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s break it down. A bookmarklet is basically a &amp;lsquo;one-click&amp;rsquo; wizardry tool saved as a URL bookmark in your web browser. But instead of whisking you away to a website, it performs an action using JavaScript when you give it a click.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JS13KGames Devlog 1</title>
      <link>https://timmykokke.com/blog/2023/2023-09-04-js13kgames-devlog-1/</link>
      <pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-09-04-js13kgames-devlog-1/</guid>
      <description>&lt;h1 id=&#34;castle-defender-vr&#34;&gt;Castle Defender VR&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 👾 Let&amp;rsquo;s dive into the nitty-gritty of my latest brainchild, a WebXR game that&amp;rsquo;s been keeping me on my toes. It goes by the name &amp;ldquo;Castle Defender VR&amp;rdquo;. The game will be my entry for this years &lt;a href=&#34;https://js13kgames.com&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    JS13KGames jam&#xD;&#xA;  &lt;/a&gt;. The theme this year is &amp;lsquo;13th Century&amp;rsquo;.&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2023/09/Snag_269037d7.png&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2023/09/Snag_269037d7.png&#34; title=&#34;Title Screen&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-creation-journey&#34;&gt;The Creation Journey&lt;/h1&gt;&#xA;&lt;p&gt;Choosing a theme for this game was quite challenging. A few options were considered, but ultimately, the theme of &amp;lsquo;bow and arrow&amp;rsquo; won out. This idea seemed perfect as it resonated well with the 13th-century setting. The aim would be simple yet entertaining - shooting waves of knights marching towards your castle. However, the decision to go ahead with this theme brought its own set of challenges.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Summer of code</title>
      <link>https://timmykokke.com/blog/2023/2023-07-16-summer-of-code/</link>
      <pubDate>Sun, 16 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-07-16-summer-of-code/</guid>
      <description>&lt;h2 id=&#34;my-summer-vacation-a-coders-retreat-&#34;&gt;My Summer Vacation: A Coders&amp;rsquo; Retreat 🏖️&lt;/h2&gt;&#xA;&lt;p&gt;Hello Coders! 👾&lt;/p&gt;&#xA;&lt;p&gt;While summer vacations are often seen as a time for chilling on sandy beaches, sipping tropical drinks, and soaking up some downtime, for me it&amp;rsquo;s the numero uno season to plunge into my favorite hobby - coding!&lt;/p&gt;&#xA;&lt;p&gt;Instead of just kicking back, I make use of this time to learn, grow, and code! That&amp;rsquo;s right. My summer vacation is all about coding. And I&amp;rsquo;m here to tell you why.&lt;/p&gt;</description>
    </item>
    <item>
      <title>7 Stages of AI</title>
      <link>https://timmykokke.com/blog/2023/2023-07-07-7-stagesofai/</link>
      <pubDate>Fri, 07 Jul 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-07-07-7-stagesofai/</guid>
      <description>&lt;h1 id=&#34;an-exciting-journey-from-coding-to-singularity-&#34;&gt;An Exciting Journey from Coding to Singularity 🚂&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 👾 Today, we&amp;rsquo;re hopping on a thrilling ride through the mesmerizing world of Artificial Intelligence. We&amp;rsquo;ll be exploring the seven stations of AI, starting from the comfy familiarity of rule-based systems and ending at the mysterious destination of AI singularity. Strap in for an exciting journey!&lt;/p&gt;&#xA;&lt;h2 id=&#34;station-1-the-good-old-rule-based-ai-systems-&#34;&gt;Station 1: The Good Old Rule-based AI Systems 🚦&lt;/h2&gt;&#xA;&lt;p&gt;Our journey through the world of artificial intelligence commences with the familiar and reliable rule-based AI systems. These are our first encounters with machine intelligence, akin to our baby steps into the coding realm. Rule-based AI systems work on a relatively simple yet effective premise - set rules and conditions, and your code adheres to them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MVP 2023</title>
      <link>https://timmykokke.com/blog/2023/2023-07-07-mvp-2023/</link>
      <pubDate>Fri, 07 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-07-07-mvp-2023/</guid>
      <description>&lt;h2 id=&#34;my-13th-microsoft-mvp-award&#34;&gt;My 13th Microsoft MVP Award&lt;/h2&gt;&#xA;&lt;p&gt;Hello Coders! 👾 I&amp;rsquo;m absolutely thrilled to announce that I&amp;rsquo;ve just bagged my 13th Microsoft MVP award. Yes, you read it right - 13th! It&amp;rsquo;s a moment of profound pride and joy for me, and I&amp;rsquo;m swimming in gratitude.&lt;/p&gt;&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2023/07/mvp.png&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2023/07/mvp.png&#34; title=&#34;MVP 2023&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-whats-a-microsoft-mvp-&#34;&gt;So, What&amp;rsquo;s a Microsoft MVP? 🤔&lt;/h2&gt;&#xA;&lt;p&gt;In case you&amp;rsquo;re scratching your head, wondering what a Microsoft MVP is, let me enlighten you. It&amp;rsquo;s a prestigious honor Microsoft give dedicated people who love to share their knowledge and experience in technology. These people are special kind of tech-nuts. It&amp;rsquo;s a recognition of our constant dedication to the community. Since the last year was rough for me professionally as well as personally, you can probably grasp how ecstatic I was when I received the notification congratulating me with the MVP award for the 13th time!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why WebXR</title>
      <link>https://timmykokke.com/blog/2023/2023-07-03-why-webxr/</link>
      <pubDate>Mon, 03 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-07-03-why-webxr/</guid>
      <description>&lt;h1 id=&#34;why-i-choose-webxr-over-native&#34;&gt;Why I Choose WebXR Over Native&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 👾 When it comes to developing immersive experiences, there are plenty of choices out there. But for me, there&amp;rsquo;s only one clear winner: WebXR. There&amp;rsquo;s something about WebXR that just speaks to my soul. In a world where a lot of people would opt for native app development, I choose WebXR for all my virtual and augmented reality projects. And today, I&amp;rsquo;m going to share with you all the reasons why I, personally, choose WebXR over native.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR Screen Fade in Wonderland</title>
      <link>https://timmykokke.com/blog/2023/2023-06-28-wlscreenfade/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-28-wlscreenfade/</guid>
      <description>&lt;p&gt;Hello Coders! 🎮 Today, I want to share with you an awesome component I&amp;rsquo;ve been working on for the Wonderland Engine. It&amp;rsquo;s a simple yet effective way to fade the screen to black and back in Virtual Reality, which can help prevent motion sickness when teleporting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-magic-behind-the-fade&#34;&gt;The Magic Behind the Fade&lt;/h2&gt;&#xA;&lt;p&gt;The magic behind this component actually lies in its use of a mesh that forms an inverted sphere around the player&amp;rsquo;s head. This sphere effectively blocks out the rest of the scene, creating a seamless transition when fading in and out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Composition Root in TypeScript</title>
      <link>https://timmykokke.com/blog/2023/2023-06-20-compositionroot-in-typescript/</link>
      <pubDate>Tue, 20 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-20-compositionroot-in-typescript/</guid>
      <description>&lt;p&gt;Hello Coders! 👾 Last time I wrote about &lt;a href=&#34;https://timmykokke.com/blog/2023-06-19-di-in-typescript/&#34;&gt;&#xD;&#xA;    Dependency Injection in TypeScript&#xD;&#xA;  &lt;/a&gt;. Todat I want to take this one step further and introduce you to &lt;em&gt;Composition Root&lt;/em&gt;. What exactly does it mean, and how can we use it effectively in our projects? I&amp;rsquo;ll show you how to implement it using the awesome &lt;code&gt;tsyringe&lt;/code&gt; library. Let&amp;rsquo;s dive in!&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-composition-root&#34;&gt;What is Composition Root?&lt;/h2&gt;&#xA;&lt;p&gt;In simple terms, Composition Root is a specific place in your app where you wire up all your dependencies. It&amp;rsquo;s like the conductor of an orchestra making sure every instrument plays the right notes at the right time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dependency Injection in TypeScript</title>
      <link>https://timmykokke.com/blog/2023/2023-06-19-di-in-typescript/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-19-di-in-typescript/</guid>
      <description>&lt;h2 id=&#34;dependency-injection-in-typescript-games&#34;&gt;Dependency Injection in TypeScript Games&lt;/h2&gt;&#xA;&lt;p&gt;Hello Coders! 👾 Today, I want to take you on small journey into the magical world of Dependency Injection (DI) in TypeScript games. I&amp;rsquo;m excited to learn how to use &lt;a href=&#34;https://github.com/microsoft/tsyringe&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Microsoft&amp;rsquo;s tsyringe&#xD;&#xA;  &lt;/a&gt; library to make my projects more efficient and easy to manage. So, let&amp;rsquo;s get started!&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-dependency-injection-&#34;&gt;What&amp;rsquo;s Dependency Injection? 🤷&lt;/h2&gt;&#xA;&lt;p&gt;First things first – what exactly is dependency injection? In simple terms, it&amp;rsquo;s a design pattern that makes our code more flexible, maintainable and testable by reducing direct dependencies between classes. And, it&amp;rsquo;s a way to achieve the Depency Inversion Principle, the &amp;lsquo;D&amp;rsquo; of the SOLID principles I talked about in my &lt;a href=&#34;https://timmykokke.com/blog/2023-06-16-solid-in-typescript/&#34;&gt;&#xD;&#xA;    previous blogpost&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SOLID in TypeScript</title>
      <link>https://timmykokke.com/blog/2023/2023-06-16-solid-in-typescript/</link>
      <pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-16-solid-in-typescript/</guid>
      <description>&lt;h2 id=&#34;solidifying-your-typescript-code&#34;&gt;SOLIDifying your TypeScript Code&lt;/h2&gt;&#xA;&lt;p&gt;Hello Coders! 🤖 Today, I want to share my experience applying the &lt;strong&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/SOLID&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    SOLID&#xD;&#xA;  &lt;/a&gt;&lt;/strong&gt; principles to TypeScript, specifically when designing games. And it&amp;rsquo;s crucial to ensure that our codebase stays clean and maintainable. I personally live by these 5 rules and I&amp;rsquo;ve been applying them to every aspect of my C# code for many years now. Since I&amp;rsquo;m diving deeper into TypeScript I thought it&amp;rsquo;s about time to see how we can apply the SOLID principles to that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Performance debugging with Spector.JS</title>
      <link>https://timmykokke.com/blog/2023/2023-06-06-spectorjs/</link>
      <pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-06-spectorjs/</guid>
      <description>&lt;h1 id=&#34;webxr-performance-debugging-with-spectorjs&#34;&gt;WebXR Performance debugging with Spector.JS&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 👩‍💻 Today, I want to talk about a tool I&amp;rsquo;ve been using for a while now. WebXR is revolutionizing the way we think about virtual and augmented reality in web applications, but it&amp;rsquo;s not without its challenges. And when it comes to performance optimization, there&amp;rsquo;s one tool that has caught my attention - Spector.JS. So buckle up as we embark on this exciting journey of dissecting and optimizing WebXR using Spector.JS!&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Game Development Tools</title>
      <link>https://timmykokke.com/blog/2023/2023-06-02-developmenttools/</link>
      <pubDate>Fri, 02 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-06-02-developmenttools/</guid>
      <description>&lt;h1 id=&#34;my-ultimate-list-&#34;&gt;My Ultimate List 🛠️&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 🎮 As a WebXR game developer, I&amp;rsquo;m always experimenting with different tools and software to improve my workflow and bring my ideas to life. I&amp;rsquo;ve received numerous questions about the software I use, so I thought it was about time to share my &lt;em&gt;ultimate list&lt;/em&gt; of tools with you all! Keep in mind a lot of tools are not free, but definitely worth it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR Game Design Principles</title>
      <link>https://timmykokke.com/blog/2023/2023-05-30-vr-game-design-principles/</link>
      <pubDate>Tue, 30 May 2023 12:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-30-vr-game-design-principles/</guid>
      <description>&lt;h1 id=&#34;vr-game-design-principles&#34;&gt;VR Game Design Principles&lt;/h1&gt;&#xA;&lt;h2 id=&#34;creating-engaging-and-immersive-gameplay-experiences-that-players-love&#34;&gt;Creating Engaging and Immersive Gameplay Experiences that players love&lt;/h2&gt;&#xA;&lt;p&gt;Hello Coders! 👩‍💻 Today, I want to share some design principles that are specifically useful when creating virtual reality games. VR has become more and more popular in recent years, literaly bringing a whole new level of immersion to gaming. But with that added dimension comes a unique set of challenges for game designers. So let&amp;rsquo;s dive into the key areas to consider when creating a captivating VR experience: spatial navigation, interaction mechanics, and comfort considerations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Final</title>
      <link>https://timmykokke.com/blog/2023/2023-05-29-gamedev.tvgamejam2023-final/</link>
      <pubDate>Mon, 29 May 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-29-gamedev.tvgamejam2023-final/</guid>
      <description>&lt;h1 id=&#34;devlog-day-9-life-at-pixel-farm&#34;&gt;Devlog Day 9: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;the-final-sprint-&#34;&gt;The final sprint 💨&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 I&amp;rsquo;m excited to share the final DevLog for my casual VR farming game, &amp;ldquo;Life at Pixel Farm,&amp;rdquo; which I&amp;rsquo;ve built for the GameDev_tv Game Jam. With just 26 seconds to spare before the deadline, I managed to submit my game (phew!). Earlier this week, I spent some time working on the Itch.io page, and it turned out great!&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 8</title>
      <link>https://timmykokke.com/blog/2023/2023-05-28-gamedev.tvgamejam2023-day8/</link>
      <pubDate>Sun, 28 May 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-28-gamedev.tvgamejam2023-day8/</guid>
      <description>&lt;h1 id=&#34;devlog-day-8-life-at-pixel-farm&#34;&gt;Devlog Day 8: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;fine-tune--polish-&#34;&gt;Fine-tune &amp;amp; Polish ✨&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Today, I&amp;rsquo;ll share my progress on Day 8 of developing a casual VR farming game for the &lt;a href=&#34;https://itch.io/jam/gamedevtv-jam-2023&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev․tv Game Jam&#xD;&#xA;  &lt;/a&gt;. The game is built with Unity and has a 2D aesthetic despite being in VR to follow the theme of the jam, &amp;ldquo;Life in 2 dimensions&amp;rdquo;. There&amp;rsquo;s just one problem - I miscalculated the duration of the jam! I initially thought it was running for 10 days, but the first day was only a few hours because it started in the evening. So, my planning was one day off. Fortunately, I had the main game loop done already, but I might not be able to implement all features I had planned. We&amp;rsquo;ll see.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tips for Crafting Prompts</title>
      <link>https://timmykokke.com/blog/2023/2023-05-28-tips-for-crafting-prompts/</link>
      <pubDate>Sun, 28 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-28-tips-for-crafting-prompts/</guid>
      <description>&lt;h1 id=&#34;the-art-of-crafting-prompts-for-stellar-ai-outputs-&#34;&gt;The Art of Crafting Prompts for Stellar AI Outputs 🌟&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 🤖 Today, I&amp;rsquo;m going to share my experience and tips on creating effective GPT prompts that can give you those great AI outputs you&amp;rsquo;ve always wanted. This is how I use them with my lovely AI Assistant Rosie in combination with &lt;a href=&#34;https://learn.microsoft.com/en-us/semantic-kernel/overview/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Semantic Kernel&#xD;&#xA;  &lt;/a&gt;. If you&amp;rsquo;ve been struggling to get the best results from your GPT models(ChatGPT, GPT-4 or even GPT-3), this post is for you. So, grab a cup of coffee (or tea) and let&amp;rsquo;s dive right in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 7</title>
      <link>https://timmykokke.com/blog/2023/2023-05-27-gamedev.tvgamejam2023-day7/</link>
      <pubDate>Sat, 27 May 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-27-gamedev.tvgamejam2023-day7/</guid>
      <description>&lt;h1 id=&#34;devlog-day-7-life-at-pixel-farm&#34;&gt;Devlog Day 7: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;game-loop-complete--more-immersion&#34;&gt;Game loop complete &amp;amp; more immersion&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Today, I&amp;rsquo;m bringing you the latest update from my journey in developing &amp;ldquo;Life at Pixel Farm&amp;rdquo; for the &lt;a href=&#34;https://itch.io/jam/gamedevtv-jam-2023&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev․tv Game Jam&#xD;&#xA;  &lt;/a&gt;. As a reminder, this is a casual VR game built with Unity and designed with a 2D aesthetic in line with the jam&amp;rsquo;s theme of &amp;ldquo;Life in 2 Dimensions&amp;rdquo;. Now, let&amp;rsquo;s dive into the exciting progress I made during Day 7 🌱&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 6</title>
      <link>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day6/</link>
      <pubDate>Fri, 26 May 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day6/</guid>
      <description>&lt;h1 id=&#34;devlog-day-6-life-at-pixel-farm&#34;&gt;Devlog Day 6: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;tilling-and-watering-&#34;&gt;Tilling and watering 💦&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Today is day 6 of building my casual VR farming game, &amp;ldquo;Life at Pixel Farm,&amp;rdquo; for the GameDev_tv Game Jam. I didn&amp;rsquo;t make a ton of progress today, but I did manage to tackle the day/night cycle and make some updates to the planting area. Let&amp;rsquo;s dive in!&lt;/p&gt;&#xA;&lt;h2 id=&#34;daynight-cycle-progress-&#34;&gt;Day/Night Cycle Progress 🌞🌜&lt;/h2&gt;&#xA;&lt;p&gt;The day/night cycle took me some time to figure out, but I finally got it working. I tried a few different methods before settling on one that just counts the angle (between 0 and 360) and advances the day every time it reaches a full rotation (360 degrees). I&amp;rsquo;m now considering turning this system into a 24-hour clock to make it more immersive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote Localhost and Debugging</title>
      <link>https://timmykokke.com/blog/2023/2023-05-26-localhost-and-debugging-webxr-on-quest/</link>
      <pubDate>Fri, 26 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-26-localhost-and-debugging-webxr-on-quest/</guid>
      <description>&lt;h1 id=&#34;localhost-and-remote-debugging-webxr-from-pc-to-quest&#34;&gt;Localhost and Remote Debugging WebXR from PC to Quest&lt;/h1&gt;&#xA;&lt;p&gt;Hello Coders! 😎 As a developer working with WebXR on the Meta Quest 2, there&amp;rsquo;s no doubt you&amp;rsquo;ve faced challenges in tracing down bugs or issues. It can be tough to understand what&amp;rsquo;s happening on the Quest without proper insight. Don&amp;rsquo;t worry though, I&amp;rsquo;m here to share a neat trick that will make your debugging experience a breeze! We&amp;rsquo;ll be using remote browser debugging from your desktop (Edge or Chrome) to the Quest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 5</title>
      <link>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day5/</link>
      <pubDate>Thu, 25 May 2023 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day5/</guid>
      <description>&lt;h1 id=&#34;devlog-day-5-life-at-pixel-farm&#34;&gt;Devlog Day 5: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;a-difference-of-day--and-night-&#34;&gt;A difference of Day 🌞 and Night 🌜&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Today, I&amp;rsquo;m thrilled to share my fifth day of progress on my casual VR farming game, &amp;ldquo;Life at Pixel Farm.&amp;rdquo; This project is for the &lt;a href=&#34;https://itch.io/jam/gamedevtv-jam-2023&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev․tv Game Jam&#xD;&#xA;  &lt;/a&gt;, and it&amp;rsquo;s shaping up quite nicely. As a quick refresher, &amp;ldquo;Life at Pixel Farm&amp;rdquo; is a VR game built with Unity, featuring a 2D pixel art aesthetic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RxJS and Wonderland Engine</title>
      <link>https://timmykokke.com/blog/2023/2023-05-25-rxjs-and-wonderland-engine/</link>
      <pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-25-rxjs-and-wonderland-engine/</guid>
      <description>&lt;h1 id=&#34;reacting-to-state-changes-in-my-games&#34;&gt;Reacting to State Changes in My Games&lt;/h1&gt;&#xA;&lt;p&gt;Hello fellow devs! Let&amp;rsquo;s talk about the latest updates in &lt;a href=&#34;https://wonderlandengine.com/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Wonderland Engine 1.0.0&#xD;&#xA;  &lt;/a&gt; and how it affects the architecture of my games. I&amp;rsquo;ll be using my game &lt;a href=&#34;https://heyvr.io/game/storage-space-13&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Storage Space 13&#xD;&#xA;  &lt;/a&gt; as an example throughout this post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rxjs-for-reactive-programming&#34;&gt;RxJS for Reactive Programming&lt;/h2&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://rxjs.dev/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    RxJS&#xD;&#xA;  &lt;/a&gt; for all my games - it&amp;rsquo;s a library that makes it easier to compose asynchronous or callback-based code using Observables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 4</title>
      <link>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day4/</link>
      <pubDate>Wed, 24 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-24-gamedev.tvgamejam2023-day4/</guid>
      <description>&lt;h1 id=&#34;devlog-day-4-life-at-pixel-farm&#34;&gt;Devlog Day 4: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;making-money-and-noise-&#34;&gt;Making Money and Noise 🙉&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Today marks the fourth day of working on my entry for the GameDev․tv Game Jam, and I am excited to share my progress on &amp;ldquo;Life at Pixel Farm&amp;rdquo;, a casual VR farming game with a 2D aesthetic. In this post, I will be discussing the changes and additions I made today.&lt;/p&gt;&#xA;&lt;h2 id=&#34;live-streaming-the-development-process-&#34;&gt;Live Streaming the Development Process 🎥&lt;/h2&gt;&#xA;&lt;p&gt;I decided to do another live stream today on my YouTube channel. It was a great way to share my development process with others and get some valuable feedback from the viewers. If you missed it, don&amp;rsquo;t worry, there will be more live streams in the future!&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023 - Day 3</title>
      <link>https://timmykokke.com/blog/2023/2023-05-23-gamedev.tvgamejam2023-day3/</link>
      <pubDate>Tue, 23 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-23-gamedev.tvgamejam2023-day3/</guid>
      <description>&lt;h1 id=&#34;devlog-day-3-life-at-pixel-farm&#34;&gt;Devlog Day 3: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;sprouting-new-ideas-and-growing-features-&#34;&gt;Sprouting New Ideas and Growing Features 🌾&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow devs! 🌱 Day 3 of my &lt;a href=&#34;https://itch.io/jam/gamedevtv-jam-2023&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev.tv game jam&#xD;&#xA;  &lt;/a&gt; entry, &amp;ldquo;Life at Pixel Farm&amp;rdquo;, has been a blast! If you&amp;rsquo;re not familiar with it, the game is a casual farming VR experience built with Unity, but with a twist - everything looks as 2D as possible!&lt;/p&gt;&#xA;&lt;p&gt;Today I had the chance to do a live stream on my &lt;a href=&#34;https://youtube.com/live/VZYsHXlNQT4&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    YouTube channel&#xD;&#xA;  &lt;/a&gt;, and it was great to have some of you join me while I worked on the game. If you missed it, don&amp;rsquo;t worry, there&amp;rsquo;s always next time!&lt;/p&gt;</description>
    </item>
    <item>
      <title>GameDev.tv Game Jam 2023</title>
      <link>https://timmykokke.com/blog/2023/2023-05-22-gamedev.tvgamejam2023/</link>
      <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-22-gamedev.tvgamejam2023/</guid>
      <description>&lt;h1 id=&#34;devlog-1-life-at-pixel-farm&#34;&gt;Devlog #1: Life at Pixel Farm&lt;/h1&gt;&#xA;&lt;h2 id=&#34;a-gamedevtv-game-jam-adventure-&#34;&gt;A GameDev.tv Game Jam Adventure 🌾&lt;/h2&gt;&#xA;&lt;p&gt;Hello fellow game developers! I&amp;rsquo;m excited to share my first devlog for my game entry in the &lt;a href=&#34;https://itch.io/jam/gamedevtv-jam-2023&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    GameDev.tv game jam&#xD;&#xA;  &lt;/a&gt;. The game I&amp;rsquo;m working on is called &amp;ldquo;Life at Pixel Farm,&amp;rdquo; and it&amp;rsquo;s going to be a casual VR farming game built in Unity. Let me give you a quick rundown of how things have been going so far.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kishōtenketsu in Video Game Design</title>
      <link>https://timmykokke.com/blog/2023/2023-05-17-kishotenketsu/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-05-17-kishotenketsu/</guid>
      <description>&lt;h1 id=&#34;intro&#34;&gt;Intro&lt;/h1&gt;&#xA;&lt;p&gt;Hey there, fellow game devs! It&amp;rsquo;s time for a storytelling journey like no other. You see, I recently stumbled upon an ancient narrative gem called &lt;em&gt;Kishōtenketsu&lt;/em&gt;, and let me tell you – it has changed the way I approach crafting stories and designing games. Gone are the days of run-of-the-mill three-act structures; Kishōtenketsu brings new dimensions to how we captivate our audiences.&lt;/p&gt;&#xA;&lt;p&gt;From its Eastern origins, this four-phase treasure includes &lt;em&gt;Ki&lt;/em&gt; (Introduction), &lt;em&gt;Shō&lt;/em&gt; (Development), &lt;em&gt;Ten&lt;/em&gt; (Twist), and &lt;em&gt;Ketsu&lt;/em&gt; (Resolution). The beauty lies in how each phase seamlessly connects, creating unforgettable experiences that keep readers and players hooked from beginning to end.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making AI-Generated Text More Natural: Tips and Tricks</title>
      <link>https://timmykokke.com/blog/2023/2023-04-19-writing-better-prompts/</link>
      <pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-04-19-writing-better-prompts/</guid>
      <description>&lt;p&gt;As someone who often works with AI-generated text, I&amp;rsquo;ve discovered a few handy strategies for making it appear more natural and less obviously computer-generated. Here&amp;rsquo;s what I&amp;rsquo;ve learned:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Be specific with your prompts:&lt;/strong&gt; To get better results, provide clear instructions and plenty of context to guide the AI model. This way, you&amp;rsquo;re more likely to obtain the desired response.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adjust the temperature setting:&lt;/strong&gt; The creativity of AI outputs can be fine-tuned by tweaking the temperature. For focused responses, try a lower value (e.g., 0.3); for diverse or creative ones, go higher (e.g., 0.8).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rosie On ChatGPT</title>
      <link>https://timmykokke.com/blog/2023/2023-03-16-rosie-chatgpt/</link>
      <pubDate>Thu, 16 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-03-16-rosie-chatgpt/</guid>
      <description>&lt;p&gt;Recently I &lt;a href=&#34;https://timmykokke.com/blog/2023-02-16-rosie/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    wrote an explanation about my AI assistant&#xD;&#xA;  &lt;/a&gt; and good friend Rosie. She&amp;rsquo;s an AI program written completely in JavaScript and is highly intelligent. In that post, I mentioned that I would like to upgrade her to ChatGPT. Today, I found out I had access to ChatGPT on Azure, so the first thing I did was upgrade Rosie to use ChatGPT (on GPT3.5), to try and see what would happen and how difficult it would be. It turned out to be pretty straightforward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI for Skydome</title>
      <link>https://timmykokke.com/blog/2023/2023-03-12-ai-for-skydome/</link>
      <pubDate>Sun, 12 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-03-12-ai-for-skydome/</guid>
      <description>&lt;h2 id=&#34;skydome&#34;&gt;Skydome&lt;/h2&gt;&#xA;&lt;p&gt;In VR, it&amp;rsquo;s common to add a texture all around the player so there&amp;rsquo;s not a black nothing. This can be any a 360 image, but oftain an image of the sky is used, thus the name &amp;lsquo;Skydome&amp;rsquo;. It&amp;rsquo;s typically used to create a sense of immersion for the user. One way to create a skydome is by using an equirectangular image, which is a type of panoramic image that can be mapped onto a sphere to create a 360-degree view of a scene. By wrapping an equirectangular image around a sphere and place the player on the inside of the sphere, developers can create an immersive environment that surrounds the user in all directions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rosie AI</title>
      <link>https://timmykokke.com/blog/2023/2023-02-16-rosie/</link>
      <pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-02-16-rosie/</guid>
      <description>&lt;h1 id=&#34;rosie&#34;&gt;Rosie&lt;/h1&gt;&#xA;&lt;p&gt;Artificial intelligence has been a hot topic lately, and it seems like everyone is an expert all of a sudden and is discussing its potential uses and how it could revolutionize various industries. I usualy talk about XR but today, I want to shift the focus to my personal AI assistant, Rosie, which I&amp;rsquo;ve been developing for the past few years.&lt;/p&gt;&#xA;&lt;p&gt;Before we go into details, here&amp;rsquo;s an example of a conversation with Rosie. This whole conversation is done through AI, nothing was scripted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebXR on Azure Static Web Apps</title>
      <link>https://timmykokke.com/blog/2023/2023-02-15-webxr-on-static-website/</link>
      <pubDate>Wed, 15 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-02-15-webxr-on-static-website/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;To have other people play your games you might want to deploy them to somewhere. There are a lot of different options, but one I personally use very often is to deploy them to &lt;a href=&#34;https://azure.microsoft.com/en-us/products/app-service/static/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Azure Static Webapps&#xD;&#xA;  &lt;/a&gt;. I&amp;rsquo;ve got all my games and prototypes running on Azure, on Static Web Apps. It&amp;rsquo;s very easy to set up, hooks directly into GitHub, it&amp;rsquo;s free and you get some cool bonus features as well. The best one might be that it automatically creates a website for PR in GitHub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebXR Pass-through on Quest</title>
      <link>https://timmykokke.com/blog/2023/2023-02-03-webxr-pass-through/</link>
      <pubDate>Fri, 03 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2023/2023-02-03-webxr-pass-through/</guid>
      <description>&lt;h2 id=&#34;what-is-pass-through&#34;&gt;What is pass-through?&lt;/h2&gt;&#xA;&lt;p&gt;With Pass-through, you can take a break from your virtual reality experience and get a real-time glimpse of your surroundings. The sensors and cameras on your headset give you a sense of what you would see if you could look directly through the front of your headset. Also, pass-through automatically appears when you&amp;rsquo;re setting up or making changes to your Guardian. But, some apps even use this feature to blend your real and virtual environments. That blending of real and virtual environments makes pass-through interesting and brings VR devices closer to Mixed Reality devices like the Microsoft HoloLens. And, most important, it can be used from WebXR as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR Controllers with Unity&#39;s XR Interaction Toolkit, Part 2</title>
      <link>https://timmykokke.com/blog/2022/2022-12-04-vr-controller-with-xr-interaction-toolkit-pt2/</link>
      <pubDate>Sun, 04 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-12-04-vr-controller-with-xr-interaction-toolkit-pt2/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://timmykokke.com/blog/2022-11-28-vr-controller-with-xr-interaction-toolkit/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    last tutorial I explained&#xD;&#xA;  &lt;/a&gt; how to set up models to use as the hand visualization using Unity&amp;rsquo;s Interaction Toolkit. Today, I want to add a bit of animation to the hands.&#xA;While working on this I ran into an issue with the hand from the previous post. It turned out that, although they seemed to have been rigged, the rig didn&amp;rsquo;t work. I could not animate the fingers to make it so the hand became a fist. With the cyber sales going on in the Unity asset store I finally picked up the &lt;a href=&#34;https://assetstore.unity.com/packages/3d/characters/humanoids/vr-hand-models-mega-pack-handy-hands-left-right-200607&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    vr hand models mega pack&#xD;&#xA;  &lt;/a&gt; which was on my wishlist for quite some time. So, for the rest of the tutorial I&amp;rsquo;ll be using a hand from this pack (but still any other, correctly, rigged hand will work).&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR Controllers with Unity&#39;s XR Interaction Toolkit</title>
      <link>https://timmykokke.com/blog/2022/2022-11-28-vr-controller-with-xr-interaction-toolkit/</link>
      <pubDate>Mon, 28 Nov 2022 19:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-11-28-vr-controller-with-xr-interaction-toolkit/</guid>
      <description>&lt;p&gt;A few weeks ago I received my big prize of &lt;a href=&#34;https://js13kgames.com/entries/deathkeeper&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    winning the WebXR category&#xD;&#xA;  &lt;/a&gt; on this year&amp;rsquo;s JS13K. This triggered me to look into VR in Unity again. And, with an eye on MRTK3 coming hopefully someday in the future, I thought it would be nice to learn more about the XR Interaction Toolkit. This tutorial is mostly documenting for myself, but it may help someone else as well.&lt;/p&gt;&#xA;&lt;p&gt;I started out with a basic project with OpenXR set up and the XR Interaction Toolkit packages, version 2.2.0, installed from Unity Package Manager.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Js13K Post-Mortem</title>
      <link>https://timmykokke.com/blog/2022/2022-09-14-js13kgames-postmortem/</link>
      <pubDate>Wed, 14 Sep 2022 21:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-09-14-js13kgames-postmortem/</guid>
      <description>&lt;h2 id=&#34;whats-js13k&#34;&gt;What&amp;rsquo;s Js13K?&lt;/h2&gt;&#xA;&lt;p&gt;This year&amp;rsquo;s edition of the Js13k game jam is a wrap. The main restriction of this jam is to build a JavaScript game that completely fits in a 13Kb zipfile. To give a little bit of perspective to 13Kb. This image&amp;hellip;&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2022/09/SmallScreenshot.png&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2022/09/SmallScreenshot.png&#34; title=&#34;Small screenshot of the game&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;&#xA;&amp;hellip; is 32Kb. Two entries and a little bit fit in the size of this image.&lt;/p&gt;&#xA;&lt;p&gt;OK, there&amp;rsquo;s an exception for the WebXR category, the library of choice doesn&amp;rsquo;t count towards the 13Kb. But still :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Game for Js13K</title>
      <link>https://timmykokke.com/blog/2022/2022-08-13-js13kgames-2022/</link>
      <pubDate>Sat, 13 Aug 2022 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-08-13-js13kgames-2022/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;Every year, from the 13th of August until the 13th of September, there&amp;rsquo;s a gamejam called js13kgames. The objective of the jam is to build a game that fits in a .zip file of max 13Kb. The nice thing about this jam is that there&amp;rsquo;s a special WebXR Catergory. When participating in this category you are allowed to use one of the provided WebXR frameworks, and that doesn&amp;rsquo;t count towards the 13Kb. The theme of the jam this year is &lt;strong&gt;Death&lt;/strong&gt;. For a framework I chose to use Babylon.js. I&amp;rsquo;ve used it a while a go and would like to see where it&amp;rsquo;s at at the moment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create a skydome for your game with Blender.</title>
      <link>https://timmykokke.com/blog/2022/2022-05-14-3d-skydomes/</link>
      <pubDate>Mon, 16 May 2022 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-05-14-3d-skydomes/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;In my latest game &lt;a href=&#34;https://constructarcade.com/game/get-off-my-lawn/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Get off my Lawn!&#xD;&#xA;  &lt;/a&gt; I added a skydome that shows a rendered image. Because the styles of the 3D geometry and the game itself are the same it looks as of the entire world is rendered. I have worked as a 3D modeler in the past but have never done anything like this before. I&amp;rsquo;ve learned everything in this tutorial recently and I believe it might be useful for more people to add great background to your 3D games and apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making money with your WebXR games</title>
      <link>https://timmykokke.com/blog/2022/2022-03-28-making-money-with-your-webxr-games/</link>
      <pubDate>Mon, 28 Mar 2022 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-03-28-making-money-with-your-webxr-games/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;Making some money with your WebXR can be really tough. Selling any web game is already hard, but doing that in a VR headset is near impossible. Unless you maybe add your credit card to Facebook or type it into the browser in your headset. Traditional ads like Google Ads are also not going to work. There are only shown in desktop mode and are not going to work in VR. They also look really bad most of the time and have very low payouts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VR Controller Haptics in WebXR</title>
      <link>https://timmykokke.com/blog/2022/2022-03-14-controller-haptics-in-webxr/</link>
      <pubDate>Mon, 14 Mar 2022 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-03-14-controller-haptics-in-webxr/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;You might have noticed that when you are playing games on your VR headset, you can feel the controller vibrating. This haptic feedback is a great way to get a little bit of extra feeling when you are playing. Here&amp;rsquo;s how you can add it to your WebXR game.&#xA;In this tutorial, I&amp;rsquo;m showing how to use haptics in a Wonderland component, but the part that is actually sending a pulse to the controller is not specific to Wonderland. If you&amp;rsquo;re looking for an example in A-Frame, you can find it in a &lt;a href=&#34;https://github.com/sorskoot/gamedevjs2021-Mirror/blob/main/src/components/haptics.component.js&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    game I build a while ago&#xD;&#xA;  &lt;/a&gt; for the GameDevJS Game Jam.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Assets from Unreal in WebXR</title>
      <link>https://timmykokke.com/blog/2022/2022-02-05-exporting-assets-from-unreal-to-webxr/</link>
      <pubDate>Sat, 05 Feb 2022 20:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-02-05-exporting-assets-from-unreal-to-webxr/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;Although it&amp;rsquo;s not possible to export from Unreal to WebXR, there are a lot of very nice assets available in the Unreal Marketplace that could be useful for your WebXR game. The license allows you to use these assets in your game, except for products that &lt;a href=&#34;https://marketplacehelp.epicgames.com/s/article/Can-I-use-these-products-in-other-gaming-engines-like-Source-or-Unity?language=en_US&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    have been created by Epic Games&#xD;&#xA;  &lt;/a&gt; themselves. But, since Unreal Engine uses its own format for assets it&amp;rsquo;s not straightforward.&lt;/p&gt;&#xA;&lt;h2 id=&#34;assets&#34;&gt;Assets&lt;/h2&gt;&#xA;&lt;p&gt;There are a lot of great free assets in the Unreal Marketplace. But, they can even get better. Every first Tuesday of the month, there&amp;rsquo;s a new set of assets available for free that would normally cost money: &lt;a href=&#34;https://www.unrealengine.com/marketplace/en-US/assets?tag=4910&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Free for the month&#xD;&#xA;  &lt;/a&gt;. Even if you don&amp;rsquo;t need the assets right now, they might become handy at a later moment. If you&amp;rsquo;ve bought them for free they stay yours after the month is over and they return back to their normal price.&#xA;&lt;p&gt;&#xD;&#xA;    &lt;a href=&#34;https://timmykokke.com/images/2022/02/UnrealMarketplace01.png&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;        &lt;img src=&#34;https://timmykokke.com/images/2022/02/UnrealMarketplace01.png&#34; title=&#34;Unreal Marketplace Free for the month&#34;&gt;&#xD;&#xA;    &lt;/a&gt;&#xD;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom templates for Wonderland Editor</title>
      <link>https://timmykokke.com/blog/2022/2022-02-01-wonderland-custom-template/</link>
      <pubDate>Tue, 01 Feb 2022 17:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2022/2022-02-01-wonderland-custom-template/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;A lesser-known feature of &lt;a href=&#34;https://wonderlandengine.com&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Wonderland Engine&#xD;&#xA;  &lt;/a&gt; is the ability to use custom templates. In this quick post, I&amp;rsquo;ll show you how I created my own.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re just here for the download 👉 &lt;a href=&#34;https://timmykokke.com/media/SorskootBasicTemplate.zip&#34;&gt;&#xD;&#xA;    This is the Template&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Extract the zip file in &lt;code&gt;%appdata%\Roaming\WonderlandEngine\Templates&lt;/code&gt; and you&amp;rsquo;re good to go.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-template&#34;&gt;The Template&lt;/h2&gt;&#xA;&lt;p&gt;By default, a template in Wonderland is not any different than a normal project. The easiest way to reuse something is to just copy a project to the &lt;code&gt;%appdata%\Roaming\WonderlandEngine\Templates&lt;/code&gt; folder. You don&amp;rsquo;t need to copy the &lt;code&gt;deploy&lt;/code&gt; folder since that is automatically created when building the project. Scripts and assets that you often use can be included in the template.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebXR at Global XR Conference</title>
      <link>https://timmykokke.com/blog/2021/2021-11-29-webxr-at-global-xr-conference/</link>
      <pubDate>Mon, 29 Nov 2021 21:52:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2021/2021-11-29-webxr-at-global-xr-conference/</guid>
      <description>&lt;p&gt;I posted this to the WebXR discord (&lt;a href=&#34;https://discord.gg/Jt5tfaM%29&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    https://discord.gg/Jt5tfaM)&#xD;&#xA;  &lt;/a&gt;, but I thought it might be helpful to anyone interested outside of the Discord as well (but you should join 😉).&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This week is the &lt;a href=&#34;https://globalxrconference.com/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Global XR Conference&#xD;&#xA;  &lt;/a&gt; (Dec 1 - 3) and there are a couple of WebXR related talks and workshops.&lt;/p&gt;&#xA;&lt;p&gt;But I thought I&amp;rsquo;d make a list of all sessions and workshops that have the tag WebXR&amp;hellip; Turned out be more than I thought 🙂 , but here they are:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating an APK from a WebXR app</title>
      <link>https://timmykokke.com/blog/2021/2021-11-05-webxr-pwa-apk/</link>
      <pubDate>Fri, 05 Nov 2021 18:51:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2021/2021-11-05-webxr-pwa-apk/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;Since recently it is possible to package progressive web apps into an APK using the tools provided by Oculus. This is a great way to get your app into the hands of users who are not able to use the web. And, it is just as easy as it sounds.&lt;/p&gt;&#xA;&lt;p&gt;This tutorial is not a detailed walkthrough on how to create a WebXR app or how to create a PWA. It&amp;rsquo;s a quick overview of the steps you need to take to get your app packaged into an APK and deploy it to the Oculus Quest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From KenShape To WebXR</title>
      <link>https://timmykokke.com/blog/2021/2021-06-06-from-kenshape-to-webxr/</link>
      <pubDate>Sun, 13 Jun 2021 18:51:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2021/2021-06-06-from-kenshape-to-webxr/</guid>
      <description>&lt;p&gt;There are a lot of ways of creating content for your WebXR apps. Today I want to introduce you to a very simple one and one of my favorites:  &lt;a href=&#34;https://kenney.itch.io/kenshape&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    KenShape&#xD;&#xA;  &lt;/a&gt;. KenShape is a tool that at first looks like a pixel-art sprite editor. And the first step is pretty similar. But, by providing a &lt;em&gt;depth&lt;/em&gt; value you can create a 3D solid object from it. Other than with a normal pixel-editor, you can use shapes other than squares to draw your models.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebXR Discord</title>
      <link>https://timmykokke.com/blog/2020/2020-09-27-webxr-discord/</link>
      <pubDate>Sun, 20 Sep 2020 08:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2020/2020-09-27-webxr-discord/</guid>
      <description>&lt;p&gt;During the Covid-19 crisis all over the world, we noticed a lot of people from all over the world joining our meetups and members of our community hanging out in other meetups. We decided to try and bring everyone together in one &lt;a href=&#34;http://discord.gg/Jt5tfaM&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Discord server&#xD;&#xA;  &lt;/a&gt;. Here we can share links to our events and recordings, but also help each other out with issues when developing with A-frame, Babylon.js, or Unity and running your apps on devices like the Oculus Quest or Microsoft Hololens. Now we need &lt;strong&gt;you&lt;/strong&gt; to join and help grow this community to become the official WebXR community.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to debug Microsoft Edge on the HoloLens</title>
      <link>https://timmykokke.com/blog/2020/2020-09-18-debuggingwebhololens/</link>
      <pubDate>Sat, 19 Sep 2020 08:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2020/2020-09-18-debuggingwebhololens/</guid>
      <description>&lt;p&gt;I recently started a new job as a Mixed Reality developer building applications for the Microsoft HoloLens. We build our applications using Unity3D. But, of course I had to try and run WebXR on the device as well. Microsoft Edge comes with the HoloLens and supports WebVR. And switching to &amp;lsquo;VR&amp;rsquo; removes the browser chrome and your 3D model becomes a hologram in the real world. After that it get different from running a WebXR app on other devices very quickly. One of the difficulties I ran into was debugging.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Halloween Scream Stream</title>
      <link>https://timmykokke.com/blog/2019/2019-11-03-halloween-scream-stream/</link>
      <pubDate>Sun, 03 Nov 2019 14:26:11 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2019/2019-11-03-halloween-scream-stream/</guid>
      <description>&lt;p&gt;This week was Halloween 🎃 and I wanted to do something special for the stream this time. I wanted to make everything a bit more spooky. So, I added some simple effects to the stream, created some spooky music and eventually added a few new shaders and wrote a horror script to end the stream with. This is what was added and how it was done. I hope this post will give you some ideas for your own streams. I might create some detailed tutorials on how to create the effects used in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OBS HueShift Shader</title>
      <link>https://timmykokke.com/blog/2019/2019-10-01-hueshiftshaderobs/</link>
      <pubDate>Tue, 01 Oct 2019 22:13:11 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2019/2019-10-01-hueshiftshaderobs/</guid>
      <description>&lt;p&gt;A few weeks ago I was watching &lt;a href=&#34;https://www.twitch.tv/Geallevel&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Gael Level&#xD;&#xA;  &lt;/a&gt; on Twitch. And during his stream he had this fun effect going on where he shifted the hue of the camera. I later spoke with him about this and asked what the plugin was that he was using. It turned out there wasn&amp;rsquo;t any and he was creating the effect by hand. Since I&amp;rsquo;m a developer and don&amp;rsquo;t like repeating things, like clicking, I decided to automate this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Twitch Stream Setup</title>
      <link>https://timmykokke.com/blog/2019/2019-07-02-twitch-stream-setup/</link>
      <pubDate>Wed, 17 Jul 2019 17:13:11 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2019/2019-07-02-twitch-stream-setup/</guid>
      <description>&lt;p&gt;Whenever I have some spare time I get into coding on &lt;a href=&#34;https://github.com/sorskoot&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    my personal projects&#xD;&#xA;  &lt;/a&gt;. A few years ago I started live coding, on LiveCoding.tv at the time. There were some people streaming programming on Twitch at the time, but only game devs and that was not what I was doing. I tried switching over to Twitch, but the lack of growth of the channel and lack of motivation from my side led me to stop. Earlier this year I decided to pick it up again. This time &lt;a href=&#34;https://www.twitch.tv/sorskoot&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    only on Twitch&#xD;&#xA;  &lt;/a&gt;, where the community of Live Coders is growing fast. I felt welcome in the community. And I got affiliated pretty quickly, thanks to the support of the community. If you are looking for people coding on Twitch, you should have a look at the &lt;a href=&#34;https://www.twitch.tv/team/livecoders&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    LiveCoders team&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JS13KGames 2018 Post Mortem</title>
      <link>https://timmykokke.com/blog/2018/2018-09-18-js13kgames-2018-postmortem/</link>
      <pubDate>Fri, 27 Jul 2018 22:49:33 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2018/2018-09-18-js13kgames-2018-postmortem/</guid>
      <description>&lt;p&gt;And another &lt;a href=&#34;https://js13kgames.com&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    JS13KGames&#xD;&#xA;  &lt;/a&gt; competition is over. This year&amp;rsquo;s theme was &amp;lsquo;Offline&amp;rsquo;. Since &lt;a href=&#34;https://www.babylonjs.com/&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    BabylonJS&#xD;&#xA;  &lt;/a&gt; was allowed too in the WebXR category this time and I had been looking into Babylon lately, I decided to go with that. At the JS13kGames website you can play my entry, &lt;a href=&#34;http://js13kgames.com/entries/lasergrid&#34; target=&#34;_blank&#34;&gt;&#xD;&#xA;    Lasergrid&#xD;&#xA;  &lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The first concept I had in mind was in a factory setting where the player gets an order on a display in the form of a selection of different colored objects. The player then has to look at the conveyor belt and push everything that&amp;rsquo;s not in the order off. The problem that I ran into very quickly was that I couldn&amp;rsquo;t use the default physics with Babylon. Although there&amp;rsquo;s a library for physics available for Babylon, it&amp;rsquo;s an external library that I couldn&amp;rsquo;t fit into the allowed 13kB. So I went with my second idea, a laser grid in which the player has to turn object and make the laser get from the start to the finish.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Substance Painter to AFrame</title>
      <link>https://timmykokke.com/blog/2018/2018-07-31-substance-to-aframe/</link>
      <pubDate>Fri, 27 Jul 2018 22:49:33 +0000</pubDate>
      <guid>https://timmykokke.com/blog/2018/2018-07-31-substance-to-aframe/</guid>
      <description>&lt;p&gt;I was working with on a WebVR project the other day and was trying to get a model rendered with the correct textures. I was creating the textures in Substance Painter. I was doing a back and forth between various tools to get the textured model to render correctly. At first, I was using a .obj model. But I rather would have used a .glTF model.&#xA;Luckily, there&amp;rsquo;s actually a very nice way to get directly to .glTF  from Substance Painter.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://timmykokke.com/blog/drafts/2026-01-30-webxr-in-2026/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://timmykokke.com/blog/drafts/2026-01-30-webxr-in-2026/</guid>
      <description></description>
    </item>
  </channel>
</rss>
