The System Shock Hack Project

"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"

TSSHP main page


Dev Team

Screen shots


Glen's Junk

Unofficial specs

TSSHP News archive

Sender: ff1
Subject: ss-specs is obsolete, long live ss-specs

Apart from all the news about an official remake of the original System Shock 1, as well as the announcement of a System Shock 3 (search the internet for details), there's also some news regarding the state of the documentation - specifically the ss-specs.txt file.

The file has become superseded and is now obsolete. Throughout the years, there have been several SS1-related fan projects. For about a year now, there has been the project Inky Blackness in the works, which has a dedicated subproject to document the data files.

As per today, their subproject has imported, corrected, and expanded on all the information from TSSHP. Please refer to that project in the future for up-to-date information.
I have now also included an "obsolescence" notice in the ss-specs.txt file, just to be sure.

For further information on current projects have a look at the System Shock Modding Community.

Sender: ff1
Subject: tsshp2: Re-Hack!
Never say never, but don't expect anything. Since editing these news entries on this home page is rather tedious, I hereby recommend monitoring the news feature on sourceforge and/or the mailing lists: Main project page on SourceForge.

ff1-17.jan.07 Don't get too excited. All this 'news' entry states is that the work on TSSHP has stopped - several years ago, but some people might find it informative to have it written out.
On the management side, I have requested administrative rights over the project on sourceforge as Jims e-presence is unknown and he hasn't been seen for years as well.

My plan for now is to act as a housekeeper - for both the code and the resource information - there still seem to be people who want to make another recreation of System Shock and I'd like to see the knowledge base about the resource format at one place. So, as a generic call to all you hackers: If you crack some information on the resource files which is yet undocumented, send a mail to the hackers list tsshp-hackers.

jim-21.apr.03 And here's another! TSSHP 0.2.10f is mainly a bugfix release, though there have been some behind-the-scenes changes to the exit mechanism. You can now no longer see objects through doors in System Shock. (well, except in certain very rare conditions, but that's a problem with object sorting rather than with doors per se). Keybindings are not lost on exit if there is a problem with the configuration. And music now follows levels properly. We've also cleaned up a bunch of memory leaks on shutdown. Get it while it's hot ...

jim-13.apr.03 The wheels of TSSHP grind slow, but they grind exceeding small. TSSHP 0.2.10e is here at last! Get it from Sourceforge at the project page. Improvements too numerous to mention (we haven't been entirely idle these last months), but see the change log. (Hint: PageUp and PageDown are your friend)!

jim-09.apr.03 No, we are still not dead! (And no, there hasn't been an update in months). This latest hiatus was largely caused by my leaving university (again) and entering what it's probably best to describe as gainful employment ... I've not had regular net access all year, however this has now changed with the advent of ADSL to chez jim. Now if I can just get CVS to talk to SourceForge we might have a chance at an update ...
For the time being, access the TSSHP site at You can get source and executable releases via the project page as before.

jim-13.aug.02 I'm more or less keeping up with my task list at the moment. TSSHP 0.2.10d adds Gouraud shading to the OpenGL renderer, mostly, so you'll get lighting in glshack! It looks nice. Dynamic lighting (for Underworld) is still done in software. I've moved over to linear rather than inverse-square lighting, but I'm not sure whether it's actually better ... I've left it as a compile time option just in case. For any 3D hackers out there, TSSHP now uses the quadtrees to generate its list of drawable tiles in the "real world" as well as in cyberspace; when running in OpenGL it doesn't do any of the clipping itself, thus reverting to a painter's algorithm type approach (after all the blood sweat and tears I spent on the clipping, yet). This actually improves the framerate in most cases, but there are a couple of sorting problems with objects still, and some bleed-through on the flight deck (I think one of the textures is actually transparent; no problem in software, which ignores transparencies for wall texs, but OpenGL honours them).
From here on in it's basically tweaks and bugfixes, though I should at least have the option to use OpenGL's lighting API. Then on to physics ...

jim-05.aug.02 TSSHP 0.2.10c is here! This improves the OpenGL renderer, more-or-less completing 3D model support (notably flat-shaded faces are present, so the camera "red-eye" is watching you), and adding sprite objects. I've also had another look at sprite positioning and scaling: sizes "look about right" (this is the only justification I have for the scale values used, I have no idea where they actually come from). Critters now have their feet firmly on the ground, and don't jump about as you view them from different angles as the bitmap size changes.
What's missing from the accelerated renderer now is basically lighting. Gouraud shading for System Shock lightmaps is trivial to add, but doesn't work very well with TSSHP's (rather over-the-top) clipping. So I'll have to cut down on this, at least for the OpenGL version. Plus OpenGL has its own system for specifying dynamic lights, which I ought to be using instead of or alongside TSSHP's own. Which needs a rehash anyway. When all or some of that is done, expect an interim release; until then, enjoy the sprites!

jim-02.aug.02 Oops! That's what happens if you don't test thoroughly. Yesterday's release incorporated a nasty bug which meant it wouldn't run at all on Windows 2K (and probably NT too, come to think of it). It's now fixed, and version 0.2.10b is released. How's that for promptness?

jim-01.aug.02 For once, a treat for you Windows users out there. Music! Thanks to Bryan for that, see his note in the README. Sound now uses the SDL_mixer library, so you will need to get a copy of that too. Make sure you have the version appropriate to your SDL. Linux support is in the pipeline.
On the graphics side, 3D model support is improved, with texturing finally correct in software and (incomplete) OpenGL model rendering. Some objects look a little weird, because only texture-mapped surfaces are rendered at the moment. Plus, thanks to an update from firefreak, we should be ok with the System Shock demo as well. Get it while it's hot ...

jim-20.jul.02 However, before going down the pub I also managed to fix a couple of bugs in TSSHP. Today's snapshot puts back animated wall textures, which were accidentally disabled in the last couple of releases, and also attacks the garbled textures bug with 3D object models, which has been lurking in the bug list for way too long. There are still problems with a couple of objects, but at least the textures now line up properly on the CPU nodes. Plus, firefreak found out why transparencies on decals weren't working in OpenGL(yes, it was a boneheaded mistake of mine, how did you guess), so the black backgrounds on all the stains are now gone! Enjoy ...

jim-12.jul.02 TSSHP 0.2.10 is here at long last! Those of you who've been following the project will know what this means: I've now hacked together basic OpenGL support for texture mapping. So all levels now display in hardware, if you've got it. This is good.
Details: Basic level architecture is supported, as are most decals and doors, although they don't yet have transparencies so appear with a black background. No objects. No lighting. The source release defaults to compiling with OpenGL; the Windows release has shack.exe for software and glshack.exe with hardware support.
Caveat: Some OpenGL implementations have really slow 2D performance, which pretty much kills the head-up display. (I should stress that this isn't firefreak's fault, it's a quirk of GL). We're looking into possible workarounds, in the meantime if you're one of the unlucky ones, and get unacceptable performance in resolutions that ought to be ok, you can disable the HUD using the no-hud option in the configuration file or the command line to get a taste of accelerated Shock.
0.2.10 will be the last 0.2 numbered release. The graphics engine is more or less full-featured with respect to the original, though of course there is still a lot of room for improvement. (*AHEM*timisation) The HUD is in place, and now needs content. The situation re sound is similar. The main focus for 0.3, then, is physics and some object interactions to give the HUD and sound systems something to get their teeth into. First off, the plan for 0.3.0 is to smooth out a few rough edges in the 3D and maybe get some basic gravity for the avatar. Physics will be work-in-progress throughout 0.3, and with any luck we'll have some engine improvements creeping in while we're at it.
Happy hacking!

jim-10.jul.02 Today's snapshot is hopefully the final step on the way to the long-awaited 0.2.10 . Apparently (firefreak discovered) the HUD problems stem from an unfavourable interaction between OpenGL's texturing and pixel plotting features: when texture mapping was enabled (which it has to be for, er, texture mapping) OpenGL was trying to modulate the HUD with either a texture or the main scene (I'm hazy on the details) and things would crawl. The workaround, of course, is to disable texturing while rendering the HUD and reenable it afterwards for the 3D engine. This seems to work, and is incorporated in the snapshot. When that's properly tested we'll have the release proper.

jim-09.jul.02 The observant among you might have noticed that we seem to have released verson 0.2.9d without telling anybody. For that you can blame me and my hacker's reluctance to write anything in natural language rather than C ...
However, you won't need that for long. 0.2.10 is nearly with us; to that end there is a snapshot (source and executable) available for you to take a sneak preview. This one adds basic texture mapping support for OpenGL, at long last! There are still a couple of problems with the HUD, though it's fine in cyberspace levels, which seems to point at a(nother) fight between it and the texture mapper. I'm investigating.

ff1-11.jun.02 Years ago we all spent hours trying to solve the puzzles around Citadel - Now we were spending hours on how they actually work.
In that matter Jim and I figured out already most of the state and properties of the puzzles and similar panels. So with some luck, you'll see those mind games come to life in the MFD soon...
Check out the Hackers list and/or ss-specs for in-deep information. (And hardcore spoilers ;)

jim-15.may.02 Today's source snapshot has quadtree support, selectable at compile-time over the BSPs for cyberspace. Since the System Shock and Underworld maps are 64x64 grids of square tiles, a quadtree is ideally suited for sorting them (compare the code in bsp.c with that in quadtree.c if you're of such a mind). The next incarnation of the TSSHP rendering engine will probably sort by quadtree and clip by portal.
I'm also working on the new texture manager. This will use texture IDs rather than bitmap pointers until we actually get down to the software texture mapper -- this is vital for "real-world" hardware support. Currently the wall textures and most model textures use the main texture cache.

jim-08.may.02 Back to sensible headlines, or at least more sensible than before. TSSHP 0.2.9c is out. Maybe it'll work with Win2K NOW ...? I've fixed another couple of bugs, and fixed the clipping also on sprites and 3D models so they don't appear through walls any more. Doors is another matter though, blerh. They're sort of intermediate between objects and surfaces at the moment, so aren't correctly sorted. Will fix at some point.
Engine details, for the interested: I'm working on quadtree sorting as an alternative to BSP trees for cyberspace, though they might supplant them if they prove to be better. (As both System Shock and the Underworlds use a 64x64 tile grid they're ideal for a quadtree). Another thing I'm planning on trying is to use quadtrees for sorting in the real world, but still using the portals for clipping as now.

jim-25.apr.02 Honest, I didn't screw up the news headlines for the last n releases just for the sake of that one dreadful pun. Well, not entirely, anyway. Lots of bugfixes this release: go fetch 0.2.9b now, particularly if you were running 0.2.9a on Windows 2000 and wondered why it kept crashing. (Floating-point exceptions in the lightmapper. I could tell you weren't really interested).
I've done a fair amount of cleaning up in the surface mapping code; I want to be "OpenGL ready" by 0.2.10 . Force bridges now get proper 3D models (the same as ordinary bridges only transparent, oddly enough). And just to prove that I am attacking that TODO, animated sprite objects for Ultima Underworld are here. Don't those fountains just make you want to go to the toilet? Enjoy!

jim-11.apr.02 Version 0.2.9a is here! I said it wouldn't be long, and for once was telling the truth. Bryan has added support for the FMOD sound engine, which is much more powerful and has cooler features than the native SDL or OSS drivers. Check the source and sound Makefiles for compile options; it should be easy enough to get going. In future FMOD will be the main sound library used by TSSHP, though we will continue to support SDL sound as a legacy system.
Meanwhile, firefreak continues to work on the HUD (check the changelog for details of that), and jim has added support for System Shock animated wall textures and fixed a couple of rendering bugs. Jim doesn't usually talk about himself in the third person: perhaps he hasn't had enough coffee this morning. Happy hacking!

jim-03.apr.02 Now that version 0.2.9 is out of the way, work can begin on 0.2.10. In fact it already has: firefreak has made a big update to the HUD/MFD, which very much improves the speed and adds "clean" project files for Visual C++ 6.0. There's also now accelerated support for the HUD via OpenGL! Source snapshot is available from the downloads page, as usual. Windows types will have to wait till 0.2.9a for the executable, which shouldn't be that long. Go firefreak!
I've added a bit of extra information to the Underworld unofficial specs document as regards the conversation engine. And updated both the specs documents on SourceForge, they were getting a bit outdated.

jim-29.mar.02 To paraphrase Avon, rumours of our death have been slightly exaggerated. However, I'm now going to add "sorry it's late" to my list of things I'm not going to say any more, because you can practically take it as read. Anyway, we're all so busy with other commitments at the moment that "when it's ready" is the only release strategy that makes any sense.
Having said that, of course, you've probably guessed the purpose of this announcement. TSSHP 0.2.9 is here at last! This is a big step up from 0.2.8d (see the changelog), but briefly, the cyberspace renderer is more-or-less complete: depth cueing and softs/logs are here, and sorting of objects and geometry wireframe is improved. firefreak has added much to the HUD system, notably posture control, health bars and the bio monitor. Happy hacking!
The plan for 0.2.10 as far as the 3D engine is concerned is basically clean-up: fixing the outstanding bugs (of which there are many), adding some minor details that aren't yet supported (animated wall textures, for example) and hopefully some optimisations.
One more thing: if anybody in London is looking for a C/C++/ARM hacker, feel free to drop me a line Thanks. ;)

