Purgatory Purgers

Here We Go Again!

Back in May, my life was starting to slow down enough to spend some time on game development again. Shortly after, I reached out to my old friend Eric to reconnect.

After a few weeks and several emails back and forth, we decided to start again, this time on a new project.

Game Mechanics

Eric suggested Chip’s Challenge (specifically, the Windows 3.1 version) in brainstorming ideas, which incorporates a few key elements:

  • Collecting McGuffins (computer chips)
  • Pushing things (similar to Sokoban)
  • Avoiding enemies

While Chip’s Challenge is more complex than that, we decided to focus on those 3 design ideas and start there. Eric proposed the idea of the player controlling an angel and a demon trapped in limbo. The two would have to work together to solve puzzles to advance to the next level.

The McGuffin would be souls, which would be set free from limbo to either ascend to heaven if collected by the angel or descend to hell if collected by the demon. Collecting all of the souls would allow the player to exit the stage and move on to the next level.

We incorporated a Sokoban-like push mechanic and decided to give this ability to the demon. Blocks would be used to obstruct enemy movement/line-of-sight and also to solve key/lock puzzles.

But we also needed something for the angel to do, so we decided to include water tiles that only the angel could traverse, using the same key/button that the push mechanic utilized.

After getting these features working, I had the idea to introduce bridges that the angel could lower, allowing the demon (and, by extension, blocks) to traverse areas that would normally be cut off by water.

Next Steps

With most of the core mechanics working, there’s a lot to do insofar as creating assets (art, music, etc.), levels, and the like. Eric is primarily responsible for level design, so I leave it to him to work on cranking those out while I work on polish.

Beaster’s Dungeon Revisited: Part III

When I last left off, I managed to get the trap placement mechanic working as designed. Of the core mechanics I needed to get working, the last one remaining was enemy platform pathfinding…

Platform Pathfinding Challenges

As previously stated, the game’s object is to ward off hoards of enemies trying to navigate their way to your treasure vault by placing traps and barriers in their way.

The player can navigate the environment by moving left, right, jumping, and falling.  I wanted to give the enemy a similar capability:

In this scenario, an enemy character can walk left or right and can clear obstacles up to two squares (32x32px tiles) high and three across. Each scenario is numbered and represents the following:

  1. All possible ‘jump’/walk movements from a platform (1-3 across, 2 up)
  2. Walk left or right 1 square
  3. Drop down left or right
  4. Jump up left or right 1 square
  5. Jump up left or right 2 squares
  6. Jump up left or right 2 squares, illustrating that the platform might be floating (i.e. allows free movement beneath it)
  7. Jump across left or right 1 square and up 2 squares
  8. Jump across 2 squares (same height)
  9. Jump across 2 squares and up 1 square
  10. Jump across 2 squares and up 2 squares
  11. Dropdown 1 square left or right from any height to a platform below (this is implied in 3, but I wanted to illustrate it explicitly)
  12. Drop down to a platform of any height, 1 square left or right across
  13. Drop down to a platform of any height, 2 squares left or right across

While I found a couple of examples of this working/implemented in GML using a modified version of the A* Search Algorithm, I could never get them to work within my project. I discussed the problem with my friend Jason, who created a working prototype for me that met all of the design specifications. But not fully understanding how the code worked, I failed to integrate it.

Now that I have the time to troubleshoot it, I’m reluctant to do as I fear that I don’t understand it well enough to support it. Instead, it might be better to build something simpler…

Possible Solutions

Thinking through the problem, there are many other ways I could have solved this. Wrecking Crew for the NES comes to mind:

Enemies (and the player) in Wrecking Crew use ladders to navigate up and down platform levels. Why couldn’t I implement a similar feature?

Ladders

For example, instead of trying to make the enemy AI smart enough to navigate obstacles with a preset of constraints/scenarios, I could have them wander left and right across vertical planes, moving up or down when they reach a ladder, depending on whether the vault was above or below them.

