3D Main Menu Background Source Tutorial

*Created by cysis145 on the RealmCrafter: Community Edition forums.*

This edit is generally improve the 3D background on the main menu. This edits improves performance.
For this tut i will be going through each section in order that they appear in the client.Exe Note that i haven't included a section for the start menu, since i removed it from my client.

**Make a backup before starting this tut!!!**

If you've already added a 3d background from v1.0 of this tut then you should undo all those changes. follow the v1.0 tut again but backwards and undo the changes.

Open **MainMenu.bb** and start by finding **Function EULAScreen()**.
Add

```
 If FileType("Data\Meshes\Character Set\E_Set.eb3d") = 1

      Set = LoadMesh("Data\Meshes\Character Set\E_Set.eb3d")

      If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\E_Set.eb3d!")

   Else

      Set = LoadMesh("Data\Meshes\Character Set\Set.b3d")

      If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\Set.b3d!")

   EndIf

;Possition set

   PositionEntity Set, -210, -35, -145

   ScaleEntity Set, 30, 30, 30

```

under

```
 ; Do not display if .txt file is empty

   If FileType("Data\Game Data\EULA.txt") <> 1 Or FileSize("Data\Game Data\EULA.txt") = 0

      Return

   EndIf

```

This will load the 3d model.
Next add

```
 Background = GY_CreateQuad(Cam)

   PositionEntity(Background, -7.5, 7.0, 10.0)

   ScaleEntity(Background, 15, 14.0, 1.0)

   EntityOrder(Background, -1)

   Tex = LoadTexture("Data\Textures\Menu\EULA.png")

   EntityTexture(Background, Tex)

   FreeTexture(Tex)

```

under

```
;Possition set

   PositionEntity Set, -210, -35, -145

   ScaleEntity Set, 30, 30, 30

```

it should now look something like...

```
Function EULAScreen()

   ; Do not display if .txt file is empty

   If FileType("Data\Game Data\EULA.txt") <> 1 Or FileSize("Data\Game Data\EULA.txt") = 0

      Return

   EndIf

; Background

   If FileType("Data\Meshes\Character Set\E_Set.eb3d") = 1

      Set = LoadMesh("Data\Meshes\Character Set\E_Set.eb3d")

      If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\E_Set.eb3d!")

   Else

      Set = LoadMesh("Data\Meshes\Character Set\Set.b3d")

      If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\Set.b3d!")

   EndIf

;Possition set

   PositionEntity Set, -210, -35, -145

   ScaleEntity Set, 30, 30, 30

   Background = GY_CreateQuad(Cam)

   PositionEntity(Background, -7.5, 7.0, 10.0)

   ScaleEntity(Background, 15, 14.0, 1.0)

   EntityOrder(Background, -1)

   Tex = LoadTexture("Data\Textures\Menu\EULA.png")

   EntityTexture(Background, Tex)

   FreeTexture(Tex)

```

**IMPORTANT:** you must create a texture and call it EULA (must be a .png) and put it in "\textures\menu\" folder, if you dont, it will cause a mav. This texture will appear behind the text for your EULA if you have one. It should be 700x690 res (default) but you can adjust the scale and location of the image yourself.

Next find **Function LogIn()** replace

```
Background = GY_CreateQuad(Cam)

   PositionEntity(Background, -10.0, 7.5, 10.0)

   ScaleEntity(Background, 20.0, 15.0, 1.0)

   EntityOrder(Background, 1)

   Tex = LoadTexture("Data\Textures\Menu\Login.png")

   If Tex = 0 Then RuntimeError("File not found: Data\Textures\Menu\Login.png!")

   EntityTexture(Background, Tex)

   FreeTexture(Tex)

```

with

```
;Background

   Background = GY_CreateQuad(Cam)

   PositionEntity(Background, 0, 0, 10.0)

   ScaleEntity(Background, 7.0, 2.9, 1.0)

   EntityOrder(Background, -1)

   Tex = LoadTexture("Data\Textures\Menu\LoginBox.png")

   EntityTexture(Background, Tex)

   FreeTexture(Tex)

   Background3 = GY_CreateQuad(Cam)

   PositionEntity(Background3, -0.64, 1.4, 2)

   ScaleEntity(Background3, 1.35, 0.7, 1.0)

   EntityOrder(Background3, -1)

   Tex3 = LoadTexture("Data\Textures\Menu\Menu Logo.png", 4)

   EntityTexture(Background3, Tex3)

   FreeTexture(Tex3)

```

**IMPORTANT:** just like before you'll need to create 2 new textures and put them in \textures\menu\ folder. Both MUST be .png. LoginBox.png is the texture you want to appear behind the login text fields etc. Menu Logo.png is your GAME LOGO.

For some reason if you try to remove the Sprite (old logo code) in Character Select it causes a MAV the easiest fix is to make your "Menu Logo.bmp" just black, it will come up as transparent and you wont be able to see it. It can be found in "Data\Textures\".

Next in **Function RunMenu()**
add

```
  ; Setfogrange Distance and colour

   CameraRange Cam, 1, 30000

   CameraFogMode Cam,1

   CameraFogRange Cam, 300, 5200

   CameraFogColor Cam, 0, 51, 102

```

below

```
GY_Load(Cam)

```

You can adjust those settings to your hearts content.

Now for creating dynamic Lights in your set. Before moving onto this section you must know you cannot have more than 8 lights rendering at once or Blitz will crap itself and just die. Keep that in mind when designing your set. Now starting with Ambient lighting add

```
 ;Ambient Light

   Amb_Light = CreateLight(1) ;the 1 means ambient

   LightRange Amb_Light, 10000 ;range (want it high so it reaches everything)

   LightColor Amb_Light, 0, 51, 102 ;RBG colour

   PositionEntity Amb_Light, 0, 1000, 0 ;XYZ positioning

```

under

```
  ; Setfogrange Distance and colour

   CameraRange Cam, 1, 30000

   CameraFogMode Cam,1

   CameraFogRange Cam, 300, 5200

   CameraFogColor Cam, 0, 51, 102

```

To add an omni light add the following

```
;Omni Lights

   Om_Light1 = CreateLight(2) ; 2 means omni

   LightRange Om_Light1, 150

   LightColor Om_Light1, 204, 102, 0

   PositionEntity Om_Light1, -400, 300, 800

```

under your ambient light code. if you want to add another then just change the name of the light for example

```
 Om_Light2 = CreateLight(2)

   LightRange Om_Light2, 150

   LightColor Om_Light2, 204, 102, 0

   PositionEntity Om_Light2, -300, 250, 300

```

etc. It should end up looking something like...

```
Function RunMenu()

   F = ReadFile("Data\Options.dat")

   If F = 0 Then RuntimeError("Could not open Data\Options.dat!")

      Width = ReadShort(F)

      Height = ReadShort(F)

      Depth = ReadByte(F)

      AA = ReadByte(F)

      DefaultVolume# = ReadFloat#(F)

      GrassEnabled = ReadByte(F)

      AnisotropyLevel = ReadByte(F)

      FullScreen = ReadByte(F)

      VSync = ReadByte(F)

   CloseFile(F)

   ResolutionType = 0 ; !WideScreen Ratio 4:3 Ramoida

   If GfxMode3DExists(Width, Height, 16) Or GfxMode3DExists(Width, Height, 32)

      If (Width * 9) = (Height * 16) Then  ResolutionType = 1 ; WideScreen Ratio 16:9 Ramoida

       Select FullScreen

          Case 0

             Graphics3D(Width, Height, Depth,2)

            Initext

          Case 1

             Graphics3D(Width, Height, Depth,1)

            Initext

       End Select

    Else

       Select FullScreen

          Case 0

             Graphics3D(800, 600, 0,2)

            Initext

          Case 1

             Graphics3D(800, 600, 0,1)

            Initext

       End Select

    EndIf

   HidePointer()

   TextureFilter("m_", 1 + 4)

   TextureFilter("a_", 1 + 2)

   PlayIntroMovie()

   Cam = CreateCamera()

   ;WideScreen Adjust Camera

   GYFovCam Cam, Width , Height

   GY_Load(Cam)

   ; Setfogrange Distance and colour

   CameraRange Cam, 1, 30000

   CameraFogMode Cam,1

   CameraFogRange Cam, 300, 5200

   CameraFogColor Cam, 0, 51, 102

   ;-------

   ;LIGHTS

   ;-------

   ;Ambient Light

   Amb_Light = CreateLight(1)

   LightRange Amb_Light, 10000

   LightColor Amb_Light, 0, 51, 102

   PositionEntity Amb_Light, 0, 1000, 0

   ;Omni Lights

   Om_Light1 = CreateLight(2)

   LightRange Om_Light1, 150

   LightColor Om_Light1, 204, 102, 0

   PositionEntity Om_Light1, -400, 300, 800

   Om_Light2 = CreateLight(2)

   LightRange Om_Light2, 150

   LightColor Om_Light2, 204, 102, 0

   PositionEntity Om_Light2, -300, 250, 300

   Om_Light3 = CreateLight(2)

   LightRange Om_Light3, 120

   LightColor Om_Light3, 204, 102, 0

   PositionEntity Om_Light3, -100, 25, 100

```

You will have to change the Location of each light (ambient doesn't matter where it goes) to where you want it.

I think thats it, if your having any problems then leave a comment as i may have left something out. Adding Lights to bones on a model will be V3.0 and is not ready yet so i'll upload that at a later date once i get it working again.