Playing FTL

I haven’t been putting in the time necessary for May’s #1gam, but I have been playing a few games which means I’m writing another Playing article. This one is about FTL (Faster Than Light) and in a minor way about Risk of Rain but more generally rougelikes and procedural death games.

FTL is a game in space where you manage a ship and its crew and attempt to get across eight sectors while being chased by a rebel fleet. You fight other ships, upgrade and repair your ship with limited resources, and manage your crew in semi-real-time battles (you can pause as often and whenever you like). Each system in each sector has a random(ish) event that occurs sometimes requiring a decision on how to proceed, but generally ship battles are the order of the day. If (and when) you die, you collect a high score, maybe unlock a thing or two like a new ship or ship variant and go back to the beginning of the game. Risk of Rain is a more action-y platformer with lots of random equipment to collect, but a similar play, die, collect high score, unlock stuff, start over pattern.

Why am I playing FTL (again)?

The influence of one of my friends is the reason I have been playing FTL again. He was playing it next to me while I worked on May’s game (what little I’ve done so far) a couple weekends ago. I had played and enjoyed FTL when it first released but I got tired of the randomness killing me. Or at least that was what I blamed for my deaths and lack of success at the time. In playing the game again, I’ve learned that the randomness is only partially to blame and that it is certainly not the main reason for my difficulties.

After a slow re-install due to connections issues I was back in the game. As I jumped from system to system hitting the random events, I was asking (or pestering) my friend about the choices he would make in the various situations I found myself in. Before I continue; he has completed the game a number of times while I have yet to survive to the last sector. I was hoping for some insight or to have my mistakes pointed out to me so I could figure out where I went wrong.

Oh, it was me all along!

It turns out that he did not really have a different strategy for dealing with the events that I came across. In one way this seemed un-helpful to my struggle but it was also assuring because it meant it was me that was the problem and not the randomness I encountered. What I did find out was that he had some general goals for the end of certain sectors, like having a certain shielding level, crew count, a way to deal with shields, etc. This seemed notionally helpful to me and so I stopped asking about each situation and just played the game.

Too Risky

After one particularly successful run that ended in ruin and disappointment in sector 6, I immediately regretted engaging with the optional enemy ship that destroyed me. Why did I start that fight?! I realized I was not properly adjusting my risk assessment as I was playing. That ship and the crew and events I had come across were valuable to me and not worth the risk at that point in the game. In general, I was taking on fights with too few hull points or with a ship I wasn’t prepared to lose as if I was still in sector 1. I also was not paying enough attention to the clues about the enemy ship strength that the game was providing and generally wasn’t adapting my choices enough as I was playing through the various sectors.

Then I read this article on Gamasutra about Rouge-likes and PDL games which discusses the successes and unique aspects of these types of games. I won’t say genre because I agree with the statements in the article about the game format being outside a particular genre and as more of a game design architecture. Suffice to say that one line in the article fit right in with my self analysis regarding risk assessment and that made me happy to read. I’ve since thought about these types of games a bit and had a few thoughts to share.

Final Thoughts

I was playing the game from moment to moment instead of taking a step back and analyzing what I should be doing according to my goals and experience. Speaking of goals, having a plan heading into the game is important but it shouldn’t be set in stone. A flexible plan allows you to take advantage of the rare lucky event and handle the consequences of an unlucky one. Each play through is a chance to test your knowledge about the systems of the game with a bit of randomness to keep things interesting. Ultimately the meta-strategy and the random sequence of events that create a memorable story to share with friends are the things that would maintain my long-term interest.

Second #1GAM

So I had extra time to brain-storm this month due to being away from computers for two weekends and various other reasons. First there was the infinite runner with shooting instead of jumping. I started to question how to go about making it as simple as a jumping infinite runner (which uses just one button) and decided it might not be as simple as I had thought. Then I started thinking about the theme for the month.

The theme for April 2014 #1GAM is Water and I kept thinking about a platformer in the desert. But as I let that idea grow, it quickly became apparent that I didn’t want to do anything straight-forward enough given the time constraints. I was sort of discouraging myself for the April challenge and had to take a step back.

Simple, core idea, coriest of core (reference to corier core). Rain and fire. Rain puts out the fire. Let the player grab/fling the rain. I finished the majority of the game in about 6 hours, but there was no score or end condition. Here’s a screenshot:

ScreenShot

You could try to keep the flame alive, or hasten to extinguish it. I was feeling I had gone too simple and that it was boring, but the month was nearly over! So, embrace the simplicity; collect time-based score for both things the player could do and add a nice rain background sound. Play the game here!

For future reference, the extra thinking time this month didn’t help me accomplish anything!

One Game A Month

I have signed up for One Game a Month (#1GAM)! The basic premise is to publicly declare your participation and then follow through on it. Getting a game finished monthly forces you to follow through to the end of a project repeatedly, learning new things every month about the process of creating a game. The “rules” are pretty loose, but if you cannot be honest with yourself, you won’t be getting much out of it anyway.

Speaking of which, I sort of put off officially participating until I had already finished my first game… Oh well, gotta have your priorities straight, right? For now you can find it under the Projects Page in the Menu above and it is called EmoSine (<- or just follow the link). The elevator pitch on this game is “Flappybird but with a gravity mechanic.” So far, feedback includes “difficult” and “addictive”, so not bad so far! Of course it could use a few additions as briefly discussed over at my post on html5gamedevs, but I need to get started on April’s game first!

EmoSine Screencap

Continuing on with 1GAM, my intention is to follow through on some very simple game ideas. I currently have a list of 6 or 7 that I came up with during a meeting for my full-time job in which I had some spare time. Some of those ideas include: an alternate take on an endless runner, playing with crowd dynamics, learn about the physics engine capabilities of Phaser using a Lego-like building game, something to do with minions, and more!

Javascript Tree and HTML5 Flies

This is a progress update to my Learning HTML5 post. I completed the first two courses through SkillSoft about HTML5 and CSS3. I learned a bit about the new tags and attributes and what’s been deprecated and abandoned from older versions. However, what I was learning was not proving to be that helpful to my ability to develop an HTML5 game except the very short section on the canvas element. I decided to start fooling around with drawing on the canvas using JavaScript to learn more.

JavaScript Tree Thing

I had this image of a bunch of threads growing up and sprouting leaves and branches and sort of weaving together into a tree. The little tree thing growing there was a sad effort toward that end, but I wasn’t ready to try to build tree growing procedure at the time. Maybe when I get to exploring procedural generation I’ll revisit the visual I have for that in my head. Anyone know if it already exists out there?

One of the other things I said I would do using the List of HTML5 Game Engines was to pick an engine to dig into and learn. I found a few other resources in making my decision that might be useful to others:

Phaser

The game engine I decided to use is Phaser! Here’s a few places I’ve bookmarked as good resources so far:

The forum I found to help make my decision is also a great resource for Phaser development. As a curiosity I decided that it might be cool to port my flies over from the FleaGame. I used the starter project form LessMilk as the shell for my flies, but it turned into a very shoddy hack and hardly uses the Phaser framework at all… Anyway, here is a demo of the fly behavior minus the brief pause when they land that they have in the C++ Allegro version (because there isn’t anything for them to land on in this version).

Fly Movement Demo using Phaser


I did a little brain storming and generated a list of ideas for quick games to help me get into Phaser so expect some HTML5 games here in the near future! Along the way I’ll explore a few concepts that have been bouncing around in my head.

Playing Dokapon Kingdom

Over the last couple years I’ve gotten to sporadically sink some time into a game called Dokapon Kingdom on the Wii (it was also released on the PS2). A rough estimate shows that I have at least 150 hours to date in this game (and it could be more like 250+). This game has some hilarious moments, but it all depends on getting people together on the same TV in the same room. Dokapon Kingdom combines role-playing elements into a board game that is both cooperative and competitive and supports up to four players. There is a class based hierarchy (with three to start), four key stats, turn based battles, quests, items, magic, and equipment all within the context of a board game approximately shaped like the continents of Earth with a ridiculous King who “really needs” your help.

But don’t worry because he’ll give you his kingdom and his daughter if you complete his quests and along the way you can draw on your friends faces, change their hair style, rename them (whatever you’d like), or steal their stuff. In the end it is all about the money and whomever has the highest balance with the king wins. Or is it whomever pisses off their friends the most? Here’s the official trailer.

Initial Thoughts

The game was lots of fun as I was getting into my first game with three friends. Everyone was stepping all over each other trying to explore and figure the game out. The local multiplayer, the in-game player interaction, and the RPG and board game combo were all great fun. The pacing was pretty good in our first adventure, but we never finished that game. Don’t start a full story mode game and expect to finish in a day!

Later On

Turns out my wife loves this game, but maybe not the way it was expected to be played. Most of the total time I’ve spent playing this game has been with three human players and one computer player. Everyone picks on the computer and we generally keep things civil between the humans. My wife loves collecting mechanics and systems  and the game has an in-game encyclopedia so we’re on a quest to completely fill in that encyclopedia with only two items remaining. One of these is a hair style of an elephant (yes, an elephant on your head) that comes from one of a number of random events that contain a random chance of the item being attainable and the other is a sword that is a random drop from a random encounter of an enemy character who can choose to use an attack that has a chance of instantly killing you but generally just uses the regular attack. I have no idea how long it will take to complete given the layers of random, but eventually we’ll get there if my wife has anything to say about it!

Technical Thoughts

At this point the use of the random number generator is sort of getting on my nerves but there is one event in which it can be gamed a bit by knowing what’s going on. There is a chance at the start of a week in the game for an event to occur and one of these events is a memory-style card game. Each of the various pairs in the card game gives you a different type of reward (items, equipment, magic, money, etc.) and the inventory item reward can randomly be the elephant hair style item.

Well, we’ve discovered that the random number generator (RNG) and it’s current state/seed value is saved with the rest of the game data and that the computer player uses the RNG to decide what cards to flip and that there are 4 pairs total (including the one that could be the hair style) that also use the RNG. So the last two times this event has occurred we’ve reloaded repeated to try placing the roll for the item reward at as many places along the sequence of random numbers as we can by manipulating the computer behavior and the number of other pairs ahead of the roll for the item reward pair. We did get one item this way previously (the royal hair style), but no luck so far on the elephant hair style. It just hasn’t been in the cards…

Overall

The local multiplayer with friends is great if you can get the people together and the game has lots of ways for players to interact but the systems in the game are on the simpler side and can be figured out with a little digging and experimentation even without the benefit of using the internet so it won’t last forever. In the end, it was certainly worth the purchase.

Learning: HTML5

Why HTML5?

I have a list of things I’d like to learn about and experiment with for MakingVsPlaying and I decided that HTML5 fits my life the best right now. It applies to some of what I do at work (I admit I have some knowledge here already, but not of version 5 specific tags), it applies to this website, and it is a platform independent language. Also, at work I have access to a learning service called SkillSoft and I found it has three sequential classes on HTML5. I have to take a few classes a year anyway so I’ll achieve two goals at once!

How?

First, I wanted to warm up on a quick overview of what was new in HTML5. I found an article fitting that description with a quick Google search.

After the classes from SkillSoft (or during/in between them), I’ve got another source of examples that I’m looking forward to exploring. Have a look at Hakim’s website and try out some of his games and experiments, especially Sinuous!

Additionally, I’ve found a list of HTML5 game engines (generally also using Javascript) here. I’m going to try a couple of them and find one that I like as I have an idea for a game to build a prototype for.

Expected Results

I expect that I’ll be adding a page (or pages) to this site for me to experiment on. My general goal is to share source for any experiments that I share in this or future learning efforts. However, if I come upon something I think could be turned into a more developed game I might hold onto it for a bit longer and find something else to share more immediately.

After I choose an HTML5 engine, there is this game idea I’ve been incubating for a couple months concerning decomposition. Don’t worry I won’t link you to the wiki article… The original idea came from a walk I took where a particular bit of moss growing under a tree gave me some inspiration. Describing my thoughts so far to a couple friends has confirmed that it might gross some people out. But really it could be “skinned” any number of ways, so first I need to see if the mechanics would be any fun.

Getting Involved

Part of the motivation for creating this website is…motivation! Therefore, in addition to this website, I am planning on getting involved in a number of other ways to help keep myself motivated.

Professional Organizations

Getting involved with a professional organization will provide me with chances to talk about game development and software development in general. However, they also provide other benefits like discounts on travelling and conferences, insurance, and access to lots of knowledge through people, research papers/articles, and publications. As a note, membership does cost money so these may not be options for everyone.

The first organization is obvious: the International Game Development Association or IGDA. The IGDA has a “local” chapter centered on Washington, D.C., and they also have several Special Interest Groups that a member can join covering various specialities. I haven’t picked out any of those just yet, but I know I’ll be joining more than one!

Two other organizations that apply more generally to programming and development are the ACM and the IEEE. The ACM has a Special Interest Group called SIGGRAPH that is about computer graphics and therefore game development. While the IEEE has a Computer Society that generally relates to computer software and a Computational Intelligence Society that specifically runs the IEEE Conference on Computational Intelligence and Games. I haven’t decided which of these two to get involved with, but chances are that I should just join both and see what I can get out of them.

Testing Myself

If you develop games and don’t know what a game jam is, take a moment to educate yourself via Wikipedia. Basically, you create a prototype for a game inside of a single weekend which sounds like a pretty intense experience. I don’t know yet which game jam will be my first, but I am certainly looking forward to participating in one! There is even the possibility that I may be attending my first game jam as one of the organizers. The details are a bit premature at this time, but if it falls into place and happens, expect a much more detailed post all about it! I am just not sure if I will get to actually create a game if I’m helping to host, but it will still serve the purpose of getting involved.

Future MakingVsPlaying Features

The last way that I will talk about getting involved is through this website. Obviously, the website already allows me to share my efforts, but there is more to come! In the future, you can expect to have forums and for these blog posts to be connected to those forums. The forums will be a place where everyone, including myself, can find some motivation and community. Additionally, prototypes that I share will eventually have their source code made open and accessible. The FleaGame will be the first project to have its source code shared — I just need to get around to it and work on the project settings a bit.

Allegro 5.0 and the FleaGame

Due to familiarity I came back to Allegro when I started getting the itch to work on video game development. I found out that Allegro had undergone a major version change and that I had some learning to do. I found a great set of tutorial videos that covered Allegro 5.0 at FixByProximity. My plan was to go through the tutorial videos and then to rewrite my Final Project from my Game Programming Class to prove I had learned enough of the new version to move on to new projects.

The tutorials cover sprites, animation, sound, collision detection, and other things. They really are a comprehensive, though basic, rundown of what you need to start game development with Allegro 5. You are expected to know a little bit of C++ and have a Windows computer due to the use of Visual Studio 2010 as the IDE (Integrated Development Environment). The excellent manual pages for Allegro 5 and the Wiki are available for the details of the library’s functionalities and other tutorials.

I finished the videos and was updating my old Final Project under the name of ReFinal but I was interrupted by a conversation with a co-worker. I was talking about what I was doing in my spare time and the co-worker (that is also interested in making video games) had some concern about the logic for a simple mechanic like jumping and a little collision detection. I stated I would show them and with just a little bit of time had a working program with a little black pixel that could jump, collide with a single other object (a floating block), fall off the object, and be affected by gravity (so that the jump ends). This was the beginning of my FleaGame.

The FleaGame may never become a legitimate game but it will get tinkered with over a long time span and it serves as a platform for trying out things. I did finish updating my old Final Project, but I did just enough to call it updated and then spent more time on the FleaGame. The details can be found at the FleaGame Project Page and includes links to videos on YouTube.

This article pretty much sums up my current game development efforts and the next article should be about learning something new!

Game Programming Class and Allegro 4.xx

I decided sometime around 2nd grade that I wanted to make video games, so I jumped at the chance to take Game Programming as an elective while working on my Bachelor’s degree. The class used the book Game Programming All In One (1st Edition) which features the Allegro game programming library. It is open source, cross-platform and written in C++. Check out the Introduction page here for a more official description.

We focused on 2d games in the class and a couple text ones to start. Overall the class included 7 or 8 programming assignments with a Final Project of our own design and a list of required features based on what we had learned. Each of our games was shown during class to get feedback and to see what others were doing. We covered sprites, animation, some collision logic, simple sound playback, double buffering, tiled backgrounds, and possibly a few other things I cannot recall. Most of the non-final games were pretty forgettable; though I incorporated Strongbad in one which had pretty funny results. It was an introduction for my teacher to Strongbad and she later commented to me that we must be drinking while watching them, hahaha!

One of the required features for the final, that for some reason I didn’t like, was using a tiled background because the way we had covered that feature was to use a large static array of tiles. Instead I came up with an idea for a tiled background that could be generated on the fly using a logic matrix describing which tiles could follow what other tiles. This concept brought me to the decision to make a vertically scrolling shooter. Then I figured I could have two layers of background that moved at different speeds with transparency in the tiles (which I later learned is called Parallax). For enemies, I wanted some random waves and then a multi-sprite boss.

Sadly, I ran out of time developing partly due to the necessity to MSPaint my own sprites and search the internet for sound effects (and all the other “life” stuff going on). I did not get to use all the functionality I programmed nor did I get to add all the features I wanted. Approaching the end I realized I still needed enemies to call it a game and so I threw together a logic framework and used that to describe 4 types of enemies with different movement patterns and firing chances.

One of my favorite final projects from the class was an RPG created by one of my friends. He grabbed sprites and music from some SNES classics and built several tile maps connected to each other. It was pretty impressive amongst the other final projects for the class. In the end, Game Programming was one of my favorite classes and it left me with an idea of how much effort goes into even a simple game project. I currently believe that video games are some of the most complex software out there but a lack of professional experience in making them might make that a bad assumption.

“Playing” League of Legends

I need a first post…

Since I haven’t been working on my “Flea Game” in the last couple weeks I am selecting something that I find myself spending some of my free time doing. Don’t worry about the lack of explanation for the “Flea Game”, I’ll get to it soon. So this will be the first Playing post on the blog and as a category it represents posts that fill in between more productive posts where I’m actually working on a game or learning something new.

I have been following the updates for League of Legends. However, this is a “Playing” post with quotes around it because I haven’t actually been playing the game lately. In fact I haven’t played a game since the third season kicked off. But given my familiarity (playing since release), I find it pretty easy to follow changes to characters that I know, to read the “Red Tracker” (which is all about employee posts), and to learn about new champions and other additions to the game.

So what am I getting out of it if I’m not actually playing the game? For starters the game represents a very complex system of stats, positioning, items, masteries, runes, champions, and more. Systems like this attract my attention greatly, like a huge complicated puzzle with lots of moving parts. I have a sort of internal model for the game in my head and I can sort of simulate and visualize changes while reading about them. This also helps in software development because discussing changes creates ripples in the internal model and gives insight to potential pitfalls and complications. Also, the posts from the Red Tracker reveal the internal workings of a successful game developer. It sounds very much like they have an awesome group of people over there and it is entertaining and interesting to me to read about some of the office adventures being had and development decisions being made. It makes me want to apply!

That being said, I understand that reading about it (or any game) is no substitute for playing the game. I will be trying to lower the amount of reading I do and get back to actually playing the game. But most of my friends who used to play have given up on it, so I will be going solo (queue) to get back into things.

But this begs the question as will most of the Playing posts: given that I have limited free-time, and that I have a long-time desire to make games in addition to being an avid player, how much time do I divert from playing games in order to make them? Should I give them up entirely for a time in order to make better progress in development?