Search This Blog

Friday, August 31, 2018

In-App Purchases

At one point, games on mobile devices were fun.  Addictive even.  Today, they are still addictive - depending on the game.  But my patience with the overuse of in-app purchases (IAP) has worn away.  If a game wishes to inundate me with ads and pleas for cash then I delete them.  Even if it's a game that I once loved to play.  I've no time for the nonsense anymore.

I absolutely support a developer's right to ask for payment for their work.  Free apps that have an IAP for purchasing the "full version" or to remove banner ads are alright by me.  But if your game is downright impossible to play without "boosts" and those "boosts" are also available as "permanent boosts" and you flood me under with downright pushy ads then go away.

And if selling my virtual farm goods to virtual vendors in the game subjects me to an ad that I'm required to watch for me to claim the coins I worked (virtually) to earn then I'm deleting your game.

Look, I'm an indie game developer.  I love to write games and I've got a long list of game ideas and works-in-progress.  I develop my games in Unity, Roblox, or just roll my own games using SDL and C++.  I understand that making games is work and that we enjoy getting some sort of payment for that work.  For me, I really like hearing from people who play my games and say, "That was a fun game!"  I appreciate the folks who send me a dollar here and a few more dollars there.  But I absolutely refuse to subject my players to pay walls or pay-2-win or cash grabbing tricks designed to suck money out of them.

Enough is enough!  Make games.  Make fun games.  Ask people to pay for them and even offer some incentive boosts for purchase.  But don't take your audience for granted.

You'll lose the confidence of the gamers you're trying to keep playing your games.

Sunday, March 18, 2018

The Programmer's Dilemma

It's been a long while since I did any coding in the Linux kernel.  I was never a contributor to the kernel.  I never pushed any patches.  I did, however, enjoy the simple changes I made to the code that I ran on my sandbox server.  This was way back around the 0.99 days.  These journeys into the Linux kernel were brought on mostly for "academic exercise" while brute-forcing through my operating systems class in college many years ago.  I was successful at building that kernel.  It loaded with the simple boot loader that I wrote in assembly language and C.  I put a notch on my keyboard and checked off two items on my nerdy bucket list.  I never got more involved in kernel programming beyond these initial steps.

As you might know from previous posts, I am not a professional programmer any longer.  That was many many years ago.  When I switched from programming to systems administration I found that, over the years, my programming skills began to fade.  At one point I was rather good at C and was growing more functionally competent with C++.  Occasionally I would sit back and wish that I had stayed with programming.

When I started getting back into programming I found that, although going back to basics wasn't entirely necessary, I needed a refresher in how certain things worked.  Pointers had become rusty and function references were now as foreign to me as the surface of Mars.  I took to task going over each and every page of the C++ Reference which served as an excellent catch up tool.

I then jumped head first into the waters of game engine design.  And drowned almost immediately.

I had forgotten Rule 1 of learning programming.  Stay in the shallows until you learn to swim.

As much as I wanted to write my pet project game engine I realized that I absolutely had to start smaller.  The years away from formal programming had taken their toll and I was no longer able to "think like a programmer".

Friday, March 2, 2018

Troubleshooting Gnomoria

As you might have read from my earlier post about my favorite games, I have a fondness for Dwarf FortressGnomoria (available on Steam) is a game about gnomes who, much like the dwarves, start out with a cart and some dreams.  Gnomoria takes the Dwarf Fortress idea and simplifies it (greatly) and leaves us with a more managable "city" builder game.

Our intrepid dwarves gnomes take to task building farms, harvesting wood, and digging holes in the ground (across multiple z-levels).  Unlike DF, G comes with some rather nice graphics.  Personally I like the ASCII of DF though I also run with the Phoebus tileset, but that's a story for another time.

Anyway, I have played Gnomoria on occasion for several hours a go.

One day I did some cleaning up of my system.  I got rid of everything that was old and stale.

And when I reinstalled Gnomoria recently I found that it wouldn't start.  It launched and crashed almost immediately.  No logs, no dialog box, no anything that might give some clue as to what was going on.  Even the Internet was quiet about this.  Not surprising since Gnomoria has now gone to version 1.0 and no longer supported.  Or, rather, that's what it seems.

I was determined to fix this issue.  Since I knew I had just cleaned up a lot of old junk, perhaps that had something to do with it.  So I dusted off my old hat from my days as a tech support desk jockey and dove headfirst into the problem.

First things first.  I looked at the Gnomoria directory in the Steam install path.  No logs.  Nothing really except the game files.  Everything looked to be in order.

And then I saw it.  A folder named "XNA".  Wait a minute.  Was this game written (at least in part) using the now defunct Microsoft XNA Game Studio?  There in the folder was the .msi file to install the XNA redistributable.