Alternately, rather than placing ladders in fixed places, perhaps some enemy types could create erect them?

Stairs

Another option would be to use teleportation in the form of background staircases:

In this example, the enemies could access specific floors using “staircase” objects that would move them from point A to B and B to C, and vice versa.

Either scenario would necessitate creating two extra animation frames for each enemy sprite. Not a deal breaker, but something to consider…

Revisiting the Triple Threat

About ten years ago, I distilled video game development into three core skillsets (i.e., the triple threat):

  1. Art
  2. Music (and sound effects)
  3. Programming

I’ve always been interested in art (drawing, sculpting, and to a lesser extent, painting). I taught myself how to play simple melodies on a cheap Casio keyboard in my teens. I learned to use, repair and maintain personal computers in the early 90s out of necessity (I didn’t have much money, so my choices were to fix it or do without).

Eventually, I started entertaining the idea of combining my love of art, music, and computers to try my hand at making video games instead of just playing them. Thus began my journey of self-discovery.

Art

I’d always been able to draw relatively well by hand. I lightly scribbled rough shapes, then fleshed them out with strong lines. As technology became more accessible, I’d digitize my art using a flatbed scanner.

I even purchased a digital camera and some clay in the early 2000s to sculpt models and photograph them from different angles in much the same fashion as Adrian Carmack did for DOOM. I could never get the hang of 3D modeling or translate these analog skills into digital media. In time, I abandoned that track in favor of pixel art.

At first, I was terrible at it. But by studying examples, watching tutorials, and practicing, I developed proficiency using Pyxel Edit. I started with a 16-color EGA palette, then later expanded this to the 52-color NES palette.

This has become my niche and primary medium for artwork creation. Tile sheets are relatively quick to make, which is important when you’re a one-man operation. There are 40 years of examples to draw upon for inspiration.

Music

I’ve been writing music for almost 30 years on the Amega Module format, beginning with tunes written on Fast Tracker II using samples ripped from other people’s files. Later, I sampled some high-quality instruments – these were used in the publication of my first album.

Unfortunately, the songs and samples used were lost to time, but I still have a 20-year backlog of my previous work,  dating as far back as 1997, all written for games that existed only in my imagination.

These days, I use a Windows port called “Skale Tracker.” It’s based on FT2, can export to .WAV and .OGG formats, and supports up to 64 tracks (although I rarely need more than eight these days and write chip tunes with half that). I’ve mixed and mastered my exported works in Audacity and have been very satisfied with the results.

Programming

Programming has always been my biggest weakness. I’ve never been the kind of person who can read a book on a subject and put that knowledge into practice. At best, I can look at examples, then adapt those to my needs once I understand how.

Someone once told me that DOOM was programmed in C++ and that I could do likewise. I remember seeing a boxed copy of Borland Turbo C++ at the local Best Buy, retailing for $300. I remember thinking then that if only I had the money to buy it, I’d have everything I needed to program my own version of DOOM. I was woefully ignorant back then…

Many times over the years, I’d hoped to get around my limitations by using a game creation engine,  my first exposure to this was around 1995. I’d gotten ahold of the Pie in the Sky Software’s 3D Game Creation System for MSDOS.

It was a 2.5D game engine capable of creating games slightly beyond Wolfenstein 3D (floor and ceiling textures, angled walls) but fell short of DOOM (no height variable). While I had limited success designing very simple levels, I didn’t understand its limitations or advanced features and gave it up in frustration.

In my late teens to early 20s, I experimented with 3D Game Studio.

I could create primitive shapes, texture them, and use those objects as building blocks to create a castle out of modular pieces. I could render the map and fly through it, but I had no idea how to use its scripting language. I continued to toy with it for a couple of years, but again, I got discouraged as my imagination outpaced my ability.

In 2014, I picked up GameSalad, and created this website. I had no idea what I wanted to create, so I groped around aimlessly in the dark, bumping into bugs and lacking support.

