Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
01.09.2002, 15:49
Exec



HiHo!
Das ist mein erstes tutorial für Sof2 und zwar über die Erstellung eines ingame menus (wie z.B. das Radio-Menu)
Gut, dann fangen wir mal an!

filenames sind kursiv
neuer code ist bold
alter code ist normal :)
Ich geb keine Zeilen an, da ich schon so viel am code gemacht hab, das es öfters zu Ungleichheiten führen würde ..

cg_consolecmds.c bei SoF2cgame files

unterQuellcode:
static void CG_ReloadHud_f ( void )
{
    // Reset the string table used for menus  
    String_Init();

    // Clear all menus
    Menu_Reset();
    
    // Reload the menus
    CG_LoadMenus ( "ui/hud.txt" );
}

schreiben wir
Quellcode:[b]static void CG_MeinMenu_f(void)
{
    trap_UI_SetActiveMenu ( UIMENU_NEUESMENU );
}[/b]

so, fast ganz unten in der cg_consolecmds.c suchen wir nach
Quellcode:{ "ui_team",        CG_Team_f },
und schreiben direkt darunter
Quellcode:[b]{ "ui_meinmenu",        CG_MeinMenu_f},[/b]

wobei "ui_meinmenu" der consolen-command ist und beliebig verändert werden kann ...

bei den SoF2ui files in der ui_main.c suchen wir nach
Quellcode:case UIMENU_RADIO:
            trap_Key_SetCatcher( KEYCATCH_UI|KEYCATCH_NUMBERSONLY );
            Menus_CloseAll();
            Menus_ActivateByName("ingame_radio");                
            return;

und schreiben Quellcode:[b]case UIMENU_NEUESMENU:
            trap_Key_SetCatcher( KEYCATCH_UI|KEYCATCH_NUMBERSONLY );
            Menus_CloseAll();
            Menus_ActivateByName("ingame_neuesmenu");                
            return;[/b]

direkt drunter
kurze Erklärung:
case UIMENU_NEUESMENU muss mit dem trap_UI_SetActiveMenu ( [ul]UIMENU_NEUESMENU[/ul] ); übereinstimmen
trap_Key_SetCatcher( KEYCATCH_UI|KEYCATCH_NUMBERSONLY ); bedeuted, das es ein menu ist, und zwar eins wo man nur per Nummertasten wählen kann( numbersonly ...)
Menus_CloseAll(); schliesst alle anderen Menus (logisch, oder?)
Menus_ActivateByName("ingame_neuesmenu"); aktiviert das menu "ingame_neuesmenu" -> dazu später noch

so, dann noch schnell in die ui_public.h und schnell noch ein Quellcode:[b]UIMENU_NEUESMENU,[/b] unter Quellcode:UIMENU_RADIO,

Also, geschafft! Das war auch schon alles zum eigendlichen Code - aba längst noch nicht alles, denn der größte Teil kommt erst jetzt!

so, ab in den "ui" Ordner eures Mod-Verzeichnisses und gleich ne neue file erstellt!
Ich nenn sie einfach mal "ingame_neuesmenu.menu" :D

so, das wird jetzt der längste Teil, aber ich versuch so viel wie möglich zu erklären ...
Quellcode:
{
    menuDef
    {
        name            "ingame_neuesmenu" //activatebyname sag ich nur ...
        visible            0
        fullScreen        0
        rect            -100 0 640 480 //position des fensters
        focusColor        1 .85 0 1
        disablecolor    .12 .14 .08 .5

        onOpen//was soll passieren, wenn man das fenster öffnet? sounds abspielen, oÄ
        {
        }

        onClose//was passiert, wenn das fenster geschlossen wird?
        {
            exec    "ui_team 1";
        }

        onESC//was passiert, wenn man ESC drückt?
        {
            exec  "ui_team 1" ;
        }

        ////////////////////////////////////////////////////////////////////////
        //  Dialog frame
        ////////////////////////////////////////////////////////////////////////

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        130 70 220 250
            background    "gfx/menus/ingame/background.png"
            backcolor    1 1 1 1
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        124 65 8 8
            background    "gfx/menus/ingame/frame_topleft.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        130 65 220 8
            background    "gfx/menus/ingame/frame_top.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        350 65 8 8
            background    "gfx/menus/ingame/frame_topright.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        124 320 8 8
            background    "gfx/menus/ingame/frame_bottomleft.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        130 320 220 8
            background    "gfx/menus/ingame/frame_bottom.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        350 320 8 8
            background    "gfx/menus/ingame/frame_bottomright.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        350 70 8 250
            background    "gfx/menus/ingame/frame_right.png"
            visible        1
            decoration
        }

        itemDef
        {
            name        window
            style        WINDOW_STYLE_SHADER
            rect        124 70 8 250
            background    "gfx/menus/ingame/frame_left.png"
            visible        1
            decoration
        }

        //hier endet der teil, der dem ganzen ein Aussehen gibt, die itemdefs kann man auch weglassen, probierts einfach

        ////////////////////////////////////////////////////////////////////////
        //  Title
        ////////////////////////////////////////////////////////////////////////
        itemDef
        {
            style        WINDOW_STYLE_FILLED
            rect        130 70 218 30 //wieder mal die position + größe
            forecolor    0 0 0 1 //farbe -> rgba => 0 0 0 1 schwarz
            backcolor    0 0 0 .25//hintergrundfarbe
            visible        1//sichtbar?
            border        1//hat das ding nen rand?
            bordercolor    0 0 0 1//farbe des randes

            textalignx    110
            textaligny    6
            textalign    1
            textfont    "hud"//text-schriftart
            textscale    .63//testgröße
            text        "Mein Menu!"//der eigendliche text
        }

        ///////////////////////////////////////////////////////////////////////
        // BUTTONS
        ///////////////////////////////////////////////////////////////////////
        itemDef
        {
            name        button1 //der erste button
            type        ITEM_TYPE_BUTTON//hier wird festgelget, das es ein button ist
            rect        150    120 100 20
            text        "Der Erste Button"
            hotkey        "1"//der hotkey halt ... wenn man zahl 1 drückt, geht das ding hier ab
            visible        1

            textfont    "hud"
            textscale    .53

            forecolor    0 0 0 1

            action
            {
                close ingame_neuesmenu ;//wenn man was drückt, wird das menu geschlossen
                //hier kann man seine command hinzufügen
            }
            mouseEnter //wenn man über den button fährt, kann man ihn verändern!
            {
                play "sound/misc/menus/hilite1.wav" ; //es wird ein sound abgespielt
                setitemcolor radio1_button backcolor .12 .14 .08 1//hintergrundfarbe
                setitemcolor radio1_button forecolor .49 .56 .27 1//und schriftfarbe verändert
            }                
            mouseExit
            {
                setitemcolor radio1_button backcolor 0 0 0 0//hier wirds wieder auf den normalwert gebracht
                setitemcolor radio1_button forecolor 0 0 0 1
            }
        }

        temDef//hier mal nen einfachen text, der nix macht, aba halt da steht :)
        {
            rect        150    140 100 20
            text                "Das ist grober Hirnschrott und hat nix zu bedeuten"
            textfont            "lcdsmall"//mal ne andere schriftart
            textscale            .35
            forecolor            .25 0 0 1//ein bisschen rot
            visible                1
            decoration
        }

    }
}

Puh, da haben wir auch das eigendlich Menu geschafft, aber wird müssen das Menu ja noch vorladen, also ab in die ingame.txt
und einfach ein Quellcode:[b]loadMenu { "ui/ingame_neuesmenu.menu" }[/b] irgendwo zwischen die { } Klammern schreiben ...

Ohhh, schon geschafft? Ja! Jetzt einfach die Mod starten und in die console "ui_meinmenu" schreiben, theoretisch sollte sich dann ein Menu öffnen, in dem der Inhalt von da oben drin steht.
Wenn nich, dann is irgendwas falsch :)

So, ich hoffe, das hat euch geholfen ein Menu in SoF2 zu erstellen und mehr über das Menu-System von Q3 (wa sja auch in SoF2 verwendet wird), erfahrt ihr hier: http://www.linux.ucla.edu/~phaethon/q3tamenu/q3tamenu.html
Das ist die Nr.1 Referenz zu den Menus, da steht wirklich alles drin, was man braucht!

Bei Fragen, Anregung,Kritik einfach ne email an execuitoner@nexgo.de
Ach, und wenn ich was vergessen hab, dann schreibt mir einfach, kann ja jedem mal passieren :)

(c) 2002 by Exec

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche