Space Station Oblivion (C64... or CPC/Spectrum) - WTF. SO many technical questions
category: code [glöplog]
Hey all! Can't seem to find much discussion on this title out there, so I figured this would be a good place to start a thread. Hopefully some better coders than I can chime in here!
I was dumping some C64 disks and came across my original disk of this incredible game. I played through the DOS version on my stream a couple weeks ago and was suitably impressed, but seeing this on 8-bit platforms is another level of nuts.
The disk refuses to be dumped, and won't work with fastloaders, so there's obviously some kind of custom format going on. It loads PHENOMENALLY quickly - like, ten seconds - on an unaccelerated 64 with a standard 1541. Cracked copies you can "find" on "the internet" take ages by comparison. This very hardware-dependent trick was done on a true cross-platform game that shares its assets & a lot of its codebase on all platforms.
Then there's the engine - yes, it only runs at 1-2FPS on the C64, but it's a true 3D engine filling dozens of polys with proper Z-sorting on a platform that doesn't even have dedicated VRAM? I don't even understand how this works - they're not using character mode or sprites or anything like that - it's just drawing on-screen in a 160x200 bitmap mode. It seems to have access to the full 16-color palette and also uses dither patterns to create more colors when it's needed. I thought the 64 didn't really have enough memory to do that?
Aside from texture mapping, this engine has Quake- or Descent-level features YEARS before those games even started development - wide-open areas that are fully explorable in 3 dimensions, 6 degrees of movement freedom, room-over-room, sloped surfaces, arbitrary shaped polygons (triangles, quads, etc.), intersecting polygons, and it doesn't even have any Z-sorting errors that I can see. Everything interactable in the world is a 3D object - no sprites or textures are used. Even "light switches" are rendered in 3D.
This came out in 1987! Demoscene productions were almost all copper bars+music+scroller at that time. Ultraforce's Vectordemo came out 4 years later.
As far as I can tell, the 3D environment is room-for-room identical between the DOS/Amiga/ST versions and the C64/Spectrum/Amstrad - NOTHING is cut. The game plays identically except for speed and controls.
Here's my playthrough a couple weeks ago if anyone's interested. Keep in mind this was the DOS version and I was emulating a powerful 286 or mid-range 386 (not quite a DX/33 like I said in the video.) It's already a pretty impressive game on a platform like that. Definitely worth a playthrough IMHO (use a walkthrough, and a map.)
Is there a good breakdown out there of how this engine works? Keep in mind I'm not a hard-core 3D code expert, but I understand the fundamentals.
I would LOVE to see a source dump for this game (or any of the other early Freescape-engine games), but I guess that never happened. :( Anyone have some more info or speculations on the tricks they used to pull this off?
I was dumping some C64 disks and came across my original disk of this incredible game. I played through the DOS version on my stream a couple weeks ago and was suitably impressed, but seeing this on 8-bit platforms is another level of nuts.
The disk refuses to be dumped, and won't work with fastloaders, so there's obviously some kind of custom format going on. It loads PHENOMENALLY quickly - like, ten seconds - on an unaccelerated 64 with a standard 1541. Cracked copies you can "find" on "the internet" take ages by comparison. This very hardware-dependent trick was done on a true cross-platform game that shares its assets & a lot of its codebase on all platforms.
Then there's the engine - yes, it only runs at 1-2FPS on the C64, but it's a true 3D engine filling dozens of polys with proper Z-sorting on a platform that doesn't even have dedicated VRAM? I don't even understand how this works - they're not using character mode or sprites or anything like that - it's just drawing on-screen in a 160x200 bitmap mode. It seems to have access to the full 16-color palette and also uses dither patterns to create more colors when it's needed. I thought the 64 didn't really have enough memory to do that?
Aside from texture mapping, this engine has Quake- or Descent-level features YEARS before those games even started development - wide-open areas that are fully explorable in 3 dimensions, 6 degrees of movement freedom, room-over-room, sloped surfaces, arbitrary shaped polygons (triangles, quads, etc.), intersecting polygons, and it doesn't even have any Z-sorting errors that I can see. Everything interactable in the world is a 3D object - no sprites or textures are used. Even "light switches" are rendered in 3D.
This came out in 1987! Demoscene productions were almost all copper bars+music+scroller at that time. Ultraforce's Vectordemo came out 4 years later.
As far as I can tell, the 3D environment is room-for-room identical between the DOS/Amiga/ST versions and the C64/Spectrum/Amstrad - NOTHING is cut. The game plays identically except for speed and controls.
Here's my playthrough a couple weeks ago if anyone's interested. Keep in mind this was the DOS version and I was emulating a powerful 286 or mid-range 386 (not quite a DX/33 like I said in the video.) It's already a pretty impressive game on a platform like that. Definitely worth a playthrough IMHO (use a walkthrough, and a map.)
Is there a good breakdown out there of how this engine works? Keep in mind I'm not a hard-core 3D code expert, but I understand the fundamentals.
I would LOVE to see a source dump for this game (or any of the other early Freescape-engine games), but I guess that never happened. :( Anyone have some more info or speculations on the tricks they used to pull this off?
Interesting indeed. A brief snoop into ram and how the code performs (ICU64) tells me that it is probably compiled C. Which would make sense, if it was relased for several platforms without any cuts. It also tells me, that this could be alot faster. Concerning the fastloader, there have been plenty pretty fast routines released by 1987. Didn't know this one. Nice.
The engine is called Freescape and was made by Incentive Software, first game using it was Driller and then more of them came. It was running on most 8bit platforms of the end of 80's and on Amiga and Atari ST. 3D Construction Kit was a tool to create content games using Freescape.
Article on Wikipedia
Article on Wikipedia
^^ yep, just to make it clear, this *IS* Driller, it was just re-titled when Epyx published it worldwide. I've had my original 'Space Station Oblivion' copy since I was a kid, so that's what I tend to call it.
Some other notable early Freescape games were Total Eclipse & Castle Master, but SSO/Driller is my favorite of the original three because of the sci-fi aesthetic & kicking title music. (Total Eclipse's environments are cramped and un-navigable by comparison too.)
3D Construction Kit (or Virtual Reality Studio on some platforms) was a later version of the engine AFAIK, and came around in the early '90s. It was packaged up into a Unity-like game creation system which is pretty cool. People are still making stuff with it. Here's Ghost of Wumpus, from 2016.
Some other notable early Freescape games were Total Eclipse & Castle Master, but SSO/Driller is my favorite of the original three because of the sci-fi aesthetic & kicking title music. (Total Eclipse's environments are cramped and un-navigable by comparison too.)
3D Construction Kit (or Virtual Reality Studio on some platforms) was a later version of the engine AFAIK, and came around in the early '90s. It was packaged up into a Unity-like game creation system which is pretty cool. People are still making stuff with it. Here's Ghost of Wumpus, from 2016.
If that can help, i disassembled the Amiga version of that game:
http://franck.charlet.pagesperso-orange.fr/temp/driller_src.zip
http://franck.charlet.pagesperso-orange.fr/temp/driller_src.zip
(The game contained debug infos).
i remember playing castle master on the spectrum, interesting to hear about it's roots
Ahh Driller.. Great music (C64). Didn't really play it, but couple years later played Castle Master through on Amiga.
In 2004-2005 i was in a gpu company called Falanx in Norway. ARM was considering to buy our company and I remember we had some pub evenings with selected “arm” guys. Some of them were ex Superscape who had worked on Driller/3d-construction kit etc in the 80s. Pretty amazing tech back then. Cant remember much about the tech discussions unfortunately
Quote:
Interesting indeed. A brief snoop into ram and how the code performs (ICU64) tells me that it is probably compiled C. Which would make sense, if it was relased for several platforms without any cuts. It also tells me, that this could be alot faster. Concerning the fastloader, there have been plenty pretty fast routines released by 1987. Didn't know this one. Nice.
Compiled C would make sense, this had to be a pretty early engine using C on the 64/CPC/Spectrum? I would have expected everything 'advanced' to be ASM until modern optimizing cross-compilers came around. AFAIK the 8-bit versions came FIRST and the 16-bit (x86, Amiga, ST) ports were released a year later. Any indication what compiler they used?
Here's a fun thing: I tried the 64 version on an emulated SuperCPU (20MHz 65816), and it mostly scales properly & gets a badly needed improvement in framerate. It's not hard-locked to CPU speed like you'd expect. All the player movement & mechanics work fine, only the aiming cursor ends up moving too fast (the DOS version has the same problem.)
Quote:
If that can help, i disassembled the Amiga version of that game:
http://franck.charlet.pagesperso-orange.fr/temp/driller_src.zip
Pretty neat! My 68k ASM isn't up to scratch but nice to see some of its secrets exposed. Surprisingly less code than I thought... The room data at the bottom of the ASM file is interesting, wonder how that's laid out?
Did the code also contain ASM optimized code (hot inner loops, often used methods, math calculations)? I guess there was no inline asm back then (or at least not for all compilers). Perhaps they linked ASM based obj files with it.
I LOVED Dark Side - Its music is still one of the most haunting C64 tunes https://www.youtube.com/watch?v=cfV23IrahYk