February 2020 Summary

This month I continued to work on SDL Shooter, which is a space shooter written in SDL and C.  This game started as a presentation demo for the December 2019 Knoxville Game Design meeting.  The project source code is available on my GitHub account.  I’m hoping to release it on more platforms when it gets to a point where I feel that it is complete.  Right now I’m just having fun adding new types of enemies.


  • Foxtrot – Moves a few units either vertically or horizontally, pauses, and then moves in a new direction.
  • Golf – Snake type enemy that has a random number of tail links.  Each link of the tail must be damaged before the head can be damaged.  Moves in a sine wave at variable rates.
  • Hotel – Stationary enemy that constantly fires projectiles in a radial fashion.
  • India – Large enemy that explodes into four smaller enemies when damaged.  When the four smaller enemies are damaged they explode into eight even smaller enemies.  I need to make the explosion angles random, instead of the standard 90/180/270 and 45/90,135, etc angles.
  • Juliett – Hopper enemy that jumps in a parabola one to three units horizontally.  One issue is two of these enemies can jump to the same spot and overlap.  This could be solved by adding a target location variable for each enemy, and determine if another enemy has claimed that spot before jumping there.  I would also like to have the enemy attack the player’s ship in some way.  Either charge the player’s ship when it is aligned vertically, or shoot webs at the player’s ship to slow it down like in Zekkou no Tomodachi.
  • Kilo – A random number is displayed on top, and the player must shoot the correct binary sequence to defeat this enemy.  Added the current “attack value” below the target value, which makes completing the binary sequence a little easier.  The enemy has between 3 and 5 bits, so the maximum value for a 3 bit enemy is 7 and the maximum for a 5 bit enemy is 31.
  • Lima – A bat type enemy that starts sleeping, and then awakes and chases the player when the ship is near.  The enemy is only vulnerable when it is not sleeping.  The amount of time that it takes for the enemy to wake up is random.  The second level enemy moves faster and takes more damage to defeat.
  • Mike – Color orb enemy.  Three small orbs revolve around the center, which are either red, green, or blue.  The player must shoot the correct revolving orb to match the center.  If the center is yellow, cyan, or magenta, then it takes the correct two orb combination to defeat the enemy (such as cyan = green and blue).  Shooting an incorrect orb will make the orbs revolve faster for a short period of time and the enemy will shoot at the player’s ship.

I checked my Microsoft developer dashboard today to see if the XBox One Creators Program was still running.  I noticed that Kitty’s Adventure has now passed 50,000 acquisitions between XBox One and Windows Store.  It is by far the most popular game that I’ve released to this day.

Also this month, we had a great turnout for the online Knoxville Game Design Meeting.  This month’s topic was Java Game Development.

I spent some time updating my two college work pages for Georgia Tech and the University of Tennessee.  Links to those two pages are now displayed on the main menu on my site under Education.  I also found more of my old websites, which I uploaded and linked on my wiki page under Historical Pages.  I uploaded the source code for some projects that were missing, such as the Predator database projects.

Blender Simulation of Liquid Filling a Cocktail Glass

I finally resolved a problem that has plagued me for years, which is simulating liquid filling in a cocktail glass. It seems like this could be solved with a simple scale in the upward direction in Unity, but it’s a lot more complex. My cocktail glass model has two meshes, one for the glass which remains static and another for the fluid which increases in size as the glass is filled. The fluid mesh is an upsidedown cone with a flattened top. Simply scaling the fluid mesh will result in the fluid mesh not correctly filling the glass.

Simple scale of entire fluid mesh gives incorrect fill of cocktail glass
Simple scale of entire fluid mesh gives incorrect fill of cocktail glass

When I created the original fluid mesh in Blender , I believe I used the boolean difference modifier, but it’s been years since I created it so I could have possibly used some other method. For the animation, I used an armature in Blender with two bones. A bottom bone for controlling the ring of vertexes at the bottom of the fluid mesh and a top bone for controlling the ring of vertexes at the top of the mesh.

The new 2.80 version of Blender has significant changes for weight painting. I created the following infographic to show the process I use for weight painting a mesh. For my fuild mesh, I set full wieght of the top vertexes to the top bone, and the full weight of the bottom vertexes to the bottom bone.

Weight Painting in Blender 2.80