These redistributables are essentially library files that contain the shared data that were used to create the game.  You see, a programmer can set their program to link as a static or dynamic executable.  Since static builds are generally larger than dynamically linked, we oftentimes will build our projects as dynamic.  Doing so leaves us a smaller distributable archive and requires the end user (the gamer) to already have (or willing to download) the dynamic libraries that we used during build time.

For convenience, Gnomoria included the installer for the XNA libraries.

I already had the latest XNA redistributable installed from my days of tinkering with XNA Game Studio.  During my cleanup, I removed it since I no longer was testing the XNA waters (and also since Microsoft killed it).

So I grabbed the latest XNA redist from Microsoft, installed, and Gnomoria is running once again.

Tuesday, February 13, 2018

Smart Folks Who Need More Recognition

There are a few people who I've been reading about lately who I feel deserve more recognition.  These are folks who did amazing things generally in a crisis.  This list focuses on those who's work is tied in science and geekery and nerdy stuff.  Why?  Because I'm a geek and a nerd and it's my list.  Make your own.

I should probably point out that the list is not inclusive and may likely grow as time goes by.  It's also a non-ordered list.  I'm just adding names and links to information.  Why?  Because I'm lazy.  And, more importantly, because researching all these folks takes a lot more time than getting their names written down.  I'm not ignoring the irony of a list of people who deserve more recognition wherein I don't provide any further details about them beyond a terse summary.  For that I apologize.


  • Don Eyles - a young mathematician who worked at the MIT Instrumentation Lab during the Apollo days.  He was instrumental (sorry for the pun) in the success of the Apollo 14 moon landing.
  • Margaret Hamilton - She was director of software engineering at the lab where Don worked.  Women in STEM is something that I rally behind.  Margaret was doing cool stuff in a time when most women were not given the recognition they deserved.  Also, see below at the end of the list.
  • Martin "Quill18" Glaude - a YouTube and Twitch personality who does "Let's Play" videos.  His style of presenting is both educational and entertaining; something that can be tricky to pull off for those who aren't performers.  He also has a side channel where he does training videos on video game development, primarily with the Unity game engine framework.  His motto of "What could possibly go wrong?" is frequently challenged during game play.
  • Yan "TheCherno" Chernikov - another YouTube game developer who has an exceptionally well produced series of educational videos on C++ programming and OpenGL.  His approach to teaching programming is a refreshing change from the "Um.  Ah.  You see...  Just do this and don't worry," style that many other programming "instructors" pitch.
  • Tarn "Toady One" Adams - an indie game developer who, along with brother Zack "Threetoes", created the super FUN game of Dwarf Fortress.  I cannot tell you just how amazing the game is or what dedication these two guys show for the game.  If you like roguelike games and (especially) games that torment and abuse you as a player then you must get Dwarf Fortress.  Pick up the Lazy Newb Pack as well to save you some headaches.


  • Margaret Hamilton - This Margaret is the woman most people will recognize, if not by name then by her performance, as the Wicked Witch of the West in the original 1939 movie adaptation of L. Frank Baum's The Wizard of  Oz.

Setting Up Visual Studio 2017 CE

The Problem

I've grown tired of having my Visual Studio configuration getting jacked up between projects.  I like my settings the way they get set and I rarely ever want them changed.  I might not have the greatest workflow.  In fact, I'd wager that mine really sucks compared to professional programming shops.  However, some semblance of structure must hold between projects.

I know that the there are project settings files and user profiles and other mystical bits of data on my drive that store the needed information.  It's just that I find my time more valuable at coding than managing those haphazardly thrown files.

So this is just a blog so that I have some place to refer when I (once again) need to unscrew my configuration settings.  Enjoy.

The Solution

I start out by launching Visual Studio 2017 Community Edition.  That's easy.
Once it's finished opening up, it sits patiently for me to do something.


First up is to create a fresh new empty project.  File...New...Project or CTRL-SHIFT-N


Next is to name that project and create the solution.  I select Empty Project, fill in the project and solution names, provide the directory location, ensure that the "Create directory for solution" box is checked, and click on OK.  I locate all by projects in a directory that is easy to find and short enough to not get stupid.


After I click OK then VS presents me the shiny new solution explorer.  The "folders" here are not actually folders but, rather, filters.  They act like folders but don't physically reside on the hard drive as a folder does.  Source and header files will properly get sorted by these filters, but I want to ensure my code is properly kept on disk in a way that makes sense.


And for that, I use the "Show All Files".  If I right click on the project name (SFMLdemo in this case), I get a context menu where I click Add...New Folder.



And then I create "src" and "include" folders.  Inside those I create the appropriate source files.  Neat.  Tidy.  Switching between folder and filter views allows me to navigate easily around where my code resides.


So, then what?

