<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>xtoff&#39;s devblog</title>
    <link>http://www.cschnack.de/</link>
    <description>Recent content on cschnack.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 14 Feb 2021 00:00:00 +0200</lastBuildDate>
    <atom:link href="/" rel="self" type="application/rss+xml" />
    
    <item>
      <title>🔘 iOS 14 Game Center features in Cordova App</title>
      <link>http://www.cschnack.de/blog/2021/cordova-gamecenter-ios14/</link>
      <pubDate>Sun, 14 Feb 2021 00:00:00 +0200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2021/cordova-gamecenter-ios14/</guid>
      <description>About I updated my fork of the Game Center Cordova plugin to support the new Game Center Access Point. This is an addition to my last Game Center entry.
Access Point: Game Center Feedback while playing The Access Point is a simple way to quickly allow to show the player&amp;rsquo;s achievements or leaderboard positions. As a developer it frees us from query the data from Apple&amp;rsquo;s Game Center server and simplifies the whole process a lot....(more)</description>
    </item>
    
    <item>
      <title>🔌 Fix: Reconnect wireless debugging with Xcode and iPhone</title>
      <link>http://www.cschnack.de/blog/2021/fix-ios-wireless-in-xcode/</link>
      <pubDate>Fri, 12 Feb 2021 00:00:00 +0200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2021/fix-ios-wireless-in-xcode/</guid>
      <description>Issue When you develop an App with Xcode on macOS you can test your app without the need for a cable. Once setup is done you can select your iPhone in Xcode and just hit the ▶️ Button. The app starts directly on your device, no cable required.
However, sometimes Xcode seems to forget how to reconnect to your device. I haven&amp;rsquo;t figured out the exact circumstances but I figured out a workaround....(more)</description>
    </item>
    
    <item>
      <title>👉🏻 Links 2021</title>
      <link>http://www.cschnack.de/blog/2021/links-2021/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0100</pubDate>
      
      <guid>http://www.cschnack.de/blog/2021/links-2021/</guid>
      <description>&lt;p&gt;A list of links and notes I collect throughout the year.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>🤓 I wrote a QuickBasic 4.5 Interpreter</title>
      <link>http://www.cschnack.de/blog/2020/quickbasic/</link>
      <pubDate>Tue, 29 Dec 2020 00:00:00 +1200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/quickbasic/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;http://www.cschnack.de/img/2020/qb-1.png&#34; alt=&#34;QB interpreter&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;I always had that idea of writing my own &lt;a href=&#34;https://en.wikipedia.org/wiki/QBasic&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;Quick Basic&lt;/a&gt; interpreter. A few weeks ago I did exactly that and like to share a bit of my experience. The Quick Basic (or QB) I used to know is Microsoft&amp;rsquo;s Quick Basic 4.5. If I write about QB I mean that particular version running on MS-DOS PCs.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>🎮 Apple Game Center with Cordova</title>
      <link>http://www.cschnack.de/blog/2020/cordova-gc/</link>
      <pubDate>Sat, 26 Dec 2020 00:00:00 +1200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/cordova-gc/</guid>
      <description>&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;My game project &lt;a href=&#34;https://ghostjumpgo.xtoff.games&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;Ghost Jump Go!&lt;/a&gt; on iOS shall offer access to Apple&amp;rsquo;s Game Center features. As my game is written in Javascript and deployed using &lt;a href=&#34;https://cordova.apache.org/&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;Cordova&lt;/a&gt; I like to share how I integrated a plugin to bring Game Center into my game.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Javascript ➡️ Typescript: Conversion of a Game</title>
      <link>http://www.cschnack.de/blog/2020/js-to-ts/</link>
      <pubDate>Sun, 06 Sep 2020 00:00:00 +0900</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/js-to-ts/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; Typescript can generate efficient Javascript code and I decided to switch. I approached the code conversion by simply rename the files from &lt;code&gt;*.js&lt;/code&gt; to &lt;code&gt;*.ts&lt;/code&gt; and then slowly migrating the code base file by file and case by case. During all phases I had a working build and a running game.&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;I switched my game code from JavaScript to Typescript. I like to share some of my reasons and how the process went.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Dynamic Music in Games using WebAudio</title>
      <link>http://www.cschnack.de/blog/2020/webaudio/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0400</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/webaudio/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;WebAudio&lt;/a&gt; is a solid API with many features. It is easy to create complex effects (like pitching, panning and even dynamic music transitions). However, there are many small details to consider when dealing with browser variations. A battle proven wrapper like &lt;a href=&#34;https://howlerjs.com/&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;howler.js&lt;/a&gt; that takes care of the details is definitely a thing to consider. &lt;strong&gt;[DEMO is pending]&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;Working on my game &lt;a href=&#34;https://ghostjumpgo.xtoff.games&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;Ghost Jump&lt;/a&gt; I came to the point where I needed to integrate sound and music. GhostJump is written in pure JavaScript and I think &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;WebAudio&lt;/a&gt; is my best option. I have never used the API before but I do have some experience with audio programming. To get the full &lt;em&gt;experience&lt;/em&gt; I decided to not start with a wrapper like &lt;a href=&#34;https://howlerjs.com/&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;howler.js&lt;/a&gt; or &lt;a href=&#34;https://createjs.com/soundjs&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;soundjs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The WebAudio API is very powerful but also full of strange vendor specific behaviors. For example, it is not possible to create an &lt;code&gt;AudioContext&lt;/code&gt; on &lt;em&gt;iOS Safari&lt;/em&gt; or desktop &lt;em&gt;Chrome&lt;/em&gt; if you are not in some kind of &lt;em&gt;magic user input event context&lt;/em&gt;. This and other things I intend to explore and write about it here.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>TouchThing JS Example Code</title>
      <link>http://www.cschnack.de/blog/2020/ttjsexample1code/</link>
      <pubDate>Mon, 24 Feb 2020 00:00:00 +0200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/ttjsexample1code/</guid>
      <description>I published TTjs example code on GitHub: I had a longer session with my friend jbrosi to rethink the module approach I used in TouchThing JS. We soon had a chat about the pros and cons of Typescript. He proposed some very cool ideas to make a Typescript version of TouchThing JS.