At the time, GameSalad was primarily marketed to Mac users, and the Windows version lacked many core functions. By the time it caught up to the Mac version, they had stopped offering the Standard Edition for free and switched to a subscription model. I didn’t feel comfortable paying for something I wasn’t entirely sure I could learn to use, so I abandoned it and moved on.

I discovered Game Maker Studio in the spring of 2016. I teamed up with my old friend Eric, and we set out to learn the engine. Eric volunteered to do the programming, I would do everything else (artwork, music, design, documentation, project management).

In the early days, YouTube tutorials were our primary source of GMS programming information. Later, I would compare these to “let’s play” videos rather than proper lessons. Thankfully, I eventually discovered John Janetka’s Game Programming Course (GPC). This was a game changer for us (well, me anyway). While the second half of the lessons became disjointed, it was enough to see me through the creation and publishing of my first game.

Unfortunately, I’d run out of time (and money) and had to start working again. Work became all-consuming, and after spending 10-12 hours of skull sweat a day on technical matters, I didn’t have the energy or drive to devote to game programming when I got home. On the weekends, all I wanted to do was sleep.

I tried to pick it back up several times but couldn’t get back into the habit…

When Stars Align

That all changed this year. I have…

  • Started a new job with a pension, so now I have a future and retirement to look forward to.
  • Rid myself of $117,000 of student debt.
  • Nearly paid off my mortgage (8 months to go).
  • Lost 43 lbs. of excess weight through diet and exercise, and I am on track to be back to my ideal weight by the end of the year.

I’ve finally reached a point in my life where I can resume my pursuit of game development now that I have the time, energy, and resources to do so.

More to come…

Changes

“Time may change me, but I can’t trace time.” – David Bowie

About 8 weeks ago, I celebrated my 1 year anniversary in my new role. A week after that, my manager resigned and I was tapped to take his place. Since then, it’s been a whirlwind of changes and new responsibilities.

By all accounts, this is old hat for me, but the demands on my time have increased significantly, becoming greater and greater as I unravel years of mismanagement and willful neglect.

While I’m very happy in my new position, I am busier than ever, and even less inclined to do anything productive when I get home after 10-12+ hours of skull sweat…

Pressure requires a release valve, and lately, my pressures had been relieved by playing games rather than making them. What’s worse is, these games introduced a whole-new set of pressures and demands on my time – so much so that it felt like a second job, albeit one which I wasn’t being paid to do.

###

While playing games can be fun and interesting, that part fades quickly. What keeps me interested is the social interaction; meeting and spending time with new “friends”. What I found was that for the people I was spending a great deal of time with, the opposite was true – they had no interest in camaraderie, just a person to occupy a seat at the table so they could carry on their game.

Maybe it’s the age gap speaking here, and relationships have given way to instant gratification – maybe I found myself surrounded by the “single serving friends” of Chuck Palahniuk’s Fight Club…

So what did I do? I withdrew…

 

Credits: featured image, “Butterflies” by M.C. Escher

Transition

“Use a superior development system than your target to develop your game.” – John Romero, Early Id Software Programming Principles

One of the nice things about being employed again was the ability to afford a new computer, something I’ve put off as long as I could.

About 5 years ago, I’d purchased a very high-end mobile workstation to take with me overseas so I’d have something to keep myself entertained on the 26+ hour flights to and from the US:

  • Intel Core i7 3630QM @3.2GHz
  • 32GB of DDR3 RAM @ 1600MHz
  • Nvidia GTX 675MX 4GB of VRAM
  • 120GB SSD Primary Drive
  • 1TB Storage Drive

When I came back home, I found it more convenient to develop on my aging desktop machine with ideas of upgrading it when possible:

  • Intel Core i7 2600K @ 3.4GHz
  • 8GB DDR3 @ 1600MHz
  • AMD HD 5770s 2GB VRAM (x2 in Crossfire)
  • 120 GB SSD Primary Drive
  • 80GB SSD Auxiliary Drive
  • 320GB Storage Drive
  • 1 TB Secondary Storage Drive

A couple of months ago, I built myself a new PC that should last me a good 3-4+ years with minor upgrades:

  • Intel Core i7 7700K @ 4.2 GHz
  • 16GB DDR4 @ 3000MHz
  • Nvidia GTX 1080 8GB of VRAM
  • 240GB SSD Primary Drive
  • 2TB Storage Drive

I’ve been very pleased with it so far, and have been slowly reinstalling my development tools. The next step was to copy down my data so that I could pick up where I left off. To facility this, I purchased an inexpensive but well-made USB 3.0 SATA Hard Drive Docking Station.


What was intended to be a simple task, however, turned out to be anything but…The data I needed was spread across 4 different drives, one of which was BitLocker encrypted. The machine itself belonged to me originally, was lent a friend who in-turn savaged it, replacing several of the drives and the OS. On the actual computer, I’d solved this using Windows Libraries, but didn’t have that luxury when reading the raw drives.

So what did I do? I incorporated a handy application called SpaceSniffer to help me work out [visually] where the files I was looking for were.

This application is very similar to WinDirStat, but performs significantly faster. I still have a few more applications to [re]install, but I can get that done tomorrow at some point as it is now 4:13am, and I should think about getting to bed as I have to be up in 3 hours.

Here I Go Again on My Own

It’s been over 6 months since my last post. I’ve settled into my new role, and as the year winds to a close, I’ve been getting the itch to return to game making. Unfortunately, circumstances are such that I’ll be going it alone as Eric has retired from V-Toad Games.

Game programming and design is difficult, frustrating, greatly rewarding -but it’s not for everyone. What I learned from my last go at it was that programming is not painting by the numbers. Being able to complete an exercise no more makes you a programmer than following a recipe makes you a cordon bleu chef. There are core skills you have to master, and to do that, you have to be passionate enough to stick with it.

Eric really tried – I sincerely believe that. Nevertheless, I know all too well that bills must be paid, and can’t blame him for not having the energy to go home and learn something that he just wasn’t passionate about.

So why is being a solo project a problem for me? Many game developers, past and present, were/are one-man shows. I suppose it’s because I like feedback; I like to share what I’ve learned and bounce ideas off of other people because this helps me to reinforce and retain that knowledge.

As a consequence of my hiatus, I’ve all but lost everything I learned about GML, and will need to go through the lessons again to get back in the saddle. This time around should be much quicker, albeit lonelier.

“…Here I go again on my own…” – David Coverdale, Whitesnake

Pizza and Diet Coke

You Need Enough Pizza and Diet Coke…

It’s been about three and half weeks since my last update, so I wanted to take a moment and talk about where I am, and where I’d like to be.

As with anything, development is tied to real-world constraints. While it is true that some barriers are self-imposed, others are bound to either personal limitations (your own capacity to learn and develop new skills) or external limitations, mostly financial in nature.

John Carmack once said, “In the information age, the barriers [to entry into programming] just aren’t there. The barriers are self imposed. If you want to set off and go develop some grand new thing, you don’t need millions of dollars of capitalization. You need enough pizza and Diet Coke to stick in your refrigerator, a cheap PC to work on, and the dedication to go through with it. We slept on floors. We waded across rivers.

The sentiment is noble enough; I concede that you don’t need millions of dollars to make something great, just the will the see it through – even if that means sleeping on the floor or wading across rivers…but that isn’t the whole truth, is it?

Who pays for the floor you sleep on? Where do you get the money for your pizza and diet coke? Who pays for the electricity to power your cheap PC? Suppose something breaks – who pays for the replacement?

…and where do you get the cheap PC anyway? Not everyone is morally ambiguous enough to abscond with their employer’s computers to a rented lake house, away from prying eyes to work on their own projects in secret. Lakes flood, and when they do, you may find yourself wading through deep water indeed (and a lawsuit if you aren’t careful).

