<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chris McCormick</title>
    <description>The latest articles on DEV Community by Chris McCormick (@chr15m).</description>
    <link>https://dev.to/chr15m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F343098%2F55207b20-ae17-4e00-b6c8-e668fc06c6ae.png</url>
      <title>DEV Community: Chris McCormick</title>
      <link>https://dev.to/chr15m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chr15m"/>
    <language>en</language>
    <item>
      <title>I made a daily roguelike game that works like Wordle</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Thu, 31 Mar 2022 05:27:19 +0000</pubDate>
      <link>https://dev.to/chr15m/i-made-a-daily-roguelike-game-that-works-like-wordle-3pea</link>
      <guid>https://dev.to/chr15m/i-made-a-daily-roguelike-game-that-works-like-wordle-3pea</guid>
      <description>&lt;p&gt;During the Seven Day Roguelike jam I made an online Roguelike game called &lt;a href="https://rogule.com"&gt;Rogule&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I borrowed some ideas from Wordle. You get one dungeon per day to play, and at the end you get emojis showing how well you did that you can share with others. &lt;a href="https://twitter.com/search?q=rogule%202022&amp;amp;src=spelling_expansion_revert_click&amp;amp;f=live"&gt;Check out how people are doing in today's dungeon on Twitter&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;I used &lt;a href="https://clojurescript.org/"&gt;ClojureScript&lt;/a&gt; and &lt;a href="https://ondras.github.io/rot.js/hp/"&gt;ROT.js&lt;/a&gt; to build it.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/c3VvfNgx8bg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>clojure</category>
      <category>roguelike</category>
    </item>
    <item>
      <title>I'm live-streaming dev &amp; launch of an app to prank my family</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Thu, 15 Apr 2021 12:36:26 +0000</pubDate>
      <link>https://dev.to/chr15m/i-m-live-streaming-dev-launch-of-an-app-to-prank-my-family-cmn</link>
      <guid>https://dev.to/chr15m/i-m-live-streaming-dev-launch-of-an-app-to-prank-my-family-cmn</guid>
      <description>&lt;p&gt;Hey all!&lt;/p&gt;

&lt;p&gt;I've built and launched a few things on Product Hunt now. My most recent launch &lt;a href="https://www.producthunt.com/posts/melody-generator"&gt;made it to the front page&lt;/a&gt;. I thought it would be fun to document my process developing and launching a full app over the course of a day. I'm going to do all of the coding, deployment, and launch live on the YouTube stream below.&lt;/p&gt;

&lt;p&gt;I'm starting in 12 hours time at 9am local time, and going through until 3pm when San Francisco clicks over to midnight and I can launch on PH.&lt;/p&gt;

&lt;p&gt;Hope you can drop by!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/KWBljrPdQc4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>html</category>
      <category>webdev</category>
      <category>livecoding</category>
    </item>
    <item>
      <title>How to use a Google Sheet as a database for your web app</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Wed, 07 Apr 2021 08:49:28 +0000</pubDate>
      <link>https://dev.to/chr15m/how-to-use-a-google-sheet-as-a-database-for-your-web-app-4ajm</link>
      <guid>https://dev.to/chr15m/how-to-use-a-google-sheet-as-a-database-for-your-web-app-4ajm</guid>
      <description>&lt;p&gt;Hey all! I made this screencast to show you how to use a Google Sheet as a quick and easy database for your single-page progressive web app. The technique doesn't require authentication, APIs, or complicated libraries. Everything is done directly in the browser without using the command line. Hope this is useful to you, thanks for watching!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/I-sf2ojxgQ0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>html</category>
      <category>csv</category>
      <category>livecoding</category>
      <category>screencast</category>
    </item>
    <item>
      <title>Git hacks: self-host a minimal Git repo over SSH</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Mon, 01 Feb 2021 02:20:57 +0000</pubDate>
      <link>https://dev.to/chr15m/git-hacks-self-host-a-minimal-git-repo-over-ssh-388h</link>
      <guid>https://dev.to/chr15m/git-hacks-self-host-a-minimal-git-repo-over-ssh-388h</guid>
      <description>&lt;p&gt;Did you know it's super easy to &lt;a href="https://hostedgitea.com/article/self-host-a-minimal-git-repo-over-ssh"&gt;self-host a git repo over SSH&lt;/a&gt;? If you're not looking for a full web based git interface (like GitHub, &lt;a href="https://gitea.io/en-us/"&gt;Gitea&lt;/a&gt; etc.) you can use the steps below to set up a simple repo over SSH. All you need is SSH access to a server that you own. You can set up as many self-hosted repos as you like. It can even be as simple as a raspberry Pi on your local network.&lt;/p&gt;