jim-21.dec.01 Just time before Christmas to release interim 0.2.8d. It's not all that precious, to be honest, but does add the cyberdog and the cyber cortex reaver (the fragmented red faces). They look a little weird because the fragments aren't yet properly depth sorted, but basically they are there. Colours for most cyber objects (not softs or critters though) are correct modulo a bit of shading, as I have finally found where the colour schemes are stored (right under my nose as usual). They will be handled properly in due course.
In other news, Claus Windeler has made a BeOS compile of TSSHP (0.2.8b), available from BeEmulated. (If you want to compile for BeOS yourself, the Linux configuration should work with gnumake/gcc, if you remove -lpthread and -lm from the makefile). Unfortunately it seems that TSSHP is very unstable in Underworld mode. When I've had a chance to install BeOS for myself I'll look into that. Many thanks to Claus for the contribution.

jim-12.dec.01 Interim release 0.2.8c goes up today, and adds depth cueing for cyberspace, so that the geometry fades into the distance somewhat. Oh, and it also adds ...

... accelerated 3D support via OpenGL. Well, to an extent. The only thing that works with acceleration is the basic wireframe for cyberspace. In particular, the texture-mapped realspace engine will give a blank display. But it's a start. Those of you who get the executable release, just run glshack.exe instead of shack.exe. If you're compiling from source you'll have to fiddle in the Makefile (accel/Makefile.linux) and in src/defines.h . It's a little bit rough and ready at the moment, I'm afraid. I'm aiming to bring OpenGL support gradually up to speed over the next few versions, with full acceleration early in 0.3 .
By the way, if you're looking for the new executable releases on SourceForge, they're in the tsshp release instead of tsshp-win. I'm phasing out tsshp-win and it will be deleted in the near future; both the source and executable versions will now be found in tsshp. Happy hacking!

jim-04.dec.01 A very brief note today. Interim release 0.2.8b is up, adding colour to the cyberspace wireframe. Next on the c/space list is depth cueing.

jim-30.nov.01 All those of you who thought that System Shock was a fantastic game with the one exception of cyberspace, which you found illogical, blocky and hard to navigate, will hate this one. Yes, TSSHP now has basic architecture support for the cyberspace levels. They are drawn wire-framed, as is proper, but not yet coloured in or shaded. Ordinary 3D models are rendered but again, not correctly coloured and shaded, and fragmented models (e.g. the cyberdog) are absent altogether.
On the grounds that this represents a large step forward, but not yet a completely new version, I've made an interim release, 0.2.8a, for you to play with. Enjoy!

jim-27.nov.01 Work on cyberspace continues. The BSP tree is now compiled, as far as I can tell correctly, and is used for cyberspace instead of the portal system as for the "real" world. Walls in cyberspace are now not textured, or indeed drawn at all, so it doesn't look terribly exciting. The snapshots (source and Windows exe both) are up on the downloads page as usual. You should get the latest snapshot even if you aren't interested in cyberspace because it also fixes a nasty bug which was causing shack to crash occasionally.

jim-21.nov.01 Nothing too momentous to report today, except that I have made a start on a BSP tree-based engine for cyberspace levels (why fight it, I knew I'd end up implementing one sooner or later). The current snapshot represents the state of play; its practical effect is to print out reams of diagnostics when run on a cyberspace level, but hey, it's progress.
I've also finally got round to updating the about page to represent the current state of the engine, rather than its state as of January this year.

all-09.nov.01 Yes, it's 0.2.8! You know where to go by now, I hope. A lot of work has been going on on all fronts this last month, so I'll let each of the team describe it in his own words.

firefreak: Two things from my side: Reconfigurable keys and a HUD that features the mouse! See readme on further details on the key configuration - the system is very powerful! Also the mouse (under SDL or windows) is being used - the default configuration TSSHP features two mouse modes: MouseLook and MouseCursor (similar like SS2). Hit TAB to switch between the modes (the first time you'll have to hit it twice - a minor bug ;) .
The Hardware and the MFD buttons work with the left mouse button. Logs and the small sidemap can be scrolled/zoomed with the right mouse button (click and drag the mouse up or down)

Bryan: 0.2.8 marks many new features in TSSHP, not the least is my first news post :) SDL audio support as been added into the code (it is still undergoing testing and so may sound a little strange....) just read the README file in the sound subdirectory for usage info.

jim: As for me, the new clipping and lighting systems are in place, although there are still a few bugs. The Underworld fans among you get a treat: multiple light sources! The lighting engine now supports multiple static lights as well as the Avatar lantern, so I've made campfires into light sources just as a taster. Check it out.

jim-02.oct.01 Just when you were least expecting it, along comes TSSHP 0.2.7! What do you mean, about bloody time? Oh all right then.
All 3D models for the underworlds are now rendered and (mostly) illuminated. Doors and portcullises: only the frames are drawn. Doorframes and bridges aren't properly Gouraud shaded to match their environment. I'm not going to fiddle around with the lighting any more until I've redone the clipping so it all works in world space. That's now scheduled for the next release (I've done some juggling of the TODO). Fingers crossed that it won't take so long this time ...

jim-28-sep.01 I've started on 3D doors for the Underworlds. Currently only the doorframes are drawn, textured to match their tiles as is proper, but not shaded to blend in with their environment. (See the hackers' forum for info about that). They look a little weird because they aren't yet scaled according to the roof height; this also means that the textures don't align properly between the top and sides. That's next on the agenda. There's a source snapshot, and I also managed to debug sufficiently to get a working Windows zip. Happy hacking!

jim-26-sep.01 A minor update today. Underworld gravestones are now correctly textured (though the sides are still pink), as are most bridges. As with System Shock, Underworld bridges may be textured as ordinary floors, and such bridges are not yet properly textured. There is a source snapshot available.
firefreak has also prepared a Windows snapshot based on Monday's code, see the downloads page. Note that this won't work for Underworld; this is my fault not firefreak's. My Underworld resource reading code isn't portable and breaks under Visual C++. I'll fix that asap.

jim-24-sep.01 It's been a while, hasn't it? The usual excuse I'm afraid: we're all far too busy with Real Work. That's not to say that nothing at all has been going on on the TSSHP front; firefreak has redone the control system (that'll be really cute) and hacked about with the MFD, as well as adding partial transparencies for the invisible mutants in System Shock. Bryan has added sound support ... the only driver currently supported is the "silence" driver, but don't despair, FMOD support is almost there, and OSS, SDL etc. is in the pipeline. On the other hand, we need to have things to make sounds first ...
As for yours truly, I'm still cracking my forehead against those Underworld 3D models, which are still lurking stubbornly in the 0.2.7 TODO. If you get the current snapshot you will see how I'm getting on. They aren't lit yet, so look a bit odd. They also tend to be pink, since I haven't yet figured out how flat shades are specified. The only model that is textured is the bridge, and that wrongly. On the bright side, that ankh looks damn cool with the Gouraud shading.

ff1-15.aug.01 Some news from the 2 dimensional side: First is the new MFD System. What does it do? Imagine the days when you played original System Shock - with time you got used to the settings you had with your MFD (eg: Map to the left, Weapons centered and Target list to the right). When something happened that changed the content (email, sensaround, ...) it quite often was the case that your previous settings weren't restored. Our new MFD system keeps track of what you had - and even where you like events to show up: You now can define what should be displayed if an event happens (eg: Weapon empty). See README and mfd.cfg for further details.
Second: media (Logs, eMail, vMail, ...) - things that have text to read and people - err - pictures to see. The display support is in the code and already shows a neat welcome message when you start shack ;) (see snapshot). With some luck you may even hear it in some days...

jim-07.aug.01 I added the orientation-based correction factor to object positions as I mentioned, to force decals flush with their walls. And what do you know, it seems to work, at least as far as I can tell by eye. I have checked the positions of bridges and they are all precisely centred in their tiles, after correction, whatever their heading. Which is as it should be. So until I get definite proof of bogisity I'm leaving the correction in for all objects. In fact I'm wondering whether to apply the equivalent correction for System Shock objects as well, since they exhibit the same problem to a lesser degree (having 256 possible values rather than 8 for in-tile positioning). Get the current snapshot and check it out.
I've also realised that I've been rather stingy with the screenshots of late, and since a lot of things have happened in the meantime I thought you were due some new ones. So go and take a look.

jim-06.aug.01 In some cases, the writing floats in midair near the wall, but that's a bug with object positioning. Yes, the current snapshot adds decal support for Underworld levels (only tested on the first game, mind you), so not only do you get writing but also switches, levers and chains, and the Special TMAP Object as well. Yes, stairways show up now. You know the drill.
As I intimated above, positioning isn't always correct. Some decals are not flush with their walls, and sometimes they are offset to the side. Clearly if you divide a tile into 8 equal strips and use 3 bits to indicate position you can't have objects flush against both walls. I'm wondering if orientation has anything to do with it. It's a matter of sitting down and figuring out exactly which positions are wrong and discovering the common factor. Not onerous.

jim-27.jul.01 Guess what? New version! It's been 2 and a half months in the making, but TSSHP is now up to version 0.2.6 . This adds crates, bridges, lighting for objects, surveillance and other screens, and banishes the "pink C" placeholder bitmap from 3D models, plus a whole slew of cool MFD stuff from firefreak. Check it out: Source Windows executable.
A couple of notes on future roadmap (at least as far as 3D engine goes, we're fairly much autonomous on TODO): next version (0.2.7) will be adding support for 3D objects and decals for Underworld levels, and fixing some bugs there. 0.2.8 will polish off some of the rough edges and sort out any lurking 3D bugs. 0.2.9, with any luck, will see a cyberspace graphics engine. My plan for 0.3 is mainly physics, though expect some reasonably big engine improvements too. Then we can start on the really cool stuff :)
Happy hacking!

jim-26.jul.01 Just a brief note as it is fast approaching the time for me to go to the pub :) Today's snapshot adds lightmapping and Gouraud shading to decals and doors, so System Shock levels no longer have any anomalous full-bright bits in darkened areas. Now I just need to enable dynamic dark suckers for Underworld and we have 0.2.6! Barring major disasters, that should happen some time next week. Fingers crossed eh?

jim-24.jul.01 A new snapshot! This is from my pre-release branch of 0.2.6 and adds the remaining special-effect screens, viz textual displays, and also those code screens in the level 6 lobby that randomly switch between ordinary displays and 3-digit codes. That pretty much wraps it up for screens, so one TODO to do!
Speaking of which, I've made some progress on getting lighting applied to objects. I've got the most important part; a routine to interpolate the static light level at any point on the map from the light levels for each tile. This is applied at load-time to sprites and 3D models which are drawn with a single light value each, as in the original game. Dynamic lighting isn't yet applied, which means that Underworld objects are all drawn as black silhouettes, since all lighting in Underworld is dynamic.

jim-02.jul.01 Just in case you thought that TODO list would remain inviolate until the end of time (I know I did on occasion) I've now implemented proper bitmap fetch functions for 3D models with variable textures. This means (hopefully) that the "pink C" placeholder texture is banished forever from the screen. The existing bitmap fetch hook for screens worked fine for pedestals / big TVs etc ... once I'd cleaned up and given screens and decals their own map_surface. Check the latest snapshot.
Remaining on the list before 0.2.6 are screen special effects (mostly done, only need text) and lighting for objects and decals (HARD). I'm not speculating here on how long, but it will happen.

jim-25.jun.01 I've got crates and bridges figured out and code to render them. Note that you can't yet walk on bridges ... the physics system is not in place and you will fall through them. This includes "false floors" such as the area north of the central hub on the medical level and the crossover tunnels on Research and Engineering. Snapshot, you know the drill.

jim-19.jun.01 I know, I know, I've been busy with real work. This isn't so much an update as a note to let you know I haven't died or given up or anything. There is a new source snapshot with SHODAN screens, better directionality for orientable sprites and the beginnings of some code to handle crates and bridges. Nothing particularly to write home about, but I am attacking that TODO list, honest.
Not to be downcast however, firefreak has been working hard on the targeting system and has created some very cute effects which you can also see if you get the source. I'm not going to say "kudos to firefreak" from now on, because he's so constantly doing cool stuff that you can take it as read that he has an inexhaustible supply :-)

ff1-14.may.01 The HUD and MFD get a nifty update: the map. Walls, doors, critters and security devices - all within your view. On the not so brighter side: some objects aren't mapped correctly. Currently you might end up shooting at a microscope because according to the map it's a cam ;) Also some walls are missing because there are none. How this works? By a trick of the level builder - but we're working on it (the problem - not the level builder ;)

jim-13-may.01 Just a brief note to say that I've been working on screens this weekend, and have put up some new screenshots to show off remote surveillance screens. These render into a bitmap on the fly and are then mapped onto the screen surface. They look quite cool, particularly that one on level 6 where you can see the screens within the screen as they cycle through their animations. I've also implemented screens which display nothing but static, but not yet those where the static fades in and out of SHODAN's face. They're next. Get the latest source from the downloads page as usual.

jim-09-may.01 Another month where I've had little time for hacking, I'm afraid. I've basically been working my way through the bug list on SourceForge prior to the new release. They're now all clobbered (at least the ones which have made it into the tracking database) so it is with great pleasure that I announce TSSHP 0.2.5. This includes static and dynamic lighting (it isn't applied to objects and wall decals yet, so looks a little odd). I've also added Underworld font support though it isn't yet used by default. 0.2.5 also fixes several bugs of varying degrees of deadliness.
I've done some further investigation into animated screens, and have figured out most of the special effects (static fading to SHODAN's face, surveillance cameras, text). Expect those in the next release.

jim-20.apr.01 Those of you who have looked at the screenshots page recently will have noticed something. Darkness! I hadn't put up the announcement until now because it took a little while to get the code into a compilable state following some fairly heavy development by both firefreak and myself. However, it now seems to be working, so I've made the code available on the downloads page. And in a dramatic break with tradition, there's a preview Windows release as well. Enjoy!
It's not perfect yet; some areas of System Shock levels are too dark, as I haven't fully cracked the lightmap storage format yet. There's also a bug causing a very few Underworld vertices to get bogus light levels, which causes shack to bomb. Finally, objects and decals / doors aren't yet shaded and will be drawn fullbright. But hey, it looks pretty cute already.

ff1-11.apr.01 A big 'Hi to all' in my very first news post.
Currently I'm responsible for all that you see besides the 3d world - the HUD and MFDs. Yes, they are transparent as the underlying code is my major contribution to TSSHP. But those three boxes currently representing the MFDs aren't the only things I had in mind. I've got quite many ideas about making some really cool effects that I always wanted to see in a game. Think about some HUD scenes as in Terminator, RoboCop or Lost in Space (especially the very first 5 minutes of LiS ;) - I hope you get the point... And before you ask: yes, that's going to require a fast machine - but to calm you down again: I'm still targeting my lowend machine (K6-2 300) and I'll add detail levels. Have Fun!

09-Apr-2001 Not much work got done this weekend, for reasons I shan't mention on a family website, but I did manage to fix that bug that caused textures with sharp corners to be blanked out some of the time. I'm starting to like the bug tracking database on SourceForge ... somewhat to my surprise (cynic that I am) seeing all that red every time I log on provides a real incentive to fix stuff, especially as I know that everybody else can see it too. Never underestimate the productivity value of embarassment. Anyway, there's a new snapshot of the current code including the fix. Source only; as usual the executable download will be available come 0.2.5. Or you can get it direct from the CVS repository on SourceForge.

04-Apr-2001 Version 0.2.4 adds transparent textures (force doors and bridges) MFD support (not very much in the MFDs yet, though) and 32 bit colour support, all due to firefreak (that's him on the right). There's also a Windows executable release as usual. Many thanks to firefreak for his excellent work, and also congratulations to him on his new job. Best of luck ...

30-Mar-2001 Version 0.2.3 is here! This is a bugfix release; I've sorted out the bad texture mapping on 3D object models and also fixed the divides-by-zero which were causing constant crashing under Windows and wacky texture effects under Linux.
Incidentally, the code in 0.2.3 is entirely from my own codebase; the CVS repository at SourceForge is now ready and contains both my and firefreak's code merged, but it almost certainly won't compile in its current state. I'll try and get it going at the weekend and then see about another release, so you can all benefit from transparencies and HUD areas.

27-Mar-2001 Those of you who've visited this site in the last few days might have noticed the SourceForge logo above. Yes, TSSHP is now registered with SourceForge; you can access the project details at Well, it was that or implement my own secure access / public CVS / bug tracking database / etc. Releases and snapshots will still be made available on this site; releases will be uploaded to SourceForge as they come out, but snapshots won't; you can always access the CVS database, when it's ready.
Speaking of releases, tsshp-0.2.2 is now available, and adds monsters and animated screens to System Shock. The Windows release is also up. Ultima Underworld critters are now drawn using the proper animation frames from the crit/ directory instead of the placeholder bitmaps as before.
Last but not least, firefreak has sent me some screenshots of his work incorporating transparent force doors, which look very nice. They aren't in the 0.2.2 release though, we're waiting for the SourceForge CVS database for TSSHP to be ready before we can merge our two codebases. With any luck they'll make it into 0.2.3 . I'd also like to take this opportunity to offer a grovelling and public apology to firefreak, who spent ages trying to figure out why decals were mis-oriented in his version only to find that it was a stupid bug of my own which made it into a release simply because I didn't test it properly. Sorry!

20-Mar-2001 The TSSHP team has abruptly increased in size! Firefreak is on board, and is currently beavering away at the HUD, as well as finding lots of nice bugs for me ;-) He's also crafted some very cute transparency code, which can be used for snazzy MFD backgrounds, as well as giving us force doors and force bridges pretty much straight off. Welcome aboard o freaky one!
I've also put up a new source snapshot which adds partial orientable-sprite support for UnderworldII. Unfortunately it breaks Underworld completely; that'll be a standard bonehead error I haven't had a chance to fix, then. It does appear, however, that critters in UnderworldII aren't being oriented correctly; I'm wondering if that's connected to the bug which makes decals orient themselves wrongly when compiled with VC++. I'll check it out.

13-Mar-2001 Yup, you wait ages for an update, and then two come along at once. The latest snapshot adds orientable bitmap support for critters and corpses ... those of you who were feeling lonely wandering around Citadel Station, it's not so deserted now. (Although, of course, they don't do much yet, just stand there). Interesting to note that corpses and skeletons have the full 8 directional bitmaps stored in the resources but the original Shock doesn't use them, treating them as ordinary billboarded sprites. I'm not doing the directions properly yet, just subtracting the angles, so they will get wronger as you move further away.
No Windows release yet, you'll have to wait for 0.2.2 . Executable for 0.2.1 is still up, you'll need the SDL as always. (I had a read through the LGPL last night to try to figure out what I need to do to be able to distribute an SDL DLL as part of the executable release ... my brain hurts! This is mainly why I'm using a modified BSD licence for TSSHP).

12-Mar-2001 Many apologies to those of you to whom I promised a new version last week; we were due to go live with a BSCN update and all sorts of things were going wrong at the last minute. Anyway, TSSHP 0.2.1 is now available; this adds partial Ultima Underworld object support! (Cheers, hurrah). When I say "partial" I mean that all objects are drawn as sprites, including 3D models, decals and things that would normally be invisible e.g. traps. It does make UW levels look quite interesting from a hacker's perspective, though, to see all the traps etc. Oh, and there's a Windows release as well, though you'll still need to provide your own SDL DLL.

01-Mar-2001 Thanks to Saam once more for the mention at TTLG, I'm feeling glad of my 10MBit JANET connection today. I don't have much to report, but today's source snapshot has some improvement in the texture mapping for 3D objects. (That surgery machine looks a lot better for a start). There are still big problems with non-orthogonal u and v vectors, though, which shouldn't be happening. I haven't had a chance to compile a new Windows release yet either, so you'll have to stick with the existing one for now. Or make your own.

26-Feb-2001 Went shopping at the weekend and bought the Hardline album, and then settled in on Sunday for an afternoon's hard-rock-fuelled hacking. Have you any idea how hard it is to play air guitar and code at the same time? Anyway ... TSSHP has now reached version 0.2.0! No, this doesn't mean that we are a fifth of the way towards a working playable game; there are a lot of numbers left. I've added support for configuration files, which has in turn enabled me to provide an executable download for Windows. Yes, you read that right. You will still need to download the SDL DLL v1.1 and put it where Windows can find it (either in the TSSHP directory or your Windows System directory); I'm not distributing the SDL along with TSSHP yet because I need to do a couple of extra things to comply with the GPL. You'll also need to edit cyb.cfg to include the paths to your System Shock CD and HD installation and/or your Underworld installation.
For the hackers, there's a current source snapshot available as well. This is actually a development prerelease of 0.2.1 ; there is NO source release of 0.2.0 as I fixed the version number and then did some more hacking on the Linux side.

20-Feb-2001 Right, for all you Microsoft weenies, the latest snapshot compiles and runs under Windows! After a fashion, that is. I've finally got round to folding Damian's SDL interface back into the main code, though not yet the autoconf stuff. Sorry Damian! Those of you who want to try compiling for Windows will need the Borland free command-line compiler (or the commercial C++Builder, of course) and a Windows release of the SDL. You need to edit Makefile.borland to point to both of these, and src/resource.h to point at your Shock/Underworld directories. Then just `make -fMakefile.borland'. There's no binary version as yet ... until I get support for configuration files into it there wouldn't be much point unless your CD and games directories were the same as mine. Soon.
I've also fixed a few rendering bugs, but nothing of earth-shattering importance. Oh and I've added a bit to the unofficial Ultima Underworld specifications about the code engine used for NPC conversations.

07-Feb-2001 Another long hiatus, and not really that much to report. I've put up a new snapshot with some minor improvements. Notable amongst these is that I move to a system of configurable hook functions for fetching object bitmaps. This cleans up some of the mess in object rendering and removes the necessity for fixture.c to maintain its own separate bitmap cache, which frankly was a bit of a crap way to be going about it. The real power of this technique comes when we start supporting Underworld objects, of which I now have the format details thanks to Alistair Brown and his rather good Underworld II editor. We can do the object mapping at load time without buggering about with the rendering code and still have dynamic loading of object bitmaps, which is a Good ThingTM.
In other news, I had a bit of a hack and managed to get Damian's code to compile under Windows 95 using the Borland free command-line compiler; after I squashed a couple of texture-mapping bugs it worked fine. No release yet; I'll try to reintegrate Damian's code with the main TSSHP development sources (not before time!) and then you shall have it.
Incidentally, if you get the new version you will notice some textures are blanked out when you first run certain levels. This is because the clipping causes surfaces very occasionally to get zero-length normals; I fixed that almost literally on my way out of the door this morning, but didn't have time to repackage it. FITNR.

16-Jan-2001 No, not the sort of virus that turns your computer into a malevolent AI bent on taking over the world through genetic manipulations (not that I don't sometimes wonder what it does when I'm not around), that old-fashioned, familiar, messy virus known as the common cold. Why do I always catch cold at the weekend, never during the middle of the week so I can have time off? Who knows. Anyway, there's a new snapshot of TSSHP available; this adds texture mapping for 3D model objects but it doesn't work properly yet. Some of them look quite weird. There's also a naïve attempt at depth-sorting for objects within a tile. It doesn't work correctly in all cases, but fixes a couple of problems. Oh and I've made a start on an unofficial specs document for Ultima Underworld, though it doesn't amount to much yet.

11-Jan-2001 Those of you who follow the System Shock discussions on TTLG will remember Glen Sawyer's sterling work on programmatically importing System Shock levels into System Shock II using Tels' CoW project (automatic generation of Thief levels) and ShockED. Circumstances have left Glen without a working website at the moment, so he's passed the stuff on to me and I'm hosting it for the time being. Get it at Glen's Pile O'System Shock Junk, along with some stuff to extract textures and sounds. I'm thinking of having a go at incorporating it into TSSHP proper, but for now I've just dumped Glen's original page onto madeira. It shouldn't be too hard, with some of the new stuff from TSSHP, to hack it to e.g. get Underworld levels into Thief. Many thanks to Glen for lending me his stuff.
As for myself, I'm still working, on and off, on getting texture mapping for 3D object models from System Shock. I thought I'd be able to get away with using a single transform for the texture mapping in the same way as walls and decals, but it transpires that Shock supports wacky texture mappings in which the texture plane is not the same as the object face plane, so we must do 2 transforms in one. This is a bit of a pain. I'll probably use an affine mapping to map the texture onto the face and the usual inverse-Z mapping for the face->screen. But I'll need to do some maths (yuk!) Plus I'm a bit busy with Real WorkTM at the moment, so taking all into account I can't really say when the next version is due. I'll try to get a snapshot of my current code up soonish, though. Be warned, 3D models look rather odd.

03-Jan-2001 Merry Christmas all, and I hope you had a good one. (I've taken the silly Santa hat off SHODAN, I'm not sure she appreciated it).
I've been working on incorporating the 3D object models (the last major category of object display types) into the TSSHP engine, but they don't work properly yet. They aren't yet texture-mapped and tend to have some funky Z-buffering effects caused by the aforementioned problem with object depth-sorting (i.e. that I'm not doing it). Actually I'm making object depth-sorting my next priority as it really does look quite weird at the moment. There's also a crash bug for certain (rare) objects.
Get the latest snapshot if you want a look. It's a direct tarball of a CVS checkout, so ignore the CVS stuff in each directory. I might arrange for public CVS access at some point in the future.

20-Dec-2000 Damian has sent me a new version of his SDL port; this one is based on my snapshot dated December 15, and so will have sprites. I haven't tested it myself yet, so if you have problems getting it to run you should mail Damian. General comments, abuse etc. about the TSSHP engine should go to me as usual.

15-Dec-2000 I've had a hack at adding sprite-based objects to the TSSHP engine. You can get the first draft in the usual place. Some (all?) sprites are mis-positioned; there's clearly a field in the object properties I haven't found yet. Scaling isn't quite right; objects seem to change size as you turn around. This might just be an illusion due to field-of-view, I'll need to do some more tests. Objects aren't sorted properly (or indeed at all) by Z-order. Apart from that, it looks OK - see the new screenshots.

14-Dec-2000 Today's snapshot slackens the bounding-box calculations for portals to get rid of the annoying black lines on the display, and adds decals and doors back into System Shock levels. I've also moved the texture extraction stuff into the main program source; use the -extract and -extract-sub options to specify chunk and subchunk to extract. Don't try to compile textex stand-alone, it won't work.

13-Dec-2000Yes, you got it, we've up to version 0.1.4! The new geometry is in place and is working, though it isn't yet quite bug free, and there's still room for improvement particularly in the optimisation department.
In addition, as a special treat since it's been so long between updates, I've added an interpreter for Ultima Underworld I levels. Basic level geometry only at the moment, I haven't quite figured out the object storage format. Unofficial Underworld specs are in the pipeline.

12-Dec-2000 The new geometry representation seems to work OK, modulo a texture mapping bug for triangular floor/ceiling surfaces. The engine has now been adapted to use it, so I should be able to get rid of a lot of the messy rendering code that was cluttering up the old versions. Get it at the usual place. I haven't added objects back into the renderer yet though, so you won't see doors or wall textures. That's pretty easy to do in the first instance, though I shall probably convert oriented-bitmap objects to map surfaces so that they can be drawn in one go with the main architecture.
There are still a few lurking bugs. Most of the obvious problems with the old renderer (blackouts, wacky diagonal slopes) are gone, but some new ones have arrived in their place. They shouldn't pose too many problems though, from what I can see (fingers crossed eh?)

11-Dec-2000 I managed to do a little bit on TSSHP in between hangovers this weekend (hey, I'm trying to have a life too). The new geometry representation is now complete; floors and ceilings are added and all internal surfaces are properly texture-mapped. The only thing it doesn't do is actually use the new geometry in the renderer. However, that shouldn't be difficult; it's just a case of backface cull, transform, clip, queue texture, recurse. (Yes I know I ought to clip before transforming, this is work in progress, remember). I've updated the current snapshot with today's code.

07-Dec-2000 Phew! The level geometry converter turns out to be trickier than I thought. I've got all the vertices and wall surfaces done, which is the difficult bit as it has to work out where the aperture between two tiles is for all possible intersection cases. It seems to work. Next floors and ceilings, which should be straightforward enough, then texture-mapping information, and then we can see about getting the renderer to use it ...
Today's snapshot is up. I've moved the source files into directory `src' pending a reorg but haven't updated the top-level Makefile, so if you compile it you'll have to do so in src. In related news, Damian has also added autoconf support to his version. His code with autoconf and SDL support (so you don't have to restart your X server in 8-bit mode) is available here; this file is based on my snapshot dated 05-Dec-2000. He notes:

./configure should be called with --enable-sdl or --enable-x11, and it will build the appropriate `libgui.a', which will be linked into shack. There's might be a bunch of broken links in the tarball, but they're all files deemed ``necessary' by automake, and can be ignored. Run ./ if you want to regenerate the auto* stuff.
Many thanks to Damian for his contributions.

05-Dec-2000 I ATEN'T DEAD. I'm just ... er ... resting. (For values of "resting" including writing telemedicine software for EEG and setting up secure web sites, that is). Right now I'm working on some rather hairy code to convert the level geometry from System Shock's own archive format to a form more convenient for the renderer (I hope). You can get the current source here, on the off chance that you're interested. It doesn't do anything much different from the previous, but you can get it to give you a list of vertices if you poke about in the right part of map.c .
In slightly related news, Damian Gryski has ported shack to the SDL, but since I've had my head up my own bottom for the last month I haven't added it to the main source yet. Sorry.

31-Oct-2000 Hallowe'en release! (well I had to, really). tsshp-0.1.3 is a hackers' release, with some code rearranged to get OS-specific stuff squirrelled away in its own directory. Hopefully this will make porting easier, as there's been some interest in porting to Windows. Non-hackers probably won't be too interested in this one.

24-Oct-2000 OK, it's been a month in the making, but tsshp-0.1.2 is out now. (Before you get too excited, though, the long delay wasn't so much hugely great things in the making as because I didn't have much time for hacking). The renderer is improved, the code is nicer, it's faster and some bugs are fixed (and some bugs are introduced, but then isn't that always the way?) I've also posted some more screen shots with the latest version. And as if that wasn't enough, you can marvel (laugh, anyways) at the current bugs. Happy hacking!

19-Oct-2000 Wow! Fame! Many thanks to Saam of TTLG for mentioning me on the front page. My hit rate has gone up sharply today, I tell you. Is this by way of being a virtual kick up the butt as I haven't posted an update for a month? 8-) Speaking of which, I've got a rewrite of the texture mapper but it is still rather buggy. I'm out tonight and Friday so you won't get an update this week, but I'll have a hack at debugging it this weekend. Enjoy!

10-Oct-2000 Just a note to let you know I haven't forgotten about the entire thing although I haven't posted any updates lately. My Copious Free Time is anything but right now, but I'm working slowly on a(nother) big rewrite of the texture mapping code. After that I want to revamp the internal map geometry representation as it's a bit of a mess right now. So not many cosmetic changes going on for a while. Oh, and I fixed the bitmap bug with hospital doors but forgot to post an update, apologies for that. With a bit of luck there'll be a new version some time this week.

18-Sep-2000 An almost-productive weekend, that. tsshp-0.1.1 is out, adding doors and the rest of the wall decorations. There are a few problems; the one you'll notice first is that hospital doors aren't loaded properly. I think this is a bitmap bug. Object bitmaps are calculated to sub-pixel accuracy (however, walls aren't yet, so doors appear offset slightly) so they don't jump around as you move, but there's a small amount of shimmer at the bottoms of things due to floating-point inaccuracies. Doors and decorations don't block the 3D search, and so slow things down considerably up close as the scene behind is still drawn. Oh, and while I'm slagging off the project, I'm not sure that font scaling is correct in all cases.

13-Sep-2000 Long time no update, I know; I've been busy again. However, TSSHP has reached version 0.1.0! I've finally figured out how objects map to their associated bitmaps in the main sprite resource, and we now have most wall decorations and switches. It makes a big difference to the station look. Those interested should check it out. However, clipping and texture-mapping of objects is still rather buggy. I hope to have that sorted out soon.

29-Aug-2000 I finally finished Thief Gold, it's been a long weekend and my PhD supervisor is away. You guessed what that means ... tsshp-0.0.pre5 is up. I've improved the renderer so it hates open spaces rather less now. Still very slow though. Objects are on the way; they're loaded up and cross-referenced with the map but not actually drawn yet.

17-Aug-2000 OK, I found a floopy which worked this time. tsshp-0.0.pre4 is now up for download. You should probably get this one as it mostly fixes the annoying auto-repeat bug (only if you ctrl-C out of it from the console, though, bloody X). There are also some new clipping routines in clip.c, though they're not actually used as yet, and some more command-line options, see option.c for details. In related news, I've finally got round to putting up some new screen shots.

16-Aug-2000 Argh. A bit of PhD burnout I fear, I'm getting no Real Work done this week, and yes I still have a deadline to meet. I was going to bring in a mini-update, but the floopy was knackered. I've made a bit of progress on the 3D clipping stuff but haven't incorporated it into the engine yet. The 3D model format in obj3d.res is slowly giving up its secrets to me ... I've added what I've so far figured out to the unofficial specs.

14-Aug-2000 This week's excuse: bolshie TAPI (modem) code, 4 file formats sat on my desk waiting to be incorporated, still no timing results and Thief Gold. (how the hell do you get into the shrine on the Haunted Cathedral level anyway?) I have managed to get a couple of 3d clipping routines for the renderer update, though. Oh and I've put up a few musings about the new engine. It's very incomplete right now.

03-Aug-2000 You know I said I'd have had time to do some hacking by now? I lied. I need to get timing results for digital EEG data transmission over analogue and ISDN lines with varying levels of compression in the next week and a half. I've passed one deadline already and the code is still very flaky.
I've glanced at a couple more files, poked around a few games programming sites and got some stuff down on paper, but not really anything worth posting. Oh, I (mostly) fixed the auto-repeat bug at home, I'll try to bring it in maybe tomorrow. I am still answering emails.

19-Jul-2000 Mini-update, pre3 is available, adding a comand-line option parser and fixing a couple of minor bugs. The new 3D algorithm is pretty much fleshed out in my brain now but lacks code. Soon ...

14-Jul-2000 How do you like the new update format then? I had a devil of a time tweaking the colours into something that worked OK with the System Shock palette. On the plus side, it makes me look like I have rather better complexion than the photo on my home page does. Who needs expensive creams when you have PaintShop Pro?
Anyway, tsshp-0.0.pre2 is available, but don't get too excited. It fixes a decompression bug and adds a logfile player. It did have a texture extractor but I accidentally deleted it when packaging it for release. (I was half out of it with a nasty cold). Logfile player takes the chunk numbers of the log to play as a parameter, the numbers 201, 2741 and 3100 should get you off to a start. I ought to post a list of chunks ...

12-Jul-2000 Having said that, I spent yesterday at home with a nasty cold, so while I didn't feel up to recoding the 3d algorithm I did find out a couple of new things. The table mapping objects to their classes and subclasses (see specs), which I've been seeking for some time in the various resource files, turns out to be hardcoded into the executable (bleah). pre2 was supposed to go up today (minor update to the compression code, simple logplayer and texture extractor) but I cocked up the packaging so it won't be till tomorrow. I have to go now, more later.

08-Jul-2000 Sorry for the long delay between updates. I'm afraid that Real Work has been intruding into my life rather lately. I probably won't have much time spare for hacking for the next couple of weeks, either. However, 2 things:

  • Source code is available! I figured that I shouldn't be keeping it under a bushel, or whatever the expression ought to be, just cos I'm not doing much to it at the moment. Grab it and fiddle. Linux only at the moment, I'm afraid (though if anyone wants to do a front-end for another platform they should feel free).
  • I have managed to do a bit of poking around in the sound resources. It transpires that sound effects (digifx.res, chunk type 7) are in fact just Creative Labs .voc files embedded in the game data. Format is available at Wotsit's Format. Audio logs seem to be some sort of embedded movie files but I haven't identified the format (they all start with "MOVI", any ideas?) I've added this information to the unofficial specs.

23-Jun-2000 I was going to put source code up today, but I find that the floopy with the code on it has last night's version, not this morning's. Did I type tar xzf instead of tar czf? I hope not, but I'll have to wait till I get home to see. Either way, release won't be till next week. Which might mean I get a couple of bugs sorted out.

19-Jun-2000 Did some more hacking at the weekend ... I now have proper projective texture mapping. And boy is it slow! 14fps at 320x240 on a K6-2/350 isn't really up to scratch. Mind you, it looks very pretty.
There are still a few problems with floors and ceilings. Turns out that, as I suspected, floor and ceiling textures may be rotated through multiples of 90 degrees; this information is stored in bits 5 and 6 of the relevant height bytes. Diagonal half-tiles aren't being drawn properly though, and diagonal slopes still aren't supported.

13-Jun-2000 I've put up some screen shots I took last night using my 3d renderer. No objects or lighting and distorted textures, but still ...

12-Jun-2000 Phew! I get more admiration for the guys at Looking Glass every day. They designed some really gorgeous maps which are a complete bitch to render. Prototype renderer still isn't ready ... it draws all textures but there are still some glitches and it needs optimising. Badly. I might have to rethink the algorithm. Besides which, you won't see much nastier C this side of Redmond, Washington and I'm embarrassed to show you all 8-)
On the bright side, I've been enjoying myself wandering around Citadel Station with no cyborgs to attack me.

07-Jun-2000 I think I've finally figured out the heights. The log(2) of the number of height units per tile unit is stored in the first chunk in the map. This means that for really tall levels like the security level the heights still fit in 1 byte at the cost of some vertical resolution.

06-Jun-2000 Well, turns out ceiling heights weren't as complicated as that after all ... they are just measured in units down from the total height. However, some regions of the map still have the wrong heights, and some slopes look too shallow to me. Perhaps there is a region chunk I haven't yet found with base floor/ceiling heights for various sections of the map. Oh, and diagonal-wall tiles are wrong. This is probably a typical bonehead error.

05-Jun-2000 I managed to spend a goodly chunk of Sunday hacking, and I now have a rudimentary 3d engine! Don't get too excited though (as if); when I say rudimentary, I mean it. Not all of the textures are drawn, and those that are drawn distort really terribly because I'm using linear interpolation for the texture mapping (hey, it's a first draft). Plus, I haven't quite figured out the map format fully, as you may read:

  • First off, the tile heights. Ought to be straightforward ... isn't. Floor heights seem to do pretty much what you'd expect, but the ceilings are wrong however I slice and dice.
  • Where do the textures come from? It's obvious that some walls are textured from in front and some from behind, if you catch my drift. But how is it specified?
  • Texture stretching. Sometimes textures are stretched to fit the walls and sometimes they are tiled or clipped. When?
  • Thin walls. Not all boundaries between open sectors are passable; how does the game determine when there is a wall and when not?