Categories
General Personal Development Politics/Government

The End of the World

According to some people, the rapture is scheduled to occur today, with the end of the world to follow shortly. I don’t normally write about religion or politics on this blog, but I’ll relate a story I was told in high school that really impacted me. I am probably remembering parts of it wrong, but I think the basic gist is still there.

There were three priests playing pool. One of the priests asked the others, “If you knew that the world was going to end in the next 10 minutes, what would you do?”

One priest answered, “I’d go to the church and lead the people in prayer. I’m sure there will be plenty who are afraid or lost, and I would want to be there with them to pray for forgiveness and strength.”

The next priest said, “I’d go home and pray alone, as Jesus suggested was best in the gospel according to Matthew. I’d shut myself in my room, and I’d pray for forgiveness and strength.”

The two looked at the third priest and asked him what he would do. He replied, “I’d finish this game.”

Categories
Game Design Game Development Geek / Technical Linux Game Development

Continuing Development on Stop That Hero!

After returning from Europe, I spent over a week dealing with being sick. Even though I couldn’t get back to work right away, I was able to read through all of the advice I received on my post on the importance of speed, and I really appreciate all of the feedback. Thanks, everyone!

In that post, I expressed frustration with how slow my game development has been, especially with Stop That Hero!. I wondered if the project was too much for me at my current skill level, and if I needed to step back and try lifting lighter weights, so to speak. I know some game developers leverage a library of personal code that they have written and updated over the course of years. Others leverage existing engines.

While I have some boilerplate code, it’s not nearly as comprehensive as I would like it to be, and the stuff I do have isn’t always as easy to work with as it should. As I said in that post, 2D engines for GNU/Linux, my development platform, by and large do not exist, so I find I have to write a lot myself. If I had more to leverage, I’m sure development of STH! or any other game would be a lot faster since I wouldn’t have to stop and implement scaffolding technology to support a feature every time. It would already exist.

The advice I received fell into a few camps:

  1. Muscle through and get the game finished. Your tech will be ideal and perfect for YOUR needs.
  2. Stop targeting GNU/Linux and desktops in general as platforms, and focus on more “marketable” platforms.
  3. Stop working in C++, and use Flash/Unity/higher-level programming language/engine instead.
  4. Break your project down into smaller projects so you can have finished games and build your needed tech.
  5. Stop writing your own tech from scratch, and leverage the hell out of libraries/engines/existing source.
  6. Stop worrying about writing “good” code. Hack something together and get it done faster!

I didn’t know whose advice to ignore first! B-) Seriously, though, let me clarify some things about what I’m trying to do.

First, I am not making games just for GNU/Linux, and I never said I would, yet this seems to be a common assumption about my business plan. I am not locking myself to only one platform. My original plan all along was to release games for GNU/Linux, Windows, and Mac. It turns out that ports to mobile platforms, which are a huge opportunity these days, would also be fairly easy, so I went from following supposedly dying tech to being relevant again.

Second, I’m using C++ because it is what I know, and my choice was to make a game or spend time learning a new language to make a game. I chose to go with what I already know, even if it supposedly limits me, because I wanted to start running right away instead of figuring out how to put on my shoes. I can always use the next project to learn a new language if I want to, and switching languages on this project would be way too disruptive and set me back way too much.

Third, because my development platform is GNU/Linux, which makes targeting GNU/Linux dead-simple and a no-brainer, it means that engines like Unity are not options for me. I might be limiting myself in terms of access to premium development tools such as Photoshop and Adobe Flash, but I have been using GNU/Linux exclusively as my main desktop environment for a long time, and I’m not about to start booting into Windows just because most everyone else does. I’ve had to find non-proprietary alternatives for a lot of applications and tools, and I’m doing it for game development as well.

All that said, I think everyone had great advice, whether it was about my tech or my business plan or my development process. Without sales, my savings account is going to get smaller and smaller, and my biggest concern was where I should be focusing my time.