&lt;p&gt;There are two simple parts to this. First you set up the remote server one time only. Next you add the remote server as a &lt;code&gt;remote&lt;/code&gt; for your local repo. After that you can just &lt;code&gt;git push&lt;/code&gt; as normal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote setup
&lt;/h2&gt;

&lt;p&gt;To get started SSH into the box where you want the repo to be hosted:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh user@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Next you're going to create a folder for the repo, &lt;code&gt;cd&lt;/code&gt; into it, and create a bare git repo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir my_repo_name.git
cd my_repo_name.git
git init --bare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you want to also serve a read-only copy of this repo over HTTP, then make sure the folder is in a public web root, and run this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git update-server-info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Local setup
&lt;/h2&gt;

&lt;p&gt;Now you can add this git remote to your existing git repo just like normal:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin user@example.com:my_repo_name.git
git push -u origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There you go, you now have a self-hosted remote you can push to over SSH.&lt;/p&gt;

&lt;p&gt;If you want this to be a &lt;strong&gt;backup repo only&lt;/strong&gt; you can add it with a name other than &lt;code&gt;origin&lt;/code&gt; like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add backup user@example.com:my_repo_name.git
git push backup master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After this any time you want to push to &lt;code&gt;backup&lt;/code&gt; instead of &lt;code&gt;origin&lt;/code&gt; you just do: &lt;code&gt;git push backup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy your self-hosted private git repo!&lt;/p&gt;

&lt;p&gt;P.S. If you're looking for &lt;a href="https://hostedgitea.com/"&gt;a hosted private git repository with a web interface&lt;/a&gt; check out hostedgitea.com.&lt;/p&gt;

</description>
      <category>git</category>
      <category>shell</category>
      <category>bash</category>
      <category>ssh</category>
    </item>
    <item>
      <title>I made a procedural MIDI melody generator</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Wed, 06 Jan 2021 13:11:30 +0000</pubDate>
      <link>https://dev.to/chr15m/i-made-a-procedural-midi-melody-generator-33b7</link>
      <guid>https://dev.to/chr15m/i-made-a-procedural-midi-melody-generator-33b7</guid>
      <description>&lt;p&gt;I've just released a &lt;a href="https://dopeloop.ai/melody-generator"&gt;melody generator&lt;/a&gt; that I've been working on for a while. It's a small web app that you can use to procedurally generate looping MIDI melodies and then use them in your own music.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dopeloop.ai/melody-generator/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6z2I916e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ngvsywptmmih69t2mc75.png" alt="Melody Generator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fractalesque algorithm it uses to generate melodies is one I came up with when I was writing a lot of &lt;a href="https://en.wikipedia.org/wiki/Algorave"&gt;algorave&lt;/a&gt; music a decade ago. The MIDI melodies are rendered to sound using the wasm port of &lt;a href="https://github.com/feross/timidity"&gt;Timidity&lt;/a&gt; by Feross.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I made a trailer for my game</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Fri, 23 Oct 2020 23:51:11 +0000</pubDate>
      <link>https://dev.to/chr15m/i-made-a-trailer-for-my-game-op</link>
      <guid>https://dev.to/chr15m/i-made-a-trailer-for-my-game-op</guid>
      <description>&lt;p&gt;I made this trailer for my game &lt;a href="https://chr15m.itch.io/asterogue"&gt;Asterogue&lt;/a&gt;. Here's how I did it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added some Javascript to go full screen using &lt;code&gt;document.body.requestFullscreen()&lt;/code&gt; with a special key sequence.&lt;/li&gt;
