Friday, January 25, 2013

Challenge the Player

There are a couple of things you most certainly need when making a game and challenge is the first and foremost. If it isn't challenging it becomes just a set of interactive graphical 'stuff'. Like a lot of those watered down tycoon games available all over the mobile app markets. It takes me about five or six minutes of play time in those games to get utterly bored out of my mind. They look cool and fun but they play like money drops. Arcade games were designed to be money drops too although I would consider the arcade games to be works of art where as the new Story style games are works of monotony and dullness no clear goals to achieve no end game but the biggest thing about those is that they don't have challenge.

Arcade versus Story games

So what makes them different well Arcade games there were good ones and there were bad ones. You could spend more than a few dollars just playing the first level/stage of an arcade game. But they had goals that were hard to achieve. The Story games I've played always had a fast track to all the unique items, buildings, etc which is pay some money. Arcades didn't guarantee that the closest I've seen to that with Arcades is Insert Coin to Continue. That is a very different concept because your reward is different. Instead of being rewarded with a hammer head shark building to place in your city so you and your friends can see your wonderful new statue you paid money for and really does nothing. I think the difference there is the incentive. Arcade incentive - insert coin to not loose all the things you've worked up to to this point the further you are in the game the more likely you will be to put in another coin and the more coins you've put in so far the more you want to keep going and finish a play session. So the games had to be difficult but not too difficult. No story game I've played yet has presented me with any challenges. There are no downsides to actions there aren't any real upsides either. Placement of buildings well most of them allow you to move the buildings at anytime anywhere instantaneously so you can go wrong where ever you place them. Need I go on I feel like I could keep going about the bad design choices of these games and the lack of challenge, but that would just be cynical.

How to achieve a challenge?

One of the problems when designing games that I've had is that yes I didn't think about how to challenge the player and most of my prototypes or earlier development builds turn into the Story game where it's just a bunch of mechanics and so I look at it and say to myself, "I'm done it works move on". And I am bored of my own idea and move on. So I have decided to breath a breadth of life into my games. I hereby declare I will make my games impossible, I will find ways to only make a prototype you cannot win. Then once I know I could play for hours and still not win, and I'm not talking about not having an end game like many of these games today. There must be an end game or else what the hell is the player playing for. So Impossible game, with an End Game that you might be able to achieve but it's just humanly impossible. Then come up with mechanics or tools if you will for the player to have a better chance at solving the impossible. Beating the impossible boss. I think that type of thinking exercise should help create games that will have interesting choices present a goal a true game goal, "do the impossible".

Tip: Do the impossible! If the player doesn't feel like it's an impossible task i.e. trying and failing then in the players mind it isn't impossible but one thing that is expected of a game at the end of the day is that it is beatable. This mindset can create new solutions you never thought of before, which is very exciting.

Tip: Make a game out of it, say to yourself when thinking about your next game, "What monster can I create that is the most bad arse biggest badiest creature to ever set foot on the interwebs, what bfg will he have that kills you even if your blocking" Then the followup "what weapon item or tactical manuever can I give the player so he can defeat said bad arse creature."

4 comments:

Unknown said...

I really enjoy your blog posts! I haven't read all of them, but so far they provide a good amount of assistance to me in beginning my journey as a hobby game creator. I have started a few projects only to quit them when I don't understand certain aspects of the coding required or it just isn't working out. I am currently working on a top down arcade style game, and have been using your posts as reference when I need some guidance.

Keep up the good work, and I will keep reading!

Nick said...

Sam: I am really glad you enjoy my posts, definitely keep reading and I will keep writing. I can definitely relate to starting a project getting to a certain point and then stopping work on them when I get into areas of game coding I've never done. It really takes a lot to push yourself to get past those points. I sometimes find that going back to those projects later you see that you were so close to figuring it out and you'll really see how far you've come and how much work it actually takes to finish a game.

Topdown style is a favorite of mine, just keep pushing it and remeber not to get too lost in code structure and unnecessary graphics coding. Stay focused on the core gameplay elements. I hope I'll be able to write some more posts that can help guide you, myself and others to make some great games in the future.

Please let me know if there is any particular area of coding you would like to get my thoughts on, I have so many things I could write posts about sometimes its overwhelming for me to choose which to do first.

P.S. I am glad you use this blog as a reference, that is exactly the reason I started it in the first place. It's nice to know it's purpose is being served.

Unknown said...

Over the years since high school (ending in 2006) I have made a few games to near completion (all lost on dead hdd's sadly). I started with Visual Basic, which was kind of fun at the time, but they were mostly shape based games and bad ones at that. I decided a couple of years ago to teach myself a bit of java and have stuck to that. I only found your blog late last year when I was having trouble just figuring out game loops, or at least understanding how they work. With guidance from this blog and others I have gone from using swing timers to threads.

The current project I am working on is the only one that hasn't stagnated, most likely because I gave up on drawing nice sprites to begin with and used placeholders to get the code up and running.

I'm not worrying about making my code 'clean' as I really am just implementing ideas the moment I think of them. I will probably rewrite the whole game once or twice to clean up the code at a later date.

I would like to read your opinions/methods to implementing AI, and possibly some advanced behaviour ideas.
Currently in my project I have a base abstract AI class which has the fundamentals, and then I extend it for the different enemies (currently only one in my game).
Originally I had the enemies creating a new AI object whenever they were created, but I changed it so there was only one AI created for that enemy type and it cycles through the Array of enemies currently alive updating them.

Another thing I would like to hear about is gravity/phyics effects, not sure if you have covered it before, but I plan to make a 2D side scroller type of game next that will take inspiration from Terraria, the Final Fantasy games, and other similar games.

I'm sure there are other things I would love to read about, but I can't think of them off the top of my head. I look forward to reading more.

Nick said...

Sam thanks for the reply. Loosing a hard drive with your work on it is terrible. I hope that some good has come out of it. I'm glad this blog could help you figure out alternative methods to game loops in Java. I too started by using swing timers and have since moved on though I have always felt the performance of swing timers isn't so terrible that it couldn't be used in a game, I still have a lot of old projects laying around that use them.

And it's good to hear that using placeholders and maintaining focus on code instead of wasting time up front with sprites. I know some of my projects have stagnated in the past because I was "waiting on graphics" which is really a sign that the project isn't that interesting anymore.

Not worrying about how clean your implementation is is probably one of the most important things especially if it's your first time writing a certain type of code, it's better to just get the thing working the next game you can leverage the fact that the code was haphazard and avoid certain code design failings.

As far as AI is concerned it is an area I am currently thinking about so I would definitely like to share my thoughts and code as I go through implementing AI, it's something that either I've stalled on or have been avoiding I am not entirely sure why I haven't implemented more AI portions as it's a very important part of making a game challenging and ultimately fun. Also I agree with your choice to remove instancing to deal with each AI individually. That is the best approach, although I would use a HashSet instead of an Array, not that you are really using an array but just thought I'd mention it. Honestly I can't remember the last time I used ArrayList or a fixed length array in Java. I tend to lean more toward HashMaps, HashSet, TreeSet, LinkedHashSet if needed. The performance difference really isn't anything noticable.

I had some code setup for a 2D side scroller that I was going to post here though it wasn't as flexible as I would have liked it to be. But I am sure I can get into a bit of the physics and effects arena with future post. A great thing to have is a Vector class and to know dot, and cross product, and normalizing vectors though conceptually for simple things like gravity and friction it is unnecessary. At the end of the day its all about controlling movement. I'll do a post on that for you when I get a chance to do so. Thanks for reading.

Post a Comment