Now that the files are sorted out and my Solution Explorer looks tidy what is there to do?

I find that the default settings in Visual Studio are lackluster.  I'm not a pro, but I know what I like.  When you build a project in Visual Studio, the defaults plonk files into weird locations.  I like to put the intermediates and executables into more sensible locations.

I open up the project properties and make some changes.


First to change are the Output Directory and Intermediate Directory for all configurations and platforms.

Output Directory is set to:

$(SolutionDir)bin\$(Platform)\$(Configuration)\

Intermediate Directory is set to:

$(SolutionDir)bin\intermediates\$(Platform)\$(Configuration)\


This keeps things cleanly divided for platform (x86, x64) and configuration (Debug or Release).

Would you like to know more?

Yan "TheCherno" Chernikov on YouTube has a fantastic video on how he sets up his Visual Studio experience.  It's what I followed.  So if you would like to hear this from someone with a bit more personality and experience than I, then I urge you to check out his video.  Check out his channel!  It's amazingly well produced by a pro game developer who teaches C++ and OpenGL.

Sunday, February 11, 2018

What Video Games Do I Enjoy Playing?

I enjoy playing video games.  They provide an effective escape from the crazy day-to-day of life.  With all the games to choose from it's a daunting task to say, with any finality, what games drive me.

Dwarf Fortress

Dwarf Fortress

So I'll take a different approach.  I'll begin by describing the game format and then dive deeper from there.  So, without any delay:


  • Open world
  • Sandbox
  • Emergent gameplay
  • Everyman
  • Procedural generated worlds
  • Replay value
  • Defined story that provides some depth or realism to the world
  • No hand holding, or only during the "tutorial" stage
An open world is simply one where the player is able to run off in any direction and have a vibrant world open up for them to explore.  There are no boundaries or invisible walls or other game engine constraints to prevent one from fully looking into every nook and cranny of the world.  Now, that isn't to say that the world has no bounds.  It's be impractical to have a game where there aren't boundaries.  But those boundaries should feel organic and not jarring which only serves to remove the player from the experience.

A sandbox game, for me, simply expands on the open world and provides a rich interactive experience for the game.  For example, if I run up to a tree and I have an axe I'd assume that I could chop that tree down and gather wood.  With that wood I might be able to build a fire, or use a skill such as carpentry to refine that wood into planks that can then be useful for building a home.  Having a fully destructible world can be a challenge due to restraints inherent to the computer being used to play the game.  However, if the game can present an organic way of informing me what I can and cannot do, then I will accept what comes.  If I run to that tree with my axe and I cannot chop it down then I'll know not to try that again on any other tree.  Ultimately, however, a sandbox game should allow you to do damn near anything within the limitations of the computer's power to calculate all the conditions.

Emergent game play is a game's ability to adapt to choices in the game.  If I do X then Y happens which may trickle down to Z.  As a brutish Orc, I may run up to a hapless human traveler and kill them on the spot.  That human was a noble with a powerful family.  That family commissions a hunt for me and soon the whole world is looking for me.  The game (a sandbox open world one) would evolve to the ever changing dynamics that arise from general game play.  In other words, the world is not on rails like a roller coaster moving from A to B with no segue to other challenges.  It's the butterfly effect.

I enjoy games that let me be the Everyman (or woman).  Most games present the player character as a hero, either from the start or as a direct evolution of the game progression.  Emergent game play might allow me to eventually evolve to that hero but I shouldn't necessarily start out as one.  I rather like the idea of man-vs-everything games.  That lonely survivor trying to make a new start after a post-apocalyptic disaster or zombie infection.  My skills, attributes, and abilities should reflect my status of a normal Joe and allow me to build out that character however I choose - even if those choices progress to a dangerous handicapping of the character.  Choices should matter.

Procedural generation of a game world (or a portion of it such as randomized dungeons, villages, or minor zones) is fantastic.  It allows immense replay of the game since you know that each play through will be different in several aspects.  I don't care for games that you beat once and never touch again.  Games that rely on memorizing patterns or shortcuts do not interest me nearly as much as ones that allow me to continually test myself in the world.  I get that major points of interest may not do well as procedural objects.  Cities should be the same since they don't change over the course of time, generally.  But dungeons and other minor outlying zones do rather well when they are random.  They need not be random each visit in a single game save, but each new game should have them regenerate so that The Blighted Cove isn't the same round grotto each time I play a new game.

That leads, naturally, to replay value.  If I play a game once and never touch it again then that game better have been a AAA top selling title that was immensely joyful to experience for that single play through.  But I much prefer a game that will allow me to start over and see things fresh.  There are many ways of accomplishing this, but Dwarf Fortress and the rogue/nethack games exemplify this.  Those worlds (large or small as they might be) are random each and every time you start a new game.  This means that I won't know the ending before the game is done.  And in the mantra of Dwarf Fortress, "losing is FUN!"

