AEon@Posted: Sat Sep 04, 2004 5:36 pm :
This is based on tutorial video by PlanetDoom, only this is a more explicit text version, with many additional comments and bug fixes.

In this example I am assuming you have a multiplayer map called base/maps/aeneon.map and will be using that name throughout the following:

  1. To add a levelshot to your map you will need to add 2 folders to your development tree for DOOM 3:

    Code:
    base/guis/map/            // Where your map specific .gui file goes
    base/guis/assets/splash/    // Where the levelshot should reside

  2. Use the MP .gui file for D3DM1 provided by id in pak000.pk4/guis/map/d3dm1.gui as a template for your own map's .gui file.
    Unpack d3dm1.gui e.g. onto e.g. c:\ drive.
  3. Name the file like your .map file. In this case, rename d3dm1.gui to aeneon.gui and place it in your base/guis/map/ folder.
  4. Edit the base/guis/map/aeneon.gui text file. There is a code block that defines the background image on loading:

    Code:
    windowDef BackgroundImage
       {
          rect   0,0,640,480
          visible   1
          background   "gui/loading/d3dm1"
          matcolor   1,1,1,1
       }


    To make this work for us, change the background line to

    Code:
    // background   "gui/assets/splash/aeneon"   // Suggested by PlanetDoom Video, does not work!
    // background   "gui/loading/aeneon"         // IMO correct way, but does not work?!

          background   "guis/assets/splash/aeneon"  // This actually works!


    Again using your .map name instead of the default "d3dm1".

    Next find the windowDef TextTitle block in the .gui file.

    Code:
    windowDef TextTitle
       {
          rect   16,447,610,30
          visible   1
          text   "#str_03487"
          font   "fonts/micro"
          textscale   0.4
          forecolor   1,1,1,0
       }


    Change the text line to the name/title of your map, i.e.

    Code:
    text   "AENEON - AEon's Neon Glow"


    BTW "#str_03487" can be found in pak000.pk4/strings/english.lang: "#str_03487" "D3DM1 - TOMIKO REACTOR".
    Note id's naming convention "<All CAPS map name> - <map title>"

    Finally save the aeneon.gui file.
  5. Then create the background image in e.g. Photoshop that is 512x512 pixel large.

    Save that image as 24bit tga file, into your base/guis/assets/splash/ folder under the name aeneon.tga.
  6. To check for your map, run DOOM 3, under Multiplayer, Create Server, you should see your map plus levelshot.

    Image

    When you run the map via "map aeneon" from the in-game console you will see your new levelshot on loading the map.

    Image



just1n@Posted: Sat Sep 04, 2004 6:16 pm :
Good job.



PsychoDad@Posted: Mon Sep 06, 2004 7:52 am :
Does this also work for Single Player maps?



Scribblehead@Posted: Mon Sep 06, 2004 8:11 am :
PsychoDad wrote:
Does this also work for Single Player maps?


I'd assume the same principle works with SP maps - only way to know, is to try :)



idiom@Posted: Mon Sep 06, 2004 8:55 am :
If you create a 512 by 512 pic and your monitor is at 4:3 aspect ratio, wouldn't that stretch the pic? Or is it stretched so little it's hardly noticeable :P



TheCray_nz@Posted: Mon Sep 06, 2004 9:06 am :
idiom wrote:
If you create a 512 by 512 pic and your monitor is at 4:3 aspect ratio, wouldn't that stretch the pic? Or is it stretched so little it's hardly noticeable :P

You should create the 512x512 image by scaling down the 640x480 or whatever) image. That way, when it's viewed ingame, it'll stretch back to the correct aspect ratio.



idiom@Posted: Mon Sep 06, 2004 9:51 am :
ahh, what a silly thing to make people do :P



MNeMiC@Posted: Mon Sep 06, 2004 10:00 am :
PsychoDad wrote:
Does this also work for Single Player maps?



Yes it works for single player maps, only the loading screen though, there's no 'map thumbnails' for single-player maps, well, unless you look at some of the GUI's ingame.



bb_matt@Posted: Mon Sep 06, 2004 11:42 am :
TheCray_nz wrote:
idiom wrote:
If you create a 512 by 512 pic and your monitor is at 4:3 aspect ratio, wouldn't that stretch the pic? Or is it stretched so little it's hardly noticeable :P

You should create the 512x512 image by scaling down the 640x480 or whatever) image. That way, when it's viewed ingame, it'll stretch back to the correct aspect ratio.


I guess you mean that you take a screenshot of the normal aspect ratio WidthxHeight (640x480, 800x600, 1024x768 etc.) and then resize the Height of the screenshot to 512 and crop the width ?

Alternatively, resize the width to 512 and increate the canvas size to 512 high :)

Or mask of a 512x512 square in your screenshot, if it's big enough,

Or ... - ok that's about it :)



AEon@Posted: Mon Sep 06, 2004 11:57 am :
Since the base/guis/assets/splash/ folder also contains all the SP images, I'd also think the above works for SP maps.

Only that you should probably use a SP map's gui file as a template instead of pak000.pk4/guis/map/d3dm1.gui.

On the Aspect Ratio: Initially I had wanted to write something about that, but simply using the 512x512 cut from a normal shot, leads to an interesting stretched look some folks may intentionally want to use. IMO this looks ok most of the time. Tip: If you actually use Text in the 512x512 shot, this will indeed lead to visually ugly stretching of the font.

As was mentioned the "correct" way is to scale a larger image e.g. 1280x1024 to 512x512 (Photoshop, Alt+i, i - turn off Contrain Proportions, no cropping! required, and for good measure Filter menu, Sharpen, Unsharp Mask...). But note that the aspect ratio for European games normally is different than the ratio in the US ones. I have seen many games running 1280x960 (US) vs. the 1280x1024 I always use.

Here a list of ratios I have available in the UK version of D3, in most cases 1.33 would indeed be ok though:

Code:
Resolution         Ratio
  640x480            1.33
  800x600            1.33
1024x768            1.33
1152x864            1.33
1280x960            1.33       (Not in my list of D3 resolutions)
1280x1024           1.25       <--
1600x1200           1.33


Post some feedback on the SP levelshots, and I will add the info to the first post.

Edit: Fixed, added several things.



blunt3d@Posted: Wed Aug 17, 2005 10:12 am :
Thanks for this Tutorial! I was looking for how to change the loadscreen, npow i know. :D



iceheart@Posted: Wed Aug 17, 2005 10:37 am :
AEon wrote:
But note that the aspect ratio for European games normally is different than the ratio in the US ones. I have seen many games running 1280x960 (US) vs. the 1280x1024 I always use.


Uh, no, this is not geographical. 1280x960 is a 4:3 resolution, just like 640x480 or 1600x1200. 1280x1024 is a very special (5:4) resolution you should only EVER use if you have a LCD monitor with this native resolution!



DoV_Tomas@Posted: Wed Aug 17, 2005 6:00 pm :
Creating a splash screen is a two step process. You put your image in this folder:

base/guis/assets/splash/yourimage.tga

Then you require some gui code to go in this folder:

base/guis/map/levelname.gui

With respect to the code, it must be named the same as your map. Here is the code I usded for my level load shot, you'll just have to change the appropriate lines to suit your assets.

Quote:
windowDef Desktop
{
menugui 1
nocursor 1
rect 0,0,640,480
windowDef BackgroundImage
{
rect 0,0,640,480
visible 1
background "guis/assets/splash/R2MC1"
matcolor 1,1,1,1
}
windowDef Scanlines2
{
rect 0,0,640,480
matcolor 0.02,0.02,0.02,1
background "gui/test/gui_scanlines4"
matscaley 3.75
noevents 1
visible 1
}
windowDef bgBlackTop
{
rect 0,0,640,200
visible 1
windowDef bgBlackTop1
{
rect 0,-21,170,-64
background "guis/assets/mainmenu/bg1"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
windowDef bgBlackTop2
{
rect 170,-21,32,-64
background "guis/assets/mainmenu/bg2"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
windowDef bgBlackTop3
{
rect 202,-21,458,-64
background "guis/assets/mainmenu/bg3"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
}
windowDef bgBlackBottom
{
rect 0,322,640,187
noevents 1
visible 1
windowDef bgBlackBottomFill
{
rect 0,64,640,75
backcolor 0 ,0 ,0 ,0.6
visible 1
noevents 1
}
windowDef bgBlackBottom1
{
rect 0,0,347,64
background "guis/assets/mainmenu/bg1"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
windowDef bgBlackBottom2
{
rect 347,0,32,64
background "guis/assets/mainmenu/bg2"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
windowDef bgBlackBottom3
{
rect 379,0,261,64
background "guis/assets/mainmenu/bg3"
matcolor 1 ,1 ,1 ,0.6
visible 1
noevents 1
}
windowDef bgBlackBottomFade
{
rect 0,30,642,128
background "guis/assets/mainmenu/bg4"
matcolor 0,0,0,1
visible 1
noevents 1
}
}
windowDef TitleBar
{
rect -300,371,512,19
visible 1
background "gui/loading/titlebar"
matcolor 1,1,1,0.1
}
windowDef TextDescription
{
rect 17,394,521,81
visible 1
noevents 1
forecolor 1,1,1,0
text "A custom level by Tom Barak. Warning, contains disturbing themes and nudity and is intended for mature audiences. Player discretion is advised. Refer questions and comments to tbarak@mts.net and refer to the walk through contained in the set up information for level specific details. "
textscale 0.25
font "fonts/an"
}
windowDef TextTitle
{
rect 16,336,610,30
visible 1
text "Return to Mars City"
font "fonts/micro"
textscale 0.4
forecolor 1,1,1,0
}
windowDef TextSubTitle
{
rect 16,367,610,30
visible 1
text "Top Secret Priority Mission"
textscale 0.4
forecolor 1,1,1,0
}
windowDef LoadingFillClip
{
rect 2,18,( "gui::map_loading" * 175 ),16
visible 1
windowDef LoadingFill
{
rect 0,0,256,16
visible 1
background "guis/assets/splash/load"
matcolor 1,1,1,0.8
}
}
windowDef LoadingLine
{
rect 2,18,256,16
visible 1
background "guis/assets/splash/loadborder"
matcolor 1,1,1,0
}
windowDef TextLoading
{
rect 16,-6,123,30
visible 1
text ""
font "fonts/micro"
textscale 0.4
forecolor 0.2,0.6,0.7,1
}
windowDef FlareBox
{
rect 0,0,48,21
background "gui/mainmenu/textflare"
matcolor 0.4 ,0.6, 0.6, 0
visible 1
}
windowDef BlackFade
{
rect 0,0,640,480
backcolor 0, 0, 0, 1
visible 1
}
windowDef Anim
{
rect 0,0,0,0
visible 1

onTime 0 {
transition "BlackFade::backcolor" "0 0 0 1" "0 0 0 0" "400" ;
set "TextLoading::text" "L" ;
transition "FlareBox::matcolor" "0.4 0.6 0.6 0" "0.4 0.6 0.6 0.5" "200" ;

transition "bgBlackTop1::rect" "0 -21 150 -64" "0 -21 170 -64" "400" "0.2" "0.8" ;
transition "bgBlackTop2::rect" "150 -21 32 -64" "170 -21 32 -64" "400" "0.2" "0.8" ;
transition "bgBlackTop3::rect" "182 -21 498 -64" "202 -21 458 -64" "400" "0.2" "0.8" ;
transition "bgBlackBottom1::rect" "0 0 377 64" "0 0 347 64" "400" "0.2" "0.8" ;
transition "bgBlackBottom2::rect" "377 0 32 64" "347 0 32 64" "400" "0.2" "0.8" ;
transition "bgBlackBottom3::rect" "409 0 261 64" "379 0 261 64" "400" "0.2" "0.8" ;
}

onTime 50 {
set "TextLoading::text" "#str_03469" ;
set "FlareBox::rect" "17 0 54 21" ;
}

onTime 100 {
set "TextLoading::text" "#str_03470" ;
set "FlareBox::rect" "37 0 54 21" ;
}

onTime 150 {
set "TextLoading::text" "#str_03343" ;
set "FlareBox::rect" "57 0 54 21" ;

}

onTime 200 {
set "TextLoading::text" "#str_03471" ;
set "FlareBox::rect" "67 0 54 21" ;

transition "TitleBar::rect" "-300 371 512 19" "0 371 512 19" "400" "0.2" "0.8" ;
transition "TextTitle::forecolor" "0 0 0 0" "1 1 1 0.9" "400" "0.2" ".8" ;
transition "TextSubTitle::forecolor" "0 0 0 0" "1 1 1 0.4" "400" "0.2" ".8" ;
}

onTime 250 {
set "TextLoading::text" "#str_03472" ;
set "FlareBox::rect" "81 0 54 21" ;
}

onTime 300 {
set "TextLoading::text" "#str_00408" ;
set "FlareBox::rect" "100 0 54 21" ;
transition "FlareBox::matcolor" "0.4 0.6 0.6 0.5" "0 0 0 0" "200" ;
transition "LoadingLine::matcolor" "1 1 1 0" "1 1 1 0.8" "600" ;
transition "TextLoading::forecolor" "1 1 1 1" "0.2 0.6 0.7 1" "200" ;
transition "TextDescription::forecolor" "0 0 0 0" "1 1 1 1" "400" "0.2" "0.8" ;
transition "TextDescription::rect" "10 394 517 80" "17 394 517 81" "400" "0.2" "0.8" ;
}

}
}