My choices:

  • I could continue to work on Stop That Hero!. I have been discovering how much more complex it is and how much longer it is going to take to finish it, and there’s a worry that by the time it is done, I’ll be out of savings. To make it worse, I’m very much aware that I can’t expect sales to take off just because the game is released. Sales is going to to be a lot of work, and I might not make enough to cover my expenses early on, forcing me to spend time and effort making money in other ways, which takes away from my business. And I’ll admit that I do not know what the reception of this game will be once it hits a real audience, although I do plan to get feedback from play testers once I have something I feel comfortable showing to people, which should help. Still, it might be an unsellable flop that can’t be salvaged no matter what I do. That’s a lot of pressure on this one game.
  • Put STH! on the backburner and work on something smaller. My intention was to work on multiple small games over the course of the year. I’ve since learned more about my capabilities as a game developer and the limitations of my existing tools and tech. Essentially, STH! was not as “small” a game as I originally thought. STH! was meant to be a one-month game project in the first place. Since the schedule has slipped so far, perhaps it is best to cut my losses or at least put the game on hold and work on something I can accomplish in a matter of weeks. I have a couple of Ludum Dare projects that could be candidates for simple games. The diversified portfolio I could create in a matter of months could help reduce risk. If one game doesn’t do well, I’d have another one on the way shortly, and cross-selling might help improve sales. On the other hand, what kind of sales can I expect on a bunch of quickly-produced games that must compete with all of the free and low-priced casual games being produced every day, as opposed to focusing my efforts on my current project? Also, I run the risk of having two unfinished projects since it is possible that a lot of the problems I’ve encountered with STH! could crop up in another project anyway.

If finishing STH! would take two years, and my savings will only hold out for three months, I’d do best by switching to a smaller, faster project in the hopes that I can make at least some income. On the other hand, the race to the bottom in the pricing of games doesn’t provide me with a lot of encouragement to produce small, disposable games. Perhaps the fact that STH! is a bigger project means that the finished product can be something that a fan base could build around.

Since STH! is not a two year project and I expect to finish it before I have to worry about my savings disappearing, I’ve decided to continue working on it. My goal is to get it commercially ready to sell in June.

I did not have a playable game to release yet, but I looked at the remaining features to implement and various ideas I wanted to try, and I started pushing a bunch to Version 2.0. I spent a good chunk of the remainder of April in a self-imposed crunch. I ignored my project planning system, ignored writing for the blog (which explains the lack of posts in the previous month before Ludum Dare), and dedicated as much of my time as I could to making a friends-and-family playable game.

By friends-and-family playable, I mean I wanted to implement enough of Stop That Hero! so that I can hand it to my fiancée or a friend and say, “Here, play it with the understanding that this is an early Alpha version. The graphics suck, there’s no sound, and the game play is raw.”

While that Alpha build isn’t ready yet, I will say that April has been a very productive month, especially considering that I was only able to do all of the work in the final couple of weeks. And since recovering from Ludum Dare #20, I’ve started off May with some quality development time as well.

I’m seeing this project through, and I’m confident Stop That Hero! will be a great game.

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Hot Potato Windows Port Now Available!

I updated my final Ludum Dare #20 Jam entry to include a link to the Windows port of Hot Potato. Whew! Now I can get back to working on Stop That Hero!. B-)

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Hot Potato Development Time Lapse

Here’s a video of my desktop through almost 72 hours of development of Hot Potato compressed into less than 2.5 minutes:

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Hot Potato is Finished

It’s complete. I’m not satisfied with the balance or the feel, but Hot Potato is finished and submitted.

Screenshot - Final with pedestrians

Oh. I should rebuild it on my Debian system since other people tend to have problems playing my game when I build a project on my Ubuntu system I might make a Windows port soon, but after 72 hours, I’m beat. I’ll update this post when I get those two things done.

Updated! I created the Windows port, and I rebuilt the game on my Debian system so that a wider variety of Linux-based systems should just work out of the box.

You can download it for:
GNU/Linux (1.6MB tar.gz)
Windows (3.12MB .zip)

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Passing Through Chains of Entities Works Now

Even without Pedestrians, I might have implemented one of the items on the list since I wanted to change the behavior of package passing.