A game's story line is important.  No one really wants to play a game where there is no narrative that drives some of the action.  If I'm just plopped into a world without any clue of what to do then I'm happy to figure that out - if the game is a proper open world sandbox that allows for emergent game play.  One can quickly determine what is possible and what isn't.  But if the game doesn't allow for this then give me a story that can at least jump start the game play.  "You are alone, tired, cold, and hungry.  Do what you can to survive."  That small "story" is enough to know that I'm screwed from the start and I need to get moving or I'll die.  A game's story needn't be like a novel with a start, middle, denouement, and conclusion.  But it should at least try and paint some sort of picture that can get things moving.  Nothing ruins a game faster for me that one that has a crap story (or, worse yet, none at all).

And we're left with the "no hand holding" rule.  For the love of god, do not hold my hand in a game.  Let me figure it out.  Let me solve the puzzles.  Don't deus ex machina a solution for me and don't provide some idiotic trope that gets me through to the next phase.  I expect my games to have some degree of challenge (even if I can set it to "newbie friendly" or "insane mega death").  I don't like games on rails.  If the story line is on a rail then the game had better let me do what I want when I want.  If I don't want to go off and kill some dragon that holds a grudge against humanity and time then I'm not going to go off and kill that damn dragon - and the game better be happy with that choice.

So from that list, I can present a list of games that have set themselves apart by ticking as many of those boxes as possible.  From these below you can get an idea of other titles that fit the bill as well that I didn't include.

  • Dwarf Fortress
  • Rogue and the so-called "roguelikes" such as the classic nethack
  • The Sims
  • Morrowind


As you can see, graphics are a lesser concern for me.  I do enjoy eye candy but not if that graphical immersion sacrifices the overall game play.  Graphics are not a solution for a poorly designed game.  I enjoy playing Skyrim.  I love that game.  But it isn't winning awards from me since I find several mechanics of the game more than a bit wonky (compared to Morrowind, say).  The Sims 4 isn't nearly as open a world as The Sims 3 was by any stretch of imagination but it does provide that Everyman and sandbox feel where I can do almost anything I'd like to attempt.

Of course, that list leaves off a ton of great games from the early days of computer gaming.  Concepts like "open world" and "sandbox" were not around back then.  So to conclude, I'll mention those titles from my childhood that still hold value for me.

  • Nearly any Infocom interactive fiction
  • The Bard's Tale
  • Ultima IV
  • Most SSI adaptations of the classic TSR Dungeons and Dragons
  • Lode Runner




When I was a kid, computers weren't powerful.  My first games were all text based and, damn, were they amazing.  Infocom was a company that excelled at interactive fiction.  The language parser used in these games such as Zork, Spellbinder, and The Witness were nothing short of spectacular.  The allowed for complex grammar to play the game and solve puzzles.  One of the reasons I love games with puzzles that require solving is directly tied to my getting so stuck in Infocom games.



The Bard's Tale series is one of the best computer RPGs that I've ever played.  They were full of amazing design decisions (for the time) and the transitions between cities such as Skara Brae and the various dungeons was nicely done.  You control a party of adventurers to go off and do great things.  Or not.  I spent so much time in the cities doing basic mapping that I oftentimes forgot that there was a plot happening around me!



One of the best games I ever played was Ultima IV Quest of the Avatar.  The Ultima series of games evolved from once having really simple vector style graphics all the way to some beautifully created worlds in the later releases.  But Ultima IV has held dear to me over all the others.  It's the first one that I fully mapped out and completed all by myself.  And it took for-freaking-ever!  From charting moon gates to finding all the mantras and runes to tracking down the goddamned bell, book, and candle I was never bored.  And all that glorious mapping!  I love to map in games and, sadly, many games these days provide a silly on-screen compass and minimap that totally absolve the player from those basic responsibilities.  The story was on rails, but you weren't obligated to go off and finish the game.



SSI was an amazing company that produced all of the classic TSR games based on the Dungeons and Dragons property.  Curse of the Azure Bonds got more play time than other titles but all of the games were nothing short of amazing.  I love to play pen-and-paper D&D so seeing it translated so well to the computer was like Christmas.


Lode Runner was simply marvelous.  It was a platform puzzle-like game where you negotiated a mine gathering loot.  Various enemies would spawn up and chase you around.  They were an annoyance and sometimes proved to be real menace.  The game included a level editor which allowed you to design your own game levels to play and give to your friends.  I spent so many hours with graph paper drawing out levels and that directly led me to total appreciation of any game that came with an editor.  Lode Runner is a simple enough game to play and it lends itself well to a beginner/intermediate programmer challenge.  It can be implemented in ASCII, traditional tiles, or even 3D.