I was out of town last week for a few days where I received a phonecall no one wants, the key-phrase being “you’ve had a little bit of a break in”. They had a good rummage through everything and managed to get away with a relatively good swag including two iPads, an old PS3 and about thirty games. The PS3 didn’t even have a hard-drive in which is a minor win (yay?). The week before we had purchased a new PS3 for a newer slim model which is much more energy efficient and we had taken that with us as we had some recorded TV programmes.
They obviously weren’t too tech savvy as they left the Drobo and fortunately I had the Macbook with me. This did get me thinking about offsite backups and the safety of my files. I’ve got Time Machine setup on my laptop which is saving to two locations, there’s a Micro SD card plugged in most of the time and the Drobo’s Time Machine share. This works fine as if my laptop is stolen while I’m out, I know that there’s a backup waiting for me at home, but what if someone brakes in & steals both the laptop AND the Drobo backup? For the web work I do, the majority is in subversion but all the other work files are just kept locally. The current main issue with subversion is that it doesn’t have my latest changes. Sometime I could work on something for a couple of months before committing my changes and that would be lost if the worst were to occur.
I’ve also started using Google Drive to keep everything synced online. There are plenty of alternatives but I purely went with Google as it’s half the price of Dropbox. I’m quite aware that Dropbox have a lot more features and is more widely supported but I can always change later if I need to. Anyhow, all this means is that if the worst was to happen (again), I could just link back up to Google Drive and download the latest copied of my files.
The more I worked with the pseudo 3D I created, the more imperfections started to grate on me. The glaring one being that the wall perspective just wouldn’t work as I wanted with different sized buildings. I had started working on texturing the walls as shown in the following video but the last ten or so seconds of the video you’ll be able to see the gaping imperfection I speak of.
Not being happy with this, I’ve started looking into a true 3D setup. I’ve started playing around with a few basics and have integrated the random city generator into it. So far I’ve got a load of 3D boxes which will be the buildings and the gaps between will be the roads. You’ll have to excuse the texture, it was a quick example. =)
Like I said, a very basic example but once I’ve fixed the textures, added a simple player sprite and added in some hit-testing it’ll be about the same stage as the pseudo version, give or take a few tweaks.
Admittedly it’s looking very much old GTA stylee which is the visual effect I was going for, but the gameplay in mind will be completely different. I’ll divulge more information of that in the future.
If you’ve read the previous posts you probably saw this one coming from a mile away. I’ve combined the random city generator with the pseudo 3D buildings to give a classic GTA style.
I’ve made a few tweaks to how the building perspective works and it looks much nicer than it did but it’s still not perfect. The scale of the walls is still generated by the dimensions of the building, for this to work correctly it should really be based by the building position from the player. This will probably be tackled another day as this makes a good starting point.
Now where do we go from here? Well the last piece of the level generation puzzle is to make the random level generation seeded. This is essential for the player to be able to revisit previous sections of the city and for the structure to remain intact.
Once the seeding is in place, we can move onto the graphics and some actual gameplay elements.
I actually wrote the code for this way back in 2008, it was my self assigned learning exercise to teach myself ActionScript 3. I hadn’t intended to create this effect but was intrigued on how transformation matrices works and my tests evolved into he beginnings of a game.
The way it works is pretty simple, each building consists of five sprites, the roof and the four sides. The sides all have a translation matrix enabled which affect the scale and skew based on the distance the building is from the centre of the screen. The roof position is just keeping aligned with top & left sides.
I did want to continue developing this as a game but enthusiasm fizzled out, hopefully soon I’ll be able to revive this work. From the video you’ll be able to see some enemies and the ability to shot a few different guns but it ends there, it really is just a proof of concept.
UPDATE: I’ve released the source for this HERE
I’ve recently developed a random city generator and thought my method might be helpful to someone else in the future.
The plan is to randomly create a portion of an unlimited sized city. This will work by having a set sized grid with multiple exit points and the buildings & road structure will be randomly generated. Each portion of the city will be created upon entry and the exit points should match up to appear that the player is moving seamlessly between sections of the city. We therefore need to seed the sections so if an area is revisited, it’s the same as before.
To start with, we’re going to create a multidimensional array of grid city segments to give a 2D map of the whole city. The whole map will be empty to start with but will end with each tile being assigned to a road or a building. We need to determine if there should be any existing exit points on each side of the section based on neighbouring sections. These exit points are essentially roads so the cells between each exit point is a building. The starting point buildings will have to be generated between the roads but they can be of any length. The exits should have the option to be predetermined to allow matching up with neighbouring blocks or if there are no predetermined neighbours the exits will be dynamically generated.
With all of the exits in position we can start filling in our buildings. The buildings are generated in a spiral manner, starting from the top and working clockwise inwards towards the centre. As an example, the first building starts at point 1,1. We start looking right until we find road and this gives us our width, we then look down in the same manner to get our height. We check each square during this process to make sure each square is empty, if it is, we can create a building here. I set a maximum length for the buildings so if we hit this limit without hitting a road, we can randomly pick a length to use.Spiralling clockwise toward the centre allows us to make sure that all of the area is covered and should reduce an exact grid type look.
Here’s what the final generator is currently producing. It’s not perfect but it makes a good starting point & will work for what I”ve got planned:
Randomly generated City example
So I’ve finally gone & done what I’ve been saying I’m going to do for the last two years, I’ve splashed out & bought myself a MacBook Air. For anyone who’s known me for a long time will probably remember me being very much anti Apple so I’m officially a turncoat.
Although I’m very happy with it, I’m going to skim over the details of the Air so not to bore you. In all honesty, I don’t want to preach the way of the Apple like so many enthusiasts do, you know the type, if they had their way they’d be committing technological genocide as we speak. I think it’s good to have a choice and you should go with what works for you.
As for me, I’m a keen Flash / AS3 enthusiast and the enthusiasm has been suppressed the last few years seeing that Apple’s choice to snub Flash support so I’ve waited to see what the future holds. At this point it’s good to see that you can submit Flash based mobile apps to the App Store and it’s this which has rekindled my yearning to create a game in Flash and now, hopefully, be able to get it onto mobile devices.
One of the biggest losses I feel moving from a Linux environment to the Mac is the loss of the repositories. If you’re after a specific type of app, you can search the repositories and there’d most likely be at least one app there that’ll do what you’re after, completely free. While the Mac does have the Mac store which does a similar task, you’ll be paying for the privilege. Don’t get me wrong, I’m more than happy to pay for apps if they do what they’re suppose to and they do it well, it’s just a case of being used to have a wealth of free and open source applications which are no longer a click away from being installed.
On the flip-side, this does make me ask the question “Can I recreate this app? Could I make it better?”. I know this at face value could look like reinventing the wheel to save a few quid (and I guess it partially is), it’s also a valuable learning experience. Besides, if you look close enough, you’ll see that everything’s a copy of a copy of a…….
I’ve also had a few ideas for games over the last few years but it’s only been recent that it’s become more focused on what I’d like to made. I’ve always fancied the idea of a zombie based RPG, it would be something that I’d enjoy playing but upon looking around, it’s slim pickings. Being that there’s not much existing for me to play, I’m going to give making my own a bash.