|   Creating your first level
        With this tutorial you are going to learn some of the MaxED basics.
        Issues like basic modeling, booleaning, exit creation (visibility
        optimization) and exporting the level to
        the game are covered. Please refer to other MaxED
        documentation or other tutorials for additional information .
       
      Start MaxED. Make sure that you have set it up correctly (see "Setting
      up MaxED") and it is working
      with the game database. Download the tutorial file (Creating_first_level.zip)
      to see what will be our goal. Then, it might be best to close the
      document and start from scratch.
       
      A new document...
      
      By default, MaxED opens an empty level file with no textures and no
      geometry, just the blue grid and the camera in their default positions.
         If you do not already have an empty level file open for some reason,
        you can get one by selecting File/New...   Few words about modes... 
      
      
      Editing-wise, MaxED is based on different editing modes:
 F3 – “Model” - New entities/key points/meshes are created in this mode.
 F4 – “Extrude” – This is essentially a polygon editing mode.
 F5 – “Transform” – An object editing mode.
 F6 – “Texture” - Most of the texture related editing is done in this mode.
 F7 – “Exit creation” - Exits are created in this mode
 F12 – “Move grid” - Most of the grid functions are available always, but some additional grid manipulation is done in this mode
 SPACE – “Move” – The movement mode.
 Whatever manipulation you want to do to your level, you have to be in the correct editing mode before you can do
      the right things. Some commands can be done in multiple editing modes for user’s
      convenience. For example you can do some texture operations in F5 mode as well. You can get a list of available commands in each mode from the “Mode Commands” menu. It only shows the commands of the current mode you are in. You can also get the “Mode Commands” menu by pressing the middle mouse button or
      CTRL+SPACE
      in the render window. 
       
      Moving around  (Move mode)
        You can now try moving around in the world. You can look around freely by pressing down LEFT MOUSE BUTTON (LMB) and moving the mouse.
        Move forwards and backwards by pressing down RIGHT MOUSE BUTTON (RMB) and moving the mouse forwards or backwards.
        Strafing is done by pressing down  SHIFT and moving the mouse.
        TIP: If you can't move, make sure you are in "Move" mode by pressing spacebar.
        Note that pressing spacebar multiple times toggles between two types of movement modes.
        The regular and a so called "Around"-mode. The "Around" mode makes the view move around any given point in the level
        geometry (pressing and holding  LMB initiates horizontal rotation around
        that point,  RMB is for vertical rotation). Since we don't have any geometry yet, we can't use it. 
      Adding textures
        
      First, you will need to add textures to your level. MaxED handles textures
      as "materials". There are several material categories to which
      organize your textures, each with their own properties (sound, decals,
      etc.), and all textures in a specific category will behave the same in the
      game. This means that if you put a brick texture to the wood -category, it
      will emit wood particles when shot, sound like wood when stepped on, and
      leave a wood decal in the game. Adding textures to a level can be done
        in more than one way, but the best way, at least for now (to get our
        tutorial rolling) is to grab
        all the textures of another level file, in this case from the example
        level "creating_first_level.lvl". To do this, select Insert materials from file from the Material menu.  Navigate the selector to the
        "creating_first_level.lvl",
        select it and press OK. 
      After small preprocessing delay, you should see a bunch of textures in the material palette
        window bottom-left corner of the MaxED window, with texture names and texture sizes shown.  Take
        a moment to get yourself acquainted with the few materials (textures)
        you just inserted, notice also that above the material selector there is
        a pop-up list that shows the current material category. Select also other categories to check out
        their contents. When you click a
        texture with LMB, you make that the current material. The active texture is indicated by a blue highlight. TIP:
      If
        you want to add some of your own textures, you can drag and drop
        them from windows to material palette or use Insert bitmaps.
        MaxED can handle JPG, TGA, PCX, SCX and BMP formats, but it is recommend
        you use jpg, since at its highest quality the difference to, for
        instance TGA, is almost unnoticeable and the file size still a lot smaller
        (much of the size of a level comes from the textures). The textures can
        be of any size, but for compatibility reasons and better performance on some
      hardware,  it is better to keep the dimensions in 2 based figures: 2, 4, 8,
      16, 32, 64, 128, 256 etc. As texture memory and rendering speed are always
      something to consider, texture resolution should not usually exceed 1024
        in any dimension. Right-clicking
        the material in the material palette will bring up a a menu with lot of
        settings for materials, but we will jump into that in more detail later.
       
      Creating some room geometry (F3 mode)
        By default MaxEd is in  wireframe mode. Use  F2 to toggle into
       texture 
      rendering  mode (alternatively toggle Mode/Wireframe tick off from the
      menus). Generally all MaxEd work is recommended to be done in the textured
      mode and you need the WF mode very rarely, if ever. Try to toggle between
        the modes now. 
         TIP: If nothing seems to happen, try right-clicking inside the
        rendering window first. Some options (like switching modes) in MaxED
        aren't available before you make the rendering window active by clicking
        in it. It is recommended that you right-click as this minimizes the risk
        of accidentally moving something.
         Lets adjust the preferences a little before we proceed any further.
        Open preferences dialog by pressing  Ctrl+P. 
       
      
      At this early stage, we do not want to worry about exits or lightmaps. So
      remove the tick from Exit
      acceleration and make sure that the radio button at Texture display
      is set to Only primary texture. We'll get to these issues later,
      so let's just press OK for now.
       
        
      
      Next we’ll create a simple room. Press  numpad +/- to adjust  grid
      size, by default it is 0.5 meters so let's make it one meter by pressing
      numpad + once. You can see the current grid unit in the bottom right
      corner. Move closer to the grid and turn yourself a little more towards
      the grid (i.e. look down a little). Press  F3 to switch into  Model
      mode.
      Click the brick material in the default category if you have not already
      done so. Now draw a shape onto the grid.
      Do this by pressing LMB on the grid points. While drawing, keep an eye on the lower right corner to see the
       measurements of the shape you’re creating. Draw a 6m x
      8m square on the grid.
        
 
      While drawing, remember that the shape can not intersect itself, a
      vertex causing this is considered illegal, and MaxED won't let you place
      such a vertex (the shape will turn red). You can press  delete during
      the drawing to undo last vertex placement. By pressing  spacebar or ESC
      you can
      cancel the drawing altogether.  
      When you have placed all the 4 points, press  RMB to extrude the shape into a
      3D object.  The shape now changes from a 2D shape into a 3D-object
      with texturing visible (unless you are in WF mode) with the mesh faces pointing
      inwards, meaning that you see all the faces when you are inside it (these
      are used for rooms).
      If you are outside the mesh (like here), the faces that have their backsides towards
      you get culled and are not visible. We are making a room, so this
      is exactly what we want. TIP: From the preferences
      (“flip faces after mesh creation”) you can set whether all the
      objects are by default created with their polygon faces pointing outwards
      or inwards. You can manually flip the object with ‘CTRL-F’
      while pointing at the object in F4-mode.
        
 
      You should also
      see a new mesh appear in  hierarchy   list in top-left corner named "New Mesh
      00".  Right-click the name in the list and select  Properties
      from the menu. You get a dialog with the name on the middle, change this
      to "Startroom".
        
 
      If you think that your shape was a
      complete failure, you can delete the mesh either from the hierarchy list
      by right-clicking the name and selecting kill, or by going to
      F5 mode, selecting the room with LMB click and pressing delete.  TIP:
      You can move around with  arrow keys while you are drawing objects outlines
      in F3 mode. To make use of this while creating bigger, more complex
      objects, it's a good idea to first point the camera directly towards the
      grid so the distance to the grid remains the same when moving. Ctrl
      combined with up and down arrow will advance and back up during drawing. TIP: If you don't want to model a mesh with volume, but rather just a single polygon,
      a 2D-object, draw the desired outlines to the grid just as above, but
         hold down SHIFT when clicking RMB. Note however, that while
      sometimes useful, 2D-objects are a lot more cumbersome than 3D-objects
      because they cannot be transformed later as 3D-objects can. If you want a
      2D-object in a level that you can fully manipulate in MaxED, make it a
      3D-object, and texture all but one face with a dummy texture (any texture
      that you put in the "dummy" -category). All polygons with this
      texture will be completely unnoticeable in the game.  Editing room polygons (F4 mode)
      You have created a basic form for the room, but it is only one
      current grid unit thick (1 meter, if that's what you had for the grid size
      when you extruded the object). That is clearly not enough
      (Max requires some 2 meters minimum as he is 185 cm tall, and the camera
      works best if the rooms are some 4 meters or more tall) so we have to 
      extrude the shape a little by modifying its polygons.  Switch into
       F4 mode, move cursor over the ‘ceiling’ polygon (but
      do not click) to select a poly (You will see the active polygon indicated by yellow/red outline).
      Below left you see what might happen when you point at the roof from
      above, and "select culled polygons" in the preferences is
      not on: the floor gets selected, not the roof. To select the
      roof, either move down and look up to see the roof, or even better, use insert
      key to toggle "select culled polygons" option on/off. Once on, you
      can select polygons even from their back side as seen on right.
          
      Now you can extrude shape by pressing  LMB and dragging mouse
      up/down.
      In this case, it may be easier to press arrow keys up/down to get more
      accurate control. If your grid unit is still 1 meter, press cursor up 3
      times to extrude mesh 4 meters high as seen here. If you do not move your
      mouse, you can keep pressing cursors up/down till you are satisfied.
      Pressing cursors right/left or  RMB would skew the face in relation to
      active edge (red one) but lets not get into that now.
        
 
        Congratulations, you have made your first room, you will
        be making killer levels in no time :-) Notice that in
        MaxED usually all of the meshes you make are volumes, not just a bunch
        of polygons. MaxED is a so called 'solid modeler'. You can not
        extrude or skew polygons of an object through itself (or any edges),
        because that would result into illegal volumes and would mess up the
        Boolean operation functionality. For instance,
        you can not bring the roof down to absolutely touch the floor -- that
        would make the walls zero height and the room volume non-existing. You
        can get closer than one meter though by making the grid unit smaller.
        You should not also ever delete faces from rooms or anything that you
        plan to Boolean later. If a face (polygon) is deleted a volume is is no longer
        defined -- Booleans become impossible. We'll get back to these issues in
        more detail later.
       The Grid (F4/F12 mode)
      Before we proceed, you should learn to use the grid a bit better -- it
      is your most important tool in MaxED.   The grid can be
      aligned by hovering over a polygon in F4 mode and pressing  A  (free align)
      or  Shift-A (align in world coordinates). Remember to turn the grid on (numpad
      *).  Please note that the grid will be placed to the intersection
      of your camera's normal (a 'beam' away from the middle of the screen) and
      the polygons plane that you point. You should always look fairly directly
      to the polygon that you want the grid to be aligned to. If you are in a very
      low angle, the grid might be placed pretty far as. See the example below
      left, where the grid is aligned to the floor.  The one on the
      right is a much more successful alignment, as the middle of the screen is
      better positioned in relation to the plane of the desired polygon.
        
 
      Practice a little: Move around your model and switch to F4 mode to
      align the grid. Try to align to another polygon (wall for instance) and
      move again. Try switching the backface selection on/off by pressing  Insert
      
      when
      aligning. Also try to change the grid size (numpad +/-). Go into the
      Grid mode by pressing F12. In this mode you can move the grid around with 
      LMB and raise and lower it in steps of one current unit by  RMB --
      alternatively by using  cursor keys and  PageUp/PageDown. Notice the spot
      in the middle of the grid, that is the grids origin. You need that in some
      operations, like when you want to place the pivot point of an object. If
      you get completely lost, go to F12 mode and press  R to reset the grid and
      the camera to their default positions.
       
      Handling objects, using Booleans  (F5 mode)
      Let's copy the room mesh to get another room. Go to F5 mode, then select the
      room by clicking  LMB on it. Now copy/paste it by pressing CTRL-C,
       CTRL-V
      in a sequence, and move the new room to the desired position with the arrow
      keys. The copied room is automatically selected after the paste, so
      you do not have to select it (top left image)
       To join the rooms you should create a short corridor between them. Move the camera
        so that you can see in between the two and enter  F3 mode once
        again. Draw the outline of the corridor.
        Extrude the ceiling of the corridor to be high enough. Make it 3 meters high
        (see top-right and bottom-left pictures below). Of course you CAN make
      doors that are real-life sized (some 1x2 meters), but if you are planning
      to move around in the level fluently, you should pretty much multiply all
      real-life measurements by 150%, thus making a "good" door
      something like 1,5m x 3m in size. Max's collision capsule prevents Max
      going through an opening smaller than 98 cm in width and some 195 in
      height.  
 
 
 
        Now we need to Boolean the meshes together. It's better to stay where
        you are (between and outside the rooms). Enter F5 mode and click
        the corridor object with
         LMB to select it, press U (Union), and click the room on
        the left with
         LMB. You get a dialog where you can still change the Boolean operation, or
        Cancel it altogether. Union the
        hallway to each one of the room meshes. As a result, you'll have two
        rooms with a hallway between them.
       
      Placing exits  (F7 mode)
      For visibility optimization, Max Payne uses exits, which
      basically are planes that define the boundaries of the rooms. What the
      engine always draws is everything inside the room you are in, and
      everything you can see through exits. This means if you didn't make a
      single exit to a level, the engine would render the whole level all the
      time regardless of how small portion of it you would see. But don't forget
      that exit processing also takes time so you shouldn't make too many exits
      into the level. Typically you make exits to the doorways. So let's make an
      exit to the doorway of our example level. (note that you can only
      create an exit so that all of it's edges touch the room object that it is
      dividing) 
       Align the grid to the wall with the corridor. Switch to Exit (F7) mode.
       Draw the exit along the outlines of the corridor. Place a vertex at each edge position with
       LMB. Do notice that in this mode MaxED shows polygon and edge selections, just like in F4 mode (Yellow and red lines). The edge that is closest to the mouse cursor is always the one that is
      selected.  Make sure that an edge that intersects with the grid is selected when you click the mouse button.
       
 
      
      TIP: If the corridor doesn’t match with the grid you can use  A
      in F3 mode to align grid origin to the selected edge. (Obviously the edge has to be intersecting with the grid).  After drawing the outlines, press  RMB to place the exit. 
 
      
       You should now see a ‘Mesh Separated into two by exits’ message on screen. Accept that with
       OK and you will see the exit appear in the rendering mode showing as a cyan plane between the
      room and the corridor. The room gets split into two (look at the hierarchy tree), and now  you should have “Startroom01” and “Startrom02” in there. Rename “Startroom01”
      to “Startroom”. 
      Exporting level
      
      First let’s add a player Startpoint to the level. Place the grid on the floor of the “Startroom”, and press
      N to
      insert
      a new entity onto the grid. A  “New Entity”-dialog will appear. Choose “Jumppoint” from the list. Now group the Jumppoint to the room it’s in by pressing
       CTRL+E in F5 mode (Autogroup All).
          Few words on grouping and hierarchy levels  All the grouping commands you can use are:  G – Group Selected; Select a mesh, press G, and press LMB to the desired parent meshCTRL+G -  Lift Children; Lifts all the children of the selected mesh up one hierarchy level.
 SHIFT+G – Lift This; Lifts the selected mesh up by one hierarchy level.
 E – Autogroup; Groups all the meshes inside the selected room to it.
 CTRL+E – Autogroup All; Goes through all the rooms in the level and does the above.
  In MaxED, the level consists of “Rooms” (The topmost meshes in the hierarchy tree), which are separated by exits.  All the objects inside a given room are hierarchized to be
        it's children. This way the engine can do visibility optimization
        properly. For dynamic content, MaxED uses messages that are sent to
        specified objects. The objects are defined not only by their name but also by their
        hierarchy level. For example “::Startroom::Startpoint 00”. Also for animating objects, an animating parent always moves its children along with it. In
        MaxED, when you select a parent, all it’s children are also selected,
        and when you move a parent somewhere, all it’s children move too. Once the necessary grouping and Startpoint adjustments are
      done, you are ready to take the level to the game.  Check the Setting
      up MaxED -section about the necessary modifications that you might
      want to make to the game before doing any of the following.
         When all that is done, export the level to the .LDB format that the game engine uses. Select “File” -> “Export X_LevelDB…” Click
      on ok to
      both questions. Next browse your way through to the game directory, and from there go to: “…\data\database\levels\examples\”-directory. Export your level with the name of
      my_level.ldb. Alternatively, if you so choose, you can overwrite
      the basic_room.ldb example so that you will not have to do the following
      changes into levels.txt
         
      If you decided to use my_level.ldb as the name, you need to edit the levels.txt that we extracted from
      the ExampleMod (see Setting up MaxED). Opening it up, you will see the topmost level block
      (basic_room) that is used by the example level. Make a copy of the whole
      block (copy/paste) so that you have two of them one after the other. Then
      rename the new block to my_level. Also change the “Level” definition to be
      my_level.ldb instead of “basic_room.ldb".
      Below is a part of the file as you now should have it (opened in UltraEdit).
      Now save the file.
          
 
      As also described in the Setting
      up MaxED section, we will have to run Max Payne with some additional command line options in order to get into the developer mode. Create a new shortcut for MaxPayne.exe
      or modify your previous one:
         
      MaxPayne.exe -developer -developerkeys –window
         TIP: Depending on your video hardware,  you might have to
      close MaxED when you run the game. Sometimes it is enough, that you just off the texture rendering (F2) while you are running the
      game, as having these both open and consuming graphics memory is sure to
      cause some problems, except perhaps on a very state-of-the-art hardware.
         If you overwrote the basic_room.ldb, you can access you
      level by choosing that menu item in the developer menu. If not, use the
      console to init your level. Once you have the game running in developer mode, you can access to the game console with
      F12. It has three modes which you toggle by pressing F12 multiple
      times: 
         
        
          Logging (console and it's output is visible but the keyboard commands go to the game) 
          Disabled (game behaves like it does without developer mode) 
          Enabled (your keyboard input goes to the console) Now type into the console:
         
      Maxpayne_gamemode->gm_init(my_level);
         This will load up your level. However, as you are still in “menu” mode,
      the level won’t start loading before you switch into game mode.
         
      X_modeswitch->s_modeswitch(game);
         The level should now start loading.
         Reviewing your work
        
        Now you should see the level in the game and be able to
        run around with Max. If you have followed this tutorial, well...
        admittedly there is still some room for improvement in the level
        :-) 
         Naturally to make it good, you need to do the lighting and more appropriate
        texturing right. A little more
        furniture and other props would not hurt also. If you have not lit and
        calculated the radiosity yet, the most notable
        strangeness is likely the odd looks of the walls, which is due to
        (uncalculated) lightmaps.
         Now that you have established the pipeline to get the
        level to the game, you can always see your progress. If you have not yet
        done so, next take a look at the other basic  tutorials which teach
        more. Whenever you feel like it, export the
        level again and review it in the game.
         |