This section an area where I hope to show off works bit old and new, from my pre-DMA stuff, to my current retro works.
My “what I’ve done” CV list
Ever wondered how games come about? One of the most famous games has to be Grand Theft Auto (GTA). It had quite a humble beginning. Here are the prototypes I did way back in 94,95 for it. There are little stories attached in the readme.txt files. I did these while doing R&D at DMA Design, and they have to stand out as some of the most influential I’ve ever done. Anyway, here they are, so enjoy!
I did this back in 94 (11/11/94 was the date on the CD), and it was going to be GTA (or “race and chase” as it was then – cops and robbers was the other name considered). However, after the initial code was implemented ion the game, syndicate wars appeared in a magazine. It was a little too close for our liking, on top of this, Keith was also having some problems his version of the engine, since mine was written in pascal and assembler, Keith had to rewrite it in “C”, and speed wasn’t holding. (See GTA prototype 2)
This engine is fairly simple, it has 4 “basic” points on the ground. These are placed on an ellipse and rotated; this forms the corners for the world. I then draw lines from each corner and build a “grid”. So, now I have a rotating GRID, I then build points vertically to make a rotating CUBE array.
Using a 3D map array Map[x][y][z] I set a a cube type and then render these cubes in the correct
place in the rotating cube array – follow that? 🙂
Each map section can also have an offset, the idea being that whole buildings could be destroyed
easily, and smoothly.
Z – Rotate Left
X – Rotate Right
< > – Tilt Angle
Space – remove roofs/ground
ESC – quit
This was written on a 486DX66 After seeing a Sega Saturn game called “Clockwork knight”, I started toying with side on perspective stuff on the PC. CLOCK.LBM shows my original thoughts on doing this, I didn’t intend to scale the front block initially. Once I had this running, I was speaking to John Whyte (then doing Body harvest for the N64), and he had been trying to get an overhead racing game past Dave Jones for a while. Dave (Jones) however, wasn’t interested. it occurred to me that although I had a side on engine, all I needed to do was add a floor, and it “could” be an above engine. So, with sad programmer graphics (although the car was done by Stuart Graham I think…), I set about using the previous GTA prototype engine as a base. Using “cubes” I built an array of perspective points, then with a simple 3D array, attached faces to each active cube. I then removed interior faces (since they couldn’t be seen), and rendered the resulting “city”.
The demo is called DINO, since the code base was taken from another prototype, ATTACK!, which was a dinosaur game (hence DINO). Funnily, this .EXE name stayed with the project for a LONG time…. and if you look in \gta\gtados DINO.BAT was even shipped! 🙂
I also had to add “slopes” to prove they could work, and although the sorting is wrong, I had figured out the way to render this correctly. But it was Keith who actually implemented this first. This involved doing a shrinking circle system. The outer blocks were drawn, and as we circled into the center of the screen the inner ones were done. This was a little bit complicated, but Keith understood my erratic rambelings and pulled it off.
After this demo was written, I showed Keith, OZ (David Ozbourn) and Dave Jones. Looking at it, they decided to restart “Race and Chase” using the new engine, since it allowed far more freedom, and “true” perspective. Well, almost true; perspective is only calculated at each block, rather than each line, but you never really notice.
I hope Ive mentioned everyone that was actually involved in this, and while the “game-play” was a real team effort, and had input from every team member, this was how it all started. It also shows how important true R&D is, without it several DMA games would never have been started.
Part of the GTA 1 story, is how the 16/32bit high colour modes came about. This engine, came about with me speaking to the SCITECH guys. There was a message from someone at i-Glasses (posted Jun 17, 1996), after a 320×200 high colour mode, on comp.graphics.algorithms, I joined in saying this would be great for games, and a stepping stone to hires, since lowres 24bit is faster than hires 8 bit (less pixels to draw). Someone pointed out Univbe gave these modes on some cards, then a programmer from SciTech said that they had a new version coming out with much wider support. So, I quickly did some tests, and it turned out writing 32bits was exactly the same speed as writing 16bits, and 8 bits. This meant we could run rendering at virtually the same speed. I then got one section of GTA running in 32bit, and after looking, Dave decided we needed this. Believe it or not, this added almost a year to the project, all the graphics needed redoing, along with a new multi palette system (Each tile was only 256 colours, but we had any number of palettes). This was shown at a trade show, and I believe there were lots of programmers hovering around, asking how it was done.. 🙂
Also…I was told by Dave, that the SimCity guys got quite interested, since it allowed you to drive around a city in realtime. Shortly after, they came out with the awful “Streets of SimCity” (I think it was called) – should have bought our engine if you ask me. 🙂
And lastly…. The 3DFX version… This was, in my opinion, the BEST version, hires, smooth, and fast as hell. We had received a card from 3DFX months ago, and then Dave told me they were coming up for a visit. “Oh dear” we though, free cards, and nothing to show… so I very quickly (took a week!) did a new LIB for GTA using the 3DFX to render the game. The GTA graphics system was a LIB supplied by me (in the end), and so it was simple to rewrite this. After a the weeks work, the 3DFX demo was running, it turned out to be so good, it was maintained, and added to the final release. Believe it or not, BMG never even had to pay for it…
Remember this was written on a 486, and as such optimised for that machine – it had no cache to speak of. Because of this, it wont speed up “that” much. It ran in a frame on a 486DX100(just), and on my 2.4Gig AMD, its only around 4 times faster. (1/4 frame) The final GTA code was Pentium optimised, and runs MUCH quicker….
Being a prototype, its buggy as hell, so it will crash 🙂
q Zoom in (not too far!!)
A Zoom out (as far as you like!)
W S pan up/down
< > pan left/right
1 2 change camera field of view (press 2 for a while, then zoom in a bit for taller buildings)
3 4 change height of buildings (down to street level)
– + Change window size
Z X offset origin – used to test perspective at the extremes (up/down)
[ ] offset origin – used to test perspective at the extremes (left/right)
SPACE Shows timing bars, and perspective point array.
DownLoad: GTA Prototypes
This is different bits of art I’ve made over the years, from 2D pictures, to 3D images.