Uploaded to Flash Game License

January 20th, 2012 No comments

So I got my game in enough of a working condition to upload it to Flash Game License as a full prototype.

I got the AI working a couple of days ago. Instead of using my movement function I ended up creating a very basic tile evaluation algorithm. All it does is count the distance from each enemy unit to every tile on the map. Since the zombies needed to charge straight at the first unit they can reach it worked out well. Finally got the AI to attack as well. It’s not much, but at least now it feels like playing against another player instead of playing against myself.

The Opening Move by My Zombie AI

I had a few other bugs to fix. Among them I needed to add a way to reset the game and end the turn without using the keyboard shortcuts. Also for some reason my AI wasn’t reacting well to losing a unit. It stopped working completely as soon as a unit was killed. Lastly I needed to make my AI actually end its turn once it had moved every unit. It’s still not feature complete, but it plays like a game now.

I know that my artist has some sketches of the first 6 units or so. I’ll probably show them to everyone once she sends them to me. They already look a lot better than my crappy placeholder images.

Now that it’s uploaded to Flash Game License I can start requesting some play testing to see how it works at the moment. I can also start sharing the latest version with people. For now I only opened it up to fans; special accounts I can create for friends and family. I’ve only created 2 fan accounts so far and I’ve got at least 2 more available. If you’re interested in testing my game send me an email or drop a comment.

I Found Extra Credits Again!

January 17th, 2012 No comments

So I haven’t made much actual progress on my game over the last couple days. I’ve been trying to rewrite the AI because my initial idea didn’t quite work out the way I wanted it to. In the mean time, I’d like to share something I finally rediscovered over the weekend, Extra Credits.

One of my favorite Web Video series

Extra Credits is a video series that was created by 3 people in the video game industry. I started following it when it was on The Escapist, back in 2010. Back in August, 2011, there was apparently a falling out between The Escapist and the creators of Extra Credits. New videos just stopped appearing on the Escapist around the time that Extra Credits’s artist was sidelined by a shoulder injury. I thought they were waiting until she had recovered from her injury, but apparently they had moved back to youtube for a bit.

So anyways, this weekend, being slightly suspicious of how long it was taking, I googled Extra Credits and lo and behold I found it. It’s now on Penny Arcade with new episodes from every week since August, 2011 and all of the old episodes as well. This video series has really helped inspire me to make my own game and is one of the major reasons I have this blog now. Here’s a few of the episodes that inspired me the most.

Playing Like a Designer Pt 1 and 2

These episodes go over the basics of using your experience of someone else’s game to teach you how to design better games. I haven’t yet gotten to this point, but I’m beginning to. When I play new flash games now I start thinking about how I could implement something similar, or why this particular interface is effective/ not very effective.

Designers play games differently

The Role of the Player

This episode explains one of the differences between the art of video games and the art of movies, novels, etc. They are different because the player drives the narrative as much as the designer. Designers need to take the role of the player as artist into consideration when designing a game to ensure that the player’s experience matches the designer’s intentions.

Player as Artist

No Redeeming Value

This episode is an examination of the God of War Series’ story telling. The characterization of Kratos is excellent and consistent with a Greek tragedy. The later entries in the series, however, forgo much of the conventions of Greek tragedy and are weaker for it. Standard storytelling conventions can be included in video games and make them stronger as a medium, but only if video game creators realize what it is about the conventions that make the story compelling.

Kratos, this is madness

So now I have almost an entire season to catch up on. I’m so excited! Anyone interested in some of the theories behind making video games should definitely check it out. Let me know if there’s any episodes you really liked from the series in the comments.

Categories: Game Development Tags:

A few of my favorite Flash games

January 14th, 2012 No comments

Since I’m working on my own Flash game. I figured it would be appropriate to highlight a few of the best games I played last year.

Multitask 2

This game is actually 6 games in 1, all played simultaneously, each using a different set of keys on the keyboard. In standard mode, the game starts with one game and slowly adds them until you’re playing all 6 simultaneously. You might think you’re an expert multitasker, but even after you’ve mastered the controls it’s impossible to keep all 6 games juggled for very long.

Multitask 2 Screenshot

Bullet Audyssey

