DARK FORCES EDITING DIRECTIONS Version 1.1 The DARK.GOB file consists of many files. Within the GOB are three files that make up a levels definition, (.inf, .o & .lev). There are 14 levels in the full game. DARK FORCES latest update: 03/28/95 CONTENTS: 1. AVAILABLE OBJECT CODES (.O FILES) 2. EXAMPLES OF SPRITES & FRAMES (.O FILES) 3. CHANGING / ADDING OBJECTS TO A LEVEL (.O FILES) 4. ADDING NECESSARY GRAPHICS NAMES TO ALLOWABLES AREA. (.O FILES) 5. CHANGING / MAKING LEVEL ARCHITECTURE (.LEV FILES) 1. AVAILABLE OBJECT CODES FOR DEMO: LOGIC / TYPE NAMES: GRAPHICS DATA FILES OBJECT: ENEMIES: TROOP STORMFIN.WAX Storm Trooper STORM1 STORMFIN.WAX Storm Trooper INT_DROID INTDROID.WAX Interogation Droid PROBE_DROID PROBE.WAX Probe Droid D_TROOP1 PHASE1.WAX Dark Trooper 1 D_TROOP2 PHASE2.WAX Dark Trooper 2 D_TROOP3 PHASE3X.WAX Dark Trooper 3 (mohc) BOBA_FETT BOBAFETT.WAX Boba Fett COMMANDO COMMANDO.WAX Commando I_OFFICER OFFCFIN.WAX Imperial Officer I_OFFICER1 (Code Key 1) OFFCFIN.WAX Imperial Officer I_OFFICER2 (Code Key 2) OFFCFIN.WAX Imperial Officer I_OFFICER3 (Code Key 3) OFFCFIN.WAX Imperial Officer I_OFFICER4 (Code Key 4) OFFCFIN.WAX Imperial Officer I_OFFICER5 (Code Key 5) OFFCFIN.WAX Imperial Officer I_OFFICER6 (Code Key 6) OFFCFIN.WAX Imperial Officer I_OFFICER7 (Code Key 7) OFFCFIN.WAX Imperial Officer I_OFFICER8 (Code Key 8) OFFCFIN.WAX Imperial Officer I_OFFICER9 (Code Key 9) OFFCFIN.WAX Imperial Officer I_OFFICERR (red key) OFFCFIN.WAX Imperial Officer I_OFFICERY (yellow key) OFFCFIN.WAX Imperial Officer I_OFFICERB (Blue key) OFFCFIN.WAX Imperial Officer KELL KELL.WAX Kell Dragon TURRET Laser Turret (3D) G_GUARD GAMGUARD.WAX Gamorean Guard REE_YEES REEYEES.WAX ReeYees BOSSK BOSSK.WAX Bossk SEWER1 SEWERBUG.WAX Trash Compactor Creature REMOTE REMOTE.WAX Remote Droid WEAPONS: AUTOGUN IAUTOGUN.FME Auto Gun CANNON ICANNON.FME Assault Cannon CONCUSSION ICONCUS.FME Concussion Rifle DETONATOR IDET.FME 1 Thermal Detonator DETONATORS IDETS.FME 5 Thermal Detonators FUSION IFUSION.FME Fusion Cutter MINE IMINE.FME 1 Claymore Mine MINES IMINES.FME 5 Claymore Mines MORTAR IMORTAR.FME Mortar Gun RIFLE IST-GUNU.FME Blaster Rifle IST-GUNI.FME Blaster Rifle AMMO: MISSILE IMSL.FME 1 Missile MISSILES IMSLS.FME 5 Missiles PLASMA IPLAZMA.FME 10 Plasma cartriges POWER IPOWER.FME 10 power cells SHELL ISHELL.FME 1 Mortar Shell SHELLS ISHELLS.FME 5 Mortar Shells SUPERCHARGE ICHARGE.FME Weapon Supercharge ENERGY IENERGY.FME 15 Energy Units OBJECTS: SHIELD (ANIM) IARMOR.WAX 20 Shield Units INVINCIBLE (ANIM) IINVINC.WAX Invincibility REVIVE (ANIM) IREVIVE.WAX Revive LIFE (ANIM) ILIFE.WAX Extra Life MEDKIT IMEDKIT.FME Medkit PILE IPILE.FME Pile of Gear BATTERY IBATTERY.FME 1 Battery Cell CLEATS ICLEATS.FME Ice Cleats GOGGLES IGOGGLES.FME Infrared Goggles MASK IMASK.FME Gas Mask RED IKEYR.FME Red Key YELLOW IKEYY.FME Yellow Key BLUE IKEYB.FME Blue Key MISSION COMPLETION OBJECTS: DT_WEAPON Dark Trooper Weapon D_CODE DET_CODE.FME Detention Block Code I_CODE Imperial Code NAVA (ANIM) INAVA.WAX Nava Card PHRIK IPHRIK.WAX Phrik Metal PLANS (ANIM) IDPLANS.WAX Death Star Plans **If it has an ANIM extension it is supposed to have a line added; LOGIC: ANIM There are many more codes in the full game not yet added to the above list. 2. EXAMPLES OF SPRITES & FRAMES: Every object has a class determined by whether it is a sprite, frame or 3d object. All sprites have a .WAX graphics extention and all Frames have a .FME extention. The data number is determined by counting down in the allowables are starting with 0 (this is explained latter). Please read the area for adding objects to a level, it explains changes you will need to know . This is an example for a sprite object that is animated, this would apply to the Death Star Plans (Correction necessary in demo), Invincible, Shield, Revive, & life (notice the type is LOGIC). CLASS: SPRITE DATA: 3 X: 228.79 Y: -20.00 Z: 343.90 PCH: 0.00 YAW: 90.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: ITEM SHIELD LOGIC: ANIM SEQEND This is an example of a frame object. (Note the type is LOGIC): CLASS: FRAME DATA: 9 X: 94.84 Y: -21.81 Z: 393.36 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: AUTOGUN SEQEND This is an example of a sprite character (Note the type is TYPE). CLASS: SPRITE DATA: 4 X: 272.22 Y: 20.00 Z: 247.35 PCH: 0.00 YAW: 274.96 ROL: 0.00 DIFF: 1 SEQ TYPE: TROOP SEQEND ** Actually LOGIC can be used instead of type with no effect but that is the way it is set up for many chacters in the demo. SEQ & SEQEND must be present, it is the start and end of any sequence of information for an object. 3. CHANGING/ADDING OBJECTS TO A LEVEL: Using the UNGOB editor extract the DARK.GOB file. To make any changes to a level there are only three files in this area that you need to work with (.o, .inf & .lev). The .O file is for all characters and objects in a level, .INF is an information file for elevators, doors etc. (I will explain that information latter), and .LEV is a text version of the level architecture. You can insert any of these in your harddrive startup directory and it will load that file up before it goes to your GOB file. All that you need to do to change any object within DARK FORCES is to Associate the .O File with any text editor or Windows Write. If you add any objects you will need to go to the very top of this area where it says OBJECTS 216 and change it by whatever number of objects you add. For the example change below I had to change it to OBJECTS 217 because the Gamorean Guards did not replace anything. If you do not make this change it will drop objects starting from the bottom (ie. I noticed that one mine had disappeared). If you want to change the start position of an object you will need to understand X,Y,Z coordinate system, The X & Z are the floor plane where the Y number is for height (ie. -42.00 is the roof, -20.00 is the second floor and 20.00 is the basement). If you have any difficulty with this just use some grid paper and lay out a X & Z diagram for each level. YAW and ROL are start possition angles. DIFF works with difficulty levels (A #0 difficulty level will place the object on all settings) . The below example gives regenerating Reeyees, Gamorean Guards, Probe Droids, Stormtroopers, Commandos, Interogation Droids and Officers, everyone but the remote. /* name: Generator */ CLASS: SPRITE DATA: 7 X: 338.11 Y: 6.00 Z: 123.39 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR REE_YEES DELAY: 0 MIN_DIST: 60 NUM_TERMINATE: -1 MASTER: OFF MAX_ALIVE: 3 INTERVAL: 15 MAX_DIST: 400 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 10 X: 335.00 Y: 6.00 Z: 120.00 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR G_GUARD DELAY: 60 MIN_DIST: 60 NUM_TERMINATE: -1 MASTER: OFF MAX_ALIVE: 2 INTERVAL: 30 MAX_DIST: 400 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 4 X: 204.50 Y: 0.00 Z: 410.20 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR STORM1 DELAY: 300 MAX_ALIVE: 8 MIN_DIST: 60 MAX_DIST: 200 NUM_TERMINATE: -1 MASTER: OFF INTERVAL: 15 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 4 X: 183.50 Y: 4.00 Z: 205.54 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR STORM1 INTERVAL: 10 MAX_ALIVE: 8 MIN_DIST: 60 MAX_DIST: 200 NUM_TERMINATE: -1 MASTER: OFF DELAY: 60 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 1 X: 157.84 Y: -20.00 Z: 294.17 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR COMMANDO MAX_ALIVE: 6 MIN_DIST: 60 MAX_DIST: 200 NUM_TERMINATE: -1 MASTER: OFF DELAY: 600 INTERVAL: 30 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 0 X: 292.58 Y: -20.00 Z: 293.58 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR I_OFFICER INTERVAL: 30 MIN_DIST: 60 MAX_DIST: 200 NUM_TERMINATE: -1 MASTER: OFF DELAY: 0 MAX_ALIVE: 4 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 4 X: 245.33 Y: -0.08 Z: 332.07 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR STORM1 MAX_ALIVE: 8 INTERVAL: 20 MIN_DIST: 60 NUM_TERMINATE: -1 MASTER: OFF DELAY: 600 MAX_DIST: 300 SEQEND /* name: Generator */ CLASS: SPRITE DATA: 8 X: 246.00 Y: -5.00 Z: 333.00 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR INT_DROID DELAY: 0 INTERVAL: 30 MAX_ALIVE: 2 MIN_DIST: 60 NUM_TERMINATE: -1 MASTER: OFF MAX_DIST: 300 SEQEND CLASS: SPRITE DATA: 11 X: 538.20 Y: 5.00 Z: 196.39 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: LIFE LOGIC: ANIM SEQEND CLASS: FRAME DATA: 11 X: 502.45 Y: 5.00 Z: 232.22 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: SUPERCHARGE SEQEND /* name: Generator */ CLASS: SPRITE DATA: 13 X: 401.23 Y: -40.00 Z: 198.48 PCH: 0.00 YAW: 0.00 ROL: 0.00 DIFF: 0 SEQ LOGIC: GENERATOR PROBE_DROID DELAY: 0 MIN_DIST: 60 MAX_DIST: 200 NUM_TERMINATE: -1 MASTER: OFF INTERVAL: 30 MAX_ALIVE: 4 SEQEND 4. ADDING NECESSARY GRAPHICS NAMES TO ALLOWABLES AREA: I changed my allowable Sprites & Frames area to match the modified and added a concussion rifle, assault cannon, missiles, etc. If you do not change this area the graphic for the weapon or sprite will not appear. You will need to change the SPRS or FMES number to math the number of entrys you have. When placing an object now count down in this area starting with 0 and place that number in the DATA: area of the OBJECTS information(ie. REEYEES would be 7, not 8 as if you started with 1). For allowable codes see what is in section 1. original: SPRS 14 SPR: OFFCFIN.WAX SPR: COMMANDO.WAX SPR: IDPLANS.WAX SPR: IARMOR.WAX SPR: STORMFIN.WAX SPR: ROCK.WAX SPR: REDLIT.WAX SPR: REEYEES.WAX SPR: INTDROID.WAX SPR: REMOTE.WAX SPR: GAMGUARD.WAX SPR: ILIFE.WAX SPR: IREVIVE.WAX SPR: PROBE.WAX FMES 14 FME: IENERGY.FME FME: IGOGGLES.FME FME: IMINE.FME FME: IFUSION.FME FME: IMORTAR.FME FME: IDETS.FME FME: IST-GUNU.FME FME: IDET.FME FME: IMEDKIT.FME FME: IAUTOGUN.FME FME: IPOWER.FME FME: ICHARGE.FME FME: IBATTERY.FME FME: ISHELL.FME modified: SPRS 15 SPR: OFFCFIN.WAX SPR: COMMANDO.WAX SPR: IDPLANS.WAX SPR: IARMOR.WAX SPR: STORMFIN.WAX SPR: ROCK.WAX SPR: REDLIT.WAX SPR: REEYEES.WAX SPR: INTDROID.WAX SPR: REMOTE.WAX SPR: GAMGUARD.WAX SPR: ILIFE.WAX SPR: IREVIVE.WAX SPR: PROBE.WAX SPR: IINVINC.WAX FMES 24 FME: IENERGY.FME FME: IGOGGLES.FME FME: IMINE.FME FME: IFUSION.FME FME: IMORTAR.FME FME: IDETS.FME FME: IST-GUNU.FME FME: IDET.FME FME: IMEDKIT.FME FME: IAUTOGUN.FME FME: IPOWER.FME FME: ICHARGE.FME FME: IBATTERY.FME FME: ISHELL.FME FME: ICANNON.FME FME: ICONCUS.FME FME: ICLEATS.FME FME: IPLAZMA.FME FME: IMASK.FME FME: IMINES.FME FME: IMSL.FME FME: IMSLS.FME FME: IPILE.FME FME: ISHELLS.FME 5. CHANGING / MAKING LEVEL ARCHITECTURE (.LEV FILES) Example of .levfile: LEV 2.1 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # This file has been converted from AutoCAD file 'SECBASE'. # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LEVELNAME SECBASE PALETTE secbase.PAL MUSIC AVENGE.GMD PARALLAX 1024.0000 1024.0000 #`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~ # T e x t u r e T a b l e # #`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~ # Lowercase textures are from the 'Extra' list. TEXTURES 95 TEXTURE: HOLOGRAM.BM # 0 TEXTURE: ICFUEL1.BM # 1 TEXTURE: IDDOOR1.BM # 2 ........ The pallette may be changed as well as the music in the above area. If you add textures or remove textures you must change the "TEXTURES #" to reflect the numbers of textures in the allowables list. The number beside the texture name is the number of the texture to be used in the sector. NUMSECTORS 222 To add sectors you must find and change this number near the top of the level file to reflect the number of sectors you have. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # S e c t o r D e f i n i t i o n # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SECTOR 0 #ACAD: 978520 **Sector number (0-1-2-3...) ACAD # not necessary. NAME **Name necessary if door, etc. for .ini file. AMBIENT 20 **Lighting number, how bright/dark aera will be. FLOOR TEXTURE 15 -0.38 -0.06 2 **Floor Texture # from allowables list and its adjust. FLOOR ALTITUDE 0.00 **Self explanitory (Y coordinate) CEILING TEXTURE 31 0.00 0.00 2 **Ceiling texture # and adjustment. CEILING ALTITUDE -12.00 **Self explanitory SECOND ALTITUDE 0.00 FLAGS 0 0 0 LAYER 1 **Floor layer. VERTICES 00004 **Total number of vertices... X: 252.00 Z: 224.00 # 0 Points at which a texture, X: 236.00 Z: 224.00 # 1 adjoining sector or direction X: 236.00 Z: 228.00 # 2 change may occur. Plus vertices #. X: 252.00 Z: 228.00 # 3 WALLS 4 #ACAD: 978525 978524 978523 978522 WALL LEFT: 0 RIGHT: 1 MID: 31 0.00 0.00 0 TOP: 31 0.00 0.00 0 BOT: 31 0.00 0.00 0 SIGN: -1 0.00 0.00 ADJOIN: 57 MIRROR: 0 WALK: 57 FLAGS: 0 0 0 LIGHT: 5 WALL LEFT: 1 RIGHT: 2 MID: 31 0.00 -0.06 0 TOP: 38 0.00 0.00 0 BOT: 38 0.00 0.00 0 SIGN: -1 2472.27 2089.79 ADJOIN: -1 MIRROR: -1 WALK: -1 FLAGS: 0 0 0 LIGHT: 65534 WALL LEFT: 2 RIGHT: 3 MID: 38 0.00 0.00 0 TOP: 8 0.00 2.31 0 BOT: 38 0.00 0.00 0 SIGN: -1 -2945.47 11.02 ADJOIN: 1 MIRROR: 0 WALK: 1 FLAGS: 0 0 0 LIGHT: 0 WALL LEFT: 3 RIGHT: 0 MID: 31 0.00 0.00 0 TOP: 38 0.00 0.00 0 BOT: 38 0.00 0.00 0 SIGN: -1 2688.04 2337.53 ADJOIN: -1 MIRROR: -1 WALK: -1 FLAGS: 0 0 0 LIGHT: 0 Explanation: WALLS # must be number of walls in a sector.. will match number of sectors usually, but not always if you have a lot of free standing areas. WALL LEFT: number of vertices for left point of wall . RIGHT: number for final vertices/point of wall. MID: Texture of wall or at middle of wall if wall is cut by window, etc. it will be texture at center in the case of a nitch. Plus its x & z coordinates adjustment to fit it into wall properly. the first number is the left/right adjustment, the second number is up/down adjustment. TOP: If wall is cut it will be the texture at the top, plus its adjustment numbers. BOT: if wall is cut it will be the texture at the bottom, plus its adjustments. SIGN: as of yet unknown.. ADJOIN: wall sectors can be joined together, this is the sector number that this wall adjoins to. ie they have the same x & z numbered vertices and follow same line, basically they overlap. MIRROR: the sequence number of the adjoining wall, ie. if the adjoining wall of the other sector is wall left: 2 right: 3 the mirror number is 2 for this wall sector. WALK: if you want to be able to go from an adjoining sector into another this must be the number of the adjoining sector , if it is -1 it will be like a glass wall, you can see in but not go in. FLAGS: as of yet unknown. LIGHT: lighting adjustment. All sectors must close! One common problem I have run into is laying out two adjoining sectors and getting the mirror number correctly but the wall ends up looking like a wall of mirrors. When I reversed the direction in which vertices are joined it corrected the problem. If obviously matters the direction you make walls go. E-mail me If you figure out any other bugs or feel I have left any important information out. If you have any problems or question E-Mail me at DSielke@AOL.com * Explanation of the .inf file coming soon!!