There is no honor among thieves. That fact is self-evident, but if you aren’t convinced, consider this: half of Id Software’s founding members were fired or forced to resign within the span of 5 years… but that’s all ancient history now.

…I would venture to say that the outlook of a teenager with no student debt or mortgage is very different. It’s a lot easier to just pack and move when all of your belongings fit into the boot of a brown MGB (which is to say, not much).

Then again, I never did like Diet Coke.

Paging Mr. Finagle Sod-Murphy…

About 2.5 weeks ago, we had a severe thunderstorm, losing power for a short while as well as about 4 hours of unsaved work. A few days later, I heard a loud pop near my feet, followed by the smell of burning plastic.

I quickly disconnected the power strip and the issue became immediately clear – the power cable connecting to my PC was to warm to the touch, and 4″ segment in the middle (presumably a short) was fused into a straight, blackened, stiff and brittle mass. This was probably the cheapest (and easiest to replace) component – it could have been the power supply, or worse yet, the motherboard!

A few days later, my dish washer stopped draining and needed to be repaired – I did so and threw out my back in the process – standing and sitting were difficult and painful for about a week or so.

Not long after that, my wife’s vehicle began stalling after she took it in to get the oil changed. I took it in the following day, and stuck around to talk to the shop owners as I had been coming there for about 12 years and had a good relationship with them. He asked about my work situation, and offered to refer me to a guy he knew at a large, local IT provider – more on that later…

…We Gotsta Get Paid!

Last month, over the course of a day or so, I made a small game for a friend. I wanted to explore making a game from start to finish just for the practice of it. It was just the right mixture of cheese, fun and juvenile humor to potentially make it a YouTube Let’s Play sensation.

The game had a start screen, a non-numerical score and a game over screen. I figured, if I could add a few more levels, enemies and secrets, I might be able to sell it for $0.99 on GameJolt. I have a list of hundreds of YouTube Let’s Players I could give a free copy to with the request that they make a video for it. The press might be sufficient to get enough people to buy a copy to keep me a float for another 3-6 months while I work on Beaster’s Dungeon.

While I managed to overcome several programming issues, and add far more so sophisticated features than I initially expected to, what eventually sent my progress grinding to a halt was my own limitations as an artist – my imagination was well beyond my skill and this stifled me.

For the last 3.5 weeks, I’ve been about 10% from finishing the game to my satisfaction, a loss of time I simply could not afford to bare. With bills looming overheard, and my savings coming dangerously close to exhaustion, coupled with the few meaty bitch slaps from Mr. Murphy I described above, it became apparent to me that I can’t weather much more of this. I needed a plan B.

Quit Your Day Job…

In order to quit your day job, you have to have one to begin with…If I go on to finish that last 10% and publish my game and it fails commercially, I’d still have a job to fall back on and bills would continue to get paid.

On the opposite end of the spectrum, the game might be a runaway hit, and I could use the money to put a substantial dent in my mortgage and/or student loans, bringing me one step closer to financial independence.

In either case, I couldn’t wait to see which way the pendulum swung as bills will not wait…

So I got in contact with the guy my car dealer referred me to, and within a week, I was on the phone with a recruiter. Following that call, I was invited to interview in person, which takes place next week. If successful, I could working full-time again as little as 2 weeks later. The pay is below average for the kind of work it is, the hours would be unusually long and there would be no overtime.

The last time I worked was almost a year ago, and so at this point, I’d rather take a step down in rank and pay to get back into a more technical role (the last two jobs I had leaned more toward general management). I could learn a lot, and potentially get a better job somewhere else.

This all a moot point unless I’m actually made an offer, which is not a foregone conclusion. Between now and my face-to-face, I’ve got to spend my time preparing for the interview and boning up on technologies I haven’t worked with in 5 years or more.

Wish me luck!

 

Development Progress Update, Week 4

Busy != Productivity…*

This has been a busy, though not an especially fruitful week in terms of development progress. I got side tracked trying to learn a couple of new techniques I’d need (shaders and surfaces) and I’m continuing to troubleshoot code signing certificate issues…