This game is a blast. Top down shooter with nothing but boss fights. Each boss fight is set up with stage’s music so that the enemies fire in time with the music. You also have the ability to slow down time in order to avoid getting hit. It’s nice and difficult.

Bullet Audyssey Screenshot

Pandemic 2

In this menu based game you create and evolve a disease with the goal of spreading it to every single person in the world in order to exterminate humanity. Evolve disease vectors, symptoms and resistances to make your disease the best it can be. On Kongregate, beating this game in under 100 days (game time) is an impossible achievement.

Pandemic 2 Screenshot

Rebuild

Take control of the last bastion of humanity after the zombie apocalypse. Manage your people to keep your base safe while expanding throughout the city. This game was sold on FlashGameLicense.com and apparently made its creator enough money for her to become a full-time game developer.

Rebuild Screenshot

These are just a few of the Flash games I’ve really enjoyed in the last year. Feel free to post your own favorite games in the comments.

Categories: Flash Games Tags:

Why Flash?

January 13th, 2012 No comments

Around when I started planning to develop a flash game, I had one of my programmer friends ask me why I would want to start learning Flash instead of HTML5 or Unity3d or any other game friendly development platform. He cited this article showing that even Adobe didn’t believe in the future of Flash.

There are many reasons why this didn’t stop me from starting with Flash for my first game development effort.

1. Flash games are incredibly popular on laptop and desktop computers

I started playing games on the Flash portal Kongregate about a year ago and they’re coming out with new content every week. Other sites like AddictingGames.com and Newgrounds are still thriving as well. With the most popular games on Kongregate getting over 10 Million plays I doubt that Flash is in danger of going obsolete any time soon.

2. It’s fairly easy to make games for Flash

I mentioned the Kongregate Shootorial before. Following the tutorial allows you to create a basic side-scrolling shooter in less than a day. I have a friend that had never programmed before that was able to complete it in 7 hours. Flash lowered the barrier to entry into game development for me.

3. Flash provides a large audience

Since Flash is web-based and free-to-play anyone can find and play my game once it’s published. If I were to create a Steam game it would be hard to get people to actually download the game. And there aren’t nearly as many iPhones or Android phones as there are computers. My hope is to get my game to as many people as possible, I’ll worry about monetizing it later.

Categories: Game Development Tags:

Strategy Game AI

January 12th, 2012 2 comments

So I had an epiphany today. Up until this point I had been planning on using a Monte Carlo-like algorithm to create a near universal strategy game AI. I knew it was something I could do, but it would require a decent time investment and might take too long to run before it could actually generate a good quality turn.

Then I realized, I want the enemies to be zombies. And why should zombies have an intelligent AI controlling them? So I think I can make the AI in my game work in almost exactly the same way that my movement works. During the AI turn for each unit, I’ll start from what’s next to them and then fan out til I hit the first enemy. Then I’ll randomly pick one of the shortest paths to that enemy and move the unit as close as it can get during it’s turn. It’s so simple, but makes so much sense for zombies. I haven’t finished updating it for the AI, but here’s the code I have for determining the total movement area available for a given unit.

//******Set starting tile as character’s current position******
currentNewTiles.push(new Array(attachedCharacter.currentHorPos, attachedCharacter.currentVertPos));

if(startDistance == 0) {

moveSquares.unshift(new MoveSquare(new Array(), attachedCharacter.currentHorPos, attachedCharacter.currentVertPos, squareType));
this.addChild(moveSquares[0]);

}
mapCheckArray[attachedCharacter.currentHorPos][attachedCharacter.currentVertPos] = 0;