Now when a package is being shoved down a chain, the last courier in the chain receives the package. Technically, the only entities that would break the chain are the VIP and the Enemy Agents, so it should work once Pedestrians are in. I won’t scratch it off my list, however, until I code up some Pedestrian entities and test it out.

I’m getting concerned that my game world is too big. As I playtest, I realize that I’ve never made it all the way across to the VIP before the agents intercept my couriers, and it’s kind of tedious to click click click to get there. If Pedestrians make it take even longer to get to the VIP, I might need to shrink the plaza to avoid player tedium and RSI.

What’s left:
– moving the agents towards the package holder
– win condition check
– lose condition check
– allow multiple couriers to move during move phase
– shove passes through chain of couriers to last courier instead of next one
– shoving package through pedestrians
– adding pedestrians
– moving pedestrians

5 hours left to go. Who wants to go for a stroll through the plaza?

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Multiple Couriers Can Move In One Phase

Moving multiple couriers was a little tricky, but it was mainly because I didn’t realize what exactly I was supposed to be checking in my code.

I originally created a mapping of Courier pointers to bool values to represent whether a courier has been moved already.

std::map<Courier *, bool> m_couriersHaveMoved;

At the beginning of the Move phase, all of the values are set to false. When you select and move a Courier, its value is changed to true to indicate that it has already been moved. This way, during the Move phase, I can highlight only the active Couriers and prevent inactive Couriers from being clickable. As Couriers are moved, they become inactive and ineligible for later selection during this Move phase, and when it is time to move the Couriers again, they are reset to being active. Great!

The problem came when I tried to abuse those values to check if the move phase was completed.

It made sense at first. The Move phase is over when you have moved all of your Couriers. Checking if the Move phase is over was as simple as checking if any of the existing couriers had an associated false value in m_couriersHaveMoved.

Except there was a problem. If a courier COULD be moved but can’t due to the fact that all adjacent tiles are occupied, the Move phase would wait for you to click on a Courier, but none are selectable, so you wait forever, or at least until you pause the game and click “Return to Menu” to start over or quit in frustration.

So I tried to make sure that blocked couriers were considered finished with their move. Unfortunately, this had the side effect that if a courier is blocked at some point during the Move phase, it can’t be selected and moved later even if an adjacent tile opens up. Well, that’s unintuitive for the player!

Eventually I realized that I was trying to use the wrong solution to the problem. The actual problem I’m trying to solve is knowing when the Move phase is completed. The solution has nothing to do with whether or not all of the couriers have made their moves. The solution is to check whether or not there are any tiles adjacent to ACTIVE couriers that are empty.

So now I have the ability to move multiple Couriers in the same Move phase, and I solved the new application-hanging problems that cropped up involving the difference between an inactive Courier and an active Courier that just happens to be unable to move at this time.

What’s left:
– moving the agents towards the package holder
– win condition check
– lose condition check
– allow multiple couriers to move during move phase
– adding pedestrians
– moving pedestrians
– shoving package through pedestrians

Shoving is broken. It has been broken, but it wasn’t until I was able to use it more often that I can see what’s wrong.

Basically, shoving works fine if you shove a single Entity into the next empty square. There’s a potential bug when you shove entities into other entities. If an entity later down the chain can’t be shoved, it won’t be. But the entities earlier in the chain are still shoved, so it looks like one of the entities eats the other.

I need to do a complete chain check first before a shove is allowed. If the check says it is not possible, whether due to the existence of an unshoveable entity or the border of the game world, then no shove happens. If the check says it is possible, then the recursive shoving algorithm can go forward without a hitch.

Also, since shoving is how the package is passed off, I’d like the package to also shove through to the end of the chain if it is possible. Right now, it only passes to the first entity being shoved.

So with 7.5 hours left to go, I’m fixing shove mechanics before adding Pedestrians to make the game more interesting. After that, I suppose I would have time for sound effects and polish, but I hope to submit this game to the Jam long before the deadline so I can get back to actual work. Besides, it is Monday, and “Chuck” is on tonight.

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: The Thrill of Victory, the Agony of Defeat

Behold, win and lose conditions are in!

Screenshot - Defeated In Delivery Battle

Basically, if an enemy agent is next to the courier holding the package, you lose.
If, however, the VIP is next to the courier holding the package, you win.

So technically, I have a game finished. It’s very unfun, very unpolished, and very uninteresting, but you can make moves and eventually lose or win.

What’s left:
– moving the agents towards the package holder
– win condition check
– lose condition check
– allow multiple couriers to move during move phase
– adding pedestrians
– moving pedestrians
– shoving package through pedestrians

Right now, it is very difficult to get past the agents because it’s only possible to move a single courier in the move phase, and passing the package isn’t very effective. Allowing multipler couriers to move at once during the move phase should help even the odds and make it easier to pass the package around.

Randomly generated Pedestrians should add some flavor to the game. In a busy plaza, it might be difficult for couriers and agents to move around freely. Plus, shoving the package to teammates gets more fun if you can leverage innocent pedestrians, although it opens up some difficulties in the code and design. What if you shove a package into a Pedestrian who shoves it to another Pedestrian who ends up in an empty space? Should the package only get passed if you can end up with a courier at the end of the shoving chain? I’ll try to keep it simple and go from there.

The UI is a little frustrating. If you can make a move or if you can shove, you MUST. Currently, I have no way to say “No, I like where my couriers are, and I don’t feel like shoving this turn.” While I can fix it by adding a “Done with turn phase” button, maybe the requirement is fine. Checkers, if played correctly, enforces a “you must jump if you can jump” rule, which makes it very strategic. I’ll leave it until the end.

Another frustrating thing is that there is no way to cancel a decision before you’ve decided. If you click on a courier, you can’t change your mind and pick a different one. It’s fine if you’re playing chess to require that touched pieces must be moved, but if you accidentally click on the entity during the shove phase right after moving it, it can be annoying to see that you have to make a shove move that you didn’t want to make. Unfortunately, I’ll also leave a fix for this annoyance until the end.

There are 10 hours left in the Jam. While I continue my work, you can watch this series of videos of someone playing The Legend of Zelda, only he decided to do so without taking “this”:

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Looks Like Another Jam Entry for Me

So 48 hours came and went, and I have no game to submit. B-(

In the last few minutes of Submission Hour, I finally had Enemy Agents who moved towards the package holder. I need to make sure multiple couriers can move at once during the move phase. The agents currently have too much of an advantage if you can only move one courier at a time.

Screenshot - Run Away From The Agents

I had to deal with a few seg faults getting to this point, but they were relatively easy to solve compared to what I’ve written about for this LD.

What’s left:
– moving the agents towards the package holder
– adding pedestrians
– moving pedestrians
– win condition check
– lose condition check
– allow multiple couriers to move during move phase

And I have 24 hours to get all of it done and submit a Jam entry.

Actually, I now have enough to submit what could technically be called a game if I can code up the win and lose conditions. They’re easy and low-hanging fruit, so I’ll tackle those first thing in the morning. It’s too bad I don’t have one more hour, and it’s too bad it took so long to start working on the actual game play. My game could have been among the nearly 300 entries if I had less to do from scratch.

The good news is that next LD, I might be able to take this project and gut out just the Hot Potato-specific parts, and I’ll be able to build a simple, LD-ready project from the moment the theme is announced. This LD showed me that I am finally starting to get a collection of boiler-plate code that’s easy to migrate from one project to another without too much hacking.

00001

For now, I’m getting some rest. Congratulations to everyone who submitted on time, and good luck to all of the other jammers!

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Moving Couriers and Game Play

Screenshot - Can Select And Move Couriers Now

In the final stretch, I can finally DO something in the game.

Screenshot - Shoving Is In

In the Move phase, I can select couriers and move them to open adjacent tiles.

In the Shove phase, I can select couriers and shove another courier, and if the shover has the package, it is passed off.

What’s left:
– moving the agents towards the package holder
– adding pedestrians
– moving pedestrians
– win condition check
– lose condition check

Can I get at least a good chunk of it done during Submission Hour? I hope so.