&lt;li&gt;Used &lt;a href="https://obsproject.com"&gt;OBS Studio&lt;/a&gt; to record a couple of long play sessions and capture some of the bits I really wanted in there.&lt;/li&gt;
&lt;li&gt;Used &lt;a href="https://openshot.org"&gt;OpenShot&lt;/a&gt; to edit it together and create titles.&lt;/li&gt;
&lt;li&gt;Published on YouTube.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/7efdmAJAUVY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>video</category>
      <category>games</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Watch me live code a new feature into my roguelike game Asterogue</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Thu, 15 Oct 2020 06:14:16 +0000</pubDate>
      <link>https://dev.to/chr15m/watch-me-live-code-a-new-feature-into-my-roguelike-game-asterogue-38bi</link>
      <guid>https://dev.to/chr15m/watch-me-live-code-a-new-feature-into-my-roguelike-game-asterogue-38bi</guid>
      <description>&lt;p&gt;I committed to releasing my game &lt;a href="https://chr15m.itch.io/asterogue"&gt;Asterogue&lt;/a&gt; for Android and Windows on October 30th so I am crunching to get all the features done in time. In this video I live-code a new directional sprite animation feature. Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Cn0KPQcgDFQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Made with &lt;a href="https://chr15m.itch.io/roguelike-browser-boilerplate"&gt;Roguelike Browser Boilerplate&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>roguelike</category>
      <category>gamedev</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Validate your startup idea with MVP.css</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Mon, 14 Sep 2020 06:58:06 +0000</pubDate>
      <link>https://dev.to/chr15m/validate-your-startup-idea-with-mvp-css-omn</link>
      <guid>https://dev.to/chr15m/validate-your-startup-idea-with-mvp-css-omn</guid>
      <description>&lt;p&gt;I don't know about you but when I come up with a new startup or app idea I get super excited and want to dive into coding right away.&lt;/p&gt;

&lt;p&gt;One of the best things you can do to save yourself a bunch of wasted time and effort is to create a basic landing page and see if anybody actually wants the thing you intend to build, before you build it. There is nothing worse than spending months building something only to launch it to blank stares and crickets.&lt;/p&gt;

&lt;p&gt;In this video I'll show you how to use MVP.css to create a basic landing page that you can put up online to test the waters. If you put it up online and people actually like the idea then you can build it. If not, no harm done, on to the next idea!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/NqHvbMRj7vc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
      <category>slingcode</category>
    </item>
    <item>
      <title>I shipped an Android game in 9 days and you can too</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Fri, 11 Sep 2020 09:34:05 +0000</pubDate>
      <link>https://dev.to/chr15m/i-shipped-an-android-game-in-9-days-and-you-can-too-3jd1</link>
      <guid>https://dev.to/chr15m/i-shipped-an-android-game-in-9-days-and-you-can-too-3jd1</guid>
      <description>&lt;p&gt;My game &lt;a href="https://play.google.com/store/apps/details?id=cx.mccormick.warlex"&gt;Central Park Nanotech Warlex is finally available for a buck on Google Play&lt;/a&gt;, hooray! \o/&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=cx.mccormick.warlex&amp;amp;utm_source=devto&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1"&gt;&lt;img alt="Get it on Google Play" src="https://res.cloudinary.com/practicaldev/image/fetch/s--aKlCNTqU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post is about how I made the game and got it live after nine days of work, and how you can do the same.&lt;/p&gt;

&lt;p&gt;The schedule went like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day 1: Kenney Game Jam 2020.&lt;/li&gt;
&lt;li&gt;Day 2: Kenney Game Jam 2020.&lt;/li&gt;
&lt;li&gt;Day 3: Got the Android build working.&lt;/li&gt;
&lt;li&gt;Day 4-8: Bug fixes &amp;amp; improvements based on feedback.&lt;/li&gt;
&lt;li&gt;Day 9: Google Play submission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course I was also doing my freelance work at the same time because my kids have to eat. 😂 Wouldn't it be great to be a full time game developer?&lt;/p&gt;

&lt;p&gt;Anyway, here's how I made it work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hack #1: Re-use existing code
&lt;/h3&gt;

&lt;p&gt;The first thing I did was to use an existing codebase to bootstrap my game. I used my product &lt;a href="https://chr15m.itch.io/roguelike-browser-boilerplate"&gt;Roguelike Browser Boilerplate&lt;/a&gt; but there are a ton of other ways you can get a head start. For example you could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with an existing open source game.&lt;/li&gt;
&lt;li&gt;Use a plug-n-play game engine.&lt;/li&gt;
&lt;li&gt;Use open game art assets from e.g. &lt;a href="https://kenney.nl"&gt;kenney.nl&lt;/a&gt; and &lt;a href="https://opengameart.org"&gt;open game art&lt;/a&gt; and &lt;a href="http://www.lostgarden.com/search/label/free%20game%20graphics"&gt;Lost Garden&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use good libraries for your preferred language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A huge mistake many amateur game developers make is trying to build everything, including the game engine, from scratch. Unless your goal is explicitly to learn rather than ship, you shouldn't do this.&lt;/p&gt;