To solve the liquid filling problem, the bottom set of vertexes must remain unchanged, while the top vertexes move upward and scale outward. The fluid mesh is modeled with the glass filled. Therefore, in Blender the default pose is the last frame in the animation. I used 60 frames for this animation, so I set the keyframe for the 60th frame with the default pose. It is important to set the keying mode to location, rotation, and scale. In most of my games, I only set the key mode to location and rotation, since game objects are rarely ever scaled.

To create the filling effect, in Animation mode I set the frame in the timeline to the first frame. Then I select the top bone and scale it inward (on the X and Y axes) so that it matches the same diameter as the bottom of the glass (and same diameter as the ring of bottom vertexes). Then I translate the top bone downward, until it exactly overlaps with the bottom ring of vertexes. Then I add a keyframe for the first frame. Pressing play will show the simulated liquid starting from the bottom of the glass and filling to the rim of the glass.

Correct cocktail glass fill animation using two armature bones
Correct cocktail glass fill animation using two armature bones

I plan to use this new liquid fill animation technique to update Bartender Game in the near future.


SEO for Game Designers

First of all, I don’t claim to be an expert in SEO (search engine optimization), but I do know that there are things that can be done to improve your site’s ranking on the search engines.  I’ve been specifically researching how to improve SEO for game data.  Recently, I’ve had the problem of other sites pushing down my site in search engine rankings when doing searches for my games.  I decided to start working on driving more traffic to my game pages on my own site, instead relying on other sites to be the “homepage” of each of my games.

I’ve been doing some research over the past few days, and found that domain authority plays a big role when determining where your site appears in a search.  Your site may have superior content on a certain search topic, but it may not rank highly in a search if your site does not have a good domain authority value.

From what I’ve read, there are multiple factors that play a role in your site’s domain authority.  First is the age of the site or domain.  My levidsmith.com domain is 8 years old at the time of this writing, according to an online domain age checker.  However, the first domain that I ever used was gitcommand.com, which was my site when I was in college.  I recently reclaimed that domain, after letting it expire years ago.  According to the same tool, the age of that domain is 16 years 11 months old.  So I updated the DNS settings in my hosting account to do a 301 redirect for anything that lands on gitcommand.com to send the traffic to levidsmith.com.  Will this help search engine rankings?  Probably not since my old domain most likely gets zero traffic, but it definitely doesn’t hurt to have it redirect the traffic to my “new” domain.

SEO for games - Moz Open Site Explorer toolsThere is a good tool at Moz called the Open Site Explorer, which checks back links and gives your site an overall domain authority rating.  The free version only lets you see a limited number of sites in your link profile.  It isn’t the official source that search engines use to grade your site, but it provides a good picture of how your site scores.

Another factor is what is called back links.  Having links to your site from another site of higher domain authority will supposedly raise your site’s authority.  One problem I’ve had in the past is posting content to multiple sites.  For instance, I would post a game jam post mortem article on both my site, other game developer sites (which will remain nameless), and on the Ludum Dare site.  I always thought that if I posted a link back to the original article on my site at the top of the article, then my site would “get credit” for being the originator of the article.  However, from my research I’ve found that really isn’t correct.  Linking back to the original site may give my site some domain authority since it is getting a link from a site higher authority, but searches for my article will return the site of higher authority first.  On some search engines, it will only display the site of higher authority, and not show my site on the search results listings at all!  This is probably because the search engine thinks that my site is the one with the duplicate content.  So I’ve basically spent hours on an article that I’ve given away to another site for free.  That may not be a bad thing if you’re just starting out and want to get your name and content noticed, but I’m at the point where I’m finished giving away content and want the traffic directed directly to my site.  Supposedly, you can add a canonical link meta tag  to specify the originator site, but it only works when it’s located in the head tags, and most sites don’t give the user any ability to modify what’s in the head tags.

One option is to remove the duplicate content from the other site.  I’m assuming that this will result in a domain authority hit on my site, since I’m losing the back link.  However, this may not be so bad if the search engines think that my site has the duplicate content, which results in my site not being shown in the search results at all.  Hopefully if the search engine is smart enough, it will see the content gone from the other site, and then recognize my site as the true originator of the content.  The other option would be to remove the content from the other site, leave the link, and maybe just provide a snippet of the content.  Then just provide a link to “read more” at my site, and hope that the search engines rank the other site lower since a majority of the content is now missing on their site and still remains on my site.

Another factor that I didn’t know about is the linking text.  Apparently, having the text of the link match the search terms increases the likelihood of it showing up higher in the search results.  That’s a good reason to not just post plain link, where only the URL displays in the content.

SEO for games - IndieDB has high Domain AuthorityWhen I publish a new game to my site, there are a few sites that I use to create an online presence for my game.  Most of these sites provide the option to specify a back link to the game’s page on my site.

  • IndieDB – This site appears to have one of the highest domain authorities, and seems to be the IMDB of indie games.   I believe games previously had to be reviewed and approved to be included on IndieDB, but now it appears that games are approved by an automated process.  This site requires five screenshots and basic metadata for your game like genre and platforms.  I’ve noticed that when I post a game to IndieDB, it is included in some search engines within the hour after being posted, so it is crawled very frequently.  The content is also mirrored on ModDB, so your game may show up in searches on ModDB as well.
  • Unity Connect – This is another good place for posting your game.  It’s primarily for Unity games, but I think they allow all games, since there is a check box to specify whether or not your game was created with Unity.
  • Cartrdge – I was using this site when it first launched.  Back then, the site owners were very finicky about what content they allowed on the site.  I remember they deleted one of my games, because they said that their site was only for games that were in development.  However, it seems like they’ve  changed their policy and now allow all games.
  • Game Platforms – Probably the most important is having a link back to your site on the game platforms that are actually hosting your games.  Microsoft provides linking back to your game site from the game’s page.  This is something that can be easily missed, since it is not a required field.  Similarly, Google Play allows you to specify a link to the game’s page as well.  I don’t have games published on iOS, Playstation, or Nintendo, so I don’t know how their game pages work.

Here are some other sites that you can use as a game developer to build your site’s domain authority.  These are sites than rank highly when I search for myself (“Levi D Smith”) in search engines.

  • Channel Nine at MSDN – I’m still not sure what this site is supposed to be.  There are developer forums, shows, and events.  I think it’s supposed to be video service by Microsoft to provide updates to developers.  I created a profile on the site, which has a link back to my home domain.
  • CreateTN – This is only for artists in Tennessee, but appears to rank highly by search engines.  Unfortunately, it only allows links to their predefined social media sites.  It also asks for an address, which is will display on a map next to your profile, which seems a little intrusive.
  • Patreon – Having a Patreon site isn’t just for making money.  It will also help boost your site’s profile.  Be sure to put a link back to your site on your About you section, so that a link back to your site is on your front Patreon page.
  • Game Jam Sites – My profiles for the old Ludum Dare site and the new Dream Build Play site rank high in search results.  The Ludum Dare site link seems to no longer work, so it would be nice if they would 301 redirect the old author page to my profile on the new LDJam site.  The Dream Build Play site does not technically allow me to link to my site, but it does allow me to link to my developer diary, which is hosted on my site using the dream-build-play tag.  GM48 is another game jam that I’ve done a few times, and it allows linking back to my personal site on my developer page.
  • Game Hosting Sites – I primarily focus on Itch and GameJolt, and I have my site linked on my profile page on both sites.
  • Social Media Sites – Twitter, Instagram, Pinterest, and YouTube allow linking directly to my site.  I have not found a way to link to my site on LinkedIn yet, but I can put it in the text of my bio.  Tumblr doesn’t allow linking to my site in the profile, but I can put links to my games on my site in my posts.  Pinterest provides a way to validate your site to display a link on your Pinterest page.  YouTube also provides a way to validate your site, allowing you to create links directly to your site from a video Card or an End Screen Annotation.  I’m currently in the process of creating links to my game pages from the corresponding game videos on YouTube.  It’s a long monotonous process, but it seems like starting with my most popular videos (the ones that will get the most potential traffic) provides the best value.  A few days ago, I added a link to my Creating My First NES Game article from the End Screen Annotation for my Programming the Nintendo Entertainment System video, and I can already see some traffic coming to my site from the video.
  • GitHub – Provides linking back to my site on my profile.  I’ve put some of my projects that I’m fine with being public on GitHub.  However, I feel like I’m giving away traffic for my content again.  However, the hosting is free and I currently don’t have my own git repository on my site.
  • SoundCloud – A great site for hosting soundtracks for your games, and it provides a link back to your main site.  The only downside is that the free version only allows storage of about two hours worth of music, but that’s still a lot for free.  I’ve had difficultly building a following on SoundCloud, even though I regularly post my music to the site.  It seems like the only traffic I get is when I embed one of my game soundtracks into another site.
  • Reddit – I found that I can get lots of traffic on Reddit, especially with YouTube videos, but there can be backlash for not following “Reddiquette” so I try to promote my work sparingly.  I did create my own sub-reddit specifically for posting information about my games, but it doesn’t appear to get any traffic.

