Friday, March 30, 2012

Pachinko and Hard Modes

For the last few days I've been working on the third mini-game for my carnival pack. I'm particularly fond of this one. Its based on those horse racing carnival games where the player rolls a ball up a ramp and scores points when the ball falls through differently marked holes at the end of the ramp. The player's horse moves based on how many points the player scores, and somebody wins when their horse makes it to the finish line.

I've made a similar game. Instead of having the player roll a ball up a ramp, I have the player drop a puck in to a Pachinko type board. It bounces down through some pegs and a bumper that is moving back and forth. Eventually, the puck falls in to one of nine slots and the player gets points based on which slot. The points (ranging from 5 to 20) cause a rocket on the left of the screen to move up towards a finish line in a fashion very similar to that of one of the horses from the carnival games. In my game, the player plays against two computer opponents. They don't have their own Pachinko boards, but every once in a while, based on a stopwatch, the computer opponents are randomly awarded one of the same point values the player can get. So the player has to race the other two rockets to the finish line.

In addition to the new mini-game, I also added hard modes to the new and previous games. In the basket catch game I simply increased the gravity so the balls fall faster. In the juggling game I added two more balls for the player to juggle, making the total five. It gets really hard to keep them all from falling off the screen when they are all bouncing off each other. For the hard mode of the rocket race game, I made the computer opponents score at a slightly increased rate (something like 1 or 2 times more per minute). That alone didn't feel like enough so I also switch the probabilities of scoring 5 points or 10 points. Now, in hard mode, the computer opponents have a 4/9 chance of getting 10 points and a 2/9 chance of getting 5 points (instead of the other way around like in easy mode).

One more mini game left and I'll only have the finishing touches and settings pages to add. Right now I have instructional Toast messages popping up when a game is loaded that tell the player how to play, but I'll probably replace those with a "How To Play" type page where you get instructions on each game mode. I also need to get the scoring and stuff set up as I plan to add Scoreloop to the game.

Saturday, March 24, 2012

Mini Games and Finishing Touches

Yesterday I wrote another mini-game for my Carnival themed game pack. This one has the player drag a basket back and forth across the bottom of the screen to catch balls that spawn at the top of the screen. I need to do a little bit more work on it, but then I need to work on the other mini-game a bit too. Right now the game ends after a single ball is missed, but want to make it so that it ends when a total of 3 balls are missed. I used the AndEngine physics stuff and it resulted in the balls being spawned going different speeds and sometimes having a little horizontal momentum as well. Making a hard mode should be as easy as increasing the gravity affecting the balls so they fall faster.

I spent some time adding some finishing touches to my Deep Sea Trapper game. Getting music ready, switching the sounds over to using SoundPool instead of MediaPlayer, centering the settings page, etc. I also set up the Previous and Next buttons on the "How to Play" page to be actual images instead of the default Android buttons I was using before, so now they will fit with the artistic theme when its all finished. So, now I think the full version of Deep Sea Trapper is all ready to go once some better graphics and the audio aspects are added, barring any additions I decide to make.

After I was done setting up all the Deep Sea Trapper stuff, I went back to working on my carnival game pack. I didn't start messing with a new mini-game, but I think I've decided what the other two games are going to be.  Anyway, the part I worked on today was the game selection screen. I'm pretty happy with how I have it set up. I have one big animated sprite that will eventually have animations of the 4 different games on it. The user swipes the image to page left and right through the games and the sprite slides over to the next choice. On the bottom of the screen there is a Easy and Hard button (each mode will have an easy and a hard mode) that the user presses to start the game. I also plan to add some text that shows the high score for each mode. Again, I'm pretty happy with how the menu page turned out. Its working exactly how I envisioned it would.

Wednesday, March 21, 2012

Playing with AndEngine

I haven't really been messing with any games much lately. I have been tweaking my maze game a bit, trying to get the zombie movements working better and better encapsulating some stuff. The zombie stuff is just kinda boring though. I've done it all before, I'm just translating it in to Java and integrating AndEngine. So, I need to take a break from it every once in a while.

Two days ago I stepped away from working on the maze game to play around with another idea I had. I want to make an app that is a collection of at least four circus/carnival themed mini-games. Yesterday I made one where you have to juggle a couple balls for as long as you can. Its working pretty much how I want it to (still need to add in a pause menu and a reset function) and it is fully playable, although not particularly good looking. My longest time is just over three minutes. I'm still brainstorming some simple little carnival games that I can add. I'm thinking maybe a whack-a-mole type game or something. I expect this to be a project that I play around with when I'm taking a break from other, more involved games. It is also serving as a way to experiment with some of AndEngine's physics features.

Tuesday, March 13, 2012

Lite Versions of Color Coder

So pretty much all the work I did yesterday was getting the Lite versions of Color Coder ready for an update. This entailed getting the content centered on the screen, adding Scoreloop, setting up music, and changing game sounds over from MediaPlayer to SoundPool. It was all pretty easy but also very tedious and time consuming, especially since there were two Lite versions I needed to update.

I added Scoreloop to the Lite versions and they share the same leader boards as the Full version. This means that people with either of the Lite versions can put their scores up on the Classic mode leader boards, but not the Time Trial one.

I asked the Scoreloop support staff about the possibility of not showing the info that was irrelevant to the game mode (like I mentioned in an earlier post) but apparently that isn't currently an implemented feature. The good news is that there is already an "enhancement request" for that feature, so hopefully they will be adding it soon. I don't know when that request was added to their queue or how fast they add requested features, but this seems like a problem that would be fairly common so maybe they will get to it pretty soon. I hope they do at least because I plan to have several more games with similar modes and it going to get pretty annoying if all their leader boards look like that.

Sunday, March 11, 2012

Zombie Movements

I've been working on getting my zombies to navigate around the maze without getting stuck. It still isn't organized extremely well (I plan on cleaning it up a bit later) but it is working decently. I hope to make the zombies even 'smarter' but right now they are good enough that you can't stop moving or they will get to you. They don't pile up in corners and will sometimes take different routes if there are a bunch of them piling up in one area. Sometimes they act a little dumb, but they are still good enough that you have to keep moving to avoid them, and that's the main thing I'm going for.

I had some trouble getting the zombies to move properly. They were getting stuck on each other sometimes and then the two zombies that collided would fail to start moving again. Now that they are successfully moving around the maze without stopping or getting hung up, I can start working on some of the other functionality. I'll most likely come back to the zombie movements and get that working better, but even if I didn't do any more work on it, it will work just fine for the game. Now I can start working on projectile stuff, special zombie types, and more mazes. Also HUD stuff like life gauge, ammo, kill count, etc. In my opinion, the hardest part of this project is likely giving the zombies a way to move around without getting stuck, and since that is completed in a working (though not well refined) manner, the rest of the project should be pretty straight forward. That's not to say that the rest of the project will be easy, but that it isn't going to be as hard as some of the zombie movement AI stuff.

Friday, March 9, 2012

A New Game

I'm pretty much done coding Color Coder and my puzzle game so I've started working on a new game in the last couple days. Well, it's a new Android game. It's a conversion of the Zombie Maze game I worked on when I was playing around with OpenGL. You can see a video of that project HERE. I have a lot of the basic code done already from that project, so this new project has been going very well. There are only a couple conversion issues that have been hard to deal with switching from OpenGL C++ to AndEngine Java. With the OpenGL I did all the collision detection myself, and now I can handle it with AndEngine. This sounds like it would be way easier, but it has actually left me with a couple of problems to work through. For example, with the OpenGL project, the walls were all individual, but with the Android project, the walls were all a single image so they couldn't be differentiated. The solution I came up with was to use the AndEngine Line class to outline all the walls and then detect collisions with those instead of the wall pictures.

Right now the game is actually a tiny bit playable. I've added an AndEngine control that looks a bit like a thumb stick and that moves around the player. Eight zombies randomly spawn, each in one of 16 predetermined spawn points. When the game starts, the zombies move through the maze towards the player. When a zombie reaches the player and makes contact, the zombie dies, and the player takes a point in damage. If the player takes 4 hits, they also die. The zombie movements are the extremely simple for now. If the player is above the zombie, the zombie moves up. If the player is below the zombie, the zombie moves down. Same deal with left and right. I'll be making the movement stuff better like it was the OpenGL version. That way the zombies negotiate around walls instead of just stopping at them if they are lined up with the player. I'm going to take this opportunity to clean it up a bit from the way it was in old version. A lot of my work today was creating a hero class and a zombie class, and then the different playable characters will inherit from the hero class.

I'm going to start with just the first character, get the game all working with that, then make the rest of the characters. Getting the game working means I need to add projectiles and weapons, zombie respawning, at least 2 more maps, and a few smaller things like player/zombie animations depending on what direction they are moving, etc. But the next thing I'll be working on is the better zombie movements.

Tuesday, March 6, 2012

Leaderboards Working

The Scoreloop leaderboards are working. After tinkering with them for about a week, they are finally showing codes found for Classic Easy and Hard modes, and times for Time Trial mode. The only issue now is that the scores for both modes show on the leaderboards, so instead of a score for Classic Easy mode showing as "12" it shows up as "12 00:00.00" and instead of a Time Trial mode time showing up as "01:02.34" it shows up as "0 01:02.34". It isn't the worst of problems, and it is barely noticeable for the Time Trial leaderboard since it is a single additional character. For the Classic modes, it is a little bit more annoying since it is actually 8 characters of meaningless information. I asked about showing just the relevant info for different leaderboards on the support "forums" on the Scoreloop website. The reply I got from the support staff was that they weren't even sure if it was possible to show only the time for Time Trial and only the score for Classic modes. While it isn't a big deal, and I'm actually quite happy with how it is currently working, I find it a bit odd that they don't already support this option. It's hard to believe that I'm the only one that wants to have a time leaderboard and a score leaderboard in the same game. The new game that I'm working on has both of those modes as well, so apparently, not only am I the only one who wants both mode types in the same game, I've also made two games that use them.