To be able to test his ideas and to finally have some working example code for TTjs I put together an example project and pushed it to GitHub....(more)</description>
    </item>
    
    <item>
      <title>SchnackScript JS</title>
      <link>http://www.cschnack.de/blog/2020/schnackscript/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0200</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/schnackscript/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; Check out my &lt;em&gt;NPC-talk-script-approach&lt;/em&gt; ported to JavaScript and pushed to &lt;a href=&#34;https://github.com/CSchnackenberg/TTjs/tree/develop/src/ttjs/engine/schnack&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;github&lt;/a&gt;. A simple text file syntax can be enough to control NPC dialogs.&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;SchnackScript&lt;/em&gt; (pronounced &lt;em&gt;snack script&lt;/em&gt;) is a simple-to-write, simple-to-parse and simple-to-execute &lt;em&gt;&amp;ldquo;scripting language&amp;rdquo;&lt;/em&gt;. It is meant to write and process dialog-text-files for NPC&amp;rsquo;s in game like environments. In those scripts you can output text, set and change variables on a shared state and use if-conditions to branch the output.&lt;/p&gt;

&lt;p&gt;I ported &lt;em&gt;SchnackScript&lt;/em&gt; manually from C++ to JavaScript and pushed it as part of my JavaScript open source engine: &lt;a href=&#34;http://www.cschnack.de/blog/2018/ttjs1/&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;TouchThingJS&lt;/a&gt;. I used the script engine for a wide range of &lt;em&gt;NPCs&lt;/em&gt; and it covered many use cases I had while creating a game.&lt;/p&gt;

&lt;p&gt;The port is not optimized when it comes to &lt;em&gt;garbage collection&lt;/em&gt; but it is pretty stable and should be simple to integrate. Don&amp;rsquo;t expect cutting edge parser technology, though.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Links 2020</title>
      <link>http://www.cschnack.de/blog/2020/links-2020/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0100</pubDate>
      
      <guid>http://www.cschnack.de/blog/2020/links-2020/</guid>
      <description>&lt;p&gt;A list of links and notes I collect throughout the year.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Integrate Amazon InApp Payments in Unity app</title>
      <link>http://www.cschnack.de/blog/2019/amazoninappandunity/</link>
      <pubDate>Sat, 23 Nov 2019 00:00:00 +1100</pubDate>
      
      <guid>http://www.cschnack.de/blog/2019/amazoninappandunity/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; Be aware of the different regions when setting up test accounts for &lt;em&gt;Live App Testing&lt;/em&gt; (Amazon.de != Amazon.com). If &lt;em&gt;Live App Testing&lt;/em&gt; throws &lt;code&gt;INVALID_SKU&lt;/code&gt; just wait a few days and try again. In all cases call &lt;code&gt;NotifyFulfillment()&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;We like to publish our game &lt;a href=&#34;https://norys-escape.de&#34; rel=&#34;nofollow noreferrer&#34; target=&#34;_blank&#34;&gt;Nory&amp;rsquo;s Escape&lt;/a&gt; on Amazon Appstore. To introduce it to a wider audience and publish it without an upfront paywall we choose to use InApp payment. We won first price during Gamescon 2017 and on Amazon we exclusively offer the first part of the game for free.&lt;/p&gt;

&lt;p&gt;In this article I like to collect my findings and share some of the things I learned during the integrating of the Payment process.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Change Spell-Check-Language in Atom</title>
      <link>http://www.cschnack.de/blog/2019/atom-spell-lang-swop/</link>
      <pubDate>Mon, 30 Sep 2019 00:00:00 +0900</pubDate>
      
      <guid>http://www.cschnack.de/blog/2019/atom-spell-lang-swop/</guid>
      <description>tl;dr Copy this in your Atom init.coffee file to quickly change the current spell-checking-language.
About Atom is a brilliant editor. Not just because of all the things it can do but especially because of the things it could do. It&amp;rsquo;s easy to add functionality by installing a package. However, what I really learn to love is adding things into init.coffee.
Let me show you my code to quickly switch between spell-checking languages....(more)</description>
    </item>
    
    <item>
      <title>Cordova &#43; Webpack &#43; Babel &#43; Onsen UI &#43; AngularJs</title>
      <link>http://www.cschnack.de/blog/2019/webpack-1/</link>
      <pubDate>Wed, 07 Aug 2019 00:00:00 +0800</pubDate>
      
      <guid>http://www.cschnack.de/blog/2019/webpack-1/</guid>
      <description>About I like to write down my notes while setup a Cordova based application with Webpack, AnuglarJS and Onsen UI using Babel for ES2015 support. It&amp;rsquo;s not my first Cordova project but I like to write down all the things I touched and thoughts I had so maybe next time I don&amp;rsquo;t have to dig it out all over again.
Clients stack Basically I&amp;rsquo;d like to combine the following tools with the following motivation:...(more)</description>
    </item>
    
    <item>
      <title>Metal, DirectX and Vulkan =&gt; bye bye OpenGL engine?</title>
      <link>http://www.cschnack.de/blog/2019/wasmtron/</link>
      <pubDate>Wed, 27 Mar 2019 00:00:00 +0300</pubDate>
      
      <guid>http://www.cschnack.de/blog/2019/wasmtron/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; Deploy games written in C++ and OpenGL via WASM + Electron&lt;/p&gt;

&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;

&lt;p&gt;I like to propose an idea for (small) OpenGL games written in C++&lt;/p&gt;

&lt;h2 id=&#34;custom-c-engine-using-opengl-feels-deprecated&#34;&gt;Custom C++ engine using OpenGL feels deprecated&lt;/h2&gt;

&lt;p&gt;A few years ago I wrote a custom engine, using C++ and OpenGL. It&amp;rsquo;s been a fun project and back then the decision to use OpenGL felt just right: it&amp;rsquo;s supported by Android, iOS, Windows, Linux and even macOS. Consoles aside: the major platforms.&lt;/p&gt;

&lt;p&gt;However, things have changed. Considering what happened the last years I&amp;rsquo;m not so sure OpenGL has a future. Apple focuses on Metal, Microsoft on DirectX and there is Vulkan.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
    <item>
      <title>Git-submodules in Unity (my notes)</title>
      <link>http://www.cschnack.de/blog/2019/gitsubm/</link>
      <pubDate>Thu, 24 Jan 2019 00:00:00 +0100</pubDate>
      
      <guid>http://www.cschnack.de/blog/2019/gitsubm/</guid>
      <description>&lt;p&gt;&lt;code&gt;tl;dr&lt;/code&gt; (see table)&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Link the library project into the project&amp;rsquo;s &lt;code&gt;Assets&lt;/code&gt; folder, without remote git repo?&lt;/td&gt;
&lt;td&gt;&lt;span style=&#34;color: red&#34;&gt;Doesn&amp;rsquo;t work:&lt;/span&gt; For submodules we need a remote-origin&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Link the library project into the project’s &lt;code&gt;Assets&lt;/code&gt; folder with remotes repo?&lt;/td&gt;
&lt;td&gt;&lt;span style=&#34;color: red&#34;&gt;Doesn&amp;rsquo;t work:&lt;/span&gt; Unity doesn’t like a complete sub-project in the Assets folder.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Maybe git-subtree does the trick?&lt;/td&gt;
&lt;td&gt;&lt;span style=&#34;color: red&#34;&gt;Doesn&amp;rsquo;t work:&lt;/span&gt; Subtree is more or less an import and not a link.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Use the new Unity PackageManager features?&lt;/td&gt;
&lt;td&gt;&lt;span style=&#34;color: red&#34;&gt;Doesn&amp;rsquo;t work:&lt;/span&gt; Complicated and doesn&amp;rsquo;t work with older Unity versions&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Use a submodule and a symbolic link?&lt;/td&gt;
&lt;td&gt;&lt;span style=&#34;color: #33aa33&#34;&gt;It works!&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h1 id=&#34;about&#34;&gt;About&lt;/h1&gt;

&lt;p&gt;Submodules can be a great tool for sharing library code and I like to make use of them when working with &lt;em&gt;Unity&lt;/em&gt;. In this article I share my notes on my experiments around &lt;em&gt;git submodules&lt;/em&gt; in &lt;em&gt;Unity&lt;/em&gt; projects.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;http://www.cschnack.de/img/2019/gitsubm.png&#34; alt=&#34;Git Submodule Project model for Unity&#34; /&gt;&lt;/p&gt;

&lt;p&gt;The development model I have in mind looks like this: I like to have on or more &lt;em&gt;product project&lt;/em&gt; sharing one or more &lt;em&gt;library project&lt;/em&gt; and want to able to commit, push and pull in each of them. Also I want to have reproducible connections between the project and the library code. So if I check out an old commit of a &lt;em&gt;product&lt;/em&gt; it shall checkout the matching &lt;em&gt;library project commit&lt;/em&gt; as well. All this without &lt;em&gt;Unity&lt;/em&gt; plugins or the need of none-git work before or after the code change. No &lt;em&gt;Unity&lt;/em&gt; packaging. No extra steps when committing.&lt;/p&gt;

&lt;p&gt;To use this model one has to solve one issue: &lt;em&gt;Unity&lt;/em&gt; (in it&amp;rsquo;s current state)  forces the game creator to put all source-codes and assets into one folder named: &lt;code&gt;Assets&lt;/code&gt;. As I had several ways in mind how I could solve this I took the liberty to write down my approaches and share them here.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m using &lt;em&gt;Unity 2017.4.11f1&lt;/em&gt;, &lt;em&gt;macos 10.13.6&lt;/em&gt; and &lt;em&gt;Sourcetree 3.0.0&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;...(more)</description>
    </item>
    
  </channel>
</rss>