The big question that I have, is whether or not my site is negatively impacted if it links back to a site of higher authority.  I doesn’t seem like I would be losing any authority, but I could be validating that their site is the official game site.  I’ve heard that link position in the article is a factor, so I put my external links at the bottom of my game’s page.  That would make sense, as Wikipedia always places their external “See also” links at the bottom of the page.

Another thing I checked was old social media sites.  I had a Facebook page called Levi D. Smith Software, which is different from my primary Levi D. Smith Games page.  Facebook provides a tool to merge pages if the names or something are close enough, but for whatever reason Facebook couldn’t merge my two pages.  Therefore, I just set the former page to private so that traffic is no longer split between the two.  I also had a Google Plus business page called Levi D. Smith Software which was splitting views from my regular Google Plus page.  Apparently, I used up all of my tries for changing the name, so I just removed the page all together, so I can just focus on the personal page.

Supposedly page load speed also plays a factor in how well your site ranks.  The two sites that I use for testing my page speed are GTMetrix and WebPageTest.org.  I also use the WP Super Cache plugin for WordPress.  The plugin generates static HTML version of requested pages, but the page still has to be generated on the first access, unless the cache is preloaded.  I’m currently evaluating the settings for preloading the cache.  The first time I tried it, the plugin got hung during the cache generation.

To put it bluntly, some of my games just have bad names.  Two examples are Archaeology and Free the Frog.  My Archaeology game will never be found in a search result, unless someone specifically types “archaeology levi d smith”.  Free the Frog is bad because the word “the” is typically ignored, so it returns results for everything related to “free frog”.  On the other hand, search engines do take the URL into consideration, so it was a good decision when I made my custom Game content type in WordPress, so that every one of my games automatically contain the word “games” in the URL, in the format https://levidsmith/games/<game name>.

One issue with my SEO is that for many of my old accounts, I used my handle and gamertag, which is GaTechGrad.  If I had to do it over again, I would have made everything LeviDSmith, to avoid splitting the traffic between the two names.  Unfortunately, I’m not going to go back and recreate all those social media accounts at this point just to change the name.

Google Webmaster tools is good for seeing where your site ranks for given search terms, and how many people clicked on your site when it appeared in search results.  WordPress Jetpack statistics also shows how many people who have viewed your site and how they found your site.  Bing also has it’s own version of webmaster tools.

SEO for games - Search Engine Results for Blocks of NibiruEach search engine seems to be a little different.  Based on a search for my game Blocks of Nibiru, Google seems to favor IndieDB, Itch.io, and YouTube before listing the game on my site.  The same search on DuckDuckGo lists my site after YouTube and ModDB, but only if I put the search words in double quotes.  Witout the quotes, DuckDuckGo does not return my site at all.  However, it seems like DuckDuckGo’s results are very volatile, and the same search may return different results at different times.  Bing lists the game on ModDB first, then YouTube videos of the game, then IndieDB and Itch.io, but it does not list my site at all, unless I add “levi d smith”.  Bing seems to heavily favor domain authority, so it seems to be hard to appear in the search rankings unless your site is a part of a major corporation.  On the bright side, all of the search results are pages that I control, so I do have the ability to tweak the content on both my site and the other site.  Unfortunately, making changes may not effect the search results until the sites are crawled again, and it is nearly impossible to know when that will happen.

To ensure that search engines are crawling all of your content, it is important to specify a sitemap in the Bing or Google webmaster tools.  Sitemaps are used to give search engines essentially map of your site, which includes a list of all of the pages and media on your site, along with when each was last updated.

Adding links from the previously mentioned sites to your own domain probably won’t help increase your search rankings over night.  I believe the SEO for game rankings is improved by based on people visiting those sites first.  It’s all about creating the potential for people to click on the link to your site from those other sites.  Consistent branding and making a game that people want to see more plays a huge role as well.  I also suspect that money plays a role as well.  If you pay enough in ads, your game will pop to the top of the rankings.  However, most search engines will display a notice about which links are promoted.  Who knows, maybe I will write my own game search engine some day.