For the prior, I just stumbled on the fix this afternoon while trying to make a pause function – more on that on a separate post when I have the time/motivation to write it.

On the later, much of what I have encountered keeps coming back to the certificate signing request (.CSR) and private key export (.PFX/.PVK). I’ve been using OpenSSL, which my provider doesn’t seem to support, instead preferring that I use Window’s certificate snap-in.

This would be fine if I were on a domain, but I’m not…Ergo, there’s no certificate enrollment policy as there is no domain controller or active directory service. I had a spare PC sitting around (my wife’s old gaming desktop which had since been replaced by a much nicer gaming laptop), so I decided to plug it in and see if it still ran.

When I did this, I was greeted with a long series of short beeps (power failure) followed by repeated attempts to start itself only to immediately shutdown again. After digging around in the garage, I found a craptastic 500W PSU to replace the relatively nice 700W OCZ Stealth Steam modular PSU that was in it…

This allowed it to boot, and a cursory look around the machine seemed to indicate that it was good working condition otherwise.

Next Steps

Once I get the “server” up and running, setup all the required services and so forth, I should be able to sort out the SSL issue… I feel as though I’m spending way too much time on this, but without it, I’m not only out $140 on something I can’t use, but I’m also unable to distribute “trustworthy” applications.

 

*The prefix “!” means NOT (i.e. ‘!=’ is NOT Equal to)

State of the Toad, February 2017

UPDATE 2/09/2017: After about a week of back and forth with YYG support, I was able to get the HTML5 module working. It turns out that GMS v1.4 had several bugs preventing most HTML5 games from running properly when using certain functions.

Eventually, I was instructed to download the “Early Access” build (v1.9.525) which resolved this issue. There were a few more code optimizations I needed to make, but the game-breaking bugs were gone.

The Good

With a helping hand from an old and dear friend of mine, I was finally able to make the some important steps forward. Some of you may notice that www.vtoadgames.com now supports SSL!

I’m also in the process of obtaining a Code Signing Certificate so that Windows Exports (.exe files) won’t display a Smartscreen warning that the publisher (yours truly) is unknown – I should have that today if everything is in order.

Additionally, I’ve also purchased GMS Professional and the HTML5 export module as I feel pretty comfortable with GML  at this point.

The Bad

YoYo Games, creators of GameMaker Studio (GMS),  have elected to go the way GameSalad and discontinue offering a free ‘standard’ edition of their product once GameMaker Studio 2 (currently in beta) is launched.

While those who already obtained a free Standard Edition license for 1.4x will get to keep it, no one else will be able to get one going forward. A similar thing happened with GameSalad, which went to a subscription model after discontinuing it’s free version.

Cui Bono?

Surely not YoYo Games…The reason GameMaker Studio was so appealing to many Students and Hobbyists was it’s accessibility – they said it themselves:

We want to make game creation accessible to everyone. We think that once people jump in and start creating a game, they’ll see firsthand how easy it is with GameMaker: Studio. – James Foreman, April 11, 2016. GameMaker Studio: Standard Goes Free FAQ

While most users would be content with the Standard version, some might decide they have a knack for it and take the plunge. The only thing that cutting out the free version does is bar entry for those who aren’t prepared to spend $150 to satisfy their curiosity. I know, I was one of them. Had I not had the opportunity to learn GML before buying the Professional Edition, I probably would not have.

With that said, if you still on the fence, pick up 1.4 Standard for free while you still can!

The Ugly

Please see the update above.

I purchased the HTML5 Export Module with the reasonable expectation that a program which performed flawlessly as a Windows target and compiled .EXE file would work fine when ported to HTML5. I was wrong…

Just about everything failed from the particle effects, collision events and everything in between, making the game unplayable.  I submitted a ticket to YYG, but I’ll probably have to go back through the code and optimize it to get it to work. In any case, it was a good learning experience…

###

Welp, back to finishing up the last Level of the GPC!