Showing posts with label Nimble Jim. Show all posts
Showing posts with label Nimble Jim. Show all posts

Monday 6 January 2014

Porting Nimble Jim over to the OUYA, easy enough? Of course it is!

So last November I got involved with the #SpeccyJam event and entered my game Nimble Jim for Windows, now it's time for the OUYA...

Comment here or get involved on twitter: @rich_lloyd

As you'll know we only had a week to produce a game in the style of a ZX Spectrum game which could run on any platform. Because it's my favourite language I wrote my game in C# and the easiest platform to get up to speed quickly is Windows. Even though it was rushed, I actually designed my code structure to be as generic as possible with the mindset of porting to other platforms. This meant I could actually choose different game engines to display and my main game code wouldn't need to change.

Because of speed and the opportunity to port to multiple platforms I chose XNA/Monogame to render my game. Actually the game I finally submitted was just XNA for Windows. As time was tight I just didn't get a chance to test or submit the game on Android/Linux/OUYA, so stuck with Windows.

That was a few weeks ago now and it's been bugging me that I didn't get a chance to produce for different platforms. So I managed to get a small bit of time over the winter break to have a bit of a play with MonoGame and the different platform options.

Port the game to mobile devices?

From past experience I know it actually takes a bit of time to get the controls just right for mobile devices playing games. People like Orange Pixel have really nailed it with their mobile games, (http://www.orangepixel.net/). Yes I managed to create an Android project and it ran my code on my phone (Samsung Galaxy S4), however at the moment in my code I've only got checks for key presses for the Windows version.

The OUYA

I was one of the original backers for the OUYA KickStarter project, hoping I'd have the console months/weeks ahead of launch to get familiar and start coding for it. OK there were delays and only received it a couple of days before launch day which has left a bitter taste in my mouth. STILL, it's a console, and a console I can easily port code to!!

So I have mixed feelings about the OUYA, but essentially would love to produce a game for the OUYA console. In MonoGame they have a project template for the OUYA, oh wait, I wrote my code using MonoGame :) Just create an OUYA project just like the Android project I thought and away I go... no... there's a few hoops to jump through first!

Hoops?! What hoops?

I'm just going to give you a brief run down of the steps I took to get working on the OUYA, but please visit here: https://devs.ouya.tv/developers/docs/mono-game for more details and will probably be kept up to date with changes.

First of all you need to sign up to be an OUYA Developer on the website: https://devs.ouya.tv/ this registers you and lets you download the latest OUYA Development Kit ODK.

Make sure you download the latest MonoGame build. There are more up to date branches of the code, but I used the latest stable release (MonoGame 3.0.1 for Visual Studio 2010). I can't remember if it's included with MonoGame or part of the ODK, there is a more up to date OUYA library to use with MonoGame, you just open the solution, build, then copy the output to a safe location and reference your project to the new library.

Connect your OUYA to your PC via USB cable, I've seen online a few people have had problems with windows not installing the driver straight away. I'm using Windows 7 and it updated drivers as soon as I plugged it and didn't have any problems.

I did have to update Google USB drivers .inf file with some OUYA information. I also had to add a line of text to the ADB USB .ini file so that the ADB manager could see the OUYA console. I wont go in to detail here, but all the details you need can be found right here: https://devs.ouya.tv/developers/docs/setup

Lastly make sure your OUYA is setup for developer mode in the Advanced Options, this will allow for it to communicate to your PC and deploy apps etc...

Those are the setup steps I took. Back to my Visual Studio project, I found I have to Rebuild my project and then Deploy which sends all the files over to the OUYA and installs them. Then I can hit the Play button and my game almost instantly starts playing on the OUYA!! At the moment this only seems to work in Debug mode, when I try Release mode, it deploys but won't run from Visual Studio. I have to go to my Play menu on the OUYA and I can see my game in the menu options where I can run it.

I hope this has all been useful for you?! I made a quick video giving the overview here:

Comment here or get involved on twitter: @rich_lloyd

Monday 2 December 2013

#SpeccyJam is over - Nimble Jim submitted!

Finally got my #SpeccyJam game packaged up and submitted. What a week!

Took me a while, but finally came up with a name, Nimble Jim. I think the name fits perfectly for a tongue in cheek ZX Spectrum platformer. I also took some time out from coding to knock up a cheesy loading screen:

I thought some of you might be interested in how I put this together so here's some screen grabs of my steps. As you can see I'm no pixel artist, I'm just a coder. Instead of asking one of my talented artist friends to collaborate, I wanted to keep as authentic as possible as so many Spectrum games where made by 1 man bands.


You can see that initially I just flushed out roughly the elements I wanted and the composition. When it came to drawing Jim I wanted him to be full of action, so I Googled a cartoon character running, dropped on to a layer in Photoshop and roughly traced the shape. It actually came together surprisingly well. With the text I used a couple fonts and turned off anti-alias settings to get a true pixelated look. I did still have to go in at pixel level and tidy up any dodgy letters.

It felt very odd to put a domain name on the splash screen, I almost didn't, but if domain names were about in the old days I'm pretty sure they would have had them on the loading screen so I kept it in.

I left the colouring towards the end of the process, you'll see that I used many guides to block out 8x8 pixels. As we all know the limitations, only 2 colours were allowed per 8x8 block. If I had more time I probably would have moved/redrawn some of the items to take advantage of the colour blocks. I also would have improved the ghosts, but hey.

Cramming in features like there was no tomorrow

As I got closer to the deadline, my brain was exploding with new ideas to add to the game. Knowing the time limits I had to be strict! Stuff I HAD to nail:
  • Finish full game flow, and make sure it was water tight.
  • You can see from above that I managed to get a cheesy loading screen in to the game.
  • The ZX Spectrum border, yes I got this in, even flashed with game play events.
  • Sounds! OK so I started with a native computer BEEP sound, but this wasn't compatible with platforms other than Windows. So I downloaded a BEEP wav, put it in to Audacity and made some simple sound effects. These were dropped in to the game and played on events, e.g. enemy spawn, killed, pick up item...

Anything else is a bonus

Having got in the above anything else was a bonus, here are some other features I managed to get in:
  • More maps! I was able to knock out 5 basic maps, my code just reads a text file, so it's so easy to produce new maps.
  • Enemies, I wanted to expand the enemy types and make each level interesting, even though the ghosts are cool enough for a basic game ;) So I added:
    • Spikes which are static items, but over time the spikes raise and lower to make the player think about their timing.
    • Bats were also added which just have a simple horizontal path, they seem simple, but they do catch you out!
    • A BOSS! Yup I managed to squeeze in a basic boss level, he's big and all he does is jump in your direction. Sounds easy enough to beat, but you have to time your running and jumping!
  • Scrolling text, yup I went there.
  • ELEVATORS!! I was so happy I crammed this in, ability to add elevators to maps. Not only does it change how the player navigates the map, but also the ghosts!

Lets take a quick look

Here's a video of what I submitted. To make it more watchable, I used cheats to move through the levels quicker ;)



DOWNLOAD IT NOW

Here's a link to download the game I submitted to the #SpeccyJam:

DOWNLOAD GAME

Only available on Windows, extract the 2 files then launch the EXE file.

Conclusion

WHAT A GREAT WEEK! THANK YOU #SPECCYJAM!

Please check out all the other entries here: http://www.speccyjam.com/games/, there really are some great games here.

... and you can check out Nimble Jim's very own page here: http://www.speccyjam.com/games/nimble-jim/

OK Nimble Jim isn't the greatest game in the world, it's just a tongue in cheek effort, however I've been really inspired making it. It's been great working with limitations, and seeing all the other efforts for #SpeccyJam. Looking through Google + YouTube for ZX Spectrum games has brought back so many amazing memories, and I'm sure it has for everyone else.

30 years on, I spent a lot of my childhood playing games on the ZX Sepctrum, it was only until this week that I realised the Spectrum only used 15 fixed colours. I think this is proof that the games created back in the day had so much fun, engagement and creativeness.

What's next??

There's some unfinished business here... I had so many ideas I wanted to get in the game, now the jam is over I really want to try them out. That's right you haven't heard the last of Nimble Jim! My aim is to put together 50-100 levels, and then launch the game on Android, iOS, Windows Phone and the OUYA.

Something I would love to do is actually port Nimble Jim to a true ZX Spectrum, yup learn machine code for the awesome machine and get Nimble Jim running where he belongs! Then... maybe produce Nimble Jim 2 in the style of an Amiga game?! Watch this space!!

Please download my game and let me know your thoughts, be honest! Comment here or get involved on twitter: @rich_lloyd