Archive for category myProjects
If my last games were written in Java, why am I using C++ for my new Roguelike?
Countless religious wars are fought over programming languages, just look at any forums frequented by programmers.
I’d like to think that I’m pragmatic in my technology choices – Languages aren’t often better or worse, but in many cases some are simply more suitable than others. Caverns of Underkeep and Attack of the Meeplings were written in Java because I wanted to have a go at making browser based games and I decided that Java was the best technology for the job. Incedentally I think Flash would have been better in order to leverage in-game advertising – I guess sometimes business decisions need to trump technology ones.
The main reason for choosing C++ is that it compiles to native code on both PC and Mac, there are lots of external libraries for common tasks and it has a mature IDE (Visual Studio) and debugging tools.
The native code argument isn’t because of speed. On modern CPUs for 2D games the speed difference between running on a VM and running natively just isn’t human noticeable. But native code does ensure that all libraries are linked and deployed with the game. While I would love to have the expressive power of LINQ for my game, I really don’t want to require the user to download the .net 3.5 framework.
You ‘d think the Java runtimes would be more widespread than they are. I just bought a new laptop recently and it didn’t have any kind of Java VM pre-installed at all. And when you’re the little guy you want to put as little as possible in-between a potential customer and them buying the game.
And then there is the simple fact that being multi-lingual can improve your programming skills in more ways that just adding another technology to your resume, you get the benefits of seeing the world from a different perspective.
If I was deploying on CD or writing business software, or a designing a web application it might be a different story. But I guess C++ is the choice for now.
There are a number of references to other video games in Caverns of Underkeep
I wanted to put alot more in – Some obvious some not so obvious, but maybe I’ll just save it for the next Roguelike.
Super Mario Bros
Everybodies favoriate Italian plummer.
Quest for Glory
The Antwerp from Quest for Glory I
Doom / Doom II
The Lost Soul aka that annoying flying screaming thing.
Many Other Roguelikes
Many roguelikes use Ascii to display the game. I thought I’d just throw this one in as a tribute.
Many months ago I bought a book on CSS, DHTML and AJAX and have only got around to flicking through it now.
Thats quite a bit of stuff just to make a webpage. But anyway – I wrote my first bit of AJAX code today, instead of having to refresh the browser to reload the highscores in Attack of the Meeplings theres a little refresh button you can click and it only refreshes the highscore table and not the whole page -Pretty neat huh?
So its not as cool as gmail or with its little animations and automatic refreshing, but I’m not too sure what kind of effect on performance polling the server will have whilst playing the game. I’m pretty new at this webscripting stuff so I’m sure there’s some best practices way to handle it.
Well curb it at least
I’ve had a couple of problems with people cheating on the Attack of the Meeplings scoreboard. My guess was that they were using some kind of memory hacking tool such as Quick Memory Editor – Which is quite a cool program
The way it works is by searching through the memory of a game being played and locating the place where the information resides. Once the location is found, it’s pretty straightforward to alter the value and give yourself whatever you need, higher score, more lives, more money, whatever you can find you can change.
Lets say your score on an online game is 1200. In order to find the memory location you would search for that number. You will probably get a large number of possible locations, and because writing to random locations in memory can be quite disastrous you play the game a little more until your score changes to say 1400. Then you can narrow down your search to places that contained the value 1200 but now contain the value 1400. Once you’ve found the location you can alter it.
The problem with cheating in this way is that you need to be able to find the location of the data you are looking for. So my solution was to make this slightly more difficult to do.
I encoded the score as s = n + m where m was a random value and n is initalised as -m . Whenever I needed to know the score I simply returned the sum of n and m.
Because no one knows the values of m or n (not even me) searching for them in memory requires a few more tricks than a simple search.
I don’t claim that the above method is foolproof, there are probably some more advanced memory hack tools out there that might be able to detect such a scheme. But a little protection is better than no protection, and I will revise my methods should the need arise.
Update to How to Stop Highscore Cheating
Since writing my post I realised that there was still one bit of information known to the alleged cheater. They know how much their scores have differed between attempts. I don’t know if the memory hacker tool I used has this feature, but theoretically you could search the memory space for all values that have been changed by x amount.
It is therefore my opinion that we should set n = a + b
Where a = (-m/2) and b = (-m/2)
And whenever we want to update the score we randomly decide whether we want to update a or b. This makes even searching for the difference difficult as a, b, n, m are all unknown.
I’ve just removed a particularly suspicious score from the AOTM boards – Please don’t cheat people, it ruins the fun for everyone and makes more work for me.
Of course, now I have to improve the highscore boards security now anyway.
Anyway congrats to NIMITZ who is the first person to break 1,000,000
Heres a snippit:
“The game is glorious, retro-styled fun from top to bottom, including every pixel and the tough but fair gameplay; however, the real stand out is the music. Usually I find myself playing with the sound muted, but with this game I couldn’t play without the music. It is an important part of the experience. Everything meshes well; the bullets’ pew, the destructive kssh, the pick-up pwing all go hand-in-hand together to create a nicely layered experience.”
Thanks for the kind words Jay
Check out reviews of more games at Jay is Games
*Edit looks like it was Adam, not Jay who posted the review
I’ve just finished a new version of Attack of the Meeplings – Play it here!
So Whats New?
Added an ‘Easy’ difficulty level for those who are not quite experts at playing these types of games. The downside to playing on easy is that your score will not be included in the highscore table. But it should be enough to train yourself for the normal difficulty.
Heat seeking enemies now have turning arcs so they don’t change direction instantly.
And finally – Improved the performance of the game / Fixed some minor bugs.
Edit – Forgot to add that pressing A will toggle autofire on/off
Apparently computer manufacturers are always looking at ways to cut costs. My Laptop keyboard cannot register if I press the left arrow+down arrow+z keys at the same time – This makes playing Attack of the Meeplings very difficult!
However, I’m planning to release version 2.0 of AOTM within the next week, it will have an autofire option, instead of holding down the z key – Just press A once to enable autofire mode, c’mon you pretty much fire all the time anyway, so why not have that automated for you.
Version 2.0 will also feature a much needed easy difficulty mode I’m not sure if I should build a separate highscore table for easy mode, or just not allow posting highscores if you play on easy…
The other improvement to the game will be to get rid of the occasional random pause that happens sometimes. It looks like I’m making the java garbage collector do too much work with adding/removing hundreds of enemies/bullets/particles etc into and out of ArrayLists – As you can imagine the memory manager has a bit of a hard time keeping up.
Look for Attack of the Meeplings 2.0 coming soon!
A little while ago I decided to start doing monthly projects. Attack of the Meeplings was the first of such projects.
I’ve got another idea for another game that I could do in around a month, a sort of maze based shooter. But because I’m about to finish uni in June, I have decided that I need to add something to my portfolio that isn’t a game. I’m getting a new laptop soon, which means that I can work on things during my (sometimes very long) intervals between lectures.
So I’m going to have a go at learning Silverlight, Microsofts new browser technology. I’ve got an idea for a fairly short but pretty cool project to do, so once I get my laptop setup with Visual Studio 2008 I’m going to get started down that path.
I’ll be blogging about what I discover and my progress with the project, so others who might be thinking about trying out Silverlight can get a little insight into what it might involve, and what features are present (and perhaps missing) at this stage in the Silverlight life cycle.
Attack of the Meeplings is a Neo-Retro shooter that loops indefinately, getting faster and faster and harder and harder until you just can’t keep up anymore.
Check it out here
Only some minor things to do before declaring version 1.0 such as coming up with a more secure way of handling the global high scores and some performance optimisation.
Special thanks to Kristie Addison for the music