Sarah’s Run development is on hold for the time being. what I want to do with the game will take quite a while before I am happy selling preorders, but I do really need money, so I have started another project which I am selling as I make the game. (as I add to the game, I add to the price). so if you like dungeon crawlers and want to support habits of mine such as game development and eating, please check it out and buy a copy: lottiesdungeon.com (theres a playable preview on the site too 😉 )
One of the most frequent questions I get is how I go about making levels for Sarah’s Run, so I shall share!
first of all, there has to be an idea for what I want in the level, either in my head or on paper, making it up as I go is possible but it takes a little while and its very likely I lose my train of thought before I get anywhere. so, have a plan, you can come up with one of these anywhere, I was at a train station yesterday, killing time, when I drew this:
First up, TILES!
Tiles are pretty sweet for a number of reasons, firstly they are super fast to make levels with, and because I can put them together in Unity itself, I can test the level as I make it really quickly, rather than building the level in another 3D app, and exporting then importing and tweaking settings every time I want to see if a ledge is the right height or a gap is wide enough.
The downside to tiles in unity is that they *can* be very inefficient, especially with how many are in many of the levels in Sarah’s Run, hence why I place them all inside a ‘LevelMesh’ game object that combines all the seperate 3D models for each tile into a single mesh, meaning that whilst I’m testing drawing the level takes only one draw call, and not about 3000 (I had 7000 draw calls per frame sometimes before I decided I should fix that lol)
So, I can play the level, but it’s not easy to ‘read’. that is, you cant look at the level and quickly see what form the level has, it’s pretty messy. So we need to juice up the graphics a bit with some lighting (the best way to give a 2D image form IMO) and also make the textures more… good
so, we export the level and take it into Blender (the export script I use is found here for you unity junkies)
first up we tidy the mesh and clear out any faces that wont be seen, and also use a more recent texture atlas:
So that’s what folks call the ‘diffuse’ (unlit) texture sorted out, but in Sarahs run my environments have both a diffuse texture and a ‘lightmap’ texture that describes the light in the level. so first step for making a lightmap is I put in some meshes I want to act as ‘lights’ set them to emit and get blender to calculate ‘radiosity’. it sounds complicated but mostly I click ‘go’ and play some guitar hero until it’s finished.
once the ‘light’ has been calculated, I ‘bake’ it onto a texture (that means I get one mesh to copy whatever the lighting is on each face to the relevant part of a texture map). you can see the baked texture on the right of this pic:
You can also play the level here if you like.
this is where I say the level is ‘done’ but that isn’t really the case, if this level was going into the game I would have to make quite a few tweaks, such as offsetting the two ledges, especially if it appears earlier in the game, and I’d need to adjust the size of the gap, how high the electric ceiling is etc. I’d also like to test if it works better as a 2.5D level (like level 5 in the preview) I suspect it would.
anyway, hope you enjoyed that. 😀
So I signed up to IndieDB and added Sarah’s Run to it, here’s the linky link.
you can track the game there if you like, I’ll try and mirror new posts to this blog there, and I will likely upload more screenshots there as it’s super easy to do and I dont have to make a new post every time
3 30-sec recordings of some Sarah’s Run gameplay from the new preview:
I suck at recording and editing right now, but it’s better than nothing, as I figure a few people will not bother to download the unity plugin and test the game before moving on, but if there’s a short video they can get a reasonable picture of the game still.
Spent today learning how to get some radiosity type lighting working in blender and how to bake it for my levels’ lightmaps.
Plus, I also Started making and baking some new tiling textures, starting with the floor
If anyone wants I can go into more detail on what baking textures is and why I do it, but there are plenty of other places online saying that stuff and I dont think I have much original to add to the subject ^_^;
Not much to say today, I’m pretty busy just working on the new preview, squashing the last few bugs, and tweaking the levels and such. I added this yesterday though, a ‘hub level’ personally I think they are much more interesting than a level select, and you dont feel like you are pulled out of the game world when asked which level to play next.
So I asked on twitter if there was anything folks wanted covered on the devblog and @tyronehenrie mentioned the camera. Seeing as it’s an interesting topic (I think anyway ^_^) and it’s the thing I’ve spent the most time on, here’s the post 😀
The main design issue with the camera, is that it is actually two cameras, one for mouse users, and one for gamepad users, and it has to be able to tell which is being used at any time and behave accordingly.
A little ranting first…
I’ll take this oppertunity to justify why Sarah’s Run supports a gamepad even though it’s only going to be released on Windows and OS X (for the forseeable future anyway). The reason is for most games, gamepads are simply better. look at your keyboard, thats for writing. Now look at a gamepad, that’s for playing games. Now look back at me, I was inspired during the games early development by console platformers that never really worked on PC very, gamepads worked well for them.
So I know going in that this type of game traditionally suits gamepad best, the buttons are all within reach, analog control is wonderful etc, its all good. But I also know no matter how much a beg, no more than 25% of PC gamers will have gamepads and even then plenty of those will be at the bottom of some box tangled up with other random things and wont get used anyway. I have to make the game feel good on PC, and this isn’t just some port of a console game to squeeze a few extra bucks, this is a PC game; the controls have to feel good on PC, and the camera is a very (if not the most) important part of that in a game like this. The camera is the player’s eyes into the world after all, few people want to be without their eyes.
The quest for a good camera!
The first thing I did was to look around for platformers with good camera control on PC; I gave up pretty fast, 3D platformers on PC for the most part suck pretty damn hard. So plan B then, what really works on PCs? the mouse is a super good input device after all.
The answer is obvious really, first person shooters have a pretty standard control set and behaviour, plus it drops onto Sarah’s abilities pretty cleanly. (it’s mostly running and jumping after all)
So what’s the difference between the camera’s mouse control and gamepad control, and how did I get them to work? I’ll start off with:
1. Gamepad Camera
The code that drives the camera can pretty much be described in two steps:
- Position the camera at the center of its orbit (where it’s looking at, AKA Sarah)
- Translate the camera backwards
This keeps Sarah in the center of the camera’s view and a constant distance from the camera, and we can get different behaviour by doing extra stuff around these steps.
For the gamepad behaviour, we want the camera to ‘follow’ Sarah, so if she moves left relative to the camera, the camera turns left to see where Sarah is going. much like in this diagram:
This behaviour is pretty standard for most all platforming games (even on PC, which I think is why most 3D platforming sucks… more on that further down). here’s how I go about doing it;
First of all, before positioning the camera at it’s target (Sarah), we make the camera look at it’s target.
This way, when we translate the camera back, the angle it’s looking at is different (if the player has moved) and it wil be looking more in the direction the player is moving. This process will be repeated each timestep and gradually the camera will pull behind the player.
I think this is the ideal behaviour for the camera, as it is showing where Sarah is going, she is always on the screen, and I even have the camera favour looking down a little, all so you can see where she is standing and you will almost always see what is relevant to the immediate platforming around Sarah. If there is a pit you likely wont miss it, if there is a gap you can best judge how wide it is.
But the player can control the camera too of course, that step comes after positioning the camera at it’s target and before translating it backwards, we just rotate the camera by however much the right stick is tilting. This way the camera orbits Sarah however the player likes. Plus we stop doing things like the camera favouring looking down when the player is directly controlling the camera; it’s not just that they might be wanting to look up, but if the player is changing the camera odds are it means they aren’t happy with where it is at the moment. So it’s not wise to impair the players control.
and that brings us to…
2. Mouse Camera
As I mentioned before, even on PC most platforming games have a camera that tries to follow the player character and look in the direction they are moving, this is frankly an asshat’s move and here’s why:
On a gamepad, if the camera turns a little and you want to keep moving in the same direction you just alter your input on the analog stick a little, it’s smooth, it feels natural.
On PC, if the camera turns a little, you have no analog input, you have four buttons, thats Eight directions total. When movement it relative to the camera, when the camera changes, all your buttons change. You can’t ease from one to the other really and you either end up running in a squiggly line or falling off the edge you were trying to avoid, or both. All because the camera changed.
We can keep our analog control by giving the player complete control of the camera with the mouse (the analog input on a PC), and because movement is relative to the camera, we can still weave in nice curves by running and steering with the mouse, just like in an FPS.
In practice, making the camera work this way is really just a case of taking the gamepad behaviour (look at target, position at target, rotate, translate back) and removing the first bit (look at target).
Like this, when you are pressing left, so long as the player doesn’t change the camera, left will always go left. And if the camera is changed, it’s because the player wants left to be some other direction within the game world.
Seeing as I’ve gone on long enough…
That’s pretty much it, we have both ways the camera can behave, and if the game detects no mouse movement for a while, it eases into gamepad camera behaviour. Overall I’d say it feels pretty good, and it certainly took a while to get it to the point where people didn’t complain about it when playing. Which is understandable, when the player’s control over something in a game feels bad, the game feels bad. And in this game, the camera is as important to control as the player character; the look is as needed as the leap so to speak
That’s not all there is to the camera though, for example the way sarah can run up walls gave me endless headaches for getting camera behaviour right (it still presents issues from time to time, but the number is always going down!) I think thats enough for today though. I probably went into way more detail than anyone wanted anyway. ^_^
Been working pretty hard at making a new ‘main’ preview to go on the site, which is much more visually detailed, fixes bugs and glitches that were in the first preview, and adds a few new mechanics and levels too. I’ve done pretty much everything for it but the new levels, thats a job starting today, heres a build of where it’s at right now: [> LINKY <]
stuff thats been added or changed since the first preview:
- remade all levels
- fixed camera problems (lots of them)
- Added first person camera (‘R’ Key)
- Put in robot character (‘=’ Key)
- Drain fields (not in any of the levels of todays build, but are here)
- Rotating platforms
- updated conveyor belt and ‘death floor’ textures
- impact wave and cam shake when landing hard (doesn’t always work, I’m looking into it)
- option for camera sensitivity in pause menu
- made new shaders for various things
- checkpoints indicate current checkpoint, and flash when recording new stuff
- waaaay cooler doors
- got rid of ‘progress bar’ on doors in favour of numbered displays nearby
- added camera zoom (mouse wheel or gamepad triggers)
- added mouse lock finally
- other small fixes
- edit: also added a 2.5d type camera for some levels, (not in todays build levels either)
All in all I’ve been pretty busy! I’ll hopefully go into some of the more important things in more detail in other posts, but I have new levels to make, and thats way more fun than sitting here typing, so I’m off! Ciao!
Dont get enough internet time lately to make posts here, but how about a load of screenshots just to let you know work is continuing
to answer any questions you may have:
- yes, thats a robot!
- yes, new levels!
- yes, LASERS!
also the screens dont show it but I’ve been kicking ass with regards bugs and glitches, especially camera stuff… also theres a first person view now if people want to play that way 😀
Nothing to play today, I’m busy working on updating the levels from the original preview, preparing for a ‘super’ preview ^_^
The main reason I’m posting though is I wanted to ask if anyone has used any e-commerce services to sell software and would recommend me someone. I’m looking at FastSpring, BMT Micro and Plimus right now and want to make sure I’m shopping for the best service I can, so pointers appreciated if there are others I should look at