I'm going to have something similar going on with a new game I'm thinking up. It'll have like a speed run mode where you try to beat it as fast as you can, but also a survival mode where you try to stay alive as long as you can. The problem here is that one of leaderboards will be ascending and the other descending. It can be done with Scoreloop, but it will look terrible on the leaderboard. Something like "00:00.00 01:23.45" or "01:23.45 00:00.00", which isn't the best look. Again, I'm just surprised that Scoreloop, which has gotten pretty huge in mobile gaming, hasn't accounted for this kind of stuff already. It seems like making it so it doesn't show up if the score was set to null or something would work out nicely, but they haven't done anything like that apparently so I'm out of luck in that department for now.

Saturday, March 3, 2012

Music, Sounds, and Waiting

I'm hoping that it won't take many more back and forth posts on Scoreloop's support discussions before everything is set up. I feel like I'm close enough that the problem will be solved in one or two more replies. I kinda got my hopes up today, thinking that the final reply post that solves my leader board issues once and for all might be on the board when I woke up. Unfortunately, I forgot it is now the weekend and Scoreloop support team members probably don't spend their time replying to help messages on their days off. So, now I just have to wait a little longer. Here's hoping that I get the leader boards fully working on Monday or Tuesday.

I've got the music in my new game working just as well as the "music" in Color Coder. I ended up going with a background service so that I can keep the music going across all my activities (or different screens) without it restarting every time. As a result of using a service, the music is just being played with the Android MediaPlayer stuff, instead of something Android specific, but it seems to be working out well in my current play testing. When I was trying to understand services better, I saw a couple topics on programming support forums like stackoverflow.com where people asked for help with services and then people replied saying to avoid using them. The only thing is, nobody seems to explain why services should be avoided, and when I even attempted to look up why services might be bad or their pros and cons, I didn't find anything that described them negatively at all. As far as I can tell, most people just tend to steer clear because they can get complicated and a lot of people that use them don't understand their life-cycles or something. The background music that I've been doing with them isn't that complicated though, and I'm not attempting to do any complex data management or anything in a background service, so I think I'll be fine. If I come across an explanation to why services or bad, or somebody manages to convince me of a better way of doing things, I'll likely go back and reformat the code for my music playing, but for now it is working out quite well.

Oh, I also went back and switched the sound effects in Color Coder to being played with SoundPool instead of MediaPlayer. When I initially added the sound effects in I didn't really understand the difference between the two. I looked into it a bit more and it turns out that SoundPool is the better choice for short little clips (like the cell selection sound) while MediaPlayer is better for playing longer sound files, like music. So, I switched it all out and boom: my sound effects work better. Sometimes before they weren't playing in a way that felt very responsive. If you clicked cells too fast you would only hear 2 animations when you had clearly tapped 3 or 4 cells. Now (as far as I can tell) you get a sound for every tap, so I'm pretty happy with that. The sound only playing once or twice for 3 or 4 cell selections was one of my pet peeves in Color Coder.

Friday, March 2, 2012

Color Coder Upgrades

So lately I've been focusing primarily on adding new stuff to Color Coder. Still sorting out the Scoreloop issues, but I'm close to resolving them. Contrary to what I said in an earlier post, the Scoreloop support "forums" have been pretty helpful. I've been getting tips from a member of the support staff and that has been nice. I'm pretty sure that we are in way different time zones. Scoreloop is based in Germany and while that doesn't necessarily mean the support staff is from there, I think its a pretty safe bet that they are, and so all my posted questions get answered while I'm asleep. So, I pretty much get a single reply a day. As such, trying the tips I get in those replies has been a pretty slow process. Attempt the solution they describe, it helps but doesn't fully solve the problem, post what the outcome is and what I still need it to do, wait until the next day when I have another reply. Hopefully the next time I add Scoreloop to a game it will be much easier because of this experience, but that would be too easy, so I will probably run in to just as many new problems next time.

I've also been getting music set up in Color Coder. It was actually a little more complicated than I thought it would be, but I have it all working now. It turns off when you hit the home button and doesn't restart when you switch activities. Right now the "music" isn't really music, but actually the game over sound playing on a loop. It will all be good to go when there is an actual music file to play. As a result of adding music to the game, I've also added a music on/off radio button toggle to the settings page. Because of that addition I rearranged the specific sound check boxes to be a 2x2 setup instead of a 4x1 arrangement. This has the additional benefit of giving me some room on the setting page to put a "more games" button in the future. The space isn't really a problem on the full version, but on the Lite versions of the game there isn't much room with the ad on it.