//******Iterate through each possible move******
for (var moveCount:int = 1; moveCount <= endDistance; moveCount++) {

oldNewTiles = new Array();
oldNewTiles = currentNewTiles;
currentNewTiles = new Array();

//******For each space that was reached during the last move******
for each (var oldCoord:Array in oldNewTiles) {

var oldHeight:int = Main.tileMap.mapArray[oldCoord[1]][oldCoord[0]].tileHeight;

//******For each posible direction******
for (var directionCount:int = 0; directionCount < 4; directionCount++) {

//******Set new coord equal to old + new direction, but won’t go off map******
var newCoord:Array = new Array(Math.min(Math.max(oldCoord[0] + xArray[directionCount], 0), Main.mapWidth – 1),
Math.min(Math.max(oldCoord[1] + yArray[directionCount], 0), Main.mapHeight – 1));
var moveBlocked:Boolean = false;
var oldMoveCount:int = mapCheckArray[oldCoord[0]][oldCoord[1]];
var isImpassable:Boolean = Main.tileMap.mapArray[newCoord[1]][newCoord[0]].impassable;
var movesRequired:int =
Main.tileMap.mapArray[newCoord[1]][newCoord[0]].movesRequired[attachedCharacter.moveType];
var newTeam:int;
var tempCharacter:Character = Character.getCharacterAt(newCoord[0], newCoord[1]);

if (tempCharacter == null) {

newTeam = -1;

}
else {

newTeam = tempCharacter.characterTeam;

}

if (isImpassable) {

moveBlocked = true;

}
else if((oldMoveCount + movesRequired) > endDistance) {

moveBlocked = true;

}
else if (newTeam != characterTeam && newTeam != -1) {

moveBlocked = true;

}

if (squareType != “MOVE”) {

movesRequired = 1;

if (moveCount >= startDistance) {

newTeam = -1;

}
else {

newTeam = characterTeam;

}
moveBlocked = false;

}
//******Check if tile was reached previously or impassable******
if (mapCheckArray[newCoord[0]][newCoord[1]] > (oldMoveCount + movesRequired) && !moveBlocked) {

bestPathArray[newCoord[0]][newCoord[1]] = new Array();

for each(var tempVar:String in bestPathArray[oldCoord[0]][oldCoord[1]]) {

bestPathArray[newCoord[0]][newCoord[1]].push(tempVar);

}
bestPathArray[newCoord[0]][newCoord[1]].push(“1,”.concat(directionArray[directionCount]));
if (newTeam == -1) {

var squareFound:Boolean = false;

for (var i:int = 0; i < moveSquares.length; i++) {

if (moveSquares[i].horPos == newCoord[0] && moveSquares[i].vertPos == newCoord[1]) {

squareFound = true;
moveSquares[i] = new MoveSquare(bestPathArray[newCoord[0]][newCoord[1]], newCoord[0], newCoord[1], squareType);

}

}
if(!squareFound) {

moveSquares.unshift(new MoveSquare(bestPathArray[newCoord[0]][newCoord[1]], newCoord[0], newCoord[1], squareType));

}

}
currentNewTiles.push(new Array(newCoord[0], newCoord[1]));
mapCheckArray[newCoord[0]][newCoord[1]] = oldMoveCount + movesRequired;

}

}

}

}

I’m using actionscript 3 for the code if you’re curious. And here’s the result of all that code.

What a beautiful movement area

If there’s anything you’re interested in learning about what I’ve done so far or about the game development process, let me know in the comments.

Categories: Programming Tags:

The Story So Far

January 12th, 2012 No comments

As this is my first post, I believe an introduction is in order. My name is Kyle McGuffin and I’m in the process of programming my first published game ever. I’ve got a degree in Mathematical Economics from the University of Michigan which started me off working as a budget analyst and a web developer. I’ve enjoyed playing video games since I was 4 and have always thought that a career as a game designer/programmer would be fun. This is the start of me realizing that dream.

For my first game I’ll be using Flash to create a web based game. I started off by using the Flash Shootorial on Kongregate to learn the basics of Actionscript 3. I don’t know how much money is really in flash games, but I’ve heard several stories of people publishing games through Flash Game License so I figured it was a good place to start. My game will at least be published, even if it’s not very profitable.

My current idea is a turn-based strategy game in a medieval setting. The gameplay should be similar to Advance Wars, but with a completely different set of units since it’s medieval instead of modern. So far I’m planning on calling the game “Medieval Tactics” with a possible subtitle depending on if I add zombie enemies or not. Here’s a screenshot of the game so far.

The First Image of My Work

Most of the artwork is temporary and lifted from Google image searches. I have a friend that is working on the actual art assets for the game. Until those are ready, the placeholder images will have to do.

I’ll try to post my progress regularly. Hopefully you find my insights into creating a game for the first time interesting.

Categories: Game Update, Personal Tags: