🔒 Tool for converting Ultima Underworld and Shock 1 Levels into Unity.

1 Guest is here.
66472fa94cc16
icemannQuote
Have to say, I completely agree. Looking at the screenshots.

As far as Underworld / System Shock 1 projects go. This ones pretty damn advanced.

Though I foresee things getting difficult once things get onto implementing enemies and on the SS1 end, cyberspace. Decorations (ie tables, desks, lamps etc etc) shouldn't be hard in theory.

Either way, I eagerly look forward to future updates.

First SS1 related project since TSSHP and the Citadel conversion to have me half excited.
66472fa94d43b
hank morganQuote

Quote by Drone-Dragon:
Actually, if I have read this correctly, if Hank has created a program that can auto-script a game by taking the script from the old dos version and applying the script to the new windows version, or even old windows games to modern windows versions, this guy REALLY needs to make money off of this. This, as you said, is pure GENIUS. This could be a way to ease the process of remaking old games to work on modern systems.

 :stroke: You should be :proud: Hank!

Not exactly. I explained how I do this over in the Dark Mod forums thread. Basically in Underworld (and I think in SS1 as well) level events are carried out by a system of triggers and traps. So for instance if you pull a lever that sets off a trigger which in turn sets off a trap which can set off a whole chain of other triggers and traps. All of these triggers and traps are in game objects and are no different from any visible object in a level so I can just export that list of triggers/traps into a list in the following format for each particular set.

Code:
588    366       special_tmap_obj    52    12    3    7    96    0    40    152    586    0
{
586    419         a_look_trigger    -1    -1    3    3    3    0    52    13    587    6
587    389    a_change_terrain_trap    52    13    0    0    96    0    23    63    620    1
620    400      a_text_string_trap    -1    -1    0    0    96    0    4    2    585    0
585    395    a_delete_object_trap    -1    -1    0    0    0    0    52    12    588    0
}
That is the sequence of events and properties in Underworld for activating a wall which changes the state of some terrain, gives you a text message in the log, and finally deletes the wall you activated. I can then parse this sequence in to the c like script language used by D3.

Code:
void start_special_tmap_obj_052_012_588()
{
$a_change_terrain_trap_initial_052_013_587_000.remove();

$a_change_terrain_trap_final_052_013_587.show();

sys.println("You move the vines aside...");

$special_tmap_obj_052_012_588.hide();
}

At the moment I've implemented Underworld traps that delete objects, activate cameras, check and set variables, open locks and doors, raise moving platforms, hide and reveal blocks of terrain that occupy the same space and string messages and teleports for both within a level and moving between levels (no persistence yet).


Quote by icemann:
Though I foresee things getting difficult once things get onto implementing enemies and on the SS1 end, cyberspace. Decorations (ie tables, desks, lamps etc etc) shouldn't be hard in theory.

Yeah. I haven't even considered things from a game-play point of view and I haven't a clue how to extract original models from the games so I just use place-holder models. At this stage I'll just be very happy to build something that forms a solid modders resource.

I fixed most of the broken texturing from what I posted yesterday and once I fix alignments on sloped tiles and texture height offsets I'll share the current version of the level and my up to date code.
66472fa94d656
icemannQuote
Enemy models, AI and gameplay are things that are best left till the end anyway.

I've done some earlier projects of similar-ish type stuff. Though mine was all from the ground up programming from scratch in C++ in my own engine and not in an existing one and was of just NES and Atari 2600 games, so I completely get the process from a development perspective of starting from the beginning, taking out the tasks 1 by 1.

Of note I followed a very similar process that from reading your dev notes here and on the other forums you appear to go by of attacking each level one by one.

I would go in the order of:

1. Converting over texture related graphics (in my case it was tile based 2d stuff)
2. Sprites (enemies, items and objects)
3. Sounds
4. Setting up some sort of test environment for the intended level
5. Coding up the AI for the enemies
6. Coding up the unique game elements for that level
7. Developing music or porting over the music used in the original game
8. Fully develop the intended level

Then take a break for a few weeks, then move onto the next level. Worked for me.
66472fa94d885
hank morganQuote
Annoyingly vertical texture alignments in Shock are getting the better of me. The solution is probably very simple. The SS-specs.txt mention a texture offset but does not mention what it is offsetting from (the ceiling, floor, or the absolute max height of the level?). I have some code that changes the vertical offset ratio of the texture based on that value but it only works for about half the textures. It's not a major problem and I'm just missing something obvious but it's annoying to see things out of place. Regardless I've made some progress in getting out a big dump of game strings (including logs) so when I start implementing objects in a few weeks I'll have a handy road map for knowing exactly what I'm looking at.

I've also set up a github repository for my code at https://github.com/hankmorgan/UnderworldExporter
I've also included maps - level 1 of Underworld and Hospital level of shock on that site along with the assets needed to load them. I've only tested using DarkMod's Dark Radiant editor so no guarantees it will work with Doom3's tools. Just copy all the files in the sample maps folder to your installation. In game open a console and type dmap [mapname] and once that has finished processing type map [mapname] to load the level or just open them in Radiant just to look at them.
Acknowledged by: Briareos H
66472fa94d9c3
SalkQuote
Sorry I've missed this project before.

Very promising and extremely interesting! Thanks for sharing, hank morgan!

Legal stuff

Privacy Policy & Terms of Service Contact