I got the awaited call from the University of Victoria, and I was accepted into first year Computer Sciences in the Faculty of Engineering. I am excited, and I love learnin'.
In the electronic world, I've been working hard just playing around with some engines and pixels. Lately, fooling around with some isometric sprites, I realized that isometric games are scarce in the GM Communities, and not only that, but rarely include platforming aspects such as jumping, gravity, and whatnot. Now I like isometric games a lot, and especially the platforming ones... examples?
Super Mario RPG (duh) for the SNES, one of the greatest games of all time, featured wonderful graphics, but limited isometric platforming mechanics. Fortunately, it had a great battle system to back that up.
Screenshots at MobyGames
Landstalker for the Sega Genesis was a game I stumbled upon and fell in love with a long time ago, back in the days when I loved to play Sonic 2, Shining Force 1/2, and Shadowrun on the ol' Genesis. Landstalker's graphics were a bit odd, but the storyline was much deeper than Zelda III (Landstalker's counterpart for Genesis' rival at the time, SNES) and the puzzles relied more on logic or platforming rather than tools.
Screenshots at MobyGames
Anyways, I've been piling up isometric scripts for over a year now, and will continue to do so in no order and whenever I want. Every time I jump back into isometric programming, I discover something new and add it to my collection. In a year or so, maybe I will use it all to compile a beautiful isometric extension, engine, and/or tutorial. I may even start up a community if I really get into it. With that lah-tee-dah over with, I'll share some info at what I've worked out so far...
ISOMETRIC PLATFORMING
Movement and Depth.
Obviously the first thing I set out to do. This was easy, of course, but necessary.
Height and Position
I set about creating platforms with different heights, next. This is also not new, or difficult at all. But there is one issue I noticed, when doing this, that really annoyed me.
This little area, you'll see that there are 3 platforms. But here's the question: is the topmost platform adjacent to the leftmost one? The answer, no. |
If I rotate it to get this image, you'll see that the topmost platform (now at the bottom) was actually a lower platform at a higher position, and not adjacent to the other two. Now, if you're playing an isometric platform game and you come across a piece of land that looks like that first image above, there's no way of telling whether you can walk from the leftmost platform to the topmost one; to get rid of this problem, I used a method that I learned from playing Final Fantasy Tactics Advance, to avoid the same thing... |
Since this only happens on the top left and right sides of these platforms, the trick is to have an outline drawn around it when there is nothing of the same or greater height attached to it. I used a white line to indicate the change, though it looks ugly... but anyhow, notice that there is no top-left line on the bottom platform, and that is because it is attached to the leftmost one, and to let you know they are connected, there is no outline drawn. The result will have continuous lines drawn on edges that fall off, and separate them from the ones they are distant from. |
I've noticed that pixel artists tend to hate outlines, but I think they are necessary sometimes. It's not so bad, either; take a look at this image, a bunch of platforms of different heights, and without the outlining. Now, compare it to the next... |
That's not so bad, is it? It helps establish depth and positioning of the platforms, and hardly kills the pixel work. Also, if you don't like black outlines, you could simply use darker colors of the respective platform... like for example, if I used dark-green on these ones, it wouldn't even look like an outline, but it'd still help establish depth and position. |
Anyhow, that's it for that. Sometimes you want lines drawn on the sides of the platforms as well, which only helps achieve what I just have.
Gravity and Jumping
Now, if I wanted to have an isometric platform engine, I think that being able to actually ascend and descend the raised platforms would be a BIG bonus -- so I did that too. This was also pretty easy. First off, every object has a z position and a [h]eight value. The z position is the height at which they are sitting, and their height is how far up they extend from their z position. For example, if the character is standing on a 8-pixel-high block, his z value is 8. And since the character is 20 (or so) pixels tall, his height is 20. Thus, the top of the character is 28 pixels off the ground level, where z = 0. For jumping, I simply created a gravity system that functioned with z, so I had the following varables:
z_speed --> The speed at which your height is increasing. - means you are ascending, and + means you are descending.
z_grav_acc --> The acceleration of the gravity. Equivalent to gravity in GML for vspeed.
z_grav_max --> The max speed at which the gravity can accelerate to; aka: the greatest value z_speed can reach.
z_below --> IMPORTANT. This is the dynamic value that records the height of the platforms below you. As your z increases by z_speed, the furthest down it can fall is to
z_below. So if a 16-pixel-tall platform is below you when you jump, z_below=16, and when z>=16, the gravity will stop and you will land on that platform, setting z to 16. Also, because the character can walk in pixels, and not snap to the grid, there are often several levels of ground below him. In this case, z_below is set to the value of the tallest platform that is not higher than the character's own z value.
z_jump --> Your jumping speed. When the jump button is pressed, z_speed is set to z_jump.
With these, and the fact that platforms are only solid if your z is lower than theirs (except for the floating ones) you can jump up, land on platforms, and also walk around in all 4 directions. Also, because z_below only registers platforms whose z lies below the character's, if there is a floating platform in your position and its z is higher than the character's, he will still be able to jump while below it. Either way, with all these functioning, it was easy to do the following...
Floating Platforms that Move and your character can ride.
Platforms that Ascend and Descend and your character can stand on to go gain or lose height.
Movable Platforms that your character can push around and use as a step-up (the metal box in the engine screenshot above)
And pretty much anything else that side-view platforming games can offer, except just with a new perspective and 3d level design! I thought it was pretty cool; now you can see why I look forward to compiling a full-out engine to support this baby, which will at the LEAST support all of these features. Don't expect it for awhile, though. There is reason to doubt that I have discovered the best means of accomplishing all this, and until I've optimized the engines to the best of my ability, there will be nothing for anybody to see. :)
Have a gooooood day, evening, and night y'all.
PS: Oh, and there is no Bad News, by the way. ;D I'll end it on that note.