diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj index f3ffcd11..00ee3b06 100755 --- a/Source/FreeCS-CE.prj +++ b/Source/FreeCS-CE.prj @@ -62,6 +62,7 @@ + @@ -111,9 +112,18 @@ - - - - + + + + + + + + + + + + + diff --git a/Source/Menu/Defs.h b/Source/Menu/Defs.h index 85a672fb..c1af117c 100755 --- a/Source/Menu/Defs.h +++ b/Source/Menu/Defs.h @@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. var vector vVideoSize; var vector vMenuOffset; -var vector autocvar_menu_color = '1 0.59 0.19'; +var vector autocvar_menu_fgcolor = '1 0.59 0.19'; var vector vMousePos; var float fInputKeyCode; @@ -45,7 +45,6 @@ enum { }; var int iMenuActive; - var int iScrollbarHold; // Because of this, don't put more than one scrollbar per screen :) float frametime; @@ -55,6 +54,9 @@ int iMenu; string *sMapList; int iMapCount; +var float FONT_MENU; + +#define MENU_COUNT 5 enum { MENU_MAIN, MENU_MULTIPLAYER, @@ -63,6 +65,35 @@ enum { MENU_QUIT }; +enum { + HEAD_ADVANCED, + HEAD_ADVOPTIONS, + HEAD_AUDIO, + HEAD_CONFIG, + HEAD_CONTROLS, + HEAD_CREATEGAME, + HEAD_CREATEROOM, + HEAD_CUSTOM, + HEAD_CUSTOMIZE, + HEAD_FILTER, + HEAD_GAMEOPTS, + HEAD_GORE, + HEAD_INETGAMES, + HEAD_KEYBOARD, + HEAD_LAN, + HEAD_LOAD, + HEAD_MULTI, + HEAD_README, + HEAD_ROOM, + HEAD_ROOMS, + HEAD_SAVE, + HEAD_SAVELOAD, + HEAD_SPECGAMES, + HEAD_VIDEO, + HEAD_VIDMODES, + HEAD_VIDOPTIONS +}; + #define MENU_BUTTONS 69 enum { BTN_NEWGAME, @@ -101,7 +132,8 @@ enum { BTN_EXIT, BTN_CONNECT, BTN_REFRESH, - BTN_FILTER, + BTN_FILTER1, + BTN_FILTER2, BTN_CREATE, BTN_CREATEGAME, BTN_CHATROOMS, @@ -136,5 +168,14 @@ enum { BTN_SPECTATEGAMES }; +typedef struct { + void() vMenu; + int iHeaderID; +} fcsMenu; + void Menu_SetClipArea( vector vPosition, vector vRegion ); -void Menu_ResetClipArea( void ); \ No newline at end of file +void Menu_ResetClipArea( void ); + +float Math_Lerp( float fA, float fB, float fPercent ) { + return ( fA * ( 1 - fPercent ) ) + ( fB * fPercent ); +} \ No newline at end of file diff --git a/Source/Menu/Draw.c b/Source/Menu/Draw.c index b2b39608..05117359 100755 --- a/Source/Menu/Draw.c +++ b/Source/Menu/Draw.c @@ -18,15 +18,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -enum { - MAIN_NONE, - MAIN_BROWSER, - MAIN_HOST, - MAIN_OPTIONS, - MAIN_REPLAY, - MAIN_QUIT, - MAIN_DISCONNECT -}; /* ================= @@ -68,14 +59,6 @@ void m_draw( vector vScreenSize ) { } m_drawback(); - - if ( iMenu == MENU_MAIN ) { - Menu_Main(); - } else if ( iMenu == MENU_MULTIPLAYER ) { - Menu_Multiplayer(); - } else if ( iMenu == MENU_MULTIPLAYER_CREATE ) { - Menu_Multiplayer_Create(); - } else if ( iMenu == MENU_QUIT ) { - Menu_Quit(); - } + fcsMain[ iMenu ].vMenu(); + Header_Draw(); } diff --git a/Source/Menu/Header.c b/Source/Menu/Header.c new file mode 100755 index 00000000..d8c31336 --- /dev/null +++ b/Source/Menu/Header.c @@ -0,0 +1,90 @@ +/* +FreeCS Project +Copyright (C) 2016, 2017 Marco "eukara" Hladik + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +fcsMenu fcsMain[ MENU_COUNT ] = { + { Menu_Main, -1 }, + { Menu_Multiplayer, HEAD_MULTI }, + { Menu_Multiplayer_Create, HEAD_CREATEGAME }, + { Menu_Multiplayer_Create, HEAD_ADVOPTIONS }, + { Menu_Quit, -1 } +}; + +string sHeaderImage[] = { + "gfx/shell/head_advanced", + "gfx/shell/head_advoptions", + "gfx/shell/head_audio", + "gfx/shell/head_config", + "gfx/shell/head_controls", + "gfx/shell/head_creategame", + "gfx/shell/head_createroom", + "gfx/shell/head_custom", + "gfx/shell/head_customize", + "gfx/shell/head_filter", + "gfx/shell/head_gameopts", + "gfx/shell/head_gore", + "gfx/shell/head_inetgames", + "gfx/shell/head_keyboard", + "gfx/shell/head_lan", + "gfx/shell/head_load", + "gfx/shell/head_multi", + "gfx/shell/head_readme", + "gfx/shell/head_room", + "gfx/shell/head_rooms", + "gfx/shell/head_save", + "gfx/shell/head_saveload", + "gfx/shell/head_specgames", + "gfx/shell/head_video", + "gfx/shell/head_vidmodes", + "gfx/shell/head_vidoptions" +}; + +void Header_Draw( void ) { + static int iHeader; + static int iLastHeader = -1; + static float fHeaderLerp = 1.0f; + static vector vHeaderPos; + static vector vHeaderSize; + + iHeader = fcsMain[ iMenu ].iHeaderID; + + if ( iHeader != iLastHeader ) { + fHeaderLerp = 0.0f; + iLastHeader = iHeader; + } + + if ( iHeader == -1 ) { + return; + } + + if ( fHeaderLerp < 1.0f ) { + vHeaderPos_x = Math_Lerp( 484, 18, fHeaderLerp ); + vHeaderPos_y = Math_Lerp( 454, 32, fHeaderLerp ); + + vHeaderSize_x = Math_Lerp( 156, 460, fHeaderLerp ); + vHeaderSize_y = Math_Lerp( 26, 80, fHeaderLerp ); + + vHeaderPos += vMenuOffset; + drawpic( vHeaderPos, sHeaderImage[iHeader], vHeaderSize, '1 1 1', 0.5f, 1 ); + + fHeaderLerp += ( frametime * 3 ); + } else { + drawpic( '18 32' + vMenuOffset, sHeaderImage[ iHeader ], '460 80', '1 1 1', 0.5f, 1 ); + } +} \ No newline at end of file diff --git a/Source/Menu/Init.c b/Source/Menu/Init.c index 7f1ae0b3..be5bd05f 100755 --- a/Source/Menu/Init.c +++ b/Source/Menu/Init.c @@ -38,8 +38,7 @@ void m_init( void ) { } search_end( shMaps ); - - Menu_ResetClipArea(); + FONT_MENU = loadfont( "menu", "gfx/menuchars", "32", -1 ); } /* diff --git a/Source/Menu/Input.c b/Source/Menu/Input.c index 2496db90..8ddddd62 100755 --- a/Source/Menu/Input.c +++ b/Source/Menu/Input.c @@ -18,7 +18,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -// Temporary state var vector vMenuClickMins; var vector vMenuClickMaxs; @@ -52,6 +51,14 @@ int Menu_InputCheckMouse( vector vPosition, vector vRegion ) { return FALSE; } +/* +================= +Menu_SetClipArea + +This will set the region in which mouse activity and drawing +of objects will happen. Use it to clip text and mouse activity. +================= +*/ void Menu_SetClipArea( vector vPosition, vector vRegion ) { vPosition += vMenuOffset; vMenuClickMins = vPosition; @@ -65,6 +72,13 @@ void Menu_SetClipArea( vector vPosition, vector vRegion ) { drawsetcliparea( vPosition_x, vPosition_y, vRegion_x, vRegion_y ); } +/* +================= +Menu_ResetClipArea + +Resets the clip area that was set via Menu_SetClipArea +================= +*/ void Menu_ResetClipArea( void ) { vMenuClickMins = vMenuOffset; vMenuClickMaxs = vMenuOffset + '640 480'; diff --git a/Source/Menu/MenuMain.c b/Source/Menu/MenuMain.c index 139e8858..71a2611b 100755 --- a/Source/Menu/MenuMain.c +++ b/Source/Menu/MenuMain.c @@ -18,6 +18,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* +================= +Menu_Main + +The first, main screen +================= +*/ void Menu_Main( void ) { static void Main_ButtonConsole( void ) { localcmd( "toggleconsole\n" ); @@ -40,6 +47,13 @@ void Menu_Main( void ) { } +/* +================= +Menu_Quit + +The quit screen +================= +*/ void Menu_Quit( void ) { static void Quit_Cancel( void ) { iMenu = MENU_MAIN; @@ -49,8 +63,8 @@ void Menu_Quit( void ) { } Object_Frame( '192 192', '256 96' ); - Object_Label( '200 216', "FREECS_QUITMSG", '8 8' ); + Object_Label( '200 216', _("FREECS_QUITMSG"), '8 8' ); - Object_Button( '200 248', BTN_QUIT, Quit_Exit, fButtonAlpha[0] ); - Object_Button_Right( '440 248', BTN_CANCEL, Quit_Cancel, fButtonAlpha[1] ); + Object_Button( '208 248', BTN_QUIT, Quit_Exit, fButtonAlpha[0] ); + Object_Button( '364 248', BTN_CANCEL, Quit_Cancel, fButtonAlpha[1] ); } \ No newline at end of file diff --git a/Source/Menu/MenuMultiplayer.c b/Source/Menu/MenuMultiplayer.c index 5d37144d..ad76e07b 100755 --- a/Source/Menu/MenuMultiplayer.c +++ b/Source/Menu/MenuMultiplayer.c @@ -29,18 +29,34 @@ float fldTimelimit; float fldFraglimit; float fServerClickTime; +/* +================= +Menu_Multiplayer_Connect + +Connect to a specific ServerID from the hostcache +================= +*/ void Menu_Multiplayer_Connect( int iServerID ) { + // Filter dead entries if ( gethostcachenumber( fldMaxplayers, iServerID ) <= 0 ) { return; } + // Connect as long as a real server is actually selected if ( iServerID >= 0 ) { localcmd( sprintf( "connect %s\n", gethostcachestring( fldAddress, iServerID ) ) ); m_hide(); } } -int Menu_Multiplayer_Find_Item( vector vPosition, int i, __inout int iSelected ) { +/* +================= +Menu_Multiplayer_Find_Item + +Draw a single server item from the hostcache +================= +*/ +void Menu_Multiplayer_Find_Item( vector vPosition, int i, __inout int iSelected ) { float fItemAlpha = 1.0f; vPosition += vMenuOffset; @@ -65,10 +81,6 @@ int Menu_Multiplayer_Find_Item( vector vPosition, int i, __inout int iSelected ) fItemAlpha = 0.8; } - if ( gethostcachenumber( fldPing, i ) == -1 ) { - return FALSE; - } - if ( iSelected == i ) { drawfill( [ vPosition_x, vPosition_y - 1 ], [ 397, 10 ], '1 1 1', 0.5, 2 ); drawstring( [vPosition_x + 8, vPosition_y], sprintf( "%.25s", gethostcachestring( fldName, i ) ), '8 8 0', '1 1 1', 1.0f, FALSE ); @@ -81,10 +93,15 @@ int Menu_Multiplayer_Find_Item( vector vPosition, int i, __inout int iSelected ) drawstring( [vPosition_x + 298, vPosition_y], sprintf( "%d/%d", gethostcachenumber( fldPlayers, i ), gethostcachenumber( fldMaxplayers, i ) ), '8 8 0', '1 1 1', fItemAlpha, FALSE ); drawstring( [vPosition_x + 362, vPosition_y], sprintf( "%.3s", ftos( gethostcachenumber( fldPing, i ) ) ), '8 8 0', '1 1 1', fItemAlpha, FALSE ); } - - return TRUE; } +/* +================= +Menu_Multiplayer + +First mulitplayer screen with the server browser +================= +*/ void Menu_Multiplayer( void ) { static int iSelectedServer = -1; static int iScrollServer; @@ -135,24 +152,29 @@ void Menu_Multiplayer( void ) { Object_Frame( '196 140', '404 308' ); Object_Scrollbar( '604 140', 308, iScrollServer ); - Object_Label( '208 124', "Game", '8 8' ); - Object_Label( '418 124', "Map", '8 8' ); - Object_Label( '498 124', "Players", '8 8' ); - Object_Label( '562 124', "Ping", '8 8' ); + Object_Label( '208 124', _("MP_GAME"), '8 8' ); + Object_Label( '418 124', _("MP_MAP"), '8 8' ); + Object_Label( '498 124', _("MP_PLAYERS"), '8 8' ); + Object_Label( '562 124', _("MP_PING"), '8 8' ); Menu_SetClipArea( '196 141', '404 306' ); vector vListPos = '200 145'; vListPos_y -= fabs( ( ( iServersTotal - 8 ) * 10 ) * ( iScrollServer / 308 ) ); - for ( float i = 0; i < iServersTotal; i++ ) { - if ( Menu_Multiplayer_Find_Item( vListPos, i, iSelectedServer ) == TRUE ) { - vListPos_y += 10; - } else { - break; - } + + for ( int i = 0; i < iServersTotal; i++ ) { + Menu_Multiplayer_Find_Item( vListPos, i, iSelectedServer ); + vListPos_y += 10; } Menu_ResetClipArea(); } +/* +================= +Menu_Multiplayer_Create + +Server creation menu screen +================= +*/ void Menu_Multiplayer_Create( void ) { static int iSelectedMap; static int iScrollMap; @@ -161,15 +183,18 @@ void Menu_Multiplayer_Create( void ) { float fAlpha = 0.8; vPosition += vMenuOffset; - if ( Menu_InputCheckMouse( vPosition, '182 10' ) == TRUE ) { - if ( fMouseClick == TRUE ) { - iSelectedMap = iIndex; - fMouseClick = FALSE; + if ( iScrollbarHold == FALSE ) { + if ( Menu_InputCheckMouse( vPosition, '182 10' ) == TRUE ) { + if ( fMouseClick == TRUE ) { + iSelectedMap = iIndex; + fMouseClick = FALSE; + } + fAlpha = 1.0f; } - fAlpha = 1.0f; } if ( iSelectedMap == iIndex ) { + drawfill( [ vPosition_x, vPosition_y - 1 ], [ 182, 10 ], '1 1 1', 0.5, 2 ); drawstring( vPosition, sMapList[ iIndex ], '8 8', '1 1 1', 1.0f, 0 ); } else { drawstring( vPosition, sMapList[ iIndex ], '8 8', '0.9 0.9 0.9', fAlpha, 0 ); @@ -191,7 +216,7 @@ void Menu_Multiplayer_Create( void ) { Object_Button( '32 180', BTN_OK, Create_ButtonOK, fButtonAlpha[1] ); Object_Button( '32 212', BTN_CANCEL, Create_ButtonCancel, fButtonAlpha[2] ); - Object_Label( '384 148', "Maps:", '8 8' ); + Object_Label( '384 148', _("MP_MAPS"), '8 8' ); Object_Frame( '384 164', '190 288' ); Object_Scrollbar( '576 164', 288, iScrollMap ); diff --git a/Source/Menu/Objects.c b/Source/Menu/Objects.c index f05ae3bf..4830776e 100755 --- a/Source/Menu/Objects.c +++ b/Source/Menu/Objects.c @@ -19,79 +19,77 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ string sButtonLabels[ MENU_BUTTONS ] = { - "BTN_NEWGAME", - "BTN_RESUMEGAME", - "BTN_TRAINING", - "BTN_CONFIG", - "BTN_LOADGAME", - "BTN_SAVELOAD", - "BTN_README", - "BTN_QUIT", - "BTN_MULTIPLAYER", - "BTN_EASY", - "BTN_MEDIUM", - "BTN_DIFFICULT", - "BTN_SAVEGAME", - "BTN_LOADGAME2", - "BTN_CANCEL", - "BTN_OPTIONS", - "BTN_VIDEO", - "BTN_AUDIO", - "BTN_CONTROLS", - "BTN_DONE", - "BTN_QUICKSTART", - "BTN_DEFAULTS", - "BTN_OK", - "BTN_VIDEOOPTIONS", - "BTN_VIDEOMODES", - "BTN_ADVCONTROLS", - "BTN_ORDER", - "BTN_DELETE", - "BTN_INTERNET", - "BTN_IRCCHAT", - "BTN_LAN", - "BTN_CUSTOMIZE", - "BTN_SKIP", - "BTN_EXIT", - "BTN_CONNECT", - "BTN_REFRESH", - "BTN_FILTER", - "BTN_CREATE", - "BTN_CREATEGAME", - "BTN_CHATROOMS", - "BTN_LISTROOMS", - "BTN_SEARCH", - "BTN_SERVERS", - "BTN_JOIN", - "BTN_FIND", - "BTN_CREATEROOM", - "BTN_JOINGAME", - "BTN_SEARCHGAMES", - "BTN_FINDGAME", - "BTN_STARTGAME", - "BTN_GAMEINFO", - "BTN_UPDATE", - "BTN_ADDSERVER", - "BTN_DISCONNECT", - "BTN_CONSOLE", - "BTN_CONTENTCONTROL", - "BTN_UPDATE", - "BTN_VISITWON", - "BTN_PREVIEWS", - "BTN_ADVOPTIONS", - "BTN_3DINFO", - "BTN_CUSTOMGAME", - "BTN_ACTIVATE", - "BTN_INSTALL", - "BTN_VISITWEB", - "BTN_REFRESHLIST", - "BTN_DEACTIVATE", - "BTN_SPECTATEGAME", - "BTN_SPECTATEGAMES" + _("BTN_NEWGAME"), + _("BTN_RESUMEGAME"), + _("BTN_TRAINING"), + _("BTN_CONFIG"), + _("BTN_LOADGAME"), + _("BTN_SAVELOAD"), + _("BTN_README"), + _("BTN_QUIT"), + _("BTN_MULTIPLAYER"), + _("BTN_EASY"), + _("BTN_MEDIUM"), + _("BTN_DIFFICULT"), + _("BTN_SAVEGAME"), + _("BTN_LOADGAME2"), + _("BTN_CANCEL"), + _("BTN_OPTIONS"), + _("BTN_VIDEO"), + _("BTN_AUDIO"), + _("BTN_CONTROLS"), + _("BTN_DONE"), + _("BTN_QUICKSTART"), + _("BTN_DEFAULTS"), + _("BTN_OK"), + _("BTN_VIDEOOPTIONS"), + _("BTN_VIDEOMODES"), + _("BTN_ADVCONTROLS"), + _("BTN_ORDER"), + _("BTN_DELETE"), + _("BTN_INTERNET"), + _("BTN_IRCCHAT"), + _("BTN_LAN"), + _("BTN_CUSTOMIZE"), + _("BTN_SKIP"), + _("BTN_EXIT"), + _("BTN_CONNECT"), + _("BTN_REFRESH"), + _("BTN_FILTER"), + _("BTN_CREATE"), + _("BTN_CREATEGAME"), + _("BTN_CHATROOMS"), + _("BTN_LISTROOMS"), + _("BTN_SEARCH"), + _("BTN_SERVERS"), + _("BTN_JOIN"), + _("BTN_FIND"), + _("BTN_CREATEROOM"), + _("BTN_JOINGAME"), + _("BTN_SEARCHGAMES"), + _("BTN_FINDGAME"), + _("BTN_STARTGAME"), + _("BTN_GAMEINFO"), + _("BTN_UPDATE"), + _("BTN_ADDSERVER"), + _("BTN_DISCONNECT"), + _("BTN_CONSOLE"), + _("BTN_CONTENTCONTROL"), + _("BTN_UPDATE"), + _("BTN_VISITWON"), + _("BTN_PREVIEWS"), + _("BTN_ADVOPTIONS"), + _("BTN_3DINFO"), + _("BTN_CUSTOMGAME"), + _("BTN_ACTIVATE"), + _("BTN_INSTALL"), + _("BTN_VISITWEB"), + _("BTN_REFRESHLIST"), + _("BTN_DEACTIVATE"), + _("BTN_SPECTATEGAME"), + _("BTN_SPECTATEGAMES") }; -#define autocvar_menu_color '1 0.59 0.19' - /* ================= Object_Button @@ -110,9 +108,7 @@ void Object_Button( vector vPosition, int iButtonID, void() vFunction, __inout f fAlpha = 0.0f; } - float sWidth = stringwidth( sButtonLabels[ iButtonID ], TRUE, '16 16' ); - - if ( Menu_InputCheckMouse( vPosition, [ sWidth, 16 ] ) == TRUE ) { + if ( Menu_InputCheckMouse( vPosition, '156 26' ) == TRUE ) { if ( iLastButton != iButtonID ) { localcmd( "play ../media/launch_deny2.wav\n" ); } @@ -125,21 +121,13 @@ void Object_Button( vector vPosition, int iButtonID, void() vFunction, __inout f fMouseClick = FALSE; } } - - drawstring( vPosition, sButtonLabels[ iButtonID ], '16 16', autocvar_menu_color, 1.0f, 0 ); - drawstring( vPosition, sButtonLabels[ iButtonID ], '16 16', '1 1 1', fAlpha, 0 ); -} -/* -================= -Object_Button_Right - -A right-aligned version of Object_Button -================= -*/ -void Object_Button_Right( vector vPosition, int iButtonID, void() vFunction, __inout float fAlpha ) { - vPosition_x -= stringwidth( sButtonLabels[ iButtonID ], TRUE, '16 16' ); - Object_Button( vPosition, iButtonID, vFunction, fAlpha ); + vector vSrcPos, vSrcSize; + vSrcPos_x = 0; + vSrcPos_y = ( 78 * iButtonID ) / 5538; + vSrcSize = [ 1, 26 / 5538 ]; + drawsubpic( vPosition, '156 26', "gfx/shell/btns_main", vSrcPos, vSrcSize, '1 1 1', 1.0f, 1 ); + drawsubpic( vPosition, '156 26', "gfx/shell/btns_main", vSrcPos + [ 0, 52 / 5538 ], vSrcSize, '1 1 1', fAlpha, 1 ); } /* @@ -155,11 +143,11 @@ void Object_Frame( vector vPosition, vector vSize ) { // Draw the background drawfill( vPosition, vSize, '0 0 0', 1.0f ); - drawfill( vPosition, [vSize_x, 1], autocvar_menu_color, 1.0f ); // Top - drawfill( [vPosition_x, vPosition_y + vSize_y], [vSize_x, 1], autocvar_menu_color, 1.0f ); // Bottom + drawfill( vPosition, [vSize_x, 1], autocvar_menu_fgcolor, 1.0f ); // Top + drawfill( [vPosition_x, vPosition_y + vSize_y], [vSize_x, 1], autocvar_menu_fgcolor, 1.0f ); // Bottom - drawfill( vPosition, [1, vSize_y], autocvar_menu_color, 1.0f ); // Left - drawfill( [vPosition_x + vSize_x, vPosition_y], [1, vSize_y + 1], autocvar_menu_color, 1.0f ); // Right + drawfill( vPosition, [1, vSize_y], autocvar_menu_fgcolor, 1.0f ); // Left + drawfill( [vPosition_x + vSize_x, vPosition_y], [1, vSize_y + 1], autocvar_menu_fgcolor, 1.0f ); // Right } /* @@ -171,7 +159,7 @@ A label in a cvar driven color scheme */ void Object_Label( vector vPosition, string sLabel, vector vSize ) { vPosition += vMenuOffset; - drawstring( vPosition, sLabel, vSize, autocvar_menu_color, 1.0f, 0 ); + drawstring( vPosition, sLabel, vSize, autocvar_menu_fgcolor, 1.0f, 0 ); } /* @@ -222,6 +210,6 @@ void Object_Scrollbar( vector vPosition, int iHeight, __inout int iProgress ) { iHeight += 16; - drawfill( [vPosition_x, vPosition_y + iProgress], [ 16, 16 ], autocvar_menu_color, 1.0f ); + drawfill( [vPosition_x, vPosition_y + iProgress], [ 16, 16 ], autocvar_menu_fgcolor, 1.0f ); } diff --git a/Source/Menu/progs.src b/Source/Menu/progs.src index 6e041de3..4ccad203 100755 --- a/Source/Menu/progs.src +++ b/Source/Menu/progs.src @@ -13,5 +13,6 @@ Input.c Objects.c MenuMain.c MenuMultiplayer.c +Header.c Draw.c #endlist diff --git a/Source/Server/Entities.c b/Source/Server/Entities.c index a184b780..50997090 100755 --- a/Source/Server/Entities.c +++ b/Source/Server/Entities.c @@ -62,7 +62,12 @@ void Entities_UseTargets( void ) { while ( eFind ) { self = eFind; //bprint( sprintf( "Triggering %s %s\n", self.classname, self.targetname ) ); - self.vUse(); + + // Make sure we really do have a target... + if ( self.vUse != __NULL__ ) { + self.vUse(); + } + eFind = eFind.chain; } self = eOld; @@ -100,6 +105,7 @@ Called .vector vOldOrigin; .vector vOldAngle; .void() vRespawn; +.void() vOldUse; void Entities_InitRespawnable( void() vRespawnFunc ) { self.sOldModel = self.model; self.fOldSolid = self.solid; @@ -107,6 +113,7 @@ void Entities_InitRespawnable( void() vRespawnFunc ) { self.vOldOrigin = self.origin; self.vOldAngle = self.angles; self.vRespawn = vRespawnFunc; + self.vOldUse = self.vUse; self.fRespawns = TRUE; } @@ -116,6 +123,7 @@ void Entities_Respawn( void ) { self.health = self.fOldHealth; self.origin = self.vOldOrigin; self.angles = self.vOldAngle; + self.vUse = self.vOldUse; Entities_RenderSetup(); self.vRespawn(); } diff --git a/Source/Server/EnvObjects.c b/Source/Server/EnvObjects.c index 6b329f1f..15ddd093 100755 --- a/Source/Server/EnvObjects.c +++ b/Source/Server/EnvObjects.c @@ -178,7 +178,7 @@ enumflags { // TODO: Finish cosmetic effects void env_explosion( void ) { static void env_explosion_use( void ) { - te_explosion( self.origin ); + Effect_CreateExplosion( self.origin ); if ( !( self.spawnflags & ENVEXPLO_NODAMAGE ) ) { Damage_Radius( self.origin, self, 500, self.iMagnitude ); diff --git a/Source/Server/FuncBreakable.c b/Source/Server/FuncBreakable.c index d49d5b28..6df8e839 100755 --- a/Source/Server/FuncBreakable.c +++ b/Source/Server/FuncBreakable.c @@ -72,6 +72,13 @@ func_breakable_die ================= */ void func_breakable_die( int iNull ) { + // Make sure this is dead + if ( self.vUse == __NULL__ ) { + return; + } + + self.health = 0; + self.vUse = __NULL__; Effect_BreakModel( self.absmin, self.absmax, self.velocity, self.material ); Entities_UseTargets(); Entities_Remove(); diff --git a/Source/Server/FuncDoorRotating.c b/Source/Server/FuncDoorRotating.c index a351a14e..db8f3558 100755 --- a/Source/Server/FuncDoorRotating.c +++ b/Source/Server/FuncDoorRotating.c @@ -206,7 +206,8 @@ void FuncDoorRotate_Blocked( void ) { ================= BrushRotate - Brush entity that rotates into a specific direction. Has the ability to trigger an object once touched, used or triggered otherwise. + Brush entity that rotates into a specific direction. + Has the ability to trigger an object once touched, used or triggered otherwise. ================= */ void func_door_rotating( void ) { diff --git a/Source/Server/FuncPushable.c b/Source/Server/FuncPushable.c index 7d94dd43..4381b823 100755 --- a/Source/Server/FuncPushable.c +++ b/Source/Server/FuncPushable.c @@ -40,8 +40,10 @@ void func_pushable( void ) { } static void func_pushable_use( void ) { if ( eActivator.classname != "player" ) { - func_breakable_use(); - return; + if ( self.health > 0 ) { + func_breakable_use(); + return; + } } self.movedir = eActivator.movement; diff --git a/Source/Shared/Effects.c b/Source/Shared/Effects.c index 69c43f22..6399a569 100755 --- a/Source/Shared/Effects.c +++ b/Source/Shared/Effects.c @@ -29,7 +29,7 @@ void Effect_CreateExplosion( vector vPos ) { msg_entity = self; multicast( vPos, MULTICAST_PVS ); #else - print( "Explosion\n" ); + static void Effect_CreateExplosion_Animate( void ) { if ( self.frame >= self.maxframe ) { remove( self ); @@ -42,12 +42,15 @@ void Effect_CreateExplosion( vector vPos ) { entity eExplosion = spawn(); setorigin( eExplosion, vPos ); setmodel( eExplosion, "sprites/fexplo.spr" ); + sound( eExplosion, CHAN_WEAPON, sprintf( "weapons/explode%d.wav", floor( random() * 3 ) + 3 ), 1, ATTN_NORM ); eExplosion.think = Effect_CreateExplosion_Animate; eExplosion.nextthink = time + 0.05f; eExplosion.effects = EF_ADDITIVE; eExplosion.drawmask = MASK_ENGINE; eExplosion.maxframe = modelframecount( eExplosion.modelindex ); + + te_explosion( vPos ); #endif } diff --git a/Source/Shared/WeaponHEGrenade.c b/Source/Shared/WeaponHEGrenade.c index d6e613d9..1ec8a53a 100755 --- a/Source/Shared/WeaponHEGrenade.c +++ b/Source/Shared/WeaponHEGrenade.c @@ -97,7 +97,6 @@ void WeaponHEGRENADE_Throw( void ) { static void WeaponHEGRENADE_Explode( void ) { Effect_CreateExplosion( self.origin ); Damage_Radius( self.origin, self, 100, 512 ); - sound( self, CHAN_WEAPON, sprintf( "weapons/explode%d.wav", floor( random() * 3 ) + 3 ), 1, ATTN_NORM ); remove( self ); } static void Weapon_HEGRENADE_Touch( void ) { diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index 27a21aa7..f30807f5 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/csprogs.dat.en.po b/freecs/csprogs.dat.en.po new file mode 100755 index 00000000..1e87442b --- /dev/null +++ b/freecs/csprogs.dat.en.po @@ -0,0 +1,483 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-21 15:30+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "VGUI_TITLE_MOTD" +msgstr "Message Of The Day" + +msgid "VGUI_TITLE_TEAMS" +msgstr "Team Selection" + +msgid "VGUI_TITLE_TSEL" +msgstr "Terrorist Selection" + +msgid "VGUI_TITLE_CTSEL" +msgstr "Counter-Terrorist Selection" + +msgid "VGUI_TITLE_BUY" +msgstr "Buy Menu" + +msgid "VGUI_TITLE_HANDGUN" +msgstr "Handguns" + +msgid "VGUI_TITLE_SHOTGUN" +msgstr "Shotgun" + +msgid "VGUI_TITLE_SMG" +msgstr "Sub-Machine-Guns" + +msgid "VGUI_TITLE_RIFLE" +msgstr "Rifles" + +msgid "VGUI_TITLE_MG" +msgstr "Machineguns" + +msgid "VGUI_TITLE_EQUIPMENT" +msgstr "Equipment" + +msgid "WEAPON_NONE" +msgstr "None" + +msgid "WEAPON_KNIFE" +msgstr "Knife" + +msgid "WEAPON_USP" +msgstr "H&K USP .45 Tactical" + +msgid "WEAPON_GLOCK18" +msgstr "Glock18 Select Fire" + +msgid "WEAPON_DEAGLE" +msgstr "Desert Eagle .50AE" + +msgid "WEAPON_P228" +msgstr "SIG P228" + +msgid "WEAPON_ELITES" +msgstr "Dual Beretta 96G Elite" + +msgid "WEAPON_FIVESEVEN" +msgstr "FN Five-Seven" + +msgid "WEAPON_M3" +msgstr "Benelli M3 Super90" + +msgid "WEAPON_XM1014" +msgstr "Benelli XM1014" + +msgid "WEAPON_MP5" +msgstr "H&K MP5-Navy" + +msgid "WEAPON_P90" +msgstr "FN P90" + +msgid "WEAPON_UMP45" +msgstr "H&K UMP45" + +msgid "WEAPON_MAC10" +msgstr "Ingram MAC-10" + +msgid "WEAPON_TMP" +msgstr "Steyr Tactical Machine Pistol" + +msgid "WEAPON_AK47" +msgstr "AK-47" + +msgid "WEAPON_SG552" +msgstr "Sig SG-552 Commando" + +msgid "WEAPON_M4A1" +msgstr "Colt M4A1 Carbine" + +msgid "WEAPON_AUG" +msgstr "Steyr Aug" + +msgid "WEAPON_SCOUT" +msgstr "Steyr Scout" + +msgid "WEAPON_AWP" +msgstr "AI Arctic Warfare/Magnum" + +msgid "WEAPON_G3SG1" +msgstr "H&K G3/SG-1 Sniper Rifle" + +msgid "WEAPON_SG550" +msgstr "Sig SG-550 Sniper" + +msgid "WEAPON_PARA" +msgstr "FN M249 Para" + +msgid "EQUIPMENT_KEVLAR" +msgstr "Kevlar" + +msgid "EQUIPMENT_HELMET" +msgstr "Kevlar & Helmet" + +msgid "WEAPON_FLASHBANG" +msgstr "Flashbang" + +msgid "WEAPON_HEGRENADE" +msgstr "HE Grenade" + +msgid "WEAPON_SMOKEGRENADE" +msgstr "Smoke Grenade" + +msgid "EQUIPMENT_DEFUSALKIT" +msgstr "Defusal Kit" + +msgid "EQUIPMENT_NIGHTVISION" +msgstr "NightVision" + +msgid "VGUI_TITLE_AMMO1" +msgstr "Primary Ammo" + +msgid "VGUI_TITLE_AMMO2" +msgstr "Secondary Ammo" + +msgid "VGUI_EXIT" +msgstr "Exit" + +msgid "BUY_PRICETAG" +msgstr "Price: %i" + +msgid "BUY_CALIBER" +msgstr "Caliber: %i" + +msgid "BUY_RPM" +msgstr "Rounds Per Minute: %d" + +msgid "VGUI_BACK" +msgstr "Back" + +msgid "VGUI_OK" +msgstr "OK" + +msgid "RADIO_TITLE1" +msgstr "Radio Commands" + +msgid "RADIO_TITLE2" +msgstr "Group Radio Commands" + +msgid "RADIO_TITLE3" +msgstr "Radio Responses" + +msgid "SCORE_TITLE_SPECTATOR" +msgstr "Spectator" + +msgid "SCORE_TITLE_T" +msgstr "Terrorists" + +msgid "SCORE_TITLE_CT" +msgstr "CT Forces" + +msgid "SCORE_TITLE_VIP" +msgstr "VIP" + +msgid "SCORE_DEAD" +msgstr "%s [DEAD]" + +msgid "SCORE_VIP" +msgstr "%s [VIP]" + +msgid "SCORE_PLAYERS" +msgstr "(%i players)" + +msgid "SCORE_SCORE" +msgstr "SCORE" + +msgid "SCORE_DEATHS" +msgstr "DEATHS" + +msgid "SCORE_LATENCY" +msgstr "LATENCY" + +msgid "SCORE_VOICE" +msgstr "VOICE" + +msgid "VGUI_SPEC_TCOUNTER" +msgstr "Terrorists: %d" + +msgid "VGUI_SPEC_CTCOUNTER" +msgstr "CT Forces: %d" + +msgid "VGUI_T1_TITLE" +msgstr "Phoenix Connexion" + +msgid "VGUI_T1_TXT1" +msgstr "The Phoenix Faction was formed shortly" + +msgid "VGUI_T1_TXT2" +msgstr "after the breakup of the USSR. Having" + +msgid "VGUI_T1_TXT3" +msgstr "established a reputation for killing" + +msgid "VGUI_T1_TXT4" +msgstr "anyone that gets in their way." + +msgid "VGUI_T1_TXT5" +msgstr "The Phoenix Faction is one of the most" + +msgid "VGUI_T1_TXT6" +msgstr "feared terrorist groups in Eastern Europe." + +msgid "VGUI_T2_TITLE" +msgstr "L337 Krew" + +msgid "VGUI_T2_TXT1" +msgstr "Middle Eastern fundamentalist group bent" + +msgid "VGUI_T2_TXT2" +msgstr "on world domination and various other" + +msgid "VGUI_T2_TXT3" +msgstr "evil deeds." + +msgid "VGUI_T2_TXT4" +msgstr "" + +msgid "VGUI_T2_TXT5" +msgstr "" + +msgid "VGUI_T2_TXT6" +msgstr "" + +msgid "VGUI_T3_TITLE" +msgstr "Arctic Avengers" + +msgid "VGUI_T3_TXT1" +msgstr "Swedish terrorist faction founded in 1977." + +msgid "VGUI_T3_TXT2" +msgstr "Famous for their bombing of the Canadian" + +msgid "VGUI_T3_TXT3" +msgstr "embassy in 1990." + +msgid "VGUI_T3_TXT4" +msgstr "" + +msgid "VGUI_T3_TXT5" +msgstr "" + +msgid "VGUI_T3_TXT6" +msgstr "" + +msgid "VGUI_T4_TITLE" +msgstr "Guerilla Warfare" + +msgid "VGUI_T4_TXT1" +msgstr "A terrorist faction founded in the" + +msgid "VGUI_T4_TXT2" +msgstr "Middle East, Guerilla Warfare, has a" + +msgid "VGUI_T4_TXT3" +msgstr "reputation for ruthlessness. Their disgust" + +msgid "VGUI_T4_TXT4" +msgstr "for the American lifestyle was demonstrated" + +msgid "VGUI_T4_TXT5" +msgstr "in their 1982 bombing of a school bus full" + +msgid "VGUI_T4_TXT6" +msgstr "of Rock and Roll musicians." + +msgid "VGUI_CT1_TITLE" +msgstr "Seal Team 6" + +msgid "VGUI_CT1_TXT1" +msgstr "Seal Team 6 (to be known later as DEVGRU)" + +msgid "VGUI_CT1_TXT2" +msgstr "was founded in 1980 under the command of" + +msgid "VGUI_CT1_TXT3" +msgstr "Lieutenant-Commander Richard Marcincko." + +msgid "VGUI_CT1_TXT4" +msgstr "ST-6 was placed on permanent alert to" + +msgid "VGUI_CT1_TXT5" +msgstr "respond to terrorist attacks against" + +msgid "VGUI_CT1_TXT6" +msgstr "American targets worldwide." + +msgid "VGUI_CT2_TITLE" +msgstr "German GSG9" + +msgid "VGUI_CT2_TXT1" +msgstr "GSG-9 was born out of the tragic events" + +msgid "VGUI_CT2_TXT2" +msgstr "that led to the death of several" + +msgid "VGUI_CT2_TXT3" +msgstr "Israeli athletes during the 1972 Olympic" + +msgid "VGUI_CT2_TXT4" +msgstr "games in Munich, Germany." + +msgid "VGUI_CT2_TXT5" +msgstr "" + +msgid "VGUI_CT2_TXT6" +msgstr "" + +msgid "VGUI_CT3_TITLE" +msgstr "UK SAS" + +msgid "VGUI_CT3_TXT1" +msgstr "The world-renowned British SAS was founded" + +msgid "VGUI_CT3_TXT2" +msgstr "in the Second World War by a man named" + +msgid "VGUI_CT3_TXT3" +msgstr "David Stirling. Their role during WW2" + +msgid "VGUI_CT3_TXT4" +msgstr "involved gathering intelligence behind enemy" + +msgid "VGUI_CT3_TXT5" +msgstr "lines and executing sabotage strikes and" + +msgid "VGUI_CT3_TXT6" +msgstr "assassinations against key targets." + +msgid "VGUI_CT4_TITLE" +msgstr "French GIGN" + +msgid "VGUI_CT4_TXT1" +msgstr "France's elite Counter-Terrorist unit was" + +msgid "VGUI_CT4_TXT2" +msgstr "designed to be a fast response force" + +msgid "VGUI_CT4_TXT3" +msgstr "that could decisively react to any large-" + +msgid "VGUI_CT4_TXT4" +msgstr "scale terrorist incident. Consisting of no" + +msgid "VGUI_CT4_TXT5" +msgstr "more than 100 men, the GIGN has earned its" + +msgid "VGUI_CT4_TXT6" +msgstr "reputation through a history of successful ops." + +msgid "VGUI_TEAM_T" +msgstr "Terrorists" + +msgid "VGUI_TEAM_CT" +msgstr "Counter-Terrorists" + +msgid "VGUI_TEAM_AUTO" +msgstr "Auto-Assign" + +msgid "VGUI_TEAM_SPEC" +msgstr "Spectate" + +msgid "RADIO_BLOW" +msgstr "Get out of there, it's gonna blow!" +msgid "RADIO_BOMBDEF" +msgstr "The bomb has been defused." +msgid "RADIO_BOMBPL" +msgstr "The bomb has been planted." +msgid "RADIO_CIRCLEBACK" +msgstr "Circle around back!" +msgid "RADIO_CLEAR" +msgstr "Sector clear." +msgid "RADIO_COM_FOLLOWCOM" +msgstr "Okay team, follow my command!" +msgid "RADIO_COM_GETINPOS" +msgstr "Get in position and wait for my go!" +msgid "RADIO_COM_GO" +msgstr "Go, go, go!" +msgid "RADIO_COM_REPORTIN" +msgstr "Report in, team!" +msgid "RADIO_CT_AFFIRM" +msgstr "Affirmative." +msgid "RADIO_CT_BACKUP" +msgstr "Need backup!" +msgid "RADIO_CT_COVERME" +msgstr "Cover me!" +msgid "RADIO_CT_ENEMYS" +msgstr "Enemy spotted." +msgid "RADIO_CT_FIREINHOLE" +msgstr "Fire in the hole!" +msgid "RADIO_CT_IMHIT" +msgstr "I'm hit!" +msgid "RADIO_CT_INPOS" +msgstr "I'm in position." +msgid "RADIO_CT_POINT" +msgstr "I'll take the point." +msgid "RADIO_CT_REPORTINGIN" +msgstr "Reporting in." +msgid "RADIO_CTWIN" +msgstr "Counter-Terrorists win!" +msgid "RADIO_ENEMYDOWN" +msgstr "Enemy down!" +msgid "RADIO_FALLBACK" +msgstr "Team, fall back!" +msgid "RADIO_FIREASSIS" +msgstr "Taking fire, need assistance!" +msgid "RADIO_FOLLOWME" +msgstr "Follow me!" +msgid "RADIO_GETOUT" +msgstr "Team, let's get out of here!" +msgid "RADIO_GO" +msgstr "Okay, let's go." +msgid "RADIO_HITASSIST" +msgstr "I'm hit! Need assistance!" +msgid "RADIO_HOSDOWN" +msgstr "Hostage down." +msgid "RADIO_LETSGO" +msgstr "Okay, let's go." +msgid "RADIO_LOCKNLOAD" +msgstr "Lock 'n load." +msgid "RADIO_MATEDOWN" +msgstr "Teammate down." +msgid "RADIO_MEETME" +msgstr "Meet at the rendezvous point." +msgid "RADIO_MOVEOUT" +msgstr "Alright, let's move out." +msgid "RADIO_NEGATIVE" +msgstr "Negative." +msgid "RADIO_POSITION" +msgstr "Hold this position!" +msgid "RADIO_REGROUP" +msgstr "Regroup, team!" +msgid "RADIO_RESCUED" +msgstr "A hostage has been rescued." +msgid "RADIO_ROGER" +msgstr "Roger that." +msgid "RADIO_ROUNDDRAW" +msgstr "Round draw!" +msgid "RADIO_STICKTOG" +msgstr "Stick together, team!" +msgid "RADIO_STORMFRONT" +msgstr "Storm the front!" +msgid "RADIO_TAKEPOINT" +msgstr "You take the point!" +msgid "RADIO_TERWIN" +msgstr "Terrorists win!" +msgid "RADIO_VIP" +msgstr "Protect the VIP, team!" \ No newline at end of file diff --git a/freecs/gfx/shell/btns_main.tga b/freecs/gfx/shell/btns_main.tga new file mode 100755 index 00000000..4e02f79f Binary files /dev/null and b/freecs/gfx/shell/btns_main.tga differ diff --git a/freecs/gfx/shell/head_advanced.tga b/freecs/gfx/shell/head_advanced.tga new file mode 100755 index 00000000..eb3af351 Binary files /dev/null and b/freecs/gfx/shell/head_advanced.tga differ diff --git a/freecs/gfx/shell/head_advoptions.tga b/freecs/gfx/shell/head_advoptions.tga new file mode 100755 index 00000000..eb3af351 Binary files /dev/null and b/freecs/gfx/shell/head_advoptions.tga differ diff --git a/freecs/gfx/shell/head_audio.tga b/freecs/gfx/shell/head_audio.tga new file mode 100755 index 00000000..d7b436f0 Binary files /dev/null and b/freecs/gfx/shell/head_audio.tga differ diff --git a/freecs/gfx/shell/head_config.tga b/freecs/gfx/shell/head_config.tga new file mode 100755 index 00000000..9a9a49a9 Binary files /dev/null and b/freecs/gfx/shell/head_config.tga differ diff --git a/freecs/gfx/shell/head_controls.tga b/freecs/gfx/shell/head_controls.tga new file mode 100755 index 00000000..b53090a1 Binary files /dev/null and b/freecs/gfx/shell/head_controls.tga differ diff --git a/freecs/gfx/shell/head_creategame.tga b/freecs/gfx/shell/head_creategame.tga new file mode 100755 index 00000000..cfd17e69 Binary files /dev/null and b/freecs/gfx/shell/head_creategame.tga differ diff --git a/freecs/gfx/shell/head_createroom.tga b/freecs/gfx/shell/head_createroom.tga new file mode 100755 index 00000000..34e24e0a Binary files /dev/null and b/freecs/gfx/shell/head_createroom.tga differ diff --git a/freecs/gfx/shell/head_custom.tga b/freecs/gfx/shell/head_custom.tga new file mode 100755 index 00000000..21f6068e Binary files /dev/null and b/freecs/gfx/shell/head_custom.tga differ diff --git a/freecs/gfx/shell/head_customize.tga b/freecs/gfx/shell/head_customize.tga new file mode 100755 index 00000000..31d2b1f2 Binary files /dev/null and b/freecs/gfx/shell/head_customize.tga differ diff --git a/freecs/gfx/shell/head_filter.tga b/freecs/gfx/shell/head_filter.tga new file mode 100755 index 00000000..2adb5473 Binary files /dev/null and b/freecs/gfx/shell/head_filter.tga differ diff --git a/freecs/gfx/shell/head_gameopts.tga b/freecs/gfx/shell/head_gameopts.tga new file mode 100755 index 00000000..09790b0d Binary files /dev/null and b/freecs/gfx/shell/head_gameopts.tga differ diff --git a/freecs/gfx/shell/head_gore.tga b/freecs/gfx/shell/head_gore.tga new file mode 100755 index 00000000..f857accc Binary files /dev/null and b/freecs/gfx/shell/head_gore.tga differ diff --git a/freecs/gfx/shell/head_inetgames.tga b/freecs/gfx/shell/head_inetgames.tga new file mode 100755 index 00000000..72f5b687 Binary files /dev/null and b/freecs/gfx/shell/head_inetgames.tga differ diff --git a/freecs/gfx/shell/head_keyboard.tga b/freecs/gfx/shell/head_keyboard.tga new file mode 100755 index 00000000..5c1a63f0 Binary files /dev/null and b/freecs/gfx/shell/head_keyboard.tga differ diff --git a/freecs/gfx/shell/head_lan.tga b/freecs/gfx/shell/head_lan.tga new file mode 100755 index 00000000..d4e628e4 Binary files /dev/null and b/freecs/gfx/shell/head_lan.tga differ diff --git a/freecs/gfx/shell/head_load.tga b/freecs/gfx/shell/head_load.tga new file mode 100755 index 00000000..7c31c53a Binary files /dev/null and b/freecs/gfx/shell/head_load.tga differ diff --git a/freecs/gfx/shell/head_multi.tga b/freecs/gfx/shell/head_multi.tga new file mode 100755 index 00000000..6e140a75 Binary files /dev/null and b/freecs/gfx/shell/head_multi.tga differ diff --git a/freecs/gfx/shell/head_readme.tga b/freecs/gfx/shell/head_readme.tga new file mode 100755 index 00000000..4ec4362a Binary files /dev/null and b/freecs/gfx/shell/head_readme.tga differ diff --git a/freecs/gfx/shell/head_room.tga b/freecs/gfx/shell/head_room.tga new file mode 100755 index 00000000..514a4b3b Binary files /dev/null and b/freecs/gfx/shell/head_room.tga differ diff --git a/freecs/gfx/shell/head_rooms.tga b/freecs/gfx/shell/head_rooms.tga new file mode 100755 index 00000000..e3d78bd5 Binary files /dev/null and b/freecs/gfx/shell/head_rooms.tga differ diff --git a/freecs/gfx/shell/head_save.tga b/freecs/gfx/shell/head_save.tga new file mode 100755 index 00000000..3849b06f Binary files /dev/null and b/freecs/gfx/shell/head_save.tga differ diff --git a/freecs/gfx/shell/head_saveload.tga b/freecs/gfx/shell/head_saveload.tga new file mode 100755 index 00000000..a25f4fb2 Binary files /dev/null and b/freecs/gfx/shell/head_saveload.tga differ diff --git a/freecs/gfx/shell/head_specgames.tga b/freecs/gfx/shell/head_specgames.tga new file mode 100755 index 00000000..fbd42c53 Binary files /dev/null and b/freecs/gfx/shell/head_specgames.tga differ diff --git a/freecs/gfx/shell/head_video.tga b/freecs/gfx/shell/head_video.tga new file mode 100755 index 00000000..23041509 Binary files /dev/null and b/freecs/gfx/shell/head_video.tga differ diff --git a/freecs/gfx/shell/head_vidmodes.tga b/freecs/gfx/shell/head_vidmodes.tga new file mode 100755 index 00000000..53eeebbb Binary files /dev/null and b/freecs/gfx/shell/head_vidmodes.tga differ diff --git a/freecs/gfx/shell/head_vidoptions.tga b/freecs/gfx/shell/head_vidoptions.tga new file mode 100755 index 00000000..458a31d8 Binary files /dev/null and b/freecs/gfx/shell/head_vidoptions.tga differ diff --git a/freecs/menu.dat b/freecs/menu.dat index f539d25e..1c39378e 100755 Binary files a/freecs/menu.dat and b/freecs/menu.dat differ diff --git a/freecs/menu.dat.en.po b/freecs/menu.dat.en.po new file mode 100755 index 00000000..86652214 --- /dev/null +++ b/freecs/menu.dat.en.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-21 15:30+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "FREECS_QUITMSG" +msgstr "Are you sure you want to quit?" + +msgid "MP_MAPS" +msgstr "Maps:" + +msgid "MP_GAME" +msgstr "Game" + +msgid "MP_MAP" +msgstr "Map" + +msgid "MP_PLAYERS" +msgstr "Players" + +msgid "MP_PING" +msgstr "Ping" \ No newline at end of file diff --git a/freecs/progs.dat b/freecs/progs.dat index af809926..6c25dbf1 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