Translations now show, menu uses btn_main graphics and header files. The freecs dir will contain TGA copies of them until BMP support gets enabled.

This commit is contained in:
Marco Cawthorne 2017-06-23 09:23:24 +02:00
parent 5b0cc923a0
commit ac3a42e49d
49 changed files with 861 additions and 157 deletions

View file

@ -62,6 +62,7 @@
<category name="Menu" expanded="yes">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Defs.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Draw.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Header.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Init.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Input.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\MenuMain.c" />
@ -111,9 +112,18 @@
</project>
<workspace version="Crimson Editor 3.60">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\MenuMain.c" linenum="51" placement="0:1:-1:-1:-4:-23:110:110:958:580" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\MenuMultiplayer.c" linenum="43" placement="2:3:-1:-1:-4:-23:132:132:984:606" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Defs.h" linenum="116" placement="0:1:-1:-1:-4:-23:154:154:1006:628" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Draw.c" linenum="79" placement="0:1:-1:-1:-4:-23:110:110:962:584" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Init.c" linenum="41" placement="0:1:-1:-1:-4:-23:132:132:980:602" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Defs.h" linenum="173" placement="0:1:-1:-1:-4:-23:154:154:1006:628" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Objects.c" linenum="13" placement="0:1:-1:-1:-4:-23:198:198:1050:672" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\BaseMelee.c" linenum="10" placement="0:1:-1:-1:-4:-23:220:220:1072:694" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\MenuMain.c" linenum="19" placement="0:1:-1:-1:-4:-23:0:0:852:474" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\MenuMultiplayer.c" linenum="224" placement="0:1:-1:-1:-4:-23:22:22:874:496" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\freecs\default.cfg" linenum="20" placement="0:1:-1:-1:-4:-23:154:154:1006:628" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Input.c" linenum="1" placement="0:1:-1:-1:-4:-23:198:198:1050:672" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Builtins.h" linenum="2232" placement="0:1:-1:-1:-4:-23:220:220:1072:694" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Draw.c" linenum="82" placement="0:1:-1:-1:-4:-23:0:0:852:474" />
<localfile path="C:\Users\eukara\Dropbox\The Wastes Build\SDK\Source\Globals.h" linenum="369" placement="0:1:-1:-1:-4:-23:44:44:896:518" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Globals.h" linenum="299" placement="0:1:-1:-1:-4:-23:66:66:918:540" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Header.c" linenum="1" placement="2:3:-1:-1:-4:-23:88:88:940:562" />
</workspace>

View file

@ -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 );
void Menu_ResetClipArea( void );
float Math_Lerp( float fA, float fB, float fPercent ) {
return ( fA * ( 1 - fPercent ) ) + ( fB * fPercent );
}

View file

@ -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();
}

90
Source/Menu/Header.c Executable file
View file

@ -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 );
}
}

View file

@ -38,8 +38,7 @@ void m_init( void ) {
}
search_end( shMaps );
Menu_ResetClipArea();
FONT_MENU = loadfont( "menu", "gfx/menuchars", "32", -1 );
}
/*

View file

@ -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';

View file

@ -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] );
}

View file

@ -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 );

View file

@ -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 );
}

View file

@ -13,5 +13,6 @@ Input.c
Objects.c
MenuMain.c
MenuMultiplayer.c
Header.c
Draw.c
#endlist

View file

@ -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();
}

View file

@ -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 );

View file

@ -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();

View file

@ -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 ) {

View file

@ -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;

View file

@ -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
}

View file

@ -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 ) {

Binary file not shown.

483
freecs/csprogs.dat.en.po Executable file
View file

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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!"

BIN
freecs/gfx/shell/btns_main.tga Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_audio.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_config.tga Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_custom.tga Executable file

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_filter.tga Executable file

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_gore.tga Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_lan.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_load.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_multi.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_readme.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_room.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_rooms.tga Executable file

Binary file not shown.

BIN
freecs/gfx/shell/head_save.tga Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
freecs/gfx/shell/head_video.tga Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

36
freecs/menu.dat.en.po Executable file
View file

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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"

Binary file not shown.