Creating Virtual Worlds
Prependix A - What you need for the examplesSome technical background as well as basic explanations follow. You can skip this and read it later on, when you want to try the examples or don't understand what I'm talking about. This is not just an idea, or a proof of concept. I have already implemented this and tried it. Although I haven't had the time to make an entire level, and there is still much work left, it is basically proven to be usable ;) The things I will discuss apply more to indoor design of single or multiplayer maps, although it could be adapted for outdoor design. Also it applies to the Thief Universum, but other engines are (mostly) more simple, so you can easily adapt it. My project CoW supports what I want to talk about. Screenshots, examples etc will be interspersed in the text. Currently I can only support Thief and Thief Gold. Thief II will be supported as soon as it and the editor are released. The editor for System Shock 2 will probably never be released, so I can't support it. If you want to try the examples, you will need a copy of Thief or Thief Gold. So grab it now! The engine I use as a basis (Dark Engine from Looking Glass Studios) works with brushes, but my method can easily adapted to work with polygon/vertice based enignes. The Dark Engine uses a method called CSG, where you shape your world from a vast solid universe (which is, in this case, you guessed it, solid) by using air, solid and water brushes. You have cubes, wedges, pyramids and cylinders, and that's practically it. You also have objects you can (and must) place in the world. The terrain is static, so you have to use objects for interaction. Also there is a rather low limit of 1024 terrain polygons per scene, and objects are the only method to break that limit. Also the DarkEngine has some special rules. Lightning is crucial, you cannot place lights wherever you want, since the Thief Universum works only when there are enough shadows to hide in. So a lighting/shadowing design must be kept in mind when desinging the world. Also, since Thief is all about avoiding combat, you need to have enough locations where the player can hide or retreat. Often you have to redo the proprotions of a room, because it is too small or too big. Another complication are the sound rooms. A sound room has to be placed around each terrain, so that you hear footsteps, and the sound propagation can be calculated. Dark Engine features real sound, that travels accross doors, is muted when you close the door, doesn't pass walls, echos down hallways, etc., lets you exactly hear if the enemy is left, right or behind you. Did you get ever killed in half-Life because you could not determine whether that noise was above, below, behind or right under you? Then you know what fake sound propagation is :) Laying these sound rooms is tedious, and often leads to errors. In a world where the player relays off the sound to locate the enemy, sound room placement is crucial. CoW is written entirely in Perl, and since its tedious to fiddle around with Perl code for larger projects, a GUI is already in the works. There is a more or less strict line between the core and the vworld concept, so that it would be relatively easy to convert it to a different engine. All the code snippets are available as Perl scripts, which you can run and look at the output. Since the frame code is always the same, I wrote a quick wrapper, which just calls the single tutorial files. Use the wrapper with perl vtutorial.pl examplenumber[enter]and replace the example number with, well the example number given next to each code snippet. ;) Let's begin!
|