1. Introduction
    2.1 Controls list
2. Simple rooms
    2.1 Texturing
    2.2 Respawn points
    2.3 Adding lights
           2.3.1. Adding coronas
           2.3.2. Projected shadows
           2.3.3. Spotlight ray
    2.4 Compilation overview
    2.5 Cells and Portals
    2.6 Common compilation errors
           2.6.1 Multiple cells
           2.6.2 Wrong one cell entities
           2.6.3 Same cell on both sides
    2.7 Creating doors
           2.7.1 Sliding door
           2.7.2 Rotating door
           2.7.3 Using doors and portals
           2.7.4 Possible problems
    2.8 Rotating and moving objects
    2.9 Triggers - radial_trigger
           2.9.1 Box_trigger
           2.9.2 Key_trigger
3. Basic scripting
4. Creating multiplayer map
    4.1 Deathmatch and Team Deathmatch
           4.1.1 Adding weapons, ammo...
    4.2 Capture The Flag
    4.3 ShockTroops
           4.3.1 Goals
5. Working with Materials /new
    5.1 Understanding Materials in WorldStudio /new
    5.2 Creating new Material /new
    5.3 Advanced Materials /new
           5.3.1 Breakable glass /new
           5.3.2 Water /new
    5.4 Decals /new
    5.5 Creating sky /new
6. Outdoor enviroment /new
    6.1 Creating landscape terrain /new
    6.2 Fog /new
...
9. Loading screen /new

version 1.11
update: 20.01.2004
actual version for Download soon!
  • Click WS icon sample to see images
  • Player size is 128x64x64 points
  • Red cross is showing us the position of the camera
  • Save often
  • Incremental save shortcut 'CTRL+SHIFT+S'
  • 1. Introduction to the top

    Here we go, let's start creating our first map. Start Worldstudio. You will get standard 4 views. Perspective, Top, Left and Front. Along the top you'll see 2 rows of buttons sample. Now take a closer look on 4 views. Standard grid is set to 8 points. Red cross is showing us the position of the camera in the Perspective view. Active view is marked with white border. You don't have to click to activate particular view, just move your mouse over. Player size is 128x64x64 points. And don't forget to save your progress often. It's recommended to use Incremental save (CTRL+SHIFT+S). You can turn on backup-save before compilation feature in Settings submenu.

     

       1.1 Controls list to the top

    Selecting
    CTRL+1 Select all
    Shift+1 Hide selected
    Ctrl+2 Invert selection
    Shift+2 Hide unselected
    Shift+3 Unhide all
    Alt+1 Show/hide brushes
    Alt+2 Show/hide entities
    Alt+3 Show/hide portals
    Alt+4 Show/hide occluder
    Alt+5 Show/hide entites icons
    Alt+7 Show/hide links
    Alt+8 Show/hide particle entities
    Alt+9 Show/hide visibility_eye entities
    Alt+0 Show/hide point_light and corona entities
    Caps lock Selection lock
    Shift+TAB Center to selection
    Windows 
    B Brush properties
    E Entity list
    P Prefabricates list
    T Materials window
    F8 Preferences window
    Editing 
    Shift+Ctrl +B Clone
    Alt+ C Collapse
    Backspace Delete selection
    Alt+N Flip Normals
    K Cordon bounds
    V Toggle Vertex Mode
    R Rotation mode
    S Sheer mode
    [ Rotate counterclockwise
    ] Rotate clockwise
    Alt+H Flip horizontaly
    Alt+V Flip verticaly
    Linking & Grouping
    Alt+E Link (from first selected to all others)
    Shift+Alt+E Chain link (in order of selection)
    CTRL+Alt+E Inverse link
    Ctrl+E Unlink
    G Create group out of selection
    Alt+G Ungroup selected group
    Textures & Materials
    I Pick Material
    L Texture Lock
    Insert+Numpad 5 Open Material in Notepad (selected with Pick Tool or in Material Browser)
    CTRL+Numpad 5 Toggle face selection mask
    UV Coordinates
    Insert Fit texture
    Numpad 2 Shift texture down
    Numpad 8 Shift texture up
    Numpad 4 Shift texture left
    Numpad 6 Shift texture right
    Numpad 1

    V Scale texture -

    Numpad 3 V Scale texture+
    Numpad 7 U Scale texture -
    Numpad 9

    U Scale texture+

    Numpad+ Rotate texture clockwise
    Numpad - Rotate texture counterclockwise
    Insert+Numpad+ Rotate texture clockwise by 90 degrees
    Insert+Numpad - Rotate texture counterclockwise by 90 degrees
    Numpad /

    U Flip texture

    Numpad *

    V Flip texture

    Numpad Del Fit texture
    Object Rotation
    Q Toggle Orbit Camera (rotate around selected object)
    Up arrow Rotate up (while Orbit Camera is on)
    Down arrow

    Rotate down (while Orbit Camera is on)

    Left arrow Rotate left (while Orbit Camera is on)
    Right arrow Rotate right (while Orbit Camera is on)
    Viewports and Details
    Alt+O Center world (all views)
    O Center world (current view)
    CTRL+W Cycle render modes in Perspective view
    W Maximize current view
    F1 Maximize Perspective view
    F2 Maximize Top view
    F3 Maximize Left view
    F4 Maximize Front view
    CTRL + Alt + LMB Move render camera into click position
    F5 Increase detail of curves
    F6 Decrease detail of curves
    Compiling 
    F7 Full compilation
    CTRL+F7 Update entities parameters
    CTRL+Shift+F7 Update parameters and positions of entities and parameters of brushes
    Files 
    CTRL+N New project
    CTRL+O Open project
    CTRL+S Save project
    CTRL+Shift+S Save incremental
    SELECTING:
  • 'Shift+LMB' to select brush
  • 'Shift+CTRL+LMB' to multiselect brushes
  • 'Shift+RMB' to select entity
  • 'CTRL+Shift+RMB' to multiselect entities of same kind
  • 'CTRL+Alt+Shift+RMB 'multiselect all entities
  • 'CTRL+Alt+Shift+LMB 'multiselect everything
  • 'Q' to center camera on selected Brush or inside of entity (Orbital Camera)
  • 'Space' to duplicate selection
  • 2. Simple rooms to the top

    Ok, now we will create simple room. Select Box button sample and in the Top view and drag single brush. While brush is still selected, you can adjust its thickness or its size sample. Resizing is very simple, just click LMB outside of a brush or selection and drag your mouse pointer in desired direction. Now focus on Perspective view. Press 'Q' to center camera on brush you have created. This is called Orbital camera. Now you can move the camera around the brush or selection. You can notice border marking active Perspective view is now green. You can still change the distance of camera from selected brush with mouse scroll. Press 'Q' again to turn off Orbital camera.
    Let's create walls same way we created first brush sample. Press 'Esc' to cancel selection if any and 'Shift+LMB' to select our first brush, floor sample. Now Press 'Space' to duplicate selection and drag new brush on top of our simple room sample. We have now closed room, but with no door. Let's create another room. Press 'Shift+drag LMB' to select everything except one wall sample. Now press 'Space' and drag duplicated room to the opposite of previously unselected wall sample. Move your camera inside of room and select brush which is dividing our two rooms. Use resizing and duplicating method to create space for future door sample.

  • 'CTRL+LMB' to select a face
  • 'CTRL+RMB' to apply material from selected face
  • 'CTRL+doubleclick LMB' to apply material selected in Material Browser
  • Use numpad arrows to shift, rotate or scroll texture on selected face
  •    2.1 Texturing to the top

    Some basic rules about texturing. You don't have to texture every surface in Worldstudio. Not textured brushes or faces will be excluded from map geometry. Let's add some textures. Chaser and Worldstudio is using Materials, which are defining all textures parameters like glossiness or breakable glass.
    Press 'CTRL+LMB' to pick one of the wall faces. Now press 'T' to bring up Material Browser. Select a material, in this case we will use lin_red_concrete in directory lin_wall sample. Now you have two options how to apply selected material to a selected face. You can press APPLY button in the bottom of Material Browser or double-click with LMB on selected face to apply material. In Material Browser set Scale to '2.0' in both axes. You can use Numpad arrows keys to Shift or Rotate Material\Texture on selected face. Now it's very easy to apply material to other wall faces. While first now textured face is selected, use 'CTRL+RMB' on other faces to apply material with same parameters (like Scale, Rotation and Shift). Repeat the procedure tu apply materials on the floor (lin_floor\lin_panel01) and the ceiling (lin_ceil\lin_ceil2) sample.

  • There can be more than one single_player respawn point, use 'cht_next_rp' cheat to switch between them in the game 
  •    2.2 Respawn points to the top

    Let's add respawn point. Bring up Entity list, find respawn_points \ single_player and add it into map. You can set initial weapon of player, class and model_scripts is defining player's appearance, orientation sets viewing direction of player after respawning in the map. Optionaly you can set player health (energy) and armor. Now map is ready to go.

  • First ambient_light should be named 'WORLD'
  • There can be more ambient_lights, one in every cell
  • careful with lights and ambient intensity, to many lights will high intensity will cause unwanted shiny areas
  •    2.3 Adding lights to the top

    We have now two rooms connected but pretty dark. Let's add some lights. Make sure you don't have any of brushes selected (red). Press 'E' to bring up Entity List. Select lights\ambient_light. Set intensity parameter is set to 0.2 and change its name to 'WORLD'. Notice, setting color of ambient_light will affect global lightning. To add selected entity into the world, press 'CTRL+RMB in one of 2D views. In this case position of ambient_light is not important. Press 'Esc' to cancel the selection.
    Now select lights\point_light in Entity list. From all of available parameters for us are important only intensity and range. Set intensity to 0.8 and range to 800. Add point_light to the world sample. While point_light entity is still selected, press 'Space' to duplicate the light and move it into second room. Press 'E' to change parameters of light. Set range to 900, intensity to 0.7 and color to '128, 0, 0, 255'. Press 'F8' to bring up map preferences and set Lightning Method to Raytracing and Lightmap Detail to High sample . You can press 'F7' to compile the map (or click ). Now you can see how is map lit sample. Cycle through rendering modes in Perspective view with 'CTRL+W' (textured w\ lights, wireframe, textured w\o lights).

  • corona linked with point_light inherits point_light's color
  •        2.3.1 Adding coronas to the top

    So we have some lit rooms, but no real visible light sources. Use Prefab sample (light_body in Tutorial directory) which will represent light source itself. Place it above the entrance to the second room. Now add new point_light entity (intensity = 0.8; color = 255, 255, 255, 255; range = 200), put it very near to the brush representing the light. Now duplicate point_light and place it in the center of light brush. While still selected second light you just duplicated, bring up Entity list window and select lights / corona. Worldstudio will ask if you want to convert selected entity into corona. Yes, you want. Now link corona to the point_light. Now corona gets the same color as point_light has and ignores its own color parameter. This is important if you want to create dynamic light (when you turn the light off, corona should be off too...). Now about coronas parameters. Set intensity to 0.9 (how bright the corona will be), min_size to 32 and max_size to 48 (size of the corona when you are near to it or far from it), start_range to 0, end_range to 8192, and most important, choose the texture of the corona (\common\corona-tech.tga). We need to link light brush with point_light entity too. Texture used on the light brush will now be colored with same color as light emits. If you want green light, it's not necessary to change the material, it will take the color from point_light color setting.
    Only last thing remains, to set brush parameters. Select brush representing the light and press 'B'. Mark parameter Corona No Clip, so the corona is visible even when it's inside the brush. Mark No Shadows parameter and optionaly See Through parameter. This is rather important, eyes cannot see the corona entity inside of the brush (or any other entity hidden behind or inside of some obstacle. So you can set brush to be like transparent, eye can see behind such brush or you can link particular entity to eye in the cell it belongs to (in this case corona entity) This is rather recomended than making See through brushes (it will drag out compilation). Be careful, avoid this parameter to be set within brushes which separates cells, eg. walls or floor and ceiling and so. You will get Multiple cells error in most cases.
    Select whole light including point_light and corona entities, duplicate them and place above another passage to the third room. Compile the map and see how the lights look. Can you see the difference? Second light has no corona, because we forgot to link the corona with visibility_eye in this cell sample.

  • It's recommended to link spotlight with target_position
  •        2.3.2 Projected shadows to the top

    It's very easy ho have some projected shadows to add some atmosphear. Add another point_light entity near the ceiling, and add helpers \ target_position entity directly below, near to the floor. 'Alt+E' to link point_light -> target_position. Now let's change common point_light into spotlight. Set parameter spotlight_enable = TRUE, surprisingly. You can see the change in any of views. Point_light has no range circle but a conus, so you can see how big the spot is and where it will be. Now choose spotlight_texture with double-click and select lin_projected\lin_ventilation01.tga. This is texture of the shadow of a ventilator, ventilators mostly rotates, so set spotlight_rotation = 60.

     

           2.3.3 Spotlight Ray to the top

    To create ray of light you have to use entity spotlight_ray in lights dir. Just place it near brush representing light, or better inside of it a little (in that case, don't to link it with visibility_eye, else it will not appear in the map, eyes wouldn't see it). Add another target_position and link spotlight_ray with that target_position. This link shows us direction of spotlight ray and its length. Only last thing remains, setting spotlight_ray parameters. Chose the texture, which is RGB (no alpha channel, see lin_lights/lin_beam01.tga). Min_intensity is the brightness of ray when you are at start_range or closer and Max_intensity is when you are at end_range or beyond. So with combination of this four parameters you can have a spotlight ray which will fade out as you will approach and fade in as you will move away from it. Color setting has same rule as corona, if spotlight_ray is linked with point_light, it will inherit its color.

  • 'F7' is full compilation
  • 'CTRL+F7' only updates entities parameter (with exceptions)
  • 'CTRL+Shift+F7' updates entities parameters AND positions and brush parameters
  • 'F10' starts map in Chaser
  •    2.4 Compilation overview to the top

    There are 3 methods of compilation in Worldstudio. By pressing 'F7' key you will start full compilation of the world\map. That means it will compile the geometry of the map, entities positions and parameters and at last the lights and shadows. But not always it's necessary to compile whole map just because we have changed some parameter of some entity or brush. To update existing entities parameters, you can use update compilation by pressing 'CTRL+F7'. Third method is used when you want to update entities parameters and POSITIONS or you have added new entities to the world. Press 'CTRL+SHIFT+F7'. Both methods exludes changes in parameters of lights and ambient light like color, intensity or range and any changes concerning cells and eyes entities. We'll talk about cells and eyes later.
    Let's update single_player respawn_point into world. Press 'CTRL+SHIFT+F7'. Close compilation summary window and run the game by pressing 'F10'.

  • Cell is defined by at least one or by a group of linked visibility_eyes entities.
  • Portal is only way where player or bot can pass into another cell.
  • Portal has no thickness, it's just a plane in the middle of a portal brush you see in worldstudio editor, keep that in mind when creating portals
  •    2.5 Cells and Portals to the top

    Cloak NT engine is using portal technology. That means world is divided into cells. Every cell is defined by eyes entities in it and cell borders are defined with brushes and portals. Portals are only way where player\s or bot\s can pass to another cell. Portals have no thickness, it's just a plane in the middle of a portal brush you see in worldstudio editor, keep that in mind when creating them. See screenshot sample. Try to avoid creating portals shaped as box. There can be two or more portals in one level touching each other. See screenshot sample.
    First, we will add some boxes into second room. Create one with box tool sample with sizes of all sides 64 points. Apply the material lin_metal\lin_plech09 on one side of the box and than press 'Insert' to fit the material to size of the box. Apply to other 5 sides of the box as you did before when texturing walls, use 'Insert' if material is shifted. Duplicate textured box few times and place them as in the screenshot sample.
    Compile the world with 'F7' and run the game. Switch to Wireframe mode by pressing 'F6' and observe around. You are able to see every brush in the map, even boxes behind the wall in the second room of course.
    Here comes important part. We will create cells in our map. Select Portal button sample in main button row. Drag a portal same way you have created other brushes, place it exactly at the empty space in the wall, same thickness as the wall is sample. Make sure it contacts every side of the passage to another room. Very important rule is, there can NOT exist a portal without eyes on both his sides. Let's add eyes entities. Bring up Entity list by pressing 'E' and select helpers\visibility_eye. Place it in the first room with 'CTRL+RMB', make sure it's inside the room, not inside of any brush or portal sample. Now duplicate the visibility_eye entity and move it to the second room. Both sides of the portal now has defined its cells sample.
    Now in Preferences window mark World Subdivision. Now compile the world with 'F7'. You can notice summary after the compilation is a bit more filled with information. For us is now important line with '2 Cell(s) created'. Run the game, Notice while you're in first room, boxes from second room disappears. This is called clipping, Cloak NT engine is clipping out the geometry you really can't see at the moment. Using this feature you can create really complex enviroments.
    Now we will add some obstacle for the visibility_eye. Big massive pillar is good. Create one in the second room so it is between the visibility_eye and the boxes sample. Compile the map. You may notice all boxes (if you done everything exactly) are not in the room. That's because visibility_eye cannot see (trace) them through the pillar during compilation. Select particular eye and press 'Q' while Perspective view is active. Camera jumps into the selected entity and you can observe around with LMB to see what is (or not) visible for selected eye. To make boxes visible in this cell, we have to add another visibility eye into this cell. Add another eye entity into this room so it can see the boxes and link both eyes within this room by pressing 'ALT+E'. To unlink selected entities use shortcut 'CTRL+E'. Remember, cell is defined by its eye\group of linked visibility_eyes, every other unlinked visibility_eye creates another cell. There can not exist two cells on one side of the portal. If you forget to link two or more visibility_eyes on one side of the portal, you will get compilation error.

     

       2.6 Common compilation errors to the top

           2.6.1 Multiple cells

    Add some more boxes into the first room and also add another visibility_eye sample. Now we have cell with two unlinked eye. Try to compile the map by pressing 'F7'. We will get several compilation errors. Problem solver will appear, very helpfull tool (Alt+P). Take a look at the screenshot sample (entity and brush ID numbers may differ) and let's solve problems.
    In first line we have common Multiple Cells error (marked with M). Problem solver shows us, which of these multiple cells are on which side of a particular portal. List of all cells on both sides of portal follows. You can select every entity or portal with double-click in the list in Problem solver.

     

           2.6.2 Wrong one cell entities to the top

    Another common problem is, when Worldstudio cannot determine to which cell certain entities belongs. In this case sample it cannot match single_player reswpawn point into the particular cell. Solution is to link single_player entity to appropriate cell, if everything is in order, or in this case, link visibility_eyes into one cell. Do so now. Both problems are solved now. (Sometimes it will be necessary to link some entities with visibility_eyes, "lebo nepresnosti vo vypoctoch").

     

           2.6.3 Same cell on both sides to the top

    Create another room with door next to first one. Add two eyes in it, some light and if you want few boxes. Link those new eyes with other two already linked in first room, so it create a linked chain sample. There are two options how to link multiple eyes. Chain link (Shift+Alt+E) or All-to-One link (Alt+E). There is a rule, every eye / entity will be linked to the first one selected. Choose your method, both works same way.
    This cells now consist of two rooms. Now let's change this two rooms into separate cells. Add a portal into door space like before. Try to compile the map (F7). You will get Same cell on both sides error sample. Solution is easy, Problem solver will warn you, so you should find easily which portal and which eyes / cells causes this. Just unlink crossing links and that's it sample.







  • Every entity (and brush) related to basic_door (target_position, trigger and pivot) have to be linked in direction from basic_door entity
  •    2.7 Creating doors to the top

           2.7.1 Sliding doors

    Let's create some doors. Create brushes which will represent doors itself. Or use sample (door in Tutorial directory). Now add entity doors / basic_door. You can set open_speed and close_speed to 100 (points per second). Create another entity (helpers / target_position) and place them as in the screenshot sample. Link basic_door with target_position. Direction of the link is important, or door won't open. Link must point from door entity to position entity. With this link we have set how far door will move when activated and in which direction. Try to place target_position in different place and door will move in that direction as the link shows. Now select basic_door entity again and than brushes representing door (all of them). Link them same way (from basic_door entity to brushes).
    Now we need trigger which will activate door. Place near by triggers / radial_trigger (not very high, so it can be reachable by player, recommended is 64 points high above the floor) and link basic_door entity onto it. Still follow the rule, every entity (and brush) related to basic_door (target_position, trigger and pivot) have to be linked in direction from basic_door entity.
    Now set up radial_trigger. You can see this entity has similar circle around it as point_lights have. This is showing us range where radial_trigger can be activated, set it to 128. Next important parameter is activate_count, by default set to 1. This trigger can be activated only once. Set it to 0 (zero) for infinite activate count. Sometimes you may find yourself in situation you will need a trigger with very big activation range, but it will reach places behind the walls, or floors and ceilings (eg. next floor). To prevent this it you can set one_cell_trigger = TRUE. Anyways in this case it's ok, we need this trigger on both sides of door (in both cells). Compile the map and test the door.

     

           2.7.2 Rotating doors to the top

    Duplicate our recently created door including basic_door, target_position and radial_trigger entity and move them in the place of second pasage. In other words, rotating doors are basicly same as sliding doors, just with few changes. Let's do it.
    To create rotating doors we need to set axis of rotation. Move linked target_position entity exactly above basic_door enity. We still have sliding doors here, to change them into rotating doors you have to add new entity called Pivot (helpers directory). Create link basic_door -> pivot and place it next to the basic_door entity so link shows the zero position (closed) of the door. Now just move basic_door, target_position and pivot entities in the position like on this screenshot sample. In basic_door entity properties you can change open_angle (90 by default) and another important parameter, open_opposite. If this is set to TRUE, door will always open opposite the player. If set to FALSE, door will open in the direction of open_angle (eg. 90 or -90). Compile and test the map.

     

           2.7.3 Using doors and portals to the top

    This is very important. If you observe around in game in wireframe mode ('F6'), you will realize even door are closed, you can still see what's behind. You can prevent this if you link basic_door -> PORTAL. Cloak NT engine will from now cut out everything behind the door untill the player opens them. You can save some framerate with this method in some more complex maps. Compile the map and see how it works

     

           2.7.4 Possible problems to the top

    Quite common is a compilation error Wrong entities. Sometimes Worldstudio cannot determine to which cell particular entity belongs. Solution is easy, just link that entity to the visibility_eye in that cell.

    Other a bit bigger problem comes out with rotating doors. If door will open in direction so they cross the portal, some or all brushes of the door may dissapear (because they belong to the another cell, second cell behind the portal couldn't detect them because of portal.) (sample - door brushes are completely covered with portal, visibility_eyes in this cell cannot detect these brushes behind the portal). To solve this, select all brushes of door, bring up Brush Properties window ('B') and mark Always Visible.

     

       2.8 Rotating and moving objects to the top

    To create rotating objects is very easy. Select entity Rotation in Transform directory and place it somwhere in the map. Duplice one box and place it under Rotation entity and link them in direction from entity to box. Set parameters of rotation, speed = 60, angle = 360, loop_count = 0 for infinite rotation and important is to set is_active=TRUE of course. By default axis of rotations is vertical. If you want to change axis of rotation, you have to add target_position entity and link rotation entity with it. To change the direction of rotation, just set angle in negative numbers. Caution, if you will set angle = 90, but loop_count = 0, brush (or brusheswill fully rotate anyway, not only 90 degrees.

    To create moving object is a little bit more difficult. You have to create script, which will control moving of particular brushes, or even some entities. Let's create same simple example of moving script. Select some box, or duplicate one, name it for example 'box' and place in some place you want. Now we will use target_position again, very usefull entity indeed. Place it somewhere, to create the point where you want to move our box. Note, box will move to that exact point with its center. Name that target_position with name 'position1'.
    Now about the script. Add new radial_trigger, somewhere in the corner, so it can be reachable for player. While radial_trigger still selected, bring up Entity List. There is a parameter commands, now empty, double-click it. Script window will appear, with list of all Commands and Named objects in the map (in alphabetical order). Find command MOVE and double-click it. It will appear in main script window. In top row, above main window you can see command's syntax, very helpfull. In the row below there is what follows in order to complete command. Next we need to assign what object are we willing to move. Type box or double-click in Object names list. Same with destination. Last two parameters are speed and acceleration, both in points per second, let's set it at 100 both. Note, every parameter of a command is separated from other by space, so try to avoid names with spaces when naming objects or entities. You should end with script like this:

         MOVE box position1 100 100

    PreK, now commands parameter in entity properties is filled out with our script. Close Entity list and compile the map. Box should move, after activating the radial_trigger. Another option is to set this trigger to activate automatically, immediately after map is loaded. For this purpose there is parameter is_active (by default FALSE). Just set it TRUE, update entities parameters in the map by pressing 'CTRL+F7' and try it.

     

       2.9 Triggers to the top

    There are three types of triggers in Worldstudio/Chaser. Radial_trigger was actually described above, so we will continue with other two. Also very usefull is a parameter 'alternative_activation'. Set TRUE, if you want to occur some situation or action when trigger is activated not by player himself, but by some moving brush, (eg. when train passes some area, reaches a gate, which will open automatically). That brush or brushes just must have marked parameter 'Trigger Activator'.

     

           2.9.1 Box_trigger to the top

    Box trigger is basicly the same as radial_trigger, only difference is in activation range. While radial_trigger has defined its range within a circle, box_trigger's activation range is defined by a brush of any shape. Brush must be linked with box_trigger in both directions (first select entity, than brush and press 'Alt+E' to link in one direction, than select brush first, than entity, and press 'Alt+E' to link again contrariwise). Box_trigger was originally designed for situations where circle radius of activation range wouldn't fit some narrow places, or places with low ceiling with areas above where it was possible to activate radius of a radial_trigger. But of course, it's better now to use radial_trigger with one_cell_trigger = TRUE parameter.

  • To create key_trigger, link it in direction key_trigger -> brush representing a button (lever).
  •        2.9.2 Key_trigger to the top

    Last but not least is key_trigger, very important, if you want to add some interactivity. Just create some brush, which will represent eg. keypad, button or lever, and link key_trigger onto that brush. Distance from brush to key_trigger entity set from how far is button reachable. And very usefull is a 'activation_duration' parameter, which sets how long player must hold a button in order to activate it (defuse bomb, turn a wheel and so). And also you can set a 'inactivity_time' if you want to prevent button being activated again immediatelly after first activation (while player is still holding a 'use key'.

  • scripts are not case sensitive
  • every new command starts in a new line
  • to assure next command will start after previous is finished, we use ! prefix
  • 3. Basic scripting to the top

    You can move object on more than one destination, for example if you want to create elevator which will stop on more than one floor. It's easy, place in the map more target_position entities, name them with different names (eg. position2, position3 etc.) In order to add these new positions into script you have to make some changes. Open script window for trigger which is moving our box and edit it. Add another two lines in commands script, same as the first one, but change the destination, you should end with this.

         MOVE box position1 100 100
         MOVE box position2 100 100
         MOVE box position3 100 100

    Every new line means new command. Thing is, when script is started, every next command is executed immediately after previous one, even if first command wasn't finished. To prevent box moving directly into position3 or in other words, to force script to finish a command and after that to execute another command, we have to add ! mark in front of MOVE command. Like this

         !MOVE box position1 100 100
         !MOVE box position2 100 100
         !MOVE box position3 100 100

    Now box will move to another position once previous one was reached. You can add a DELAY command for example (in miliseconds) to hold box for a 1 second in position1.

         !MOVE box position1 100 100
         DELAY 1000
         !MOVE box position2 100 100
         !MOVE box position3 100 100

    Now box will move in position1, after reaching that point it will wait 1 second and then it will continue in position2 and position3 after that.
    If you want script to be executed all over during the game, just in the end add another command RestartScript. When script is finished, and last command too, script will be executed again. Example.

         !MOVE box position1 100 100
         DELAY 1000
         !MOVE box position2 100 100
         !MOVE box position3 100 100
         !MOVE box position2 100 100
         RestartScript

    Now box will move back and forth with little stop on position1. Easy.
    In script you can also activate another script, which is written in another trigger entity with command ACTIVATE trigger_name.

     

    4. Creating multiplayer map to the top

       4.1 Deathmatch and Team Deathmatch

    All you need is to assign a flag of a game type in Compilation preferences window (F8) sample. Map compiled with this flag will be available in the maps list when creating a multiplayer game in Chaser, according to selected game type. (Deathmatch map when creating deathmatch game etc.)
    And of course you need to add some multiplayer respawn_points, weapons, ammo and armors.
    Adding deathmatch respawn_point is same as adding single_player respawn_point. You can set initial weapon of player, and if he has nightvision equipped or not. It's recommended to place enough deathmatch respawin_points according to the size of map (or for how many number of players is map defined, eg. for map for 4 players should have at least 8-12 deathmatch respawn_points). Team Deathmatch uses same deathmatch respawn_points as deathmatch mode. Don't forget to keep same settings for every deathmatch respawn_point eg. every point should have set nightvision googles same.

     

           4.1.1 Adding weapons, ammo... to the top

    Adding weapons and ammo is very simple, just select desired entity from the list in weapons directory and place it in the map. Weapons and ammo clips will fall down to the ground after starting map, so you don't need to worry about exact placement, but anyway keep them near the floor or other surfaces. You can set orientation of the weapon in the world if you prefer or change respawn time. Also you can set world_anim, that means in what position weapon will appear in the game. All weapons have default position as world_default (they simply lie on the ground) and world_02 (leaned against the wall). Other world_anims are not recommended.
    Ammo entities are easy to distinguish, they have Ammo_ prefix in the name of entity. In square brackets in the end there is highlighted weapon, which uses that particular ammo. That's it, just keep in mind one ammo entity is one regular ammo clip in the game, so don't hesitate to put them enough. Nobody wants to fight using dirty language. All the same for the armor entities.

     

       4.2 Capture The Flag to the top

    Same way as assigning deathmatch flag you can set CTF flag for the map you're creating, but you have to use another respawn entities. Should be no problem to differentiate which ones you need. Again, keep in mind for how many players per team is your map designed. If you're creating map for 16 people, you should place 8 blue and 8 red respawn_points. And don't forget to place Flags. They are in items directory in Entity list.
    Click here to list all available skins for ShockTroops game mode.

       4.3 ShockTroops to the top

    ShockTroops mode uses same team respawn points as CTF mode. Also map designate as deathmatch or team deathmatch can be also designated as ShockTroops or CTF map. In ShockTroops and CTF mode game will ignore all items you have placed in the map (weapons, ammo, armor and in ST mode also flags of course) and vice versa (no flags and ST goal items in deathmatch mode).
    First thing you need to edit in your map is enough respawn_points of course (red and blue ones). Can be the same as for CTF mode as well.
    But ShockTroops mode is a bit more complicated to define. You have to create file, in which rules are defined for your map. This file is called 'mapname.STRULEZ' and it has to be placed in maps directory (eg if your mapname is st_badplace.cew, rules file should be named st_badplace.STRULEZ).
    List of all goals follows, copy example.STRULEZ from examples directory into Maps directory in Chaser root, rename it your mapname.STRULEZ and add goals that fits your need. Than change proper parameters if needed.

    To define which models and skins are availabe for your ShockTroops map, set skins in all 8 slots (4 each side) in your .STRULEZ file.

  • TeamId = 0
    (LAW BREAKERS)
  • TeamId = 1
    (GOVERNMENT FORCES)
  •        4.3.1 Goals to the top

    #Goal
    {
    TeamId = 0
    Type = KillAllOpponents
    Params = 0
    InitState = Ready
    Priority = Main
    RankPoints = 0
    TeamRankPoints = 400
    Text = str_neutralize_gf //for TeamId = 0
    Text = str_elim_lb //for TeamId = 1

    }
    Kill all Government Forces

    Change TeamId (0 for Law Breakers, 1 for Government Forces)






    remove whole TEXT line, keep only one you need for selected team
    #Goal
    {
    TeamId = 0
    Type = ActivateTrigger
    Params = TRIGGER_NAME
    InitState = Ready
    Priority = Main
    Group = YOUR_GROUP_NAME //optional
    RankPoints = 0
    TeamRankPoints = 400
    Text = GOAL_TEXT_HERE
    }

    Activate trigger specified in 'Params'

    Change TeamId (0 for law breakers, 1 for government forces)

    Replace (TRIGGER_NAME) with name of trigger in your map to be activated

    There can be more than one trigger set to be activated for one side. If you want so, create more 'ActivateTrigger' goals in your *.STRULEZ file, each with particular TRIGGER_NAME and add Group = YOUR_GROUP_NAME in both goals. If only one trigger has to be activated, remove whole Group param line. Team will win the game if all triggers in same group are activated.

    #Goal
    {
    TeamId = 0
    Type = MoveObject
    Params = OBJECT_NAME,COUNT,END_ZONE_NAME
    InitState = Ready
    Priority = Main
    RankPoints = 100
    Text = GOAL_TEXT_HERE
    }
    Change TeamId (0 for law breakers, 1 for government forces)


    Steal object (OBJECT_NAME) or more objects (defined in COUNT) and bring it (them) back to defined area (END_ZONE_NAME). If only one object exists, replace COUNT with 1. Replace OBJECT_NAME and END_ZONE_NAME with your names


    Replace with your goal text

    #Goal
    {
    TeamId = 0
    Type = DestroyObject
    Params = OBJECT_NAME,OBJECT_COUNT
    InitState = Ready
    Priority = Main
    RankPoints = 1000
    Text = Destroy OBJECT_COUNT of X objects (remaining %d)
    }

    Change TeamId (0 for law breakers, 1 for government forces)


    Destroy object (OBJECT_NAME) or more object (OBJECT_COUNT). Replace OBJECT_NAME and OBJECT_COUNT as you need



    '%d' is a variable, which shows how many objects remain to be destroyed, you can change this line, but do not change words in brackets. Change OBJECT_COUNT and number for your needs.
    #Goal
    {
    TeamId = 0
    Type = ReachPoint
    Params = AREA_NAME,AREA_COUNT
    InitState = Ready
    Priority = Main
    RankPoints = 100
    Text = Occupy at least AREA_COUNT areas of 3 (already occupied %d)
    }
    Change TeamId (0 for law breakers, 1 for government forces)

    Team has to reach or occupy some area (AREA_NAME) or more areas (number defined as AREA_COUNT). Replace AREA_NAMEand AREA_COUNT as needed




    '%d' is a variable, which shows how many areas have been reached or occupied already
  • Click here to list all Material Types.
  • Use unique names when naming your directories, materials and textures!
  • 5. Working with Materials /new to the top

       5.1 Understanding Materials in WorldStudio /new

    Materials are def files containing information about texture, its glossiness, material type, shader (if any) and other important information. Let's take a look on a simple material (eg. lin_red_concrete.mtl in lin_wall directory (select a material in Material Browser and press Material button in the bottom, or press 'i' and pick material from a textured face in Perspective View) (note: material selected with Pick tool (or selected in Material browser) is highlighted in the status line, next to it, in the square brackets there is a name of a material on currently selected face):

         #Basic Material Properties
         {
         AMBIENT_INTENSITY = 1.0;
         SELF_ILLUMINATION = 0, 0, 0;
         LIGHT_ILLUMINATION = FALSE;
         DIFFUSE_MAP = lin_wall\lin_red_concrete;
         BUMP_MAP = common\default_bump;
         BUMP_SCALE = 1.0;
         SPECULAR_INTENSITY = 0.0;
         SPECULAR_POWER = 1.0;
         GLOSS_MAP = lin_wall\lin_red_concreteG;
         REFLECTION_MAP = lin_reflections\lin_default;
         REFLECTION_INTENSITY = 0.5;
         LIGHT_REFLECTION = TRUE;
         MATERIAL_TYPE = concrete;
         }




    set color in RGB (0-255) if you want illuminated material
    set 'TRUE' if you want this material to inherit color of linked point_light
    path to the diffuse texture (.tga or .dds file

    Bump mapping and specular lightning is disabled in Chaser.


    path to the gloss texture (.tga or .dds file)
    path to the cubemap texture (.tga or .dds file)
    intensity of a reflection (0.0 to 1.0)
    set 'TRUE' if you want reflection affected by level of lightning
    sets type of a material (sound hits, steps, decals) see list.

    Basic Material is created automatically every time you'll start a Worldstudio or when you press a R button (for Refresh) in Material Browser. Just keep in mind one important thing.
    Name your textures and materials with unique names. It's recommended to create directory/directories with own name (eg. with some prefix, I am using prefix lin_ in every texture, material and directory name) if you want to prevent conflicts within material and texture names already existing in Chaser, your names and also new ones created by other map creators.

     

       5.2 Creating new Material /new to the top

    Creating new Material is the easiest thing in Worldstudio. Just create your own directory in 'Textures' dir. Now copy there your texture/textures in .tga format (24 wo/ alpha channel or 32 bit w/ alpha channel) or in .dds format. If you're using .dds format (recommended), keep in that directory also .tga file (with same name as .dds file), Material browser is not capable of showing .dds files. All textures must have size in multiplies of 2. (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024). Of course you can have texture of a size eg. 128x512. All textures must be RGB (24 bit) or RGBA (32 bit, with alpha channel) with exception when creating a outdoor terrain.
    Sometimes you maybe would like just to copy an existing material. Clone Mat. button may come in handy. You just must have a directory already created, in which you want copy a material. In dialog window sample is just necessary to set new 'Name of duplicated material'.

  • Set glass brush with these parameters on: Corona No Clip, No Shadows, See Through.
  • You can create a glass with no thickness, just set DOUBLE_SIDED = TRUE; and apply material only on one side of a brush.
  •    5.3 Advanced Materials /new to the top

           5.3.1 Breakable glass /new

    Here comes major advantage of Materials. You can use two materials with same textures, but with different settings. Like unbreakable and breakable glass. Breakable glass is defined by a additional script in the end of material. Just use example from examples directory, or add marked part of the material script into yours. Apply breakable glass material only on two opposing (what-you-see) sides sample of a brush if set GLASS_3D = TRUE;. If from any reason you need more simple breakable glass, than set DOUBLE_SIDED = TRUE; and apply this glass material only on one side of a glass brush. Apply breakable glass material only on flat surfaces.

    #Basic Material Properties
    {
         AMBIENT_INTENSITY = 1.0;
         SELF_ILLUMINATION = 0, 0, 0;
         LIGHT_ILLUMINATION = FALSE;
         DIFFUSE_MAP = lin_windows\lin_glass10_destroyable;
         BUMP_MAP = common\default_bump;
         BUMP_SCALE = 1.0;
         SPECULAR_INTENSITY = 0.0;
         SPECULAR_POWER = 1.0;
         GLOSS_MAP = lin_windows\lin_glass10Asmall;
         REFLECTION_MAP = lin_reflections\lin_cube_hall2top;
         REFLECTION_INTENSITY = 0.9;
         LIGHT_REFLECTION = FALSE;
         MATERIAL_TYPE = glass;
         DOUBLE_SIDED = FALSE;
         GLASS = TRUE;
         GLASS_3D = TRUE;
         GLASS_MIN_FACE_SIZE = 5;
         GLASS_FRAGMENT_RATIO = 0.65;
         GLASS_FRAGMENT_MIN_DIAMETER = 5;
         GLASS_FRAGMENT_MIN_SIZE = 200;
         GLASS_FRAGMENT_DIVIDER = 2.5;
         GLASS_FRAGMENT_COUNT = 18;
         GLASS_SHARD_MIN_SIZE = 1;
         GLASS_SHARD_GRAVITY = 400;
         GLASS_SHARD_DAMPENING = 0.01;
         GLASS_SHARD_LIFETIME = 8;
         GLASS_BROKEN_MAP = lin_windows\lin_clear_broken;
    }
















    if TRUE, material is visible from the other side of a textured face
    turns on breakable glass (TRUE/FALSE)
    creates thickness of a glass

    It's not recommended to modify these parameters.








    how long glass shards remanins (in seconds)
    optional, delete this line if you want clean glass after breaking

  • Set water surface brush with these parameters on: Corona No Clip, Player No Clip, No Shadows.
  • If you want water surface looking smooth and liquid, u have to use as much tesselated mesh as possible. Check out your 'WorldStudio\Brushes
    \brushes_water_surface\..
    ' direcotry for appropriate meshes.
  •        5.3.2 Water /new to the top

    Creating dynamic water surface is also matter of material's settings. Just use example, or add marked part of the material script into yours.

    #Basic Material Properties
    {
         AMBIENT_INTENSITY = 1.0;
         SELF_ILLUMINATION = 0, 0, 0;
         LIGHT_ILLUMINATION = FALSE;
         DIFFUSE_MAP = lin_misc\lin_water;
         BUMP_MAP = common\default_bump;
         BUMP_SCALE = 1.0;
         SPECULAR_INTENSITY = 0.0;
         SPECULAR_POWER = 1.0;
         GLOSS_MAP = common\default_gloss;
         REFLECTION_MAP = lin_reflections\lin_cube_tutorial;
         REFLECTION_INTENSITY = 0.8;
         LIGHT_REFLECTION = TRUE;
         MATERIAL_TYPE = water;
         LIQUID_SURFACE = TRUE;
         LIQUID_SURFACE_NORMAL_BIAS = 1;
         LIQUID_SURFACE_TENSION = 8;
         LIQUID_SURFACE_DAMPENING = 0.03;
         LIQUID_SURFACE_SPEED = 4.2;
         LIQUID_SURFACE_MOTION = 1;
         LIQUID_SURFACE_REFRACTION = FALSE;
         TRANSPARENT_SORT_OFFSET = 10000;
    }














    enables/disables dynamic water surface

    It's not recommended to modify these parameters.



    Refraction is disabled in Chaser.
    optional, use only if problems with other transparent materials encounters. Else remove/do not add this line.

    It's good to have as much tesselated mesh as possible if you want water surface smooth and liquid-look like. You can find few meshes exported from 3DStudio Max in WorldStudio\Brushes\brushes_water_surface\ directory we used in Chaser.
    To create a brush that will represent water surface, select one in sample Prefabs and place it in your map same way as normal brush with 'CTRL+LMB'. Set its parameters to See Through, Player No Clip, Corona No Clip and No Shadows. Do not set Bullet No Clip so the bullets can hit the water surface.
    Now while brush is still selected of course, open Material Browser and select a material u prefer and press 'Map All' button. (eg. lin_misc\lin_water_tutorial, or snp_misc2\snp_WATER_chst02 - same water material as in Final Strike map). If you are creating pool not very deep, you're done now, if you want player to swim in it, follow next steps.
    Create a simple box with sizes of your water surface brush. It will represent water mass. Set its parameters to See Through, Corona No Clip, Bullet No Clip and No Shadows. Add entity Enviroment from 'misc' directory and create a link from this box brush to Enviroment. Edit its parameters, change enviroment_type = WATER. That's it.

    If you link Enviroment entity to target_position, and set active_power (from -1.0 to 1.0 max) you will create a water stream. Note, this link shows only an angle of a stream, not the direction, direction is defined with positive or negative number in active_power parameter.

  • to toggle Decals mode, press 'D'
  •    5.4 Decals /new to the top

    If you want to add some special marks on the walls or floor, maybe some blood stains or some sign, decals are very convenient for this. You can use as a decals any texture, but not all will fit your needs (because of color blendings of source (wall) texture and colors of a decal texture). To toggle 'Decals mode' press 'D'. Your cursor will change its shape. Select a texture in Material browser you would like to put on some surface. While you're in Decals mode, you cannot delete any brush or texture from a face. Press 'CTRL+LMB' to apply decal on the surface. Decal will appear selected (yellow rectangle covering it) with its center exactly at the point you have clicked. Keep decal selected, open Material Browser and select another texture. Now you can apply new decal somewhere else, but it will inherit size of a previous decal. You can change a color Note, if you select one decal, others have brighter rectangle too, so you can find maybe decals which you cannot actualy see because of unfit color blending (Mostly when u set color of decal some bright color, white will become invisible at all)Unselect decal with 'Esc' key.
    If you want to have in your map white decals, texture must be 32 bit with alpha channel.

  • Press 'Alt+N' to flip normals of a selected brush/brushes
  •    5.5 Creating sky /new to the top

    Actually you can create an enviroment sky from any brush u like, eg. drag box pres 'Alt+N' to flip its normals (so box turns inside-out, but carefull, do not flip meshes exported from 3D Studio Max), check parameter 'Enviroment'. It is important how high you place an enviroment sky from zero position (in Left or Front View). There are few meshes exported from 3D Studio Max which were used in Chaser in Prefabs/Brushes mapped with materials.
    (Simple example: create a box of size 512x512x512 points. Apply a materials on every surface of that box and press 'Alt+N' to flip normals. Set parameters No Shadows, Player No Clip and Enviroment.)

  • Press 'CTRL+T' to create a terrain
  • Heightmap texture must be a grayscale (8-bit) .tga.
  • Press 'Shift+T' to change your existing terrain
  • Save very often
  • Press "Alt+S' to smooth your terrain globaly (after using one of terrain modifier tools)
  • 6. Outdoor enviroment /new to the top

       6.1 Creating landscape terrain /new

    Creating terrain in Worldstudio is again very simple and easy, like everything in Worldstudio of course. Press 'CTRL+T' to bring up dialog window for terrain parameters. Browse for a grayscale .tga texture (heightmap, white is the highest point, black the lowest. Create one in Photoshop or any other software you like, size 256x256 px should be enough. Set dimensions of your terrain and its' height. Terrain may be dividied into number of brushes (segments) in "Terrain segmentation" (by default 8x8 segments). How tesselated terrain will be is set by "Terrain Detail" (can cause problems when creating very large terrain with very high tesselation), recommended is number 64 on small terrains, 128 on bigger terrains (bigger means about 4096x4096). Press OK and terrain will be created in the center of your map as a group of segments. Now you can apply material as on other faces in WorldStudio (do not apply a water material, that doesn't work, glass material is working, even breakable, but can cause problems when shooting J).
    Is you want change your terrain, you don't have to alter your heightmap. Press 'Shift+T' to bring up 'Terrain Modifier' and select your tool: Raise - raises a area under your cursor, Noise - adds some random roughness, Smooth - smooths J, Flatten - flattens area under your cursor, Decorate - generates selected brush randomly on terrain.
    If some breaks occur between segments of your terrain, press 'Alt+S' to clean them out. I think all tools and their usage are clear, except Decorate, let's take a closer look at it.
    Let's assume you have some huge outdoor and you want to add some trees or bushes somewhere on it. Let's say you have one created, place it on some place in your map on zero position in Left (or Front) View. This sets how high from the terrain brush will be generated. Set parameters of your brush ('B' key) if needed (eg if you are going to generate some grass, set Player No Clip and No Shadows first). Keep brush selected, press 'Shift+T', select Decorate, set Radius = 512 and Density = 4 (for example). You may note your cursor in Perspective View has a green circle around it. On one LMB click 4 brushes will be generated on top of the terrain within this radius. Save often!

     

       6.2 Fog /new

    Just place a fog (misc directory) entity into the map, set parameters, update entities into map ('CTRL+SHIFT+F7') and run it. Fog should be there
    You can choose one of tho types of fog in Fog entity. LINEAR fog doubles number of polygons visible, so your frames per seconds may drop down, in some very complex areas. But advantage of LINEAR fog is, every polygons which are not visible because of a fog are clipped out (it's recommended to create a sky enviroment mapped with texture of a same color as fog is set). LINEAR fog uses range parameter (in points, sets how far you can see).
    Second type of a fog is EXPONENTIAL. Range parameter is ignored when this type of a fog is selected, density is used instead (use rather low numbers, around 0.25 - 1.5). It's recommended to use rather EXPONENTIAL fog instead of LINEAR, it's faster (EXPONENTIONAL fog is not clipping polygons, but also it is not doubling number of them).
    And there is also the third type of a fog, a brush fog. Unlike previous two ones, brush fog is created of a brush, not a as a fog entity. Create a brush that will represent a fog zone, can be a box for example. Now apply a fog material (lin_misc\lin_fog_tutorial) on that side of that brush which player will enter into. At least one visibility_eye should see that textured side. If you are willing to create just a ground fog, apply only on top side of a brush. With this type of a fog you can add some "atmosfear" (ground covered with fog, or you can fill a room with black brush fog, so it's darker than other places (looks better than local ambient_light). Parameters are defined in material, you can set color, density, or enable/disable fog effect.

      ...
  • for loading definition file example click here.
  • example loading.psd
  • needed files: mapname.cew, mapname.tga, mapname_loading.tga, mapname_loading.def, mapname.STRULEZ (if ShocTroops map)
  • 9. Loading screen /new to the top

    Very easy. Create a screenshot or whatever you want to appear during loadscreen. Set its size at 512x512x24bit. Save it into Maps directory as "mapname_loading.tga" (if your mapname is st_badplace.cew, you should name your loading screen texture st_badplace_loading.tga). Now use example_loading.txt. Rename into MAPNAME_loading (same like your loading texture name) and save as MAPNAME_loading.def in Maps directory.
    To create a icon image, just create another .tga image (size 128x128x24bit) and name it MAPNAME.tga. Save in Maps directory too. So don't forget to include all these files (mapname.cew file - the map itself, mapname.STRULEZ file - rules for ShockTroops, if any, mapname_loading.tga file and mapname_loading.def file for loading screen and mapname.tga - for map icon in menu).
    There is also in examples directory a .psd file and here is a guide how to create same loading screen as in Chaser.

    • desaturate a screenshot (CTRL+SHIFT+U)
    • duplicate (CTRL+J)and apply Filter>Radial blur: amount 20, blur method zoom, quality good
    • original not filtered screenshot move on top and set Opacity to 50%, set Layer blending: lighten
    • black stripes with chaser title on top should be on top
    • merge layers (CTRL+E)
    • set image size to 512x512
    • save as MAPNAME_loading.tga
       
     
    © Cauldron Ltd. 2003