Friday 20 December 2013

Halftime! - by Terrible Spice & PSI Spice

Like all good game-projects, poorly directed bar fights and soccer matches, there is a halftime, and ours is now. For two weeks, we'll be busy skiing, ice-fishing, sledding, ice-skating, maiming with snowballs with a tad too much ice, clubbing (both with and without seals), going to Christmas parties, slipping, breaking bones and trying to get inspiration by climbing infinite, hazardous mountains (still working on the location for that).

Yesterday we looked back on the past few weeks and how we can make sure to deliver an awesome, and obviously better version of Ice Climbers at then end of January. Although we have made quite come progress, it became clear to us that there is still a long way ahead of us to achieve our goal, and we need to do that a bit more swiftly. Or as the Dutch would say it, put some S.P.I.C.E. up our asses! What opened our eyes were the midterm presentations last Wednesday, to show our current progress to the supervisors and fellow students, and to see what they have so far. Our audience, consisting of five other competitors and some members of the jury, was simply dumbstruck.

Now there is something you need to know here. Although our game does have some gameplay, a moving and stunningly handsome character and enemies, the game lacks basic elements such as a starting and game-over screen, a properly implemented background, enemy collision, the ability to die, alpacas, serious altitude and the actual breaking of the blocks. Due to the non-existent start-up screen, we had to use one from a different game and badly edit our character and name over the original overlay. Although it was very comical, it was not professional in the least.

I think you're beginning to see why exactly our audience was dumbstruck. As for the rest of the presentation, the jokes were poorly timed and as subtle as a heap of bricks to the face, one team member who hadn't seen the PowerPoint presentation yet snickered all the time, and the PowerPoint itself could have been the remake of the famous web game "Press Space to Win!" (which, in my opinion, would have performed better as a tech demo than our original one). 
Nonetheless, our demo was placed fourth out of six. We'll just ignore the fact that one tech demo wasn't working and another one was still in the making on the back row. Also, we had without a doubt by far the best sprites of everyone, so great job on that one team!

Even though we are all going to enjoy our long awaited Christmas break, we made some plans for the next two weeks, to prevent ourselves from drowning in a shitload of things to do weeks before the deadline.

Art-wise, we want to have all the characters and other sprites and their animations done before we start school again. Right now we have the main character and almost all his animations, two enemies, of which one is animated and one still needs a few animations. Also Spice Climbers ain’t no Spice Climbers with just a few ice tiles, so we need to expand our amount of tile types. We desperately need our own menu design, and designing the UI is also planned for the upcoming weeks. It’s not a lot for the art department to do, but then again, one of us is going skiing, and in general, the only two weeks off we get throughout our school year can’t pass without lots of fun activities planned!

As for the code of our game, we have decided that a manageable goal would be to have our game work at least like the original Ice Climbers worked. From there we can add our own implementations and make Spice Climbers sparkle! In particular, we will finish the game states and enemies part of the code, improve our collision detection and add lives, infinity and/or co-op mode. One of the comments we got on our code is that we lack comments with it. So another new year’s resolution is to give more comments on what we do in the code. Another one is to make more use of SVN and our Scrum list.


So for now: That’s all, folks! To anyone who reads this, we wish you happy holidays, and tune in later for more!


Source

Friday 6 December 2013

An update on the code – Shiny Spice


First things first, we wanted to a create a solid platformer framework: one where the player can walk around and jump, collision with tiles is detected and levels can be loaded from a selected file. Now we have finished that, we can use that as a starting point and more easily divide work. 

The first thing we did was getting the player on the screen and making it move. Fortunately, it can inherit from the GameObject and SpriteGameObject class from the GameManagement library. That gives it a position  and a velocity variable. The position simply announces where the sprite of the player has to be drawn, and the velocity updates the position every frame. All what needs to be added is reacting to the player’s input, and moving the player is done.

A second step for the movement is making is realistic, you can’t just make your character move in any direction. Moving left and right is easy, but moving up and down goes a little differently: moving up goes by jumping and most people, including our main character, can’t actually jump while already moving up. So, that must be accounted for. Also, moving down goes automatically unless something else is in the way, because of this thing called “gravity”. When this is all implemented, the part of moving the player is finished and looked a little like this:



Next up is getting a level to load from a file. Obviously programming in every single level isn’t going to work, so a better option is to add a folder to the Content which contains all the levels in a text file. The harder part is getting these levels read and loaded. The way to do that is with a StreamReader: it reads the entire textfile, analyses the width and length of the text and checks every character. If it’s a ‘.’ Or an ‘F’, it creates a background tile or an actual block tile.

Then, the collision with those tiles needs to be handled. Something to be noted is that all those tiles are also saved in a GameObjectGrid class, which is a two-dimensional array that saves the current level. This can then be accessed in the Player class and compared with the player’s current position.  When the player is currently positioned at a block, it stops falling. All of this combined, it looks like this:



And that’s all I have to say about that.

Shiny Spice, out.

Sunday 1 December 2013

Making The First Sprite - Tiny Spice

Creating a game goes with baby steps, and who's better to perform those steps that someone of the appropriate size - you got it, me. While others are working on a basic framework (the hinges on which the game relies), I have just finished the first sprite of the game: a mountaineer that the technical guys can implement to test the basic engine and player object.

It doesn't have animations as of today, but that will be the next thing I'll work on. For now, let's walk through the steps it took to create this sprite.

We decided on a standard size of 32x32 pixels. This allows us to uphold a cartoony style with a considerable amount of detail, while still being small enough to be doable for us, relatively inexperienced in making sprites. We also chose the sprites to not be too realistic: again for accessibility, but also simply because a game based on Ice Climber simply can not be too serious.

With these things in mind, I started with the (rough) outline. I started with the head, which, simply stated, is shaped like an upside down, vertically squished egg. Because of the cartoony style, I sized it about half of the image. Then, I added the mouth and the eyes and the rest of the body. After about five minutes of retouching that, the result was this:
The basic outline
The next step was adding colour. This was relatively easy: just pick a colour, fiddle with the settings until it is perfect, and then just fill everything in. Of course, a sprite with clear, flat colours is boring: you need shading. To start off with that, I deleted the black lines inside the image to allow room for more detail, while keeping the outlines black: that way, it's easy to distinguish between separate sprites. Then, I applied some basic shading: lighter on top, darker on the bottom. After that, I added some details: I gave him ears, a simple nose, creases on his shirt and trousers, and when I still wasn't happy with it, I figured out what was missing: a belt.
Before and after. Trust me, it looks way better in-game.

The final stage is accessorizing the character. Using the previous technique (outline, retouch, colour, retouch, shading, retouch) I created three separate new layers for his accessories: a pickaxe, a backpack, and a hat. The reason I used three separate layers is that, when they were done, I could easily make one layer invisible while still keeping the rest intact. The pickaxe was relatively easy: just a shade of red with metallic (= light grey) ends. The backpack was a little trickier: I wanted to make a standard traveller's backpack with a rolled up sleeping mat on top, but a spiral is really not that easy to make with such a low level of detail. I, however, think it has turned out fine. Then the hat, which was again very easy to make. That gives us the finished character:

Neat, huh? Animations are relatively easy to make from this point: just delete a part of his body, his legs for instance, and redraw it in the position it needs to be. All the other sprites in the game (especially the ones made by me) will be made in this way, and if you want, you could try it for yourself!

Well, that's all I have to say today.

Tiny out.