3D Isometric game engine in Blitz 3D

Having not written any code of any great interest in recent months, or writing code for games that start to suck… I have gone back to an old idea of writing a 3D Isometric game engine in Blitz3D. The basic idea was for anyone to be able to write a simple text file and provide some specifically names textures and sprites and have an Isometric game running. Large task!


Initially I experimented with a tiled floor drawn at an Isometric angle, as in all floor times rotated and span to provide a correct isometric projection.


The first issue was flattening the screen. Using Blitz 3D to view the floor, you get a curved mirror perspective style view of the screen which doesn’t look particularly isometric. This can be flattened out by moving the view camera a long distance off, and then using the camera zoom function to zoom back in to what you are viewing. This flattens the screen out nicely. I then did a bit of maths to work out tile separation and fiddled with the camera position and zoom and finally superimposed a picture from Knightlore over the top to see if the angles for the Iso view were good.




Looked pretty good angle wise when compared to the original legend of an Iso game!


Almost immediately after this I had a “Slaps Head” moment… Why am I individually twisting each tile and making things thoroughly difficult when I can just render in standard 3D box shape and move camera to an isometric angle…..Would make things a shit load easier….


So I changed it to just render straight lines of tiles in a square. Then I read up on the maths of Isometric projection to get camera angle spot on, and then did the usual camera at a distance and zoom in to flatten out. This should be a true Isometric view, but with the Knightlore slide superimposed again, the angles of the floor didn’t seem to match up…


This could be due to Blitz3Ds render engine, or it could be that Knightlore wasn’t 100% spot on Isometric projection. Still the results are a bit better. I threw in some wall bricks too just for effect.




As you can see, the two angled lines on the Knightlore screen are at a different angle to my Isometric box, despite my camera being positioned mathematically correct for iso projection.


After a bit of messing with the camera, I decided that the true Isometric view was a bit sheer and adjusted to a not quite Isometric projection with a shallower height and viewing angle that matches the Knightlore Isometric projection.




Now I could get on to some more important stuff…


Firstly I borrowed Werewulf from Knightlore as a test character for the game engine.
Next I added some data lines to allow options to be selected in the game. This will eventually become a data file for each game rather than data lines within the game.
One of these is the option for which type of Isometric game you are building. Either a flick screen small room game (Knightlore, treasuretrap, Alien8 etc), an Isometric game with larger scrolling rooms (Escape from Colditz) or a large Isometric adventure in a single large scrolling environment (Gunfright, Nightshade etc).
Choosing this assigns how the camera reacts to the player movement. flick screen small room game has camera fixed to centre of room. Either of the scrolling land games has the camera fixed to the movement of Werewulf.


Pic above is of flick screen small room game. Camera view fixed on centre of screen while the character moves around it.


Pick above is of scrolling environment. Camera moves with the character so that rather than character moving round the room, its more a room moving around the character effect.


Next I tried coming up with some standard effects that can be applied.
First up is Underwater with animated water caustics.


And have done some playing with light effects. Flickery animated candle light for above water castle style shenanigans…



And tried a textured underwater floor rather than a flat one for games like Hydrofool


Will update this post as/when/if the project progresses….

Leave a Reply

Your e-mail address will not be published. Required fields are marked *