|
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
unter 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
[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
{ "ui_team", CG_Team_f }, und schreiben direkt darunter
[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
case UIMENU_RADIO: trap_Key_SetCatcher( KEYCATCH_UI|KEYCATCH_NUMBERSONLY ); Menus_CloseAll(); Menus_ActivateByName("ingame_radio"); return; und schreiben [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 [b]UIMENU_NEUESMENU,[/b] unter 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 ...
{ 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 [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-
|