About this blog
Awesome. Awesome to the max.
Entries in this blog
Added the warning system to the game for incoming attacks:
The timing is just right, so if you press the block button right when the exclamation mark appears, you'll block the attack(that's only a temporary graphic, I'll probably replace it with something else later). Of course, if multiple opponents are attacking in a group, trying to block all of their attacks isn't really going to work. It's best to try and knock them down with light attacks, run away, or throw something at them.
I'm hoping that the game will have alot of strategy to it, considering that most levels will have the player fighting groups of 5+ enemies at a time. However, the AI is still fairly stupid, and it's something I still need to work alot on. They tend to bunch up too close, charge at the player but completely miss them, or do other such shenanigans.
I probably should draw a new level background. Even though I'm not actually making levels yet, I'm getting pretty tired of playing in this same level.
It doesn't seem to help that I'm hopelessly addicted to Street Fighter 4, and spend all of my free time fighting people online with Guile, ">only to see this in my dreams.
But seriously, it's a really, really good game.
So, about a month ago I decided to take a break from working on my game, which ended up being a break from working on games in general. I had worked quite a bit on my beat em up, remaking the fighting system for a third time, and was feeling like the game wasn't as fun as I was hoping. This week I loaded up the compiler for the first time in awhile and played what I had working, and enjoyed it so much that I played through the level four more times. Now I'm ready to get back to work.
So here's what "Fists of Justice" currently looks like (now with people throwing!):
Really, what I currently have is a beat em up game engine with some cool features like customizable characters. The fighting system now has a "weak" and a "strong" attack. The weak attack is faster, but does less damage than the strong attack, which is slower and more likely to be blocked. In order to guarentee that strong attacks connect, the player must first hit an opponent with weak attacks to lower their defenses. It's actually a more complex system than what is seen in alot of beat em ups, where attacking is usually using only one button. The player can actually perform combos by mixing up the weak and strong attacks, but performing a full combo is only a good idea when the player is not surrounded by 3+ enemies.
There's also the guard system, which requires the player to block right when an opponent's attack connects, rather than just holding down the guard. One thing I'm going to add is a sort-of "Spider-sense", which gives a graphical indication to the player when an opponent is going to attack, so that they have a chance to block it. I have about average reaction time, and by the time I press guard after seeing an opponents attack coming, my character has already been punched in the face. Some sort of warning is necessary for this system to work.
I'm also going to be writing up a design document, which I should have done in the first place. It really is important, especially considering that I've rewritten the fighting system three times due to a lack of direction.
On an unrelated topic, I wanted to recommend a game for the Playstation 3. It's called Valkyria Chronicles, and it is an amazing turn based strategy game. It's actually a mix between an RPG, a turn based strategy game, and a third person action game. The demo is up on the Playstation Network, and it is definetly worth a try if you're at all a fan of strategy games. The game has apparently sold very poorly here, which is quite a shame because it's a very good game.
So, the semester is over and it's back to work. As a start, here are some randomly generated characters to fight:
From my point of view, it's very good that all of the characters, both player and enemy, use the profiles, because it means the sprites are shared between all of them. That means if I draw a new move, I only will have to draw it once and I'll have it for each character.
Next, I'll probably get weapons working, because it's always good fun to go trolling through a horde of enemies with a baseball bat. Weapons will, upon hitting their target, knock them down. However, the character holding the weapon will drop it if they get hit, and it will disappear if it is dropped too many times(lets say two).
I really want to implement the ability to pick people up and throw them, but it is completely not working right now. In the code, I have the properties of a throwable object in an interface, and any object that can be thrown has to implement that interface. For the enemy class, I have all of the interface methods implemented, but when I actually implement the interface, things go very wrong. Both the player and enemies get stuck in a jumping animation. It's very bizarre, because it happens to the player even though the player class doesn't implement that interface. Well, I'll figure it out after getting the weapons working.
And now an unrelated story.
I rented Fallout 3 for the Playstation 3, and was quite enjoying playing it. I was at the beginning of the game, having just escaped the vault. I got to Megaton, and as the entrance to the town was opening, my screen started to get darker. Then, the colors started to change in an unusual way quickly. Then, the screen went completely dark with the sound still working. My Playstation 3 had failed after only six months of use. I was shocked, because the PS3 is, by far, the least used console, and yet it failed faster than the Xbox 360 did. Sadly, I think I was getting a blu-ray copy of the Dark Knight as one of my Christmas gifts. So yeah, I really don't want to read any more red ring of death jokes, because both systems are faulty.
One of the original concepts that I wanted in Fists of Justice was the ability of the player to create their own character to use in the game. Ever since I was playing 2D beat em ups on the Genesis, I wanted to be able to play one of these games as a character that I made. I had scrapped the concept initially because I thought it would be too hard to implement.
However, last friday I was working on the game, and I realized that if I seperated the different pieces of the characters body, reassembling them at run time and filling them in with the XNA color system, it just might work. So, I altered the sprites, changed the drawing code, and...well, here's a character I made using the new custom character system in-game:
I tried to make him look like me...well, me if I had any muscle and didn't have to wear glasses[grin]
The custom character system, or "Character Profiles" as I call them in the code, allow the user to choose their characters hair, eyes, clothes, pants, skin color, hair color, and the color of their clothes. This means that the player will be able to create their very own characters for use in the game. That, combined with the RPG elements I'm planning to have in the game, will make some sort of Oblivion meets 2D beat em up...thing.
It's also cool because I'll be able to have the enemies appearences be randomly, or semi-randomly generated (random face, but same clothes, for instance). Also, this will make creating new character sprites alot easier, although I still have to draw all the different parts of the characters.
Now I need to make a "Create a Character" menu, that the player will be shown when they start up the game.
So...it's been a long time since I posted any progress, but I have been working quite a bit on the game:
I got a new enemy type in the game, the beginnings of a combo system, and a life bar for the player. Up next, I want to get weapons working, something that I've been putting off for awhile, but that I really want to have in the game.
After looking at the new Xbox live community games, I'm thinking that I may try to develop Fists of Justice to be a LIVE Community Game. I think it would be a great Community game, and I think it would do well. The only problems then come with music and sound effects, because if I sell the game I can't use the music that I was planning to. I guess that I could try and make my own music for the game. If it doesn't turn out to be good, it will at least sound...interesting[grin]
The level format has come along really nicely. I even have the standard beat em up "GO" arrow!:
So yeah, alot of bugs in this game. This is probably the most bug-filled game I've made, but little by little I'm fixing them (the major ones, anyway). The biggest bug involved enemies that would inexplicably become invincible for short periods of time. As it turns out, they just happened to be standing next to where other enemies had died, and the punch was connecting with enemies that weren't there anymore. Well, it's fixed now, but it took awhile to find.
Next I'll probably be drawing some new enemy sprites, because there needs to be some variety of enemy types. Hopefully there will be a demo of the complete first level soon, but I don't know how long that will be(Gears 2 and all[grin]).
Well I've managed to fix quite a few of the major bugs that were in the game. Trash cans no longer inexplicably hit invisible walls after being thrown, and characters no longer have strange drawing errors when holding objects.
The other thing I've been doing is working on the level format:
Now I can pass as many background images to the background object as I want, and it will string them together into a single level. Enemies don't activate until they appear on screen. Of course, now I have to split the level into sections, with the player having to beat a certain amount of enemies before progressing. This also means making sure enemies don't go to an area the player has passed in order to search for objects to throw.
So I was going to work on the game's AI, but I decided that I wanted to get a blocking mechanic working first. And indeed, blocking is now in the game:
When I used to play Streets of Rage 2 and Golden Axe, it always upset me how I couldn't block. The only form of defense in those games was to hit them before they hit you. On the other hand, I didn't want to give the player in my game the ability to hold down a block button and turtle up.
So, I added a block button, but it's really more like a parry button. In order to block an enemy attack, you have to press the block button right when the enemies attack connects. If you time it just right, you'll block the attack. Projectiles can also be deflected with the block button. I figure that requiring the player to press the block button at the exact moment of impact will add an element of skill to the game that wasn't present in some past beat em ups. However, it should be noted that I was still able to turtle in a way by mashing the block key constantly. However, this isn't a full proof defense, as some attacks will still get through, but I guess it's a tactic the player could use if they get really desperate.
Well, after a long hiatus, I'm back to working on Fists of Justice. I'm drawing some new enemy sprites so I can actually make a complete level. Coding a beat em up is easier than I thought, but doing the graphics is...well...hard.
Plus, before I could get back to work, I had to beat Mega Man 9. If you were considering whether to buy it, just know that it is good, like really good, like Mega Man 2 good. I can only hope Sega will do the same with Sonic and make Sonic 4.
So anyway, let's talk about Beat em up AI. I'm pretty satisfied with the way that the game's AI works right now, the enemies attack quickly and use items effectively (in other words, they throw trash cans and have pretty good aim with them). The problem is that there is individual AI, but no group AI. The result is that the enemies will bunch up together when attacking, which doesn't work well.
The current AI works well with small numbers of enemies, like about 1-5. With larger groups, the enemies essentially line-up to punch the player in the face. So obviously, I need to have group AI that governs how the enemies spread out when attacking, and limiting the amount of enemies who can attack at one time.
In my next post I'll explain the game's current AI in detail. I'll get some graphics drawn to show the enemies' decision tree, and what I plan to add to it. I was going to do that today, but as mentioned before, I've been playing Mega Man 9 for pretty much the entire day.
So, I haven't really worked that much on the game, what with the school, Castle Crashers, Spore combo.
Apparently, as part of my beginning CS classes, I have to learn Python. Looking at some tutorials, and doing a few sample programs with it has convinced me that it is a pretty cool language. I might do some small games with Pygame, since I'm not feeling like working on my big project right now. I don't imagine Pygame will be too difficult to learn, since it is essentially SDL(I think).
I really, really wish I could make a Blocky Man creature in Spore[grin]
Ugh. I've started my first semester of college so I haven't been working on the game for awhile. I'm hoping to get back into it once I get settled into my new schedule.
I've been heavily inspired playing Castle Crashers the past few days. It's an insanely good game, and I really wish there were more like it. How about: River City Ransom, with online play, for the live arcade. I can dream, can't I?[grin]
Punch and throw trash cans at people, you know, if you haven't already.
I'm currently in the process of creating the various generic enemies that the player will have to fight throughout the game, since the current one is just a placeholder. Here is the first enemy I've created, called "Bad Dudes":
They'll each have different character and AI traits. The hardest part will be redrawing the sprites for each.
Oh, and if you haven't tried Bionic Commando Rearmed, you really, really should.
I've uploaded the current build of the game for anyone who wants to see it in motion. You can get the demo here. The demo allows you to fight against five enemies who will respawn once you beat them up. It also features the cool-looking shadows that Trapper Zoid suggested in the last post.
The controls are:
w - move up
a - move left
s - move down
d - move right
, - punch
. - kick
r - run (I know, I know, I'll get the double tap run working later)
space - jump
The game requires XNA 2.0 to run. Punch people, throw trash cans, and leave me copius amounts of bug reports in the comments![grin]
Work on the AI is coming along really well:
Now the first thing you might notice is the vista window on the game, because I'm typing this from my new laptop. I'm just glad I could get XNA up and working so quickly on here.
The AI now fights up close as well as by throwing trash cans. They fight pretty well, and can team up on the player really well. I'm thinking of uploading a demo to show how the fighting system and AI are coming along right now, but I want to fix a few bugs before I do that.
So, work on the enemy AI has begun:
I wanted to start off simple, with two AI states to test out the state machine. The AI was supposed to:
1. Find a random trash can in the stage and pick it up.
2. Take the trash can, line up with the player, and throw it at him.
The first attempt did not go so well. They all picked up trash cans, eventually, but some of them walked in place after grabbing it, some of them just threw it randomly, and some of them appeared to be having a seizure by moving back and forth rapidly. So, I redid step 2 so they would simply throw the trash can once they picked it up.
This worked better, but there were still numerous problems, like some enemies following others, some walking in place, and some trying to walk off the map. Then I realized the obvious, the enemies were trying to pick up a random trash can in the stage, even ones that were already held or off the map. I knew this because I was actually able to play fetch with one of the enemies by tossing the trash can back and forth, and he would always follow it.
Although I was enjoying playing fetch with them, I decided to fix the AI so they would only go for trash cans that were on the floor and still on the map. With this fixed, I watched as they found each trash can in the stage, picked it up, and threw it right off the stage, with the exception of one. Then something interesting happened. Two enemies, perfectly lined up, began to toss the remaining trash can back and forth to each other, like a bizarre game of catch. Before I could take a screenshot, the third enemy intercepted the trash can and chucked it off the stage.
Finally, I fixed step 2 so they would actually throw the trash cans at the player, and it works. Next up, I have to get the AI working for actual close-up fighting. For this, I'll add a "Fight" and "Retreat" AI state for this purpose(and probably also a "Charge" state for running attacks).
I was thinking of how I would handle the retreating aspect of the AI, and I actually looked to Warhammer 40k for inspiration. In that game, if a unit is in melee combat, and they lose a turn, they have to take a morale check to determine if they continue fighting or flee. I'll have a similar concept in this, as if an enemy is knocked to the ground, they'll take a "morale check" to determine if they continue fighting. I mentioned in the last entry that the AI would have traits, and I figure that they'll have a "bravery" trait which will determine how they pass a morale check.
Hmmm, that was a long entry. I'll try and replace the excessive text with excessive screenshots in later entries[grin]
Well, I just got back from a long trip and then came down with a cold afterwords. But, I did manage to get some work done on the game AI:
This seems a little too easy, maybe I should try something not so one-sided:
I'm really trying to figure out a good way to handle the enemy AI. Obviously in a game like this I don't want every enemy on the screen to attack the player at once...well, not on the easier difficulties at least[grin].
So, I'm thinking that I'll have some sort of group AI, where even if there is a large group of enemies, only a few will charge the player at once. I'm also thinking to give each enemy traits, which will make some more aggressive, some more cowardly, some who will not attack the player unless they have a weapon, and other traits like that.
So far the enemies just chase the player until they get near. Since that obviously isn't working too well, I'm going to work on getting a simple state machine in place for the AI, and build further from there.
Enemies are now in the level, but without AI, so I can easily do this:
The enemy sprite is only temporary. I was feeling lazy, so I just did a simple recolor of the player sprite. Also, the code for the enemy characters is almost exactly the same as the player, which will make coding the AI quite a bit easier.
On another topic, I have to get a laptop for college. I've decided to go with an HP Pavilion laptop, and here are the specs for it:
- Genuine Windows Vista Home Premium with Service Pack 1 (32-bit)
- AMD Athlon(TM) 64 X2 Dual-Core Processor TK-57 (1.90 GHz)
- 15.4" diagonal WXGA High-Definition HP BrightView Widescreen Display (1280 x 800)
- 2GB DDR2 System Memory (2 Dimm)
- 256MB NVIDIA GeForce 8400M GS
- 160GB 5400RPM SATA Hard Drive
I don't want anything too fancy, and I'm not much of a PC gamer, so I think this set up should be good. The only PC games I play are strategy games, and I think I'll finally be able to play Dawn of War on its max settings with this set-up. So, any suggestions on things I should add before buying this?
Well, I don't have much progress to report, but I did want to be the bearer of good news and announce that Mega Man 9 is coming to WiiWare. Mega Man 9 is actually going to revert to 8-bit sprites and music, and retain the classic gameplay as well. This is why I like Live Arcade/WiiWare/Playstation store, because it allows old school 2D games to make a comeback. I sure hope Sega and Sonic Team do something like this, I would love to see Sonic the Hedgehog 4.
Regarding my game, I've fixed all of the issues with throwing, so now I can finally move on to getting some enemy characters in there. I don't really have a plan for their AI yet, but I don't imagine it will be too complex. I'll probably make something really simple for demo purposes, though.
Throwing is now, for the most part, implemented:
I'm not really liking that holding sprite there, it looks like he is holding the trash can on his anime hair, but it will do for now. I haven't drawn the throwing frame yet, but the trash cans can be thrown around.
Another problem is that my routine for sorting sprites draws the trash can being held behind other trash cans that should be behind it. I think this should be fairly easy to fix, though.
Now that there is something to throw around, we need someone to throw it at, so I'll get working on some enemies soon.
Ugh, I managed to get away from MGS4 long enough to get a little work done on my game. The game seems to have an unnatural, almost unholy, hold on me. I feel it even calls to me when I sleep, wanting me to shoot crap with a rail gun and search for music for my product placement iPod.
Well, that and I graduate from high school tomorrow, and have had to do things for that.
Anyway, regarding the game, I managed to get the holding and throwing sprites drawn, and am getting ready to code throwing into the game. Then, of course, I need to start getting some enemies in the game to fight. I don't really have a concept of how the enemies' AI will work yet, so I need to consider that too.
I'm also giving XNA's game state management system a look. I upgraded to XNA 2.0 recently, and this is one of the new features that interests me. Ordinarily I just use the game state manager that I wrote awhile ago, but I figure since they're giving me this feature I should probably take a look at it.
So, I got some stuff to do, and I'll try and get some good screenshots for the next post.
In order to draw the sprites in order, so the ones in front would overlap the ones in back, I implemented a routine that would sort all of the game objects by order of their y position. This was done by putting the sprites into a binary search tree, and doing an in-order traversal to draw them with the correct overlap. I added a trash can object to test it, so here is the game running with 20 trash cans:
Here it is running with 2000 trash cans:
That seems to work fine, so I'm going to move on to getting grabbing and throwing working. Once I do that, I can get some enemies in to fight. I sense there might be a demo in the near future, one with fighting and trash can throwing.
All I have to add is grabbing and throwing, and I'll be done with the basic commands. Then, I can remake the player sprite into an enemy sprite, give it some AI, and fight it.
Of course, there is also the matter of drawing the scene in order, so the sprites overlap each other correctly. That shouldn't be too difficult to do, simply throw them into a collection and do a sort on them.
I've been wanting to work on this game alot more, and since my summer vacation starts on friday, I'll finally be able to. Then again, Metal Gear Solid 4 comes out next week, so it might be a little difficult to stay focused[grin]
Haven't really been able to work on the game over the past week, but I did put my own sprites in:
I had punching and kicking implemented with the River City Ransom sprites, but I had to comment them out until I can get around to drawing those sprites for my character. Still, the background scrolls well and the character movement is nice, so it's going well so far. I have to port my code for grabbing and throwing objects over to this, making changes for the new setup.
I'll probably work on it tomorrow, so hopefully I'll have some new screenshots.
So, I was about ready to begin the actual game, but I've come to the conclusion that I just don't like the way the gameplay is turning out. Therefore, I want to take the game in a different direction. I still want to maintain the beat em up part of the game, but I want to ditch the platforming part of it. Something like this:
These are temporary sprites of course, I'm not planning of making a remake of River City Ransom. Interestingly enough, though, alot of the code I've written for grabbing, throwing, and punching still apply, it's just that the game won't be a platformer anymore.
I'm planning on calling the game "Fists of Justice", which is a name I mentioned awhile ago, and I already have a general idea for the plot of the game. It will be based on various martial arts movies, and my favorite beat em ups: River City Ransom and Streets of Rage. It will be a Beat Em Up/RPG hybrid, where you get experience by fighting, and use that experience to learn new moves. You'll still be able to pick people up and throw them at other people, along with use various weapons scattered around.
The story itself is going to be in a very choose-your-own adventure format, where there will be several ways to beat the game. It won't be a long game, but the point will be to beat the game several times and power up the main character.
So that's about it. I think this will turn out alot better and alot more fun than before.
Well, I haven't gotten much work on the game done since my last update. However, I decided to post a demo in order to make up for it:
Demo of my current Beat Em Up Prototype build. It's a whopping 37kb.
The controls are:
Right arrow key - Move Right
Left arrow key - Move Left
Up arrow key - Jump
F - Attack/Pick-Up/Throw
G - Spawn new Guard
C - Spawn new Crate
I added the ability to spawn new guards and crates by simply pressing the 'G' and 'C' keys. The entities will spawn at the top and fall down, which I thought was funny when spawning the guards. I set the cap at 100 entities (Guards + Crates).
The demo is very unpolished and buggy, but it's what I have so far so I thought I'd show it off. It features my third revision of the collision code, which I'm sad to say, is the best one so far. The collisions work well with a small amount of entities, but not so much when there is alot of entities colliding at once. Since I want the game to involve fighting an overwhelming amount of enemies, this isn't really working as intended.
But enough of my complaining, try out the demo and have fun spawning 50 guards and throwing them off the cliff.[grin]