&lt;p&gt;My interest is roguelike RPG games and you can find art assets and libraries for Javascript and Python to make it easier to build that type of game. The same is true for most other genres of game too like platformer, FPS, RTS, etc. - the tools are out there so go find them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hack #2: Use web tech
&lt;/h3&gt;

&lt;p&gt;I build stuff for the web first because I know that browsers run everywhere. Browsers can do everything you need a game to do. They can play sounds, show graphics, do 3d, take input, etc. There are also a &lt;a href="https://html5gameengine.com/"&gt;ton of great game engines for the browser&lt;/a&gt; now.&lt;/p&gt;

&lt;p&gt;Projects like Cordova and Electron mean we can bundle our app together with the browser and ship binaries for every platform very quickly. You don't have to start with binaries though because another advantage of building for the web means it is extremely easy to get your game in front of testers. They don't have to download anything, you can just put the game online somewhere and give them a secret URL to access it.&lt;/p&gt;

&lt;p&gt;So, leverage web tech so your game can run &lt;em&gt;everywhere&lt;/em&gt; in the future, is quicker to code, and is easy to deploy for testers now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hack #3: Do a gamejam
&lt;/h3&gt;

&lt;p&gt;Game jams are a &lt;strong&gt;great&lt;/strong&gt; way to hack your motivation. Because you know they are time boxed it's easy to crunch for the period of the jam. It also forces you to keep your game scope small and focused which usually results in a better game.&lt;/p&gt;

&lt;p&gt;Even though I made the core game in just two days during Kenney Jam 2020, people already seemed to like it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qmYsxmXf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jn9a8a11g8wbqigt3bho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qmYsxmXf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jn9a8a11g8wbqigt3bho.png" alt="Review 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Qn-nq58--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uojnouhlbschx3lsh7m1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Qn-nq58--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uojnouhlbschx3lsh7m1.png" alt="Review 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FKiWEAtt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2vtw36wrrr8xf7r3a6fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FKiWEAtt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2vtw36wrrr8xf7r3a6fw.png" alt="Review 3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This gave me the motivation to go ahead and publish it.&lt;/p&gt;

&lt;p&gt;I then spent a few days after the game jam fixing bugs people found and polishing the game up before shipping it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hack #4: Use Cordova to build for Android
&lt;/h3&gt;

&lt;p&gt;I had previously built Android apps with Cordova and it was cool, but it seems this has now got even easier. The basic steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure you have the Android SDK installed.&lt;/li&gt;
&lt;li&gt;Make sure you have Java installed.&lt;/li&gt;
&lt;li&gt;Get cordova installed with &lt;code&gt;npm i cordova&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a default project.&lt;/li&gt;
&lt;li&gt;Copy your web files into the &lt;code&gt;www&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can then start testing the app on your phone. Once your build is ready for production you do a release build, sign it, and upload it to the Google Play dashboard.&lt;/p&gt;

&lt;p&gt;There is some trickiness around getting all that installed and doing package signing. I set up a &lt;code&gt;Makefile&lt;/code&gt; to automate most of this and do it repeatably. I'll to do a &lt;a href="https://m.youtube.com/user/mccormix"&gt;screencast on my YouTube channel&lt;/a&gt; in future explaining all that so if you're interested stay tuned!&lt;/p&gt;

&lt;p&gt;After all this you wait a few days for the &lt;del&gt;Gods&lt;/del&gt; Google to approve your app and then...&lt;/p&gt;

&lt;h3&gt;
  
  
  Shipped!
&lt;/h3&gt;

&lt;p&gt;So that's it, that's how you ship a game in 9 days. Thanks for reading!&lt;/p&gt;

&lt;p&gt;PS Check out &lt;a href="https://chr15m.itch.io/"&gt;my Itch page&lt;/a&gt; if you want to see my games and from there you can &lt;a href="https://infinitelives.github.io/"&gt;sign up to the infinitelives list to be notified of new releases&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Make a coin-up game animation in pure CSS and Javascript</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Mon, 07 Sep 2020 03:40:39 +0000</pubDate>
      <link>https://dev.to/chr15m/make-a-coin-up-game-animation-in-pure-css-and-javascript-3bj4</link>
      <guid>https://dev.to/chr15m/make-a-coin-up-game-animation-in-pure-css-and-javascript-3bj4</guid>
      <description>&lt;p&gt;In this screencast you'll learn how to make a coin-up game animation in pure CSS and Javascript. You'll also learn about my process for quickly making these game-like CSS animations in HTML5 and Javascript using the &lt;a href="https://slingcode.net/slingcode.html"&gt;Slingcode&lt;/a&gt; online editor.&lt;/p&gt;

&lt;p&gt;👇 See below for the full HTML &amp;amp; CSS sourccce code!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Wjad0poQh90"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I've been having a lot of fun working on these juicy game-like animations for HTML5 games lately. These types of animations are a good way to bring heaps of bling to your web games.&lt;/p&gt;

&lt;p&gt;I'll be releasing a full set of animations you can use in your own HTML5 games pretty soon, so stay tuned for that.&lt;/p&gt;

&lt;h1&gt;
  
  
  Source code
&lt;/h1&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en-us"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Pure CSS coin-up animation&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"mobile-web-app-capable"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Blank HTML file for you to create something."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"animation.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://sfxr.me/riffwave.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://sfxr.me/sfxr.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;user-select&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;arial&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nf"&gt;#coinup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#178A94&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nf"&gt;#coin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;64px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bounce&lt;/span&gt; &lt;span class="m"&gt;2s&lt;/span&gt; &lt;span class="n"&gt;forwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;transform-origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="nb"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Coin up animation&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"coinup"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"addcoin();"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;SoundEffect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;34T6PkrBW3jQjhYnpdxv8qMiiuXscEMoYasigAhYRms6DWnYCKZ6dDYujNHfBWDv6o1fL1SfJbCreRwiyG1i4iKbpBKxZiMLPzbW9vMBhRaew3nBCVS1eaGF1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;addcoin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAudio&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;play&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;img&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;coin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;coin.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onanimationend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;coinup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;coinup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;bounce&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="err"&gt;33&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.215&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.355&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt;
  &lt;span class="err"&gt;23&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.755&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.855&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;-200px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;scaleY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.755&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.855&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;-100px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;scaleY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.05&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;60&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;transition-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.215&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.355&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;scaleY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;70&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.755&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.855&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;-50px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;scaleY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.02&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;80&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-timing-function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cubic-bezier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.755&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.855&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate3d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>html</category>
      <category>animation</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Customizing your roguelike graphics tileset (with JavaScript)</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Wed, 26 Aug 2020 03:01:50 +0000</pubDate>
      <link>https://dev.to/chr15m/customizing-your-roguelike-graphics-tileset-with-javascript-m3b</link>
      <guid>https://dev.to/chr15m/customizing-your-roguelike-graphics-tileset-with-javascript-m3b</guid>
      <description>&lt;p&gt;The other day I released &lt;a href="https://chr15m.itch.io/roguelike-browser-boilerplate"&gt;this template project for making your own online Roguelike game&lt;/a&gt;. I'm making a series of screencasts to show you how to create your own game using the boilerplate. This next video covers customising the graphics tileset and using JavaScript to pick tiles etc.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kto78PSTMkw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>graphics</category>
      <category>gamedev</category>
      <category>roguelike</category>
    </item>
    <item>
      <title>It's roguelike boilerplate launch day, yay!</title>
      <dc:creator>Chris McCormick</dc:creator>
      <pubDate>Sat, 22 Aug 2020 00:06:08 +0000</pubDate>
      <link>https://dev.to/chr15m/it-s-roguelike-boilerplate-launch-day-yay-2co0</link>
      <guid>https://dev.to/chr15m/it-s-roguelike-boilerplate-launch-day-yay-2co0</guid>
      <description>&lt;p&gt;I've been working hard on this thing for the past few months and I'm so excited to finally be bringing it to you!&lt;/p&gt;

&lt;p&gt;It's a web app template for creating your own roguelike game using JavaScript and web tech. It comes with a PDF guide and I'm currently recording a &lt;a href="https://www.youtube.com/watch?v=d1zhoXwOdtQ&amp;amp;list=PL5dyN9XHelZOl2yTZQu9IA4SQFcA3giac&amp;amp;index=2" rel="noopener noreferrer"&gt;screencast series&lt;/a&gt; to show you how to modify everything to make your own game.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1296729232450568193-980" src="https://platform.twitter.com/embed/Tweet.html?id=1296729232450568193"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1296729232450568193-980');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1296729232450568193&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Here's a link to the final product: &lt;a href="https://chr15m.itch.io/roguelike-browser-boilerplate" rel="noopener noreferrer"&gt;https://chr15m.itch.io/roguelike-browser-boilerplate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>roguelike</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
