29 Jun 2008
This commit is contained in:
parent
d8eb784740
commit
123d64195c
|
@ -26,7 +26,7 @@ common\roqlib
|
|||
engine\
|
||||
engine\client\
|
||||
engine\server\
|
||||
engine\uimenu\
|
||||
engine\network\
|
||||
launch\
|
||||
launch\xash\
|
||||
launch\bsplib\
|
||||
|
|
|
@ -1224,7 +1224,7 @@ bool CIN_PlayCinematic( const char *arg, int x, int y, int w, int h, int systemB
|
|||
cinTable.status = FMV_PLAY;
|
||||
cls.state = ca_cinematic;
|
||||
|
||||
M_ForceMenuOff();
|
||||
UI_HideMenu();
|
||||
Con_Close();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ void CL_LevelShot_f( void )
|
|||
char checkname[MAX_OSPATH];
|
||||
|
||||
// check for exist
|
||||
com.sprintf( checkname, "graphics/background/%s.tga", cl.configstrings[CS_NAME] );
|
||||
com.sprintf( checkname, "gfx/background/%s.tga", cl.configstrings[CS_NAME] );
|
||||
if(!FS_FileExists( checkname )) re->ScrShot( checkname, true );
|
||||
else Msg("levelshot for this map already created\nFirst remove old image if you wants do it again\n" );
|
||||
}
|
||||
|
|
|
@ -57,12 +57,12 @@ void Con_ToggleConsole_f (void)
|
|||
|
||||
if (cls.key_dest == key_console)
|
||||
{
|
||||
M_ForceMenuOff();
|
||||
UI_HideMenu();
|
||||
Cvar_SetValue("paused", 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
M_ForceMenuOff();
|
||||
UI_HideMenu();
|
||||
cls.key_dest = key_console;
|
||||
|
||||
if(Cvar_VariableValue ("maxclients") == 1 && Host_ServerState())
|
||||
|
@ -84,7 +84,7 @@ void Con_ToggleChat_f (void)
|
|||
{
|
||||
if (cls.state == ca_active)
|
||||
{
|
||||
M_ForceMenuOff();
|
||||
UI_HideMenu();
|
||||
cls.key_dest = key_game;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1135,10 +1135,10 @@ void Key_Event(int key, bool down, uint time)
|
|||
break;
|
||||
case key_game:
|
||||
case key_console:
|
||||
M_Menu_Main_f();
|
||||
UI_ShowMenu();
|
||||
break;
|
||||
case key_menu:
|
||||
M_Keydown( key );
|
||||
UI_KeyEvent( key );
|
||||
break;
|
||||
default:
|
||||
MsgWarn("Key_Event: bad cls.key_dest\n");
|
||||
|
@ -1168,7 +1168,7 @@ void Key_Event(int key, bool down, uint time)
|
|||
}
|
||||
else if(cls.key_dest == key_menu)
|
||||
{
|
||||
M_Keydown( key );
|
||||
UI_KeyEvent( key );
|
||||
}
|
||||
else if(cls.key_dest == key_console)
|
||||
{
|
||||
|
@ -1178,11 +1178,11 @@ void Key_Event(int key, bool down, uint time)
|
|||
{
|
||||
// send the bound action
|
||||
kb = keys[key].binding;
|
||||
if ( !kb )
|
||||
if( !kb )
|
||||
{
|
||||
if (key >= 200) Msg("%s is unbound, use controls menu to set.\n", Key_KeynumToString(key));
|
||||
if (key >= 200) Msg( "%s is unbound, use controls menu to set.\n", Key_KeynumToString(key));
|
||||
}
|
||||
else if (kb[0] == '+')
|
||||
else if( kb[0] == '+' )
|
||||
{
|
||||
int i;
|
||||
char button[1024], *buttonPtr;
|
||||
|
|
|
@ -389,7 +389,7 @@ Sends a disconnect message to the server
|
|||
This is also called on Host_Error, so it shouldn't cause any errors
|
||||
=====================
|
||||
*/
|
||||
void CL_Disconnect (void)
|
||||
void CL_Disconnect( void )
|
||||
{
|
||||
byte final[32];
|
||||
|
||||
|
@ -397,7 +397,7 @@ void CL_Disconnect (void)
|
|||
return;
|
||||
|
||||
VectorClear (cl.refdef.blend);
|
||||
M_ForceMenuOff ();
|
||||
UI_HideMenu();
|
||||
|
||||
cls.connect_time = 0;
|
||||
|
||||
|
@ -539,23 +539,6 @@ void CL_Reconnect_f (void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
CL_ParseStatusMessage
|
||||
|
||||
Handle a reply from a ping
|
||||
=================
|
||||
*/
|
||||
void CL_ParseStatusMessage (void)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = MSG_ReadString(&net_message);
|
||||
|
||||
Msg ("%s\n", s);
|
||||
M_AddToServerList (net_from, s);
|
||||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
CL_StatusLocal_f
|
||||
|
@ -721,6 +704,23 @@ bool CL_ParseServerStatus( char *adr, char *info )
|
|||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
CL_ParseStatusMessage
|
||||
|
||||
Handle a reply from a ping
|
||||
=================
|
||||
*/
|
||||
void CL_ParseStatusMessage (void)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = MSG_ReadString(&net_message);
|
||||
|
||||
Msg ("%s\n", s);
|
||||
CL_ParseServerStatus( NET_AdrToString(net_from), s );
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
CL_ConnectionlessPacket
|
||||
|
@ -1145,8 +1145,8 @@ void CL_RequestNextDownload (void)
|
|||
{
|
||||
int n = precache_check++ - ENV_CNT - 1;
|
||||
|
||||
if (n & 1) com.sprintf(fn, "textures/env_skybox/%s.dds", cl.configstrings[CS_SKY] ); // cubemap pack
|
||||
else com.sprintf(fn, "textures/env_skybox/%s%s.tga", cl.configstrings[CS_SKY], env_suf[n/2]);
|
||||
if (n & 1) com.sprintf(fn, "gfx/env/%s.dds", cl.configstrings[CS_SKY] ); // cubemap pack
|
||||
else com.sprintf(fn, "gfx/env/%s%s.tga", cl.configstrings[CS_SKY], env_suf[n/2]);
|
||||
if (!CL_CheckOrDownloadFile(fn)) return; // started a download
|
||||
}
|
||||
}
|
||||
|
@ -1550,8 +1550,7 @@ void CL_Init( void )
|
|||
net_message.data = net_message_buffer;
|
||||
net_message.maxsize = sizeof(net_message_buffer);
|
||||
|
||||
M_Init ();
|
||||
|
||||
UI_Init();
|
||||
SCR_Init();
|
||||
CL_InitLocal();
|
||||
}
|
||||
|
|
|
@ -1,9 +1,140 @@
|
|||
//=======================================================================
|
||||
// Copyright XashXT Group 2007 ©
|
||||
// ui_cmds.c - ui menu builtins
|
||||
// cl_menu.c - progs user interface
|
||||
//=======================================================================
|
||||
|
||||
#include "uimenu.h"
|
||||
#include "common.h"
|
||||
#include "client.h"
|
||||
#include "ui_edict.h"
|
||||
#include "builtin.h"
|
||||
|
||||
// progs menu
|
||||
#define UI_MAX_EDICTS (1 << 12) // should be enough for a menu
|
||||
|
||||
bool ui_active = false;
|
||||
static float credits_start_time;
|
||||
static float credits_fade_time;
|
||||
static float credits_show_time;
|
||||
static const char **credits;
|
||||
static char *creditsIndex[2048];
|
||||
static char *creditsBuffer;
|
||||
static uint credit_numlines;
|
||||
static bool credits_active;
|
||||
|
||||
void UI_KeyEvent( int key )
|
||||
{
|
||||
const char *ascii = Key_KeynumToString(key);
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg( PRVM_MENUPROG );
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
// setup args
|
||||
PRVM_G_FLOAT(OFS_PARM0) = key;
|
||||
PRVM_G_INT(OFS_PARM1) = PRVM_SetEngineString(ascii);
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_keydown, "QC function m_keydown is missing");
|
||||
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_Draw( void )
|
||||
{
|
||||
if( !ui_active || cls.key_dest != key_menu )
|
||||
return;
|
||||
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_draw, "QC function m_draw is missing");
|
||||
UI_DrawCredits(); // display game credits
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_DrawCredits( void )
|
||||
{
|
||||
int i, x, y;
|
||||
float *color;
|
||||
float white_color[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
|
||||
if( !credits_active ) return;
|
||||
|
||||
y = SCREEN_HEIGHT - (( cls.realtime - credits_start_time ) * 32.0f );
|
||||
|
||||
// draw the credits
|
||||
for ( i = 0; i < credit_numlines && credits[i]; i++, y += 20 )
|
||||
{
|
||||
// skip not visible lines, but always draw end line
|
||||
if( y <= -16 && i != credit_numlines - 1) continue;
|
||||
x = ( SCREEN_WIDTH - BIGCHAR_WIDTH * com.cstrlen( credits[i] ))/2;
|
||||
|
||||
if((y < (SCREEN_HEIGHT - BIGCHAR_HEIGHT) / 2) && i == credit_numlines - 1)
|
||||
{
|
||||
if(!credits_fade_time) credits_fade_time = cls.realtime;
|
||||
color = CG_FadeColor( credits_fade_time, credits_show_time );
|
||||
if( color ) SCR_DrawStringExt( x, (SCREEN_HEIGHT - BIGCHAR_HEIGHT)/2, 16, 16, credits[i], color, true );
|
||||
}
|
||||
else SCR_DrawStringExt( x, y, 16, 16, credits[i], white_color, false );
|
||||
}
|
||||
if( y < 0 && !color )
|
||||
{
|
||||
credits_active = false; // end of credits
|
||||
|
||||
// let menu progs known about credits state
|
||||
PRVM_ExecuteProgram( prog->globals.ui->m_endofcredits, "QC function m_endofcredits is missing");
|
||||
}
|
||||
}
|
||||
|
||||
void UI_ShowMenu( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
ui_active = true;
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_show, "QC function m_toggle is missing");
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_HideMenu( void )
|
||||
{
|
||||
cls.key_dest = key_game;
|
||||
Key_ClearStates();
|
||||
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
ui_active = false;
|
||||
prog->globals.ui->time = cls.realtime;
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_hide, "QC function m_toggle is missing");
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_Shutdown( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
//*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_shutdown, "QC function m_shutdown is missing");
|
||||
|
||||
// reset key_dest
|
||||
cls.key_dest = key_game;
|
||||
|
||||
// AK not using this cause Im not sure whether this is useful at all instead :
|
||||
PRVM_ResetProg();
|
||||
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=========
|
||||
|
@ -38,14 +169,14 @@ string ReadComment( float savenum )
|
|||
void PF_readcomment( void )
|
||||
{
|
||||
int savenum;
|
||||
static string comment[32];
|
||||
string comment;
|
||||
|
||||
if(!VM_ValidateArgs( "ReadComment", 1 ))
|
||||
return;
|
||||
|
||||
savenum = (int)PRVM_G_FLOAT(OFS_PARM0);
|
||||
SV_ReadComment( comment[savenum], savenum );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString( comment[savenum] );
|
||||
SV_ReadComment( comment, savenum );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString( comment );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -82,7 +213,7 @@ string ServerInfo( float num )
|
|||
*/
|
||||
void PF_getserverinfo( void )
|
||||
{
|
||||
static string serverinfo[MAX_SERVERS];
|
||||
string serverinfo;
|
||||
serverinfo_t *s;
|
||||
int i;
|
||||
|
||||
|
@ -97,8 +228,8 @@ void PF_getserverinfo( void )
|
|||
s = &cls.serverlist[i];
|
||||
if( s && s->hostname && s->maxplayers > 1 ) // ignore singleplayer servers
|
||||
{
|
||||
com.snprintf( serverinfo[i], MAX_STRING, "%s %15s %7i/%i %7i\n", s->hostname, s->mapname, s->numplayers, s->maxplayers, s->ping );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString( serverinfo[i] );
|
||||
com.snprintf( serverinfo, MAX_STRING, "%s %15s %7i/%i %7i\n", s->hostname, s->mapname, s->numplayers, s->maxplayers, s->ping );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString( serverinfo );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +245,7 @@ int mapcount = 0;
|
|||
|
||||
void PF_getmapslist( void )
|
||||
{
|
||||
static char mapstring[MAX_INPUTLINE];
|
||||
char mapstring[MAX_INPUTLINE];
|
||||
|
||||
if(!VM_ValidateArgs( "GetMapsList", 0 ))
|
||||
return;
|
||||
|
@ -140,7 +271,7 @@ void PF_getmapslist( void )
|
|||
while(Com_TryToken()); // skip other stuff
|
||||
mapcount++;
|
||||
}
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString( mapstring );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString( mapstring );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -186,8 +317,8 @@ string substring( string s, float start, float length )
|
|||
*/
|
||||
void PF_substring( void )
|
||||
{
|
||||
static string tempstring;
|
||||
int i, start, length;
|
||||
string tempstring;
|
||||
const char *s;
|
||||
|
||||
if(!VM_ValidateArgs( "substring", 3 ))
|
||||
|
@ -203,7 +334,7 @@ void PF_substring( void )
|
|||
tempstring[i] = *s;
|
||||
tempstring[i] = 0;
|
||||
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString( tempstring );
|
||||
PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString( tempstring );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -456,6 +587,70 @@ void PF_drawfill( void )
|
|||
SCR_FillRect( pos[0], pos[1], size[0], size[1], GetRGBA( rgb[0], rgb[1], rgb[2], alpha ));
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_drawmodel
|
||||
|
||||
void drawmodel( vector pos, vector size, string model, vector origin, vector angles, float sequence )
|
||||
=========
|
||||
*/
|
||||
void PF_drawmodel( void )
|
||||
{
|
||||
float *size, *pos, *origin, *angles;
|
||||
const char *modname;
|
||||
refdef_t refdef;
|
||||
int sequence;
|
||||
static float frame;
|
||||
entity_t entity;
|
||||
|
||||
if(!VM_ValidateArgs( "drawmodel", 4 ))
|
||||
return;
|
||||
|
||||
pos = PRVM_G_VECTOR(OFS_PARM0);
|
||||
size = PRVM_G_VECTOR(OFS_PARM1);
|
||||
modname = PRVM_G_STRING(OFS_PARM2);
|
||||
origin = PRVM_G_VECTOR(OFS_PARM3);
|
||||
angles = PRVM_G_VECTOR(OFS_PARM4);
|
||||
sequence = (int)PRVM_G_FLOAT(OFS_PARM5);
|
||||
|
||||
VM_ValidateString(PRVM_G_STRING(OFS_PARM2));
|
||||
memset( &entity, 0, sizeof( entity ));
|
||||
memset( &refdef, 0, sizeof( refdef ) );
|
||||
|
||||
SCR_AdjustSize( &pos[0], &pos[1], &size[0], &size[1] );
|
||||
|
||||
refdef.x = pos[0];
|
||||
refdef.y = pos[1];
|
||||
refdef.width = size[0];
|
||||
refdef.height = size[1];
|
||||
refdef.fov_x = 50;
|
||||
refdef.fov_y = V_CalcFov( refdef.fov_x, refdef.width, refdef.height );
|
||||
refdef.time = cls.realtime;
|
||||
|
||||
entity.model = re->RegisterModel( (char *)modname );
|
||||
entity.flags = RF_FULLBRIGHT;
|
||||
VectorCopy( origin, entity.origin );
|
||||
VectorCopy( entity.origin, entity.oldorigin );
|
||||
VectorCopy( angles, entity.angles );
|
||||
entity.frame = frame += 0.7f;//FXIME
|
||||
entity.sequence = sequence;
|
||||
entity.prev.frame = 0;
|
||||
entity.backlerp = 0.0;
|
||||
entity.controller[0] = 90.0;
|
||||
entity.controller[1] = 90.0;
|
||||
entity.controller[2] = 180.0;
|
||||
entity.controller[3] = 180.0;
|
||||
|
||||
refdef.areabits = 0;
|
||||
refdef.num_entities = 1;
|
||||
refdef.entities = &entity;
|
||||
refdef.lightstyles = 0;
|
||||
refdef.rdflags = RDF_NOWORLDMODEL;
|
||||
|
||||
re->RenderFrame( &refdef );
|
||||
re->EndFrame();
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_getimagesize
|
||||
|
@ -554,7 +749,7 @@ PF_testfunction
|
|||
float testfunction( string function_name )
|
||||
=========
|
||||
*/
|
||||
void PF_testfunction(void)
|
||||
void PF_testfunction( void )
|
||||
{
|
||||
mfunction_t *func;
|
||||
const char *s;
|
||||
|
@ -563,7 +758,6 @@ void PF_testfunction(void)
|
|||
return;
|
||||
|
||||
s = PRVM_G_STRING(OFS_PARM0);
|
||||
if(!s) PRVM_ERROR("PF_testfunction: null string !");
|
||||
VM_ValidateString( s );
|
||||
|
||||
func = PRVM_ED_FindFunction( s );
|
||||
|
@ -572,6 +766,121 @@ void PF_testfunction(void)
|
|||
else PRVM_G_FLOAT(OFS_RETURN) = false;
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_loadcredits
|
||||
|
||||
void loadcredits( string filename )
|
||||
=========
|
||||
*/
|
||||
void PF_loadcredits( void )
|
||||
{
|
||||
uint count;
|
||||
char *p;
|
||||
const char *s;
|
||||
|
||||
if(!VM_ValidateArgs( "loadcredits", 1 ))
|
||||
return;
|
||||
|
||||
s = PRVM_G_STRING(OFS_PARM0);
|
||||
VM_ValidateString( s );
|
||||
|
||||
if(!creditsBuffer)
|
||||
{
|
||||
// load credits if needed
|
||||
creditsBuffer = FS_LoadFile( s, &count );
|
||||
if( count )
|
||||
{
|
||||
if(creditsBuffer[count - 1] != '\n' && creditsBuffer[count - 1] != '\r')
|
||||
{
|
||||
creditsBuffer = Mem_Realloc( zonepool, creditsBuffer, count + 2 );
|
||||
com.strncpy( creditsBuffer + count, "\r", 1 ); // add terminator
|
||||
count += 2;
|
||||
}
|
||||
|
||||
p = creditsBuffer;
|
||||
for( credit_numlines = 0; credit_numlines < 2048; credit_numlines++)
|
||||
{
|
||||
creditsIndex[credit_numlines] = p;
|
||||
while( *p != '\r' && *p != '\n')
|
||||
{
|
||||
p++;
|
||||
if( --count == 0 ) break;
|
||||
}
|
||||
if( *p == '\r' )
|
||||
{
|
||||
*p++ = 0;
|
||||
if (--count == 0) break;
|
||||
}
|
||||
*p++ = 0;
|
||||
if (--count == 0) break;
|
||||
}
|
||||
creditsIndex[++credit_numlines] = 0;
|
||||
credits = creditsIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
// use built-in credits
|
||||
credits = xash_credits;
|
||||
credit_numlines = (sizeof(xash_credits) / sizeof(xash_credits[0])) - 1; // skip term
|
||||
}
|
||||
}
|
||||
credits_active = false;
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_runcredits
|
||||
|
||||
void runcredits( void )
|
||||
=========
|
||||
*/
|
||||
void PF_runcredits( void )
|
||||
{
|
||||
if(!VM_ValidateArgs( "runcredits", 0 ))
|
||||
return;
|
||||
|
||||
// run credits
|
||||
credits_start_time = cls.realtime;
|
||||
credits_show_time = bound(0.1f, (float)com.strlen(credits[credit_numlines - 1]), 12.0f );
|
||||
credits_fade_time = 0.0f;
|
||||
credits_active = true;
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_stopcredits
|
||||
|
||||
void stopcredits( void )
|
||||
=========
|
||||
*/
|
||||
void PF_stopcredits( void )
|
||||
{
|
||||
if(!VM_ValidateArgs( "stopcredits", 0 ))
|
||||
return;
|
||||
|
||||
// stop credits
|
||||
credits_active = false;
|
||||
}
|
||||
|
||||
/*
|
||||
=========
|
||||
PF_creditsactive
|
||||
|
||||
void creditsactive( void )
|
||||
=========
|
||||
*/
|
||||
void PF_creditsactive( void )
|
||||
{
|
||||
if(!VM_ValidateArgs( "creditsactive", 0 ))
|
||||
return;
|
||||
|
||||
// check state
|
||||
if( credits_active )
|
||||
PRVM_G_FLOAT(OFS_RETURN) = 1;
|
||||
else PRVM_G_FLOAT(OFS_RETURN) = 0;
|
||||
}
|
||||
|
||||
prvm_builtin_t vm_ui_builtins[] =
|
||||
{
|
||||
NULL, // #0 (leave blank as default, but can include easter egg )
|
||||
|
@ -682,17 +991,47 @@ PF_drawcharacter, // #111 float drawchar( vector pos, float char, vector scale
|
|||
PF_drawstring, // #112 float drawstring( vector pos, string text, vector scale, vector rgb, float alpha )
|
||||
PF_drawpic, // #113 float drawpic( vector pos, string pic, vector size, vector rgb, float alpha )
|
||||
PF_drawfill, // #114 void drawfill( vector pos, vector size, vector rgb, float alpha )
|
||||
PF_getimagesize, // #115 vector getimagesize( string pic )
|
||||
PF_setkeydest, // #116 void setkeydest( float dest )
|
||||
PF_callfunction, // #117 void callfunction( ..., string function_name )
|
||||
PF_testfunction, // #118 float testfunction( string function_name )
|
||||
PF_newgame, // #119 void NewGame( void )
|
||||
PF_readcomment, // #120 string ReadComment( float savenum )
|
||||
PF_joinserver, // #121 float JoinServer( float num )
|
||||
PF_getserverinfo, // #122 string ServerInfo( float num )
|
||||
PF_getmapslist, // #123 string GetMapsList( void )
|
||||
PF_getmapscount, // #124 float GetMapsCount( void )
|
||||
PF_newserver, // #125 void NewServer( string mapname )
|
||||
PF_drawmodel, // #115 void drawmodel( vector pos, vector size, string model, vector origin, vector angles, float sequence )
|
||||
PF_getimagesize, // #116 vector getimagesize( string pic )
|
||||
PF_setkeydest, // #117 void setkeydest( float dest )
|
||||
PF_callfunction, // #118 void callfunction( ..., string function_name )
|
||||
PF_testfunction, // #119 float testfunction( string function_name )
|
||||
PF_newgame, // #120 void NewGame( void )
|
||||
PF_readcomment, // #121 string ReadComment( float savenum )
|
||||
PF_joinserver, // #122 float JoinServer( float num )
|
||||
PF_getserverinfo, // #123 string ServerInfo( float num )
|
||||
PF_getmapslist, // #124 string GetMapsList( void )
|
||||
PF_getmapscount, // #125 float GetMapsCount( void )
|
||||
PF_newserver, // #126 void NewServer( string mapname )
|
||||
PF_loadcredits, // #127 void loadcredits( string filename )
|
||||
PF_runcredits, // #128 void runcredits( void )
|
||||
PF_stopcredits, // #129 void stopcredits( void )
|
||||
PF_creditsactive, // #130 float creditsactive( void )
|
||||
VM_EdictError, // #131 void objerror( string s )
|
||||
};
|
||||
|
||||
const int vm_ui_numbuiltins = sizeof(vm_ui_builtins) / sizeof(prvm_builtin_t);
|
||||
const int vm_ui_numbuiltins = sizeof(vm_ui_builtins) / sizeof(prvm_builtin_t);
|
||||
|
||||
void UI_Init( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_InitProg( PRVM_MENUPROG );
|
||||
|
||||
prog->progs_mempool = Mem_AllocPool( "Uimenu Progs" );
|
||||
prog->builtins = vm_ui_builtins;
|
||||
prog->numbuiltins = vm_ui_numbuiltins;
|
||||
prog->edictprivate_size = sizeof(ui_edict_t);
|
||||
prog->limit_edicts = UI_MAX_EDICTS;
|
||||
prog->name = "uimenu";
|
||||
prog->num_edicts = 1;
|
||||
prog->loadintoworld = false;
|
||||
prog->init_cmd = VM_Cmd_Init;
|
||||
prog->reset_cmd = VM_Cmd_Reset;
|
||||
prog->error_cmd = VM_Error;
|
||||
|
||||
PRVM_LoadProgs( GI->uimenu_prog, 0, NULL, UI_NUM_REQFIELDS, ui_reqfields );
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_init, "QC function m_init is missing");
|
||||
PRVM_End;
|
||||
}
|
|
@ -381,11 +381,9 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
|
|||
{
|
||||
com.sprintf (model_filename, "models/players/gordon/player.mdl");
|
||||
com.sprintf (weapon_filename, "models/weapons/w_glock.mdl");
|
||||
com.strcpy (ci->iconname, "hud/i_fixme");
|
||||
ci->model = re->RegisterModel (model_filename);
|
||||
memset(ci->weaponmodel, 0, sizeof(ci->weaponmodel));
|
||||
ci->weaponmodel[0] = re->RegisterModel (weapon_filename);
|
||||
ci->icon = re->RegisterPic (ci->iconname);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -426,17 +424,12 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
|
|||
ci->weaponmodel[i] = re->RegisterModel(weapon_filename);
|
||||
if (!cl_vwep->value) break; // only one when vwep is off
|
||||
}
|
||||
|
||||
// icon file
|
||||
strcpy (ci->iconname, "hud/i_fixme");
|
||||
ci->icon = re->RegisterPic (ci->iconname);
|
||||
}
|
||||
|
||||
// must have loaded all data types to be valud
|
||||
if (!ci->skin || !ci->icon || !ci->model || !ci->weaponmodel[0])
|
||||
if (!ci->skin || !ci->model || !ci->weaponmodel[0])
|
||||
{
|
||||
ci->skin = NULL;
|
||||
ci->icon = NULL;
|
||||
ci->model = NULL;
|
||||
ci->weaponmodel[0] = NULL;
|
||||
return;
|
||||
|
|
|
@ -257,7 +257,7 @@ void SCR_DrawNet( void )
|
|||
if (cls.netchan.outgoing_sequence - cls.netchan.incoming_acknowledged < CMD_BACKUP-1)
|
||||
return;
|
||||
|
||||
SCR_DrawPic( scr_vrect.x+64, scr_vrect.y, 48, 48, "hud/net" );
|
||||
SCR_DrawPic( scr_vrect.x+64, scr_vrect.y, 48, 48, "common/net" );
|
||||
}
|
||||
|
||||
void SCR_DrawFPS( void )
|
||||
|
|
|
@ -289,7 +289,7 @@ void CL_PrepRefresh( void )
|
|||
|
||||
// get splash name
|
||||
Cvar_Set( "cl_levelshot_name", va("background/%s.tga", cl.configstrings[CS_NAME]));
|
||||
if(!FS_FileExists(va("graphics/%s", Cvar_VariableString("cl_levelshot_name"))))
|
||||
if(!FS_FileExists(va("gfx/%s", Cvar_VariableString("cl_levelshot_name"))))
|
||||
{
|
||||
Cvar_Set("cl_levelshot_name", "common/black");
|
||||
cl.make_levelshot = true; // make levelshot
|
||||
|
@ -379,10 +379,10 @@ void CL_PrepRefresh( void )
|
|||
|
||||
/*
|
||||
====================
|
||||
CalcFov
|
||||
V_CalcFov
|
||||
====================
|
||||
*/
|
||||
float CalcFov( float fov_x, float width, float height )
|
||||
float V_CalcFov( float fov_x, float width, float height )
|
||||
{
|
||||
float fov_y, x, rad = 360.0f * M_PI;
|
||||
|
||||
|
@ -474,7 +474,7 @@ void V_RenderView( void )
|
|||
cl.refdef.y = scr_vrect.y;
|
||||
cl.refdef.width = scr_vrect.width;
|
||||
cl.refdef.height = scr_vrect.height;
|
||||
cl.refdef.fov_y = CalcFov (cl.refdef.fov_x, cl.refdef.width, cl.refdef.height);
|
||||
cl.refdef.fov_y = V_CalcFov (cl.refdef.fov_x, cl.refdef.width, cl.refdef.height);
|
||||
cl.refdef.time = cls.realtime; // render use realtime now
|
||||
|
||||
cl.refdef.areabits = cl.frame.areabits;
|
||||
|
@ -537,7 +537,7 @@ void V_PostRender( void )
|
|||
SCR_DrawNet();
|
||||
SCR_DrawFPS();
|
||||
Con_DrawConsole();
|
||||
M_Draw();
|
||||
UI_Draw();
|
||||
re->EndFrame();
|
||||
}
|
||||
|
||||
|
|
|
@ -110,8 +110,6 @@ typedef struct
|
|||
char name[MAX_QPATH];
|
||||
char cinfo[MAX_QPATH];
|
||||
image_t *skin;
|
||||
image_t *icon;
|
||||
char iconname[MAX_QPATH];
|
||||
model_t *model;
|
||||
model_t *weaponmodel[MAX_CLIENTWEAPONMODELS];
|
||||
} clientinfo_t;
|
||||
|
@ -638,6 +636,7 @@ void V_AddEntity (entity_t *ent);
|
|||
void V_AddParticle (vec3_t org, int color, float alpha);
|
||||
void V_AddLight (vec3_t org, float intensity, float r, float g, float b);
|
||||
void V_AddLightStyle (int style, float r, float g, float b);
|
||||
float V_CalcFov( float fov_x, float width, float height );
|
||||
|
||||
//
|
||||
// cl_tent.c
|
||||
|
@ -673,16 +672,6 @@ void CL_EntityEvent (entity_state_t *ent);
|
|||
void CL_TrapParticles (entity_t *ent);
|
||||
void CL_StudioEvent ( mstudioevent_t *event, entity_t *ent );
|
||||
|
||||
//
|
||||
// menus
|
||||
//
|
||||
void M_Init (void);
|
||||
void M_Keydown (int key);
|
||||
void M_Draw (void);
|
||||
void M_Menu_Main_f (void);
|
||||
void M_ForceMenuOff (void);
|
||||
void M_AddToServerList (netadr_t adr, char *info);
|
||||
|
||||
//
|
||||
// cl_pred.c
|
||||
//
|
||||
|
@ -715,6 +704,21 @@ extern field_t historyEditLines[COMMAND_HISTORY];
|
|||
extern field_t g_consoleField;
|
||||
extern field_t chatField;
|
||||
|
||||
//
|
||||
// cl_keys.c
|
||||
//
|
||||
extern bool ui_active;
|
||||
extern const int vm_ui_numbuiltins;
|
||||
extern prvm_builtin_t vm_ui_builtins[];
|
||||
|
||||
void UI_Init( void );
|
||||
void UI_DrawCredits( void );
|
||||
void UI_KeyEvent( int key );
|
||||
void UI_ShowMenu( void );
|
||||
void UI_HideMenu( void );
|
||||
void UI_Shutdown( void );
|
||||
void UI_Draw( void );
|
||||
|
||||
//
|
||||
// cl_keys.c
|
||||
//
|
||||
|
|
|
@ -10,22 +10,24 @@ struct ui_globalvars_s
|
|||
int pad[28];
|
||||
int pev;
|
||||
func_t m_init;
|
||||
func_t m_shutdown;
|
||||
func_t m_keydown;
|
||||
func_t m_draw;
|
||||
func_t m_show;
|
||||
func_t m_draw;
|
||||
func_t m_hide;
|
||||
func_t m_endofcredits;
|
||||
func_t m_keydown;
|
||||
func_t m_shutdown;
|
||||
float time;
|
||||
};
|
||||
|
||||
struct ui_entvars_s
|
||||
{
|
||||
string_t type;
|
||||
string_t parent;
|
||||
string_t name;
|
||||
string_t parent;
|
||||
string_t type;
|
||||
int _parent;
|
||||
int _child;
|
||||
int _next;
|
||||
int _prev;
|
||||
int _child;
|
||||
};
|
||||
|
||||
struct ui_edict_s
|
||||
|
@ -65,40 +67,40 @@ static fields_t ui_reqfields[] =
|
|||
{38, 6, "_action"},
|
||||
{39, 6, "_draw"},
|
||||
{40, 6, "_key"},
|
||||
{41, 3, "color"},
|
||||
{44, 2, "alpha"},
|
||||
{45, 2, "drawflag"},
|
||||
{46, 1, "link"},
|
||||
{47, 1, "picture"},
|
||||
{48, 3, "pos"},
|
||||
{51, 3, "size"},
|
||||
{54, 1, "text"},
|
||||
{55, 3, "font_size"},
|
||||
{58, 2, "alignment"},
|
||||
{59, 1, "picture_selected"},
|
||||
{60, 1, "picture_pressed"},
|
||||
{61, 1, "sound_selected"},
|
||||
{62, 1, "sound_pressed"},
|
||||
{63, 3, "color_selected"},
|
||||
{66, 3, "color_pressed"},
|
||||
{69, 2, "alpha_selected"},
|
||||
{70, 2, "alpha_pressed"},
|
||||
{71, 2, "drawflag_selected"},
|
||||
{72, 2, "drawflag_pressed"},
|
||||
{73, 2, "_press_time"},
|
||||
{74, 2, "hold_pressed"},
|
||||
{75, 2, "_button_state"},
|
||||
{76, 2, "style"},
|
||||
{77, 1, "picture_bar"},
|
||||
{78, 1, "sound_changed"},
|
||||
{79, 2, "min_value"},
|
||||
{80, 2, "max_value"},
|
||||
{81, 2, "value"},
|
||||
{82, 2, "step"},
|
||||
{83, 3, "slider_size"},
|
||||
{86, 6, "slidermove"},
|
||||
{87, 6, "switchchange"},
|
||||
{88, 1, "cvarname"},
|
||||
{41, 2, "savecount"},
|
||||
{42, 2, "save_valid"},
|
||||
{43, 3, "color"},
|
||||
{46, 2, "alpha"},
|
||||
{47, 1, "link"},
|
||||
{48, 1, "picture"},
|
||||
{49, 3, "pos"},
|
||||
{52, 3, "size"},
|
||||
{55, 1, "text"},
|
||||
{56, 3, "font_size"},
|
||||
{59, 2, "alignment"},
|
||||
{60, 1, "picture_selected"},
|
||||
{61, 1, "picture_pressed"},
|
||||
{62, 1, "sound_selected"},
|
||||
{63, 1, "sound_pressed"},
|
||||
{64, 3, "color_selected"},
|
||||
{67, 3, "color_pressed"},
|
||||
{70, 2, "alpha_selected"},
|
||||
{71, 2, "alpha_pressed"},
|
||||
{72, 2, "_press_time"},
|
||||
{73, 2, "hold_pressed"},
|
||||
{74, 2, "_button_state"},
|
||||
{75, 2, "style"},
|
||||
{76, 1, "picture_bar"},
|
||||
{77, 1, "sound_changed"},
|
||||
{78, 2, "min_value"},
|
||||
{79, 2, "max_value"},
|
||||
{80, 2, "value"},
|
||||
{81, 2, "step"},
|
||||
{82, 3, "slider_size"},
|
||||
{85, 6, "slidermove"},
|
||||
{86, 6, "switchchange"},
|
||||
{87, 1, "cvarname"},
|
||||
{88, 1, "cvarstring"},
|
||||
{89, 2, "cvartype"},
|
||||
{90, 4, "_link"},
|
||||
{91, 2, "maxlen"},
|
|
@ -1764,7 +1764,7 @@ bool Cmd_GetFontList( const char *s, char *completedname, int length )
|
|||
string matchbuf;
|
||||
int i, numfonts;
|
||||
|
||||
t = FS_Search(va("graphics/fonts/%s*.dds", s ), true);
|
||||
t = FS_Search(va("gfx/fonts/%s*.dds", s ), true);
|
||||
if(!t) return false;
|
||||
|
||||
FS_FileBase(t->filenames[0], matchbuf );
|
||||
|
|
|
@ -43,7 +43,7 @@ RSC=rc.exe
|
|||
# PROP Ignore_Export_Lib 1
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /Ob0 /I "./" /I "uimenu" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /Ob0 /I "./" /I "network" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
|
@ -80,7 +80,7 @@ SOURCE="$(InputPath)"
|
|||
# PROP Ignore_Export_Lib 1
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "uimenu" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /FD /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "network" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
|
@ -154,6 +154,10 @@ SOURCE=.\client\cl_main.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\cl_menu.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\cl_newfx.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -194,23 +198,15 @@ SOURCE=.\host.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\menu.c
|
||||
SOURCE=.\network\net_chan.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\net_chan.c
|
||||
SOURCE=.\network\net_msg.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\net_msg.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\net_wins.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\qmenu.c
|
||||
SOURCE=.\network\net_wins.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
|
@ -260,14 +256,6 @@ SOURCE=.\server\sv_user.c
|
|||
|
||||
SOURCE=.\server\sv_world.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\ui_cmds.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\ui_main.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
|
@ -290,19 +278,11 @@ SOURCE=.\common.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\common\const.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\engine.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\net_msg.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\qmenu.h
|
||||
SOURCE=.\network\net_msg.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
|
@ -314,11 +294,7 @@ SOURCE=.\server\server.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\uimenu\uimenu.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\vm_cmds.h
|
||||
SOURCE=.\client\ui_edict.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
|
|
|
@ -255,7 +255,6 @@ void SV_CalcViewOffset (edict_t *ent)
|
|||
|
||||
void SV_SetStats (edict_t *ent)
|
||||
{
|
||||
ent->priv.sv->client->ps.stats[STAT_HEALTH_ICON] = SV_ImageIndex("hud/i_health");
|
||||
ent->priv.sv->client->ps.stats[STAT_HEALTH] = ent->progs.sv->health;
|
||||
}
|
||||
|
||||
|
|
3345
engine/uimenu/menu.c
3345
engine/uimenu/menu.c
File diff suppressed because it is too large
Load Diff
|
@ -1,546 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 1997-2001 Id Software, Inc.
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
#include "uimenu.h"
|
||||
|
||||
static void Action_DoEnter( menuaction_s *a );
|
||||
static void Action_Draw( menuaction_s *a );
|
||||
static void Menu_DrawStatusBar( const char *string );
|
||||
static void Menulist_DoEnter( menulist_s *l );
|
||||
static void MenuList_Draw( menulist_s *l );
|
||||
static void Separator_Draw( menuseparator_s *s );
|
||||
static void Slider_DoSlide( menuslider_s *s, int dir );
|
||||
static void Slider_Draw( menuslider_s *s );
|
||||
static void SpinControl_DoEnter( menulist_s *s );
|
||||
static void SpinControl_Draw( menulist_s *s );
|
||||
static void SpinControl_DoSlide( menulist_s *s, int dir );
|
||||
|
||||
#define RCOLUMN_OFFSET 16
|
||||
#define LCOLUMN_OFFSET -16
|
||||
|
||||
void Action_DoEnter( menuaction_s *a )
|
||||
{
|
||||
if ( a->generic.callback )
|
||||
a->generic.callback( a );
|
||||
}
|
||||
|
||||
void Action_Draw( menuaction_s *a )
|
||||
{
|
||||
if ( a->generic.flags & QMF_LEFT_JUSTIFY )
|
||||
{
|
||||
if ( a->generic.flags & QMF_GRAYED )
|
||||
Menu_DrawStringDark( a->generic.x + a->generic.parent->x + LCOLUMN_OFFSET, a->generic.y + a->generic.parent->y, a->generic.name );
|
||||
else Menu_DrawString( a->generic.x + a->generic.parent->x + LCOLUMN_OFFSET, a->generic.y + a->generic.parent->y, a->generic.name );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( a->generic.flags & QMF_GRAYED )
|
||||
Menu_DrawStringR2LDark( a->generic.x + a->generic.parent->x + LCOLUMN_OFFSET, a->generic.y + a->generic.parent->y, a->generic.name );
|
||||
else Menu_DrawStringR2L( a->generic.x + a->generic.parent->x + LCOLUMN_OFFSET, a->generic.y + a->generic.parent->y, a->generic.name );
|
||||
}
|
||||
if ( a->generic.ownerdraw ) a->generic.ownerdraw( a );
|
||||
}
|
||||
|
||||
bool Field_DoEnter( menufield_s *f )
|
||||
{
|
||||
if ( f->generic.callback )
|
||||
{
|
||||
f->generic.callback( f );
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void QField_Draw( menufield_s *f )
|
||||
{
|
||||
int i;
|
||||
char tempbuffer[128] = "";
|
||||
|
||||
if ( f->generic.name )
|
||||
Menu_DrawStringR2LDark( f->generic.x + f->generic.parent->x + LCOLUMN_OFFSET, f->generic.y + f->generic.parent->y, f->generic.name );
|
||||
|
||||
strncpy( tempbuffer, f->field.buffer + f->field.scroll, f->field.widthInChars );
|
||||
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 16, f->generic.y + f->generic.parent->y - 4, 18 );
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 16, f->generic.y + f->generic.parent->y + 4, 24 );
|
||||
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 24 + f->field.widthInChars * 8, f->generic.y + f->generic.parent->y - 4, 20 );
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 24 + f->field.widthInChars * 8, f->generic.y + f->generic.parent->y + 4, 26 );
|
||||
|
||||
for ( i = 0; i < f->field.widthInChars; i++ )
|
||||
{
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 24 + i * 8, f->generic.y + f->generic.parent->y - 4, 19 );
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + 24 + i * 8, f->generic.y + f->generic.parent->y + 4, 25 );
|
||||
}
|
||||
|
||||
Menu_DrawString( f->generic.x + f->generic.parent->x + 24, f->generic.y + f->generic.parent->y, tempbuffer );
|
||||
|
||||
if( Menu_ItemAtCursor( f->generic.parent ) == f )
|
||||
{
|
||||
int offset;
|
||||
|
||||
if ( f->field.scroll ) offset = f->field.widthInChars;
|
||||
else offset = f->field.cursor;
|
||||
|
||||
if ((( int )( cls.realtime * 4.0f )) & 1 )
|
||||
{
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + ( offset + 2 ) * 8 + 8, f->generic.y + f->generic.parent->y, 11 );
|
||||
}
|
||||
else
|
||||
{
|
||||
SCR_DrawSmallChar( f->generic.x + f->generic.parent->x + ( offset + 2 ) * 8 + 8, f->generic.y + f->generic.parent->y, ' ' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Field_Key( menufield_s *f, int key )
|
||||
{
|
||||
// ignore these keys
|
||||
switch ( key )
|
||||
{
|
||||
case K_KP_DOWNARROW:
|
||||
case K_DOWNARROW:
|
||||
case K_KP_UPARROW:
|
||||
case K_UPARROW:
|
||||
case K_KP_ENTER:
|
||||
case K_ENTER:
|
||||
case K_TAB:
|
||||
case K_ESCAPE:
|
||||
return false;
|
||||
}
|
||||
|
||||
if( key < 127 && !Key_IsDown(K_CTRL))
|
||||
{
|
||||
// pass to the normal editline routine
|
||||
if(!isdigit( key ) && ( f->generic.flags & QMF_NUMBERSONLY ))
|
||||
return false; // numbers only
|
||||
else Field_CharEvent( &f->field, key );
|
||||
}
|
||||
else Field_KeyDownEvent( &f->field, key ); // system symbols
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Menu_AddItem( menuframework_s *menu, void *item )
|
||||
{
|
||||
if ( menu->nitems == 0 )
|
||||
menu->nslots = 0;
|
||||
|
||||
if ( menu->nitems < MAXMENUITEMS )
|
||||
{
|
||||
menu->items[menu->nitems] = item;
|
||||
( ( menucommon_s * ) menu->items[menu->nitems] )->parent = menu;
|
||||
menu->nitems++;
|
||||
}
|
||||
menu->nslots = Menu_TallySlots( menu );
|
||||
}
|
||||
|
||||
/*
|
||||
** Menu_AdjustCursor
|
||||
**
|
||||
** This function takes the given menu, the direction, and attempts
|
||||
** to adjust the menu's cursor so that it's at the next available
|
||||
** slot.
|
||||
*/
|
||||
void Menu_AdjustCursor( menuframework_s *m, int dir )
|
||||
{
|
||||
menucommon_s *citem;
|
||||
|
||||
/*
|
||||
** see if it's in a valid spot
|
||||
*/
|
||||
if ( m->cursor >= 0 && m->cursor < m->nitems )
|
||||
{
|
||||
if(( citem = Menu_ItemAtCursor( m ) ) != 0 )
|
||||
{
|
||||
if ( citem->type != MTYPE_SEPARATOR )
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** it's not in a valid spot, so crawl in the direction indicated until we
|
||||
** find a valid spot
|
||||
*/
|
||||
if ( dir == 1 )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
citem = Menu_ItemAtCursor( m );
|
||||
if ( citem )
|
||||
if ( citem->type != MTYPE_SEPARATOR )
|
||||
break;
|
||||
m->cursor += dir;
|
||||
if ( m->cursor >= m->nitems )
|
||||
m->cursor = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
citem = Menu_ItemAtCursor( m );
|
||||
if ( citem && citem->type != MTYPE_SEPARATOR )
|
||||
break;
|
||||
|
||||
m->cursor += dir;
|
||||
if ( m->cursor < 0 ) m->cursor = m->nitems - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_Center( menuframework_s *menu )
|
||||
{
|
||||
int height;
|
||||
|
||||
height = (( menucommon_s * ) menu->items[menu->nitems-1])->y;
|
||||
height += 17;
|
||||
|
||||
menu->y = (scr_height->integer - height) / 2;
|
||||
}
|
||||
|
||||
void Menu_Draw( menuframework_s *menu )
|
||||
{
|
||||
int i;
|
||||
menucommon_s *item;
|
||||
|
||||
/*
|
||||
** draw contents
|
||||
*/
|
||||
for ( i = 0; i < menu->nitems; i++ )
|
||||
{
|
||||
switch ((( menucommon_s * )menu->items[i] )->type )
|
||||
{
|
||||
case MTYPE_FIELD:
|
||||
QField_Draw( ( menufield_s * ) menu->items[i] );
|
||||
break;
|
||||
case MTYPE_SLIDER:
|
||||
Slider_Draw( ( menuslider_s * ) menu->items[i] );
|
||||
break;
|
||||
case MTYPE_LIST:
|
||||
MenuList_Draw( ( menulist_s * ) menu->items[i] );
|
||||
break;
|
||||
case MTYPE_SPINCONTROL:
|
||||
SpinControl_Draw( ( menulist_s * ) menu->items[i] );
|
||||
break;
|
||||
case MTYPE_ACTION:
|
||||
Action_Draw( ( menuaction_s * ) menu->items[i] );
|
||||
break;
|
||||
case MTYPE_SEPARATOR:
|
||||
Separator_Draw( ( menuseparator_s * ) menu->items[i] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
item = Menu_ItemAtCursor( menu );
|
||||
|
||||
if ( item && item->cursordraw )
|
||||
{
|
||||
item->cursordraw( item );
|
||||
}
|
||||
else if ( menu->cursordraw )
|
||||
{
|
||||
menu->cursordraw( menu );
|
||||
}
|
||||
else if ( item && item->type != MTYPE_FIELD )
|
||||
{
|
||||
if ( item->flags & QMF_LEFT_JUSTIFY )
|
||||
{
|
||||
SCR_DrawSmallChar( menu->x + item->x - 24 + item->cursor_offset, menu->y + item->y, 12 + ( ( int ) ( cls.realtime * 5.0f ) & 1 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
SCR_DrawSmallChar( menu->x + item->cursor_offset, menu->y + item->y, 12 + ( ( int ) ( cls.realtime * 5.0f ) & 1 ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( item )
|
||||
{
|
||||
if ( item->statusbarfunc )
|
||||
item->statusbarfunc( ( void * ) item );
|
||||
else if ( item->statusbar )
|
||||
Menu_DrawStatusBar( item->statusbar );
|
||||
else
|
||||
Menu_DrawStatusBar( menu->statusbar );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Menu_DrawStatusBar( menu->statusbar );
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_DrawStatusBar( const char *string )
|
||||
{
|
||||
if ( string )
|
||||
{
|
||||
int col, l = strlen( string );
|
||||
float y = SCREEN_HEIGHT - SMALLCHAR_HEIGHT;
|
||||
float maxcol = SCREEN_WIDTH / SMALLCHAR_WIDTH;
|
||||
|
||||
SCR_AdjustSize( &maxcol, &y, NULL, NULL );
|
||||
col = maxcol / 2 - l / 2;
|
||||
SCR_FillRect( 0, SCREEN_HEIGHT - SMALLCHAR_HEIGHT, SCREEN_WIDTH, SMALLCHAR_HEIGHT, GetRGBA(0.5,0.5,0.5,0.7));
|
||||
Menu_DrawString( col * SMALLCHAR_WIDTH, y, string );
|
||||
}
|
||||
else
|
||||
{
|
||||
SCR_FillRect( 0, SCREEN_HEIGHT - SMALLCHAR_HEIGHT, SCREEN_WIDTH, SMALLCHAR_HEIGHT, GetRGBA(0.5,0.5,0.5,0.7));
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_DrawString( int x, int y, const char *string )
|
||||
{
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < strlen( string ); i++ )
|
||||
{
|
||||
SCR_DrawSmallChar(( x + i * SMALLCHAR_WIDTH ), y, string[i] );
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_DrawStringDark( int x, int y, const char *string )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for ( i = 0; i < strlen( string ); i++ )
|
||||
{
|
||||
SCR_DrawSmallChar( ( x + i*8 ), y, string[i] + 128 );
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_DrawStringR2L( int x, int y, const char *string )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for ( i = 0; i < strlen( string ); i++ )
|
||||
{
|
||||
SCR_DrawSmallChar( ( x - i*8 ), y, string[strlen(string)-i-1] );
|
||||
}
|
||||
}
|
||||
|
||||
void Menu_DrawStringR2LDark( int x, int y, const char *string )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for ( i = 0; i < strlen( string ); i++ )
|
||||
{
|
||||
SCR_DrawSmallChar( ( x - i*8 ), y, string[strlen(string)-i-1]+128 );
|
||||
}
|
||||
}
|
||||
|
||||
void *Menu_ItemAtCursor( menuframework_s *m )
|
||||
{
|
||||
if ( m->cursor < 0 || m->cursor >= m->nitems )
|
||||
return 0;
|
||||
|
||||
return m->items[m->cursor];
|
||||
}
|
||||
|
||||
bool Menu_SelectItem( menuframework_s *s )
|
||||
{
|
||||
menucommon_s *item = ( menucommon_s * ) Menu_ItemAtCursor( s );
|
||||
|
||||
if ( item )
|
||||
{
|
||||
switch ( item->type )
|
||||
{
|
||||
case MTYPE_FIELD:
|
||||
return Field_DoEnter( ( menufield_s * ) item ) ;
|
||||
case MTYPE_ACTION:
|
||||
Action_DoEnter( ( menuaction_s * ) item );
|
||||
return true;
|
||||
case MTYPE_LIST:
|
||||
// Menulist_DoEnter( ( menulist_s * ) item );
|
||||
return false;
|
||||
case MTYPE_SPINCONTROL:
|
||||
// SpinControl_DoEnter( ( menulist_s * ) item );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Menu_SetStatusBar( menuframework_s *m, const char *string )
|
||||
{
|
||||
m->statusbar = string;
|
||||
}
|
||||
|
||||
void Menu_SlideItem( menuframework_s *s, int dir )
|
||||
{
|
||||
menucommon_s *item = ( menucommon_s * ) Menu_ItemAtCursor( s );
|
||||
|
||||
if ( item )
|
||||
{
|
||||
switch ( item->type )
|
||||
{
|
||||
case MTYPE_SLIDER:
|
||||
Slider_DoSlide( ( menuslider_s * ) item, dir );
|
||||
break;
|
||||
case MTYPE_SPINCONTROL:
|
||||
SpinControl_DoSlide( ( menulist_s * ) item, dir );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int Menu_TallySlots( menuframework_s *menu )
|
||||
{
|
||||
int i;
|
||||
int total = 0;
|
||||
|
||||
for ( i = 0; i < menu->nitems; i++ )
|
||||
{
|
||||
if ( ( ( menucommon_s * ) menu->items[i] )->type == MTYPE_LIST )
|
||||
{
|
||||
int nitems = 0;
|
||||
const char **n = ( ( menulist_s * ) menu->items[i] )->itemnames;
|
||||
|
||||
while (*n)
|
||||
nitems++, n++;
|
||||
|
||||
total += nitems;
|
||||
}
|
||||
else
|
||||
{
|
||||
total++;
|
||||
}
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
void Menulist_DoEnter( menulist_s *l )
|
||||
{
|
||||
int start;
|
||||
|
||||
start = l->generic.y / 17 + 1;
|
||||
|
||||
l->curvalue = l->generic.parent->cursor - start;
|
||||
|
||||
if ( l->generic.callback )
|
||||
l->generic.callback( l );
|
||||
}
|
||||
|
||||
void MenuList_Draw( menulist_s *l )
|
||||
{
|
||||
const char **n;
|
||||
int y = 0;
|
||||
|
||||
Menu_DrawStringR2LDark( l->generic.x + l->generic.parent->x + LCOLUMN_OFFSET, l->generic.y + l->generic.parent->y, l->generic.name );
|
||||
|
||||
n = l->itemnames;
|
||||
|
||||
SCR_FillRect( l->generic.x - 112 + l->generic.parent->x, l->generic.parent->y + l->generic.y + l->curvalue*17 + 17, 128, 10, GetRGBA(0.3f, 0.8f, 1.0f, 1.0f));
|
||||
while ( *n )
|
||||
{
|
||||
Menu_DrawStringR2LDark( l->generic.x + l->generic.parent->x + LCOLUMN_OFFSET, l->generic.y + l->generic.parent->y + y + 17, *n );
|
||||
|
||||
n++;
|
||||
y += 17;
|
||||
}
|
||||
}
|
||||
|
||||
void Separator_Draw( menuseparator_s *s )
|
||||
{
|
||||
if ( s->generic.name )
|
||||
Menu_DrawStringR2LDark( s->generic.x + s->generic.parent->x, s->generic.y + s->generic.parent->y, s->generic.name );
|
||||
}
|
||||
|
||||
void Slider_DoSlide( menuslider_s *s, int dir )
|
||||
{
|
||||
s->curvalue += dir;
|
||||
|
||||
if ( s->curvalue > s->maxvalue )
|
||||
s->curvalue = s->maxvalue;
|
||||
else if ( s->curvalue < s->minvalue )
|
||||
s->curvalue = s->minvalue;
|
||||
|
||||
if ( s->generic.callback )
|
||||
s->generic.callback( s );
|
||||
}
|
||||
|
||||
#define SLIDER_RANGE 10
|
||||
|
||||
void Slider_Draw( menuslider_s *s )
|
||||
{
|
||||
int i;
|
||||
|
||||
Menu_DrawStringR2LDark( s->generic.x + s->generic.parent->x + LCOLUMN_OFFSET,
|
||||
s->generic.y + s->generic.parent->y,
|
||||
s->generic.name );
|
||||
|
||||
s->range = ( s->curvalue - s->minvalue ) / ( float ) ( s->maxvalue - s->minvalue );
|
||||
|
||||
s->range = bound( 0, s->range, 1 );
|
||||
SCR_DrawSmallChar( s->generic.x + s->generic.parent->x + RCOLUMN_OFFSET, s->generic.y + s->generic.parent->y, 128);
|
||||
for ( i = 0; i < SLIDER_RANGE; i++ )
|
||||
SCR_DrawSmallChar( RCOLUMN_OFFSET + s->generic.x + i*8 + s->generic.parent->x + 8, s->generic.y + s->generic.parent->y, 129);
|
||||
SCR_DrawSmallChar( RCOLUMN_OFFSET + s->generic.x + i*8 + s->generic.parent->x + 8, s->generic.y + s->generic.parent->y, 130);
|
||||
SCR_DrawSmallChar(( int )( 8 + RCOLUMN_OFFSET + s->generic.parent->x + s->generic.x + (SLIDER_RANGE-1)*8 * s->range ), s->generic.y + s->generic.parent->y, 131);
|
||||
}
|
||||
|
||||
void SpinControl_DoEnter( menulist_s *s )
|
||||
{
|
||||
s->curvalue++;
|
||||
if ( s->itemnames[s->curvalue] == 0 )
|
||||
s->curvalue = 0;
|
||||
|
||||
if ( s->generic.callback )
|
||||
s->generic.callback( s );
|
||||
}
|
||||
|
||||
void SpinControl_DoSlide( menulist_s *s, int dir )
|
||||
{
|
||||
s->curvalue += dir;
|
||||
|
||||
if ( s->curvalue < 0 )
|
||||
s->curvalue = 0;
|
||||
else if ( s->itemnames[s->curvalue] == 0 )
|
||||
s->curvalue--;
|
||||
|
||||
if ( s->generic.callback )
|
||||
s->generic.callback( s );
|
||||
}
|
||||
|
||||
void SpinControl_Draw( menulist_s *s )
|
||||
{
|
||||
char buffer[100];
|
||||
|
||||
if ( s->generic.name )
|
||||
{
|
||||
Menu_DrawStringR2LDark( s->generic.x + s->generic.parent->x + LCOLUMN_OFFSET,
|
||||
s->generic.y + s->generic.parent->y,
|
||||
s->generic.name );
|
||||
}
|
||||
if ( !strchr( s->itemnames[s->curvalue], '\n' ) )
|
||||
{
|
||||
Menu_DrawString( RCOLUMN_OFFSET + s->generic.x + s->generic.parent->x, s->generic.y + s->generic.parent->y, s->itemnames[s->curvalue] );
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy( buffer, s->itemnames[s->curvalue] );
|
||||
*strchr( buffer, '\n' ) = 0;
|
||||
Menu_DrawString( RCOLUMN_OFFSET + s->generic.x + s->generic.parent->x, s->generic.y + s->generic.parent->y, buffer );
|
||||
strcpy( buffer, strchr( s->itemnames[s->curvalue], '\n' ) + 1 );
|
||||
Menu_DrawString( RCOLUMN_OFFSET + s->generic.x + s->generic.parent->x, s->generic.y + s->generic.parent->y + 17, buffer );
|
||||
}
|
||||
}
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
//=======================================================================
|
||||
// Copyright XashXT Group 2007 ©
|
||||
// ui_main.c - progs user interface
|
||||
//=======================================================================
|
||||
|
||||
#include "uimenu.h"
|
||||
|
||||
bool ui_active = false;
|
||||
|
||||
void UI_KeyEvent( int key )
|
||||
{
|
||||
const char *ascii = Key_KeynumToString(key);
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg( PRVM_MENUPROG );
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
// setup args
|
||||
PRVM_G_FLOAT(OFS_PARM0) = key;
|
||||
PRVM_G_INT(OFS_PARM1) = PRVM_SetEngineString(ascii);
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_keydown, "QC function m_keydown is missing");
|
||||
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_Draw( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_draw, "QC function m_draw is missing");
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_ShowMenu( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
ui_active = true;
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_show, "QC function m_toggle is missing");
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_HideMenu( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
*prog->time = cls.realtime;
|
||||
ui_active = false;
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_hide, "QC function m_toggle is missing");
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_Shutdown( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_SetProg(PRVM_MENUPROG);
|
||||
|
||||
// set time
|
||||
//*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_shutdown, "QC function m_shutdown is missing");
|
||||
|
||||
// reset key_dest
|
||||
cls.key_dest = key_game;
|
||||
|
||||
// AK not using this cause Im not sure whether this is useful at all instead :
|
||||
PRVM_ResetProg();
|
||||
|
||||
PRVM_End;
|
||||
}
|
||||
|
||||
void UI_Init( void )
|
||||
{
|
||||
PRVM_Begin;
|
||||
PRVM_InitProg( PRVM_MENUPROG );
|
||||
|
||||
prog->progs_mempool = Mem_AllocPool( "Uimenu Progs" );
|
||||
prog->builtins = vm_ui_builtins;
|
||||
prog->numbuiltins = vm_ui_numbuiltins;
|
||||
prog->edictprivate_size = sizeof(ui_edict_t);
|
||||
prog->limit_edicts = UI_MAX_EDICTS;
|
||||
prog->name = "uimenu";
|
||||
prog->num_edicts = 1;
|
||||
prog->loadintoworld = false;
|
||||
prog->init_cmd = VM_Cmd_Init;
|
||||
prog->reset_cmd = VM_Cmd_Reset;
|
||||
prog->error_cmd = VM_Error;
|
||||
|
||||
PRVM_LoadProgs( GI->uimenu_prog, 0, NULL, UI_NUM_REQFIELDS, ui_reqfields );
|
||||
*prog->time = cls.realtime;
|
||||
|
||||
PRVM_ExecuteProgram (prog->globals.ui->m_init, "QC function m_init is missing");
|
||||
PRVM_End;
|
||||
}
|
|
@ -1,121 +0,0 @@
|
|||
//=======================================================================
|
||||
// Copyright XashXT Group 2007 ©
|
||||
// uimenu.h - Xash menu system definition
|
||||
//=======================================================================
|
||||
|
||||
#ifndef UIMENU_H
|
||||
#define UIMENU_H
|
||||
|
||||
#include "common.h"
|
||||
#include "screen.h"
|
||||
#include "client.h"
|
||||
#include "ui_edict.h"
|
||||
|
||||
#define MAXMENUITEMS 64
|
||||
|
||||
// menu types
|
||||
#define MTYPE_SLIDER 0
|
||||
#define MTYPE_LIST 1
|
||||
#define MTYPE_ACTION 2
|
||||
#define MTYPE_SPINCONTROL 3
|
||||
#define MTYPE_SEPARATOR 4
|
||||
#define MTYPE_FIELD 5
|
||||
|
||||
// menu flags
|
||||
#define QMF_LEFT_JUSTIFY 0x00000001
|
||||
#define QMF_GRAYED 0x00000002
|
||||
#define QMF_NUMBERSONLY 0x00000004
|
||||
|
||||
typedef struct _tag_menuframework
|
||||
{
|
||||
int x, y;
|
||||
int cursor;
|
||||
|
||||
int nitems;
|
||||
int nslots;
|
||||
void *items[64];
|
||||
|
||||
const char *statusbar;
|
||||
void (*cursordraw)( struct _tag_menuframework *m );
|
||||
} menuframework_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *name;
|
||||
menuframework_s *parent;
|
||||
int type;
|
||||
int x, y;
|
||||
int cursor_offset;
|
||||
int localdata[4];
|
||||
uint flags;
|
||||
const char *statusbar;
|
||||
|
||||
void (*callback)( void *self );
|
||||
void (*statusbarfunc)( void *self );
|
||||
void (*ownerdraw)( void *self );
|
||||
void (*cursordraw)( void *self );
|
||||
} menucommon_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
menucommon_s generic;
|
||||
field_t field;
|
||||
} menufield_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
menucommon_s generic;
|
||||
float minvalue;
|
||||
float maxvalue;
|
||||
float curvalue;
|
||||
float range;
|
||||
} menuslider_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
menucommon_s generic;
|
||||
int curvalue;
|
||||
const char **itemnames;
|
||||
} menulist_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
menucommon_s generic;
|
||||
} menuaction_s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
menucommon_s generic;
|
||||
} menuseparator_s;
|
||||
|
||||
bool Field_Key( menufield_s *field, int key );
|
||||
void Menu_AddItem( menuframework_s *menu, void *item );
|
||||
void Menu_AdjustCursor( menuframework_s *menu, int dir );
|
||||
void Menu_Center( menuframework_s *menu );
|
||||
void Menu_Draw( menuframework_s *menu );
|
||||
void *Menu_ItemAtCursor( menuframework_s *m );
|
||||
bool Menu_SelectItem( menuframework_s *s );
|
||||
void Menu_SetStatusBar( menuframework_s *s, const char *string );
|
||||
void Menu_SlideItem( menuframework_s *s, int dir );
|
||||
int Menu_TallySlots( menuframework_s *menu );
|
||||
void M_FindKeysForCommand(char *command, int *keys);
|
||||
void Menu_DrawString( int, int, const char * );
|
||||
void Menu_DrawStringDark( int, int, const char * );
|
||||
void Menu_DrawStringR2L( int, int, const char * );
|
||||
void Menu_DrawStringR2LDark( int, int, const char * );
|
||||
|
||||
// progs menu
|
||||
#define UI_MAX_EDICTS (1 << 12) // should be enough for a menu
|
||||
|
||||
extern bool ui_active;
|
||||
extern const int vm_ui_numbuiltins;
|
||||
extern prvm_builtin_t vm_ui_builtins[];
|
||||
|
||||
void UI_Init( void );
|
||||
void UI_KeyEvent( int key );
|
||||
void UI_ShowMenu( void );
|
||||
void UI_HideMenu( void );
|
||||
void UI_Shutdown( void );
|
||||
void UI_Draw( void );
|
||||
|
||||
#endif//UIMENU_H
|
|
@ -34,10 +34,10 @@ typedef struct loadformat_s
|
|||
|
||||
loadformat_t load_formats[] =
|
||||
{
|
||||
{"textures/%s%s.%s", "tga", Image_LoadTGA},
|
||||
{"textures/%s%s.%s", "dds", Image_LoadDDS},
|
||||
{"%s%s.%s", "tga", Image_LoadTGA},
|
||||
{"textures/%s%s.%s", "tga", Image_LoadTGA},
|
||||
{"%s%s.%s", "dds", Image_LoadDDS},
|
||||
{"%s%s.%s", "tga", Image_LoadTGA},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
//=======================================================================
|
||||
// Copyright XashXT Group 2007 ©
|
||||
// builtin.h - builtin resources
|
||||
//=======================================================================
|
||||
#ifndef BUILTIN_H
|
||||
#define BUILTIN_H
|
||||
|
||||
// internal credits
|
||||
static const char *xash_credits[] =
|
||||
{
|
||||
"^3Xash3D",
|
||||
"",
|
||||
"^3PROGRAMMING",
|
||||
"Uncle Mike",
|
||||
"",
|
||||
"^3ART",
|
||||
"Chorus",
|
||||
"Small Link",
|
||||
"",
|
||||
"^3LEVEL DESIGN",
|
||||
"Scrama",
|
||||
"Mitoh",
|
||||
"",
|
||||
"",
|
||||
"^3SPECIAL THANKS",
|
||||
"Chain Studios at all",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"^3MUSIC",
|
||||
"Dj Existence",
|
||||
"",
|
||||
"",
|
||||
"^3THANKS TO",
|
||||
"ID Software at all",
|
||||
"Lord Havoc (Darkplaces Team)",
|
||||
"Georg Destroy for icon graphics",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"Copyright XashXT Group 2008 (C)",
|
||||
0
|
||||
};
|
||||
|
||||
#endif//BUILTIN_H
|
|
@ -33,7 +33,7 @@ image_t *Draw_FindPic( char *name )
|
|||
{
|
||||
string fullname;
|
||||
byte *buffer = NULL;
|
||||
long bufsize = 0;
|
||||
size_t bufsize = 0;
|
||||
|
||||
//HACKHACK: use default font
|
||||
if(stristr(name, "fonts" ))
|
||||
|
@ -42,7 +42,7 @@ image_t *Draw_FindPic( char *name )
|
|||
bufsize = sizeof(def_font);
|
||||
}
|
||||
|
||||
com.snprintf( fullname, MAX_STRING, "graphics/%s", name );
|
||||
com.snprintf( fullname, MAX_STRING, "gfx/%s", name );
|
||||
return R_FindImage( fullname, buffer, bufsize, it_pic );
|
||||
}
|
||||
|
||||
|
@ -136,11 +136,11 @@ void Draw_StretchPic (float x, float y, float w, float h, float s1, float t1, fl
|
|||
gl = Draw_FindPic( pic );
|
||||
if(!gl) return;
|
||||
|
||||
GL_Bind (gl->texnum[0]);
|
||||
GL_Bind( gl->texnum[0] );
|
||||
|
||||
GL_EnableBlend();
|
||||
GL_TexEnv( GL_MODULATE );
|
||||
if(gl_state.draw_color[3] != 1.0f )
|
||||
if( gl_state.draw_color[3] != 1.0f )
|
||||
{
|
||||
GL_DisableAlphaTest();
|
||||
qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
|
|
|
@ -240,6 +240,7 @@ extern cvar_t *r_bloom_fast_sample;
|
|||
extern cvar_t *r_motionblur_intens;
|
||||
extern cvar_t *r_motionblur;
|
||||
extern cvar_t *r_mirroralpha;
|
||||
extern cvar_t *r_interpolate;
|
||||
|
||||
extern cvar_t *gl_nosubimage;
|
||||
extern cvar_t *gl_bitdepth;
|
||||
|
|
|
@ -160,6 +160,7 @@ cvar_t *r_height;
|
|||
cvar_t *r_mode;
|
||||
|
||||
cvar_t *r_physbdebug;
|
||||
cvar_t *r_interpolate;
|
||||
|
||||
/*
|
||||
=================
|
||||
|
@ -1011,6 +1012,7 @@ void R_Register( void )
|
|||
r_minimap = Cvar_Get("r_minimap", "0", CVAR_ARCHIVE );
|
||||
|
||||
r_mirroralpha = Cvar_Get( "r_mirroralpha", "0.5", CVAR_ARCHIVE );
|
||||
r_interpolate = Cvar_Get( "r_interpolate", "0", CVAR_ARCHIVE );
|
||||
|
||||
gl_modulate = Cvar_Get ("gl_modulate", "1", CVAR_ARCHIVE );
|
||||
gl_log = Cvar_Get( "gl_log", "0", 0 );
|
||||
|
|
|
@ -605,7 +605,7 @@ void R_SetSky (char *name, float rotate, vec3_t axis)
|
|||
skyrotate = rotate;
|
||||
VectorCopy(axis, skyaxis);
|
||||
|
||||
sprintf(pathname, "env_skybox/%s", skyname);
|
||||
sprintf(pathname, "gfx/env/%s", skyname);
|
||||
sky_image = R_FindImage (pathname, NULL, 0, it_sky);
|
||||
if (!sky_image) sky_image = r_notexture;
|
||||
|
||||
|
|
|
@ -1591,6 +1591,8 @@ void R_DrawStudioModel( int passnum )
|
|||
m_pTextureHeader = m_pRenderModel->thdr;
|
||||
m_PassNum = passnum;
|
||||
|
||||
m_fDoInterp = r_interpolate->integer;
|
||||
|
||||
R_StudioSetUpTransform();
|
||||
|
||||
// see if the bounding box lets us trivially reject, also sets
|
||||
|
|
|
@ -39,7 +39,7 @@ convformat_t convert_formats[] =
|
|||
{"%s.%s", "flt", ConvFLT}, // doom1 textures
|
||||
{"%s.%s", "flp", ConvFLP}, // doom1 menu pics
|
||||
{"%s.%s", "mip", ConvMIP}, // Quake1/Half-Life textures
|
||||
{"%s.%s", "lmp", ConvLMP}, // Quake1/Half-Life graphics
|
||||
{"%s.%s", "lmp", ConvLMP}, // Quake1/Half-Life gfx
|
||||
{"%s.%s", "fnt", ConvFNT}, // Half-Life fonts
|
||||
{"%s.%s", "wal", ConvWAL}, // Quake2 textures
|
||||
{"%s.%s", "skn", ConvSKN}, // doom1 sprite models
|
||||
|
|
|
@ -119,26 +119,26 @@ bool ConvPCX( const char *name, char *buffer, int filesize )
|
|||
|
||||
FS_FileBase( name, picname );
|
||||
if(!com.strnicmp("num", picname, 3 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/fonts/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/fonts/%s", picname );
|
||||
else if(!com.strnicmp("anum", picname, 4 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/fonts/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/fonts/%s", picname );
|
||||
else if(!com.strnicmp("conchars", picname, 8 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/fonts/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/fonts/%s", picname );
|
||||
else if(!com.strnicmp("a_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/hud/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/hud/%s", picname );
|
||||
else if(!com.strnicmp("p_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/hud/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/hud/%s", picname );
|
||||
else if(!com.strnicmp("k_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/hud/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/hud/%s", picname );
|
||||
else if(!com.strnicmp("i_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/hud/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/hud/%s", picname );
|
||||
else if(!com.strnicmp("w_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/hud/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/hud/%s", picname );
|
||||
else if(!com.strnicmp("m_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/menu/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/menu/%s", picname );
|
||||
else if(!com.strnicmp("m_", picname, 2 ))
|
||||
com.snprintf( path, MAX_STRING, "graphics/menu/%s", picname );
|
||||
else com.snprintf( path, MAX_STRING, "graphics/common/%s", picname );
|
||||
com.snprintf( path, MAX_STRING, "gfx/menu/%s", picname );
|
||||
else com.snprintf( path, MAX_STRING, "gfx/common/%s", picname );
|
||||
|
||||
if(PCX_ConvertImage( path, buffer, filesize ))
|
||||
{
|
||||
|
|
|
@ -141,7 +141,7 @@ bool ConvFLP( const char *name, char *buffer, int filesize )
|
|||
if( pic )
|
||||
{
|
||||
FS_FileBase( name, savedname );
|
||||
Image->SaveImage(va("%s/graphics/%s.tga", gs_gamedir, savedname ), pic );
|
||||
Image->SaveImage(va("%s/gfx/%s.tga", gs_gamedir, savedname ), pic );
|
||||
Image->FreeImage( pic ); // release buffer
|
||||
Msg("%s.flmp\n", savedname ); // echo to console about current pic
|
||||
return true;
|
||||
|
@ -193,7 +193,7 @@ bool ConvMIP( const char *name, char *buffer, int filesize )
|
|||
pixels = pic.width * pic.height;
|
||||
pal = NULL; // clear palette
|
||||
fin = buffer;
|
||||
com.snprintf( filepath, MAX_STRING, "%s/graphics/%s.tga", gs_gamedir, savedname );
|
||||
com.snprintf( filepath, MAX_STRING, "%s/gfx/%s.tga", gs_gamedir, savedname );
|
||||
}
|
||||
else if(filesize >= (int)sizeof(mip) + ((pixels * 85)>>6) + sizeof(short) + 768)
|
||||
{
|
||||
|
@ -301,7 +301,7 @@ bool ConvLMP( const char *name, char *buffer, int filesize )
|
|||
FS_StripExtension((char *)name );
|
||||
Conv_GetPaletteLMP( pal, LUMP_NORMAL );
|
||||
Conv_Copy8bitRGBA( fin, pic.buffer, pixels );
|
||||
Image->SaveImage(va("%s/graphics/%s.tga", gs_gamedir, name ), &pic ); // save converted image
|
||||
Image->SaveImage(va("%s/gfx/%s.tga", gs_gamedir, name ), &pic ); // save converted image
|
||||
Mem_Free( pic.buffer ); // release buffer
|
||||
Msg("%s.lmp\n", name ); // echo to console about current image
|
||||
|
||||
|
@ -389,7 +389,7 @@ bool ConvFNT( const char *name, char *buffer, int filesize )
|
|||
|
||||
FS_StripExtension((char *)name );
|
||||
Conv_Copy8bitRGBA( fin, pic.buffer, pixels );
|
||||
Image->SaveImage(va("%s/graphics/%s.tga", gs_gamedir, name ), &pic ); // save converted image
|
||||
Image->SaveImage(va("%s/gfx/%s.tga", gs_gamedir, name ), &pic ); // save converted image
|
||||
Mem_Free( pic.buffer ); // release buffer
|
||||
Msg("%s.qfont\n", name ); // echo to console about current font
|
||||
|
||||
|
|
22
todo.log
22
todo.log
|
@ -10,23 +10,21 @@ SprExplorer
|
|||
fopen завешивает приложение, при попытке создать файл в несуществующей директории. Ну вылетал бы чтоли, или ошибку
|
||||
возвращал.
|
||||
|
||||
Çàìå÷åííûå áàãè:
|
||||
0.
|
||||
|
||||
Отложенные задачи:
|
||||
1. Поддержка loop для ogg vorbis
|
||||
2. oggenc в виде отдельной утилиты (с импортом cue points)
|
||||
3. сохранение в DXTC формат
|
||||
4. snd encoder äëÿ roqlib
|
||||
|
||||
Текущие задачи:
|
||||
1. Навести порядок в ресурсах
|
||||
2. Переписать меню для использования внутренних ресурсов
|
||||
0. Ïðåâðàòèòü host.debug è host.developer â cvars
|
||||
1. Èìïëåìåíòàöèÿ client.dat
|
||||
2. Èìïîðò cg_user.c â client.dat
|
||||
3. Ïîääåðæêà êàñòîìíûõ ìåññàã
|
||||
|
||||
0. Полная переработка звукового движка
|
||||
1. Добавить signon message
|
||||
2. Вырезать нахрен меню от quake2
|
||||
3. имплементировать нормальное меню (упорядочить все)
|
||||
4. Почему ствол скошен от центра?
|
||||
5. Зеркало доделать
|
||||
6. физика игрока на ньютоне
|
||||
7. избавиться от sv.moved_edicts
|
||||
|
||||
Физика игрока:
|
||||
1. Убрать отскоки от стен
|
||||
|
@ -62,10 +60,6 @@ Alt+Enter
|
|||
// замеченные баги
|
||||
1. viewer ничего не пишет в лог (сцуко)
|
||||
|
||||
// из неоконченного
|
||||
0. snd encoder для roqlib
|
||||
1. doom snd decoder для snddec
|
||||
|
||||
Текущие задачи:
|
||||
1. Доделать сохранение в dds-формат
|
||||
2. выкинуть из кода поддержку: PF_INDEXED_24, PF_INDEXED_32, (мертвые форматы)
|
||||
|
|
254
vprogs/client.h
254
vprogs/client.h
|
@ -1,12 +1,11 @@
|
|||
const unsigned char client_dat[] =
|
||||
{
|
||||
const unsigned char client_dat[] = {
|
||||
0x07, 0x00, 0x00, 0x00, 0x06, 0x1d, 0x00, 0x00, 0xf7, 0x02, 0x00,
|
||||
0x00, 0x0b, 0x00, 0x00, 0x00, 0x5a, 0x04, 0x00, 0x00, 0x82, 0x00,
|
||||
0x00, 0x00, 0x63, 0x06, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1e,
|
||||
0x03, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00,
|
||||
0x10, 0x05, 0x00, 0x00, 0x7c, 0x07, 0x00, 0x00, 0xd9, 0x00, 0x00,
|
||||
0x00, 0x0b, 0x00, 0x00, 0x00, 0x5e, 0x04, 0x00, 0x00, 0x82, 0x00,
|
||||
0x00, 0x00, 0x67, 0x06, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1e,
|
||||
0x03, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00,
|
||||
0x10, 0x05, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xda, 0x00, 0x00,
|
||||
0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x27, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x2b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x49, 0x44, 0x31, 0x36, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x68, 0x69,
|
||||
0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20,
|
||||
|
@ -70,124 +69,125 @@ const unsigned char client_dat[] =
|
|||
0x43, 0x56, 0xcb, 0x46, 0x11, 0x33, 0x4e, 0x25, 0x9d, 0xea, 0x7a,
|
||||
0xf2, 0xaa, 0xda, 0x55, 0x03, 0xf0, 0x1f, 0xb9, 0x8c, 0xe8, 0xd7,
|
||||
0x27, 0x00, 0x00, 0x00, 0x78, 0xda, 0x63, 0x60, 0x40, 0x05, 0xf2,
|
||||
0x0c, 0x97, 0x18, 0x58, 0x80, 0xb4, 0x09, 0x43, 0x37, 0x03, 0x31,
|
||||
0x40, 0x9e, 0xe1, 0x2a, 0xc3, 0x15, 0x20, 0xad, 0x0d, 0x26, 0x11,
|
||||
0x00, 0x00, 0xa6, 0x44, 0x04, 0x7c, 0x3c, 0x01, 0x00, 0x00, 0x78,
|
||||
0xda, 0x8d, 0xd5, 0x4b, 0x4e, 0xc2, 0x40, 0x1c, 0xc7, 0xf1, 0x96,
|
||||
0xca, 0x23, 0x1e, 0xc3, 0x3d, 0x7b, 0x6e, 0xc0, 0x11, 0xbc, 0x81,
|
||||
0xd7, 0x41, 0x05, 0x11, 0xc2, 0x25, 0x30, 0x01, 0xdf, 0x8a, 0xe0,
|
||||
0x86, 0x87, 0x6c, 0x78, 0xb9, 0x16, 0x44, 0x54, 0x44, 0x40, 0x74,
|
||||
0xc3, 0x9b, 0xd2, 0x92, 0x4c, 0x9a, 0x19, 0xfc, 0x4e, 0xd2, 0x64,
|
||||
0x68, 0x3e, 0xfd, 0xfd, 0x3b, 0x9d, 0x7f, 0x8b, 0xa6, 0xfd, 0x3f,
|
||||
0x16, 0xab, 0xb1, 0xa3, 0x38, 0xbf, 0x99, 0xcf, 0x15, 0x66, 0x2e,
|
||||
0x98, 0x19, 0xc8, 0x99, 0x2a, 0x8c, 0x38, 0x26, 0x0a, 0xa3, 0xdb,
|
||||
0x87, 0x39, 0xc6, 0x20, 0xe7, 0x0f, 0xe4, 0xfc, 0x02, 0x33, 0x02,
|
||||
0xe6, 0x07, 0x98, 0x21, 0x30, 0x03, 0xb0, 0xae, 0x3e, 0xc8, 0xf9,
|
||||
0x56, 0x18, 0xc3, 0x34, 0xba, 0xa5, 0x7a, 0x0a, 0xe3, 0x5a, 0x1b,
|
||||
0x6b, 0xfe, 0x05, 0x6a, 0x75, 0x41, 0xce, 0x27, 0x30, 0x1f, 0x5b,
|
||||
0x8c, 0x61, 0x58, 0xf3, 0x77, 0xb0, 0xae, 0x0e, 0xa8, 0xf5, 0x06,
|
||||
0xd6, 0xd5, 0x06, 0x39, 0xaf, 0xa0, 0xe7, 0x5b, 0xa0, 0x56, 0x13,
|
||||
0x98, 0x17, 0x50, 0xeb, 0x19, 0xf4, 0x4f, 0x03, 0xd4, 0xaa, 0x03,
|
||||
0x53, 0x03, 0xcf, 0xa7, 0x0c, 0xcc, 0x13, 0xa8, 0x55, 0x02, 0xa6,
|
||||
0x08, 0x4c, 0x01, 0xdc, 0x4f, 0x1e, 0x98, 0x47, 0x60, 0x72, 0xc0,
|
||||
0x64, 0x41, 0x3f, 0x3f, 0x80, 0x9c, 0x0c, 0x58, 0xfb, 0x3d, 0x30,
|
||||
0x77, 0xc0, 0xdc, 0x02, 0x73, 0x03, 0xcc, 0x35, 0x30, 0x57, 0xc0,
|
||||
0x5c, 0x02, 0x73, 0x01, 0xcc, 0x39, 0x30, 0x69, 0x60, 0x52, 0x60,
|
||||
0xbf, 0xce, 0xb6, 0xe4, 0xd8, 0x9f, 0x3a, 0x2d, 0x09, 0x4c, 0x02,
|
||||
0xbc, 0xef, 0x71, 0x60, 0x62, 0xc0, 0x9c, 0x02, 0x13, 0x05, 0xe6,
|
||||
0x04, 0x98, 0x08, 0x30, 0x61, 0x60, 0x8e, 0x81, 0x39, 0x02, 0xe6,
|
||||
0x10, 0x98, 0x90, 0xc2, 0xb8, 0xad, 0x77, 0x59, 0x37, 0xec, 0xbd,
|
||||
0xab, 0x38, 0xf6, 0x52, 0xd6, 0x27, 0x55, 0xe1, 0xf7, 0x9e, 0x22,
|
||||
0x53, 0x34, 0x7e, 0x89, 0xf1, 0x38, 0x4c, 0x40, 0x62, 0xbc, 0x0e,
|
||||
0x13, 0x94, 0x18, 0x9f, 0x6d, 0x36, 0x3d, 0xb7, 0x2f, 0xe9, 0xf9,
|
||||
0x5d, 0xf3, 0x7f, 0x45, 0xb8, 0xe6, 0x40, 0x92, 0xb3, 0x04, 0x2f,
|
||||
0x4f, 0x1a, 0xac, 0x09, 0x02, 0x00, 0x00, 0x78, 0xda, 0x2d, 0xd1,
|
||||
0x4b, 0x6c, 0x4c, 0x51, 0x1c, 0xc7, 0xf1, 0xef, 0xdc, 0xb9, 0x95,
|
||||
0x48, 0x3c, 0x36, 0x16, 0xd2, 0xa0, 0xda, 0xd2, 0xa1, 0xcc, 0x78,
|
||||
0x4d, 0x5b, 0xda, 0xaa, 0x77, 0x47, 0xb5, 0x74, 0x14, 0x53, 0x86,
|
||||
0x7a, 0xb6, 0xe3, 0x6d, 0xb4, 0x0c, 0x65, 0x68, 0x6f, 0x69, 0x9b,
|
||||
0xd1, 0x85, 0x68, 0xba, 0x53, 0x12, 0x49, 0x17, 0x82, 0xc4, 0xa6,
|
||||
0xc4, 0x42, 0xa2, 0x1b, 0x6c, 0x9a, 0x2e, 0x44, 0xb0, 0x12, 0x22,
|
||||
0x95, 0x58, 0x34, 0xb1, 0xf1, 0x5a, 0x74, 0xe1, 0x9e, 0xdf, 0xdc,
|
||||
0xbb, 0xf9, 0xe4, 0x77, 0x7f, 0xb9, 0xe7, 0x7f, 0xce, 0xb9, 0x90,
|
||||
0x7d, 0x6c, 0x67, 0x0e, 0xad, 0x72, 0x2e, 0x29, 0x39, 0x8f, 0xb4,
|
||||
0xab, 0xe5, 0xe4, 0xd1, 0x25, 0xe7, 0xd3, 0x2b, 0xf3, 0xb9, 0x23,
|
||||
0x0b, 0x18, 0x92, 0x85, 0x0c, 0xcb, 0x05, 0xbc, 0x92, 0x0b, 0x79,
|
||||
0xe7, 0xea, 0x73, 0x8a, 0x18, 0x77, 0xf5, 0x3b, 0x01, 0x26, 0xcc,
|
||||
0x7b, 0x02, 0xfc, 0x91, 0x8b, 0xb0, 0x7c, 0xc6, 0xc5, 0xcc, 0xf0,
|
||||
0x99, 0xbe, 0x98, 0x5c, 0xe5, 0x62, 0xf2, 0xe4, 0x12, 0x8a, 0xe4,
|
||||
0x52, 0x82, 0xea, 0x83, 0x84, 0x95, 0x83, 0x54, 0xca, 0x10, 0xd5,
|
||||
0x72, 0x19, 0x51, 0xa3, 0xb3, 0x9c, 0xb8, 0x5c, 0x41, 0xb3, 0x5c,
|
||||
0x49, 0x52, 0xae, 0x22, 0x25, 0xc3, 0xa4, 0x65, 0x09, 0x7d, 0xb2,
|
||||
0x94, 0x41, 0xad, 0x5b, 0xc6, 0x63, 0xad, 0x53, 0xc6, 0x0b, 0xb9,
|
||||
0x9a, 0xb7, 0x72, 0x0d, 0x1f, 0xd4, 0x97, 0x33, 0xae, 0x5c, 0xce,
|
||||
0x5f, 0x59, 0xc1, 0x34, 0xcb, 0x58, 0x49, 0xbe, 0xd1, 0x59, 0x4b,
|
||||
0xa9, 0xac, 0x22, 0x22, 0xd7, 0x11, 0xb3, 0xcc, 0xbd, 0xad, 0xa7,
|
||||
0x45, 0x79, 0x03, 0x49, 0xd7, 0x29, 0xce, 0x46, 0xdc, 0xcf, 0x5d,
|
||||
0x37, 0x51, 0x20, 0x37, 0xbb, 0x27, 0x31, 0x6e, 0x71, 0x27, 0x1a,
|
||||
0xab, 0x89, 0xc8, 0x08, 0x09, 0xb9, 0x95, 0x46, 0xdd, 0x5b, 0x0d,
|
||||
0x69, 0xcd, 0xab, 0xa1, 0x47, 0x6e, 0xa3, 0x5f, 0xd6, 0x72, 0xdf,
|
||||
0x32, 0x7d, 0x1d, 0x8f, 0x94, 0xeb, 0x18, 0x96, 0xdb, 0x19, 0x91,
|
||||
0x3b, 0x18, 0x55, 0x5f, 0xcf, 0x27, 0xe5, 0x7a, 0xbe, 0xc9, 0x28,
|
||||
0x3f, 0xe5, 0x4e, 0x26, 0xd5, 0x37, 0x30, 0xd5, 0x6f, 0x72, 0x03,
|
||||
0xb3, 0xe4, 0x2e, 0xf2, 0xe5, 0x6e, 0x42, 0xae, 0x38, 0x7b, 0xa8,
|
||||
0x70, 0xcd, 0x21, 0x46, 0xad, 0x6c, 0x24, 0xe6, 0xd9, 0x24, 0xf7,
|
||||
0x92, 0x90, 0xfb, 0x48, 0xca, 0x38, 0xed, 0x9e, 0x9d, 0x72, 0x3f,
|
||||
0x19, 0x79, 0x80, 0x7e, 0xd9, 0xc4, 0x3d, 0x8c, 0x07, 0xb9, 0xab,
|
||||
0x7c, 0x88, 0x21, 0x79, 0x98, 0x27, 0xf2, 0x08, 0xdd, 0x3e, 0xe3,
|
||||
0x51, 0x9e, 0xf9, 0xb3, 0xbe, 0x94, 0xc7, 0x78, 0x2d, 0x9b, 0x19,
|
||||
0x93, 0x2d, 0x7c, 0xf4, 0xfc, 0x2a, 0x13, 0x4c, 0xc8, 0xe3, 0xfc,
|
||||
0x93, 0x27, 0xb0, 0xed, 0xac, 0xd3, 0xe5, 0x49, 0x66, 0xcb, 0x53,
|
||||
0x14, 0xca, 0xd3, 0x84, 0x3c, 0x4b, 0xe4, 0x19, 0xaa, 0xe4, 0x59,
|
||||
0x22, 0xf2, 0x1c, 0x51, 0xcf, 0xb8, 0x4c, 0x92, 0x90, 0xe7, 0x69,
|
||||
0x93, 0xad, 0x74, 0xc8, 0x36, 0x32, 0xf2, 0x02, 0xa3, 0x3a, 0xd7,
|
||||
0x45, 0x6e, 0x2b, 0xa7, 0x18, 0x90, 0x97, 0xf8, 0x6c, 0x65, 0xfd,
|
||||
0x21, 0x2f, 0xf3, 0x5b, 0xb6, 0x63, 0x69, 0x9f, 0x57, 0x98, 0xe9,
|
||||
0x99, 0x2b, 0xaf, 0x12, 0x90, 0x69, 0xc2, 0xf2, 0x1a, 0x83, 0x76,
|
||||
0xd6, 0x07, 0xf2, 0x3a, 0x0f, 0x65, 0x07, 0x4f, 0x65, 0x27, 0xcf,
|
||||
0xa5, 0xc3, 0x88, 0xec, 0xe2, 0x8d, 0xbc, 0x41, 0x4a, 0x73, 0x6e,
|
||||
0x32, 0xa6, 0xdc, 0xcd, 0x7b, 0xd9, 0xc3, 0x17, 0xdb, 0xfc, 0xd7,
|
||||
0x5e, 0xbe, 0x2b, 0x67, 0xf8, 0x25, 0x6f, 0x31, 0x29, 0xfb, 0xb0,
|
||||
0x73, 0xe0, 0x3f, 0x26, 0xa4, 0x81, 0x5a, 0x19, 0x01, 0x00, 0x00,
|
||||
0x78, 0xda, 0x25, 0xcf, 0x3b, 0x2c, 0x83, 0x61, 0x14, 0x87, 0xf1,
|
||||
0xa7, 0xed, 0x57, 0xd7, 0x56, 0x29, 0xa5, 0xea, 0x56, 0x4a, 0xeb,
|
||||
0x5a, 0x97, 0xb0, 0x5a, 0x0d, 0x16, 0x93, 0x41, 0x62, 0xed, 0x2a,
|
||||
0x91, 0x48, 0x4c, 0x2c, 0x86, 0x4e, 0x12, 0xb1, 0x61, 0x90, 0x18,
|
||||
0x0c, 0x12, 0x13, 0x93, 0xc1, 0xc2, 0x24, 0x9d, 0x24, 0x36, 0x61,
|
||||
0x34, 0x18, 0x49, 0x0c, 0x06, 0xfd, 0x1e, 0x6f, 0xf2, 0xe5, 0x97,
|
||||
0xff, 0x39, 0x6f, 0xce, 0x7b, 0x3e, 0xf8, 0x3f, 0xd1, 0xfa, 0xb7,
|
||||
0x1a, 0x83, 0x18, 0x11, 0xd6, 0x63, 0x61, 0x8e, 0xb0, 0xa9, 0x51,
|
||||
0x2a, 0x1a, 0x63, 0xcb, 0x7e, 0xc0, 0xae, 0x39, 0x60, 0x5f, 0xe3,
|
||||
0x54, 0xb5, 0x81, 0x23, 0x6d, 0xe4, 0xcc, 0x79, 0x4d, 0x9c, 0xd4,
|
||||
0x73, 0x03, 0xcd, 0x5c, 0x58, 0x6f, 0xe1, 0x4a, 0x5b, 0x39, 0x88,
|
||||
0x84, 0x73, 0x12, 0xdc, 0x98, 0x13, 0xdc, 0x69, 0x92, 0x07, 0x6d,
|
||||
0xa3, 0xe6, 0x3b, 0x29, 0x5e, 0xcc, 0x29, 0xde, 0xb5, 0x9d, 0x4f,
|
||||
0xed, 0xe0, 0xc7, 0x7e, 0x9a, 0x20, 0x08, 0x73, 0x9a, 0xa4, 0x76,
|
||||
0x92, 0xd5, 0x2e, 0x0a, 0x41, 0xd8, 0xcf, 0x50, 0x36, 0x67, 0x58,
|
||||
0xd2, 0x6e, 0x96, 0xb5, 0x87, 0x15, 0xfb, 0x59, 0xd6, 0xcc, 0x59,
|
||||
0x36, 0xb4, 0x97, 0x8a, 0xe6, 0xd8, 0xae, 0x1b, 0xa1, 0x8f, 0x3d,
|
||||
0xed, 0xa7, 0x6a, 0x7d, 0x80, 0x27, 0xff, 0x6b, 0x90, 0x43, 0xf3,
|
||||
0x10, 0xc7, 0xce, 0xc9, 0xf3, 0x1a, 0x0d, 0x73, 0x9e, 0x0f, 0x1d,
|
||||
0xe6, 0x5b, 0x47, 0x88, 0xba, 0x67, 0x81, 0x94, 0x7b, 0x17, 0xc8,
|
||||
0xe9, 0x28, 0x25, 0x1d, 0x63, 0xd1, 0x7e, 0x91, 0x53, 0xe7, 0x15,
|
||||
0x39, 0xd7, 0x12, 0x97, 0x3a, 0xce, 0xb5, 0x4e, 0x70, 0x5b, 0x37,
|
||||
0x60, 0x92, 0x7b, 0xf7, 0x99, 0xe2, 0xd1, 0xfa, 0x34, 0x3b, 0xbe,
|
||||
0x33, 0x43, 0xcd, 0x5c, 0xe6, 0x59, 0x67, 0x79, 0xf3, 0xde, 0x1c,
|
||||
0x5f, 0xe6, 0x79, 0x7e, 0x75, 0x81, 0x20, 0x0e, 0x7f, 0x2f, 0x5b,
|
||||
0x27, 0x31, 0xab, 0x00, 0x00, 0x00, 0x78, 0xda, 0xed, 0xd0, 0xd7,
|
||||
0x4e, 0x42, 0x41, 0x14, 0x05, 0xd0, 0x8b, 0x22, 0x08, 0x2a, 0x16,
|
||||
0x8a, 0x05, 0x05, 0x14, 0x0b, 0x16, 0x40, 0xac, 0x20, 0x52, 0xec,
|
||||
0xe5, 0xab, 0xee, 0xa7, 0xb3, 0x24, 0x3c, 0xdc, 0x17, 0x9e, 0x78,
|
||||
0x22, 0x71, 0xe7, 0xac, 0x49, 0x26, 0x39, 0x99, 0x64, 0x4f, 0x10,
|
||||
0xfc, 0xe7, 0x2f, 0xef, 0x7c, 0xf0, 0xc9, 0x17, 0xdf, 0xfc, 0xf2,
|
||||
0x33, 0xc3, 0x9b, 0x31, 0x16, 0x58, 0x24, 0xce, 0x12, 0x09, 0x92,
|
||||
0x2c, 0x93, 0x22, 0xcd, 0x0a, 0xab, 0xac, 0x91, 0x61, 0x9d, 0x0d,
|
||||
0x36, 0xd9, 0x22, 0x4b, 0x8e, 0x3c, 0x05, 0xb6, 0xd9, 0x61, 0x97,
|
||||
0x3d, 0x8a, 0xec, 0x73, 0x40, 0x89, 0x32, 0x15, 0x0e, 0x39, 0xa2,
|
||||
0xca, 0x31, 0x27, 0x9c, 0x72, 0x46, 0x8d, 0x73, 0x2e, 0xb8, 0xe4,
|
||||
0x8a, 0x3a, 0x0d, 0x9a, 0x91, 0x0e, 0xd7, 0xb4, 0xb8, 0x99, 0xf3,
|
||||
0x3e, 0xd1, 0x1e, 0xb7, 0xdc, 0x71, 0xcf, 0x03, 0x8f, 0xe3, 0xa6,
|
||||
0xe1, 0xc0, 0x31, 0x34, 0x84, 0xc3, 0xb6, 0x4b, 0x87, 0x27, 0xba,
|
||||
0x3c, 0xd3, 0xa3, 0xcf, 0x64, 0x31, 0x78, 0xe1, 0x95, 0xb7, 0xc9,
|
||||
0x3f, 0x4c, 0xcb, 0x08, 0x57, 0x9e, 0x12, 0x18
|
||||
0x0c, 0x97, 0x19, 0x58, 0x80, 0xb4, 0x09, 0x43, 0x37, 0x03, 0x31,
|
||||
0x40, 0x9e, 0xe1, 0x1a, 0xc3, 0x55, 0x20, 0xad, 0x0d, 0x26, 0x11,
|
||||
0x00, 0x00, 0xa6, 0xc2, 0x04, 0x80, 0x40, 0x01, 0x00, 0x00, 0x78,
|
||||
0xda, 0x8d, 0xd5, 0x4f, 0x4e, 0xc2, 0x40, 0x18, 0x87, 0xe1, 0xd6,
|
||||
0x41, 0x31, 0x1e, 0x83, 0x3d, 0x7b, 0x6e, 0xc0, 0x11, 0xbc, 0x81,
|
||||
0xd7, 0xe1, 0x8f, 0x20, 0x12, 0x2e, 0x81, 0x09, 0x2a, 0xa0, 0x88,
|
||||
0xc8, 0x46, 0x05, 0x57, 0xa2, 0x6c, 0x15, 0x44, 0x44, 0x50, 0x11,
|
||||
0x74, 0x83, 0x0a, 0x58, 0xdb, 0x26, 0x93, 0x66, 0xa6, 0xbe, 0x93,
|
||||
0x34, 0x99, 0x92, 0x87, 0xdf, 0xc7, 0x30, 0xdf, 0xb4, 0x86, 0xf1,
|
||||
0xff, 0x58, 0xfc, 0x8e, 0x80, 0xe6, 0x73, 0x77, 0x3e, 0xd7, 0x98,
|
||||
0xb9, 0x64, 0x7e, 0x40, 0xce, 0xb7, 0xc6, 0xc8, 0xe3, 0x4b, 0x63,
|
||||
0x4c, 0xe7, 0xb2, 0xc6, 0x0c, 0xe4, 0x7c, 0x82, 0x9c, 0x0f, 0x60,
|
||||
0xa6, 0xc0, 0x4c, 0x80, 0x79, 0x07, 0x66, 0x0c, 0xd6, 0xf5, 0x06,
|
||||
0x72, 0x5e, 0x35, 0x46, 0x58, 0xc6, 0xb4, 0xd5, 0x8b, 0xc6, 0xac,
|
||||
0xfc, 0x19, 0x7b, 0x3e, 0x02, 0xb5, 0x86, 0x20, 0xe7, 0x19, 0x98,
|
||||
0x81, 0x8f, 0x11, 0xc2, 0x9e, 0x3f, 0x81, 0x75, 0xf5, 0x41, 0xad,
|
||||
0x47, 0xb0, 0xae, 0x1e, 0xc8, 0x79, 0x00, 0x39, 0x5d, 0x70, 0x2e,
|
||||
0x3a, 0x20, 0xe7, 0x1e, 0x98, 0x3b, 0x50, 0xab, 0x0d, 0x7a, 0xec,
|
||||
0x16, 0xd4, 0xba, 0x01, 0xa6, 0x05, 0xfe, 0xc3, 0x2b, 0x60, 0x9a,
|
||||
0xa0, 0x56, 0x03, 0x98, 0x4b, 0x60, 0x2e, 0xc0, 0xef, 0x39, 0x07,
|
||||
0xa6, 0x0e, 0xcc, 0x19, 0x30, 0x35, 0xd0, 0xf3, 0xa7, 0x20, 0xa7,
|
||||
0x0a, 0xd6, 0x7e, 0x02, 0x4c, 0x05, 0x98, 0x63, 0x60, 0x8e, 0x80,
|
||||
0x29, 0x03, 0x53, 0x02, 0xa6, 0x08, 0xcc, 0x21, 0x30, 0x07, 0xc0,
|
||||
0xec, 0x03, 0x53, 0x00, 0xfb, 0xb5, 0xe7, 0x93, 0xe3, 0x3c, 0x0e,
|
||||
0x8d, 0x3c, 0x30, 0x39, 0x70, 0xde, 0xb3, 0xc0, 0xec, 0x02, 0x93,
|
||||
0x01, 0x66, 0x07, 0x98, 0x34, 0x30, 0x29, 0x60, 0xb6, 0x81, 0x49,
|
||||
0x02, 0x93, 0x00, 0x26, 0x0e, 0x4c, 0x4c, 0x63, 0x56, 0xed, 0xb3,
|
||||
0x6c, 0x0a, 0x67, 0xef, 0xae, 0x3d, 0x7b, 0xa9, 0xea, 0x93, 0x96,
|
||||
0x74, 0x1f, 0xd2, 0x64, 0xca, 0x26, 0xac, 0x30, 0x6b, 0x1e, 0x13,
|
||||
0x51, 0x98, 0xa0, 0xc7, 0x44, 0x15, 0x66, 0xdd, 0x31, 0x6e, 0xcf,
|
||||
0x6d, 0x2a, 0x7a, 0x7e, 0xc3, 0x7a, 0xf7, 0x48, 0xdf, 0xd9, 0x52,
|
||||
0xe4, 0x2c, 0x01, 0x16, 0x16, 0x1e, 0x96, 0x09, 0x02, 0x00, 0x00,
|
||||
0x78, 0xda, 0x2d, 0xd1, 0x4b, 0x6c, 0x4c, 0x51, 0x1c, 0xc7, 0xf1,
|
||||
0xef, 0xdc, 0xb9, 0x95, 0x48, 0x3c, 0x36, 0x16, 0xd2, 0xa0, 0xda,
|
||||
0xd2, 0xa1, 0xcc, 0x78, 0x4d, 0x5b, 0xda, 0xaa, 0x77, 0x47, 0xb5,
|
||||
0x74, 0x14, 0x53, 0x86, 0x7a, 0xb6, 0xe3, 0x6d, 0xb4, 0x0c, 0x65,
|
||||
0x68, 0x6f, 0x69, 0x9b, 0xd1, 0x85, 0x68, 0xba, 0x53, 0x12, 0x49,
|
||||
0x17, 0x82, 0xc4, 0xa6, 0xc4, 0x42, 0xa2, 0x1b, 0x6c, 0x9a, 0x2e,
|
||||
0x44, 0xb0, 0x12, 0x22, 0x95, 0x58, 0x34, 0xb1, 0xf1, 0x5a, 0x74,
|
||||
0xe1, 0x9e, 0xdf, 0xdc, 0xbb, 0xf9, 0xe4, 0x77, 0x7f, 0xb9, 0xe7,
|
||||
0x7f, 0xce, 0xb9, 0x90, 0x7d, 0x6c, 0x67, 0x0e, 0xad, 0x72, 0x2e,
|
||||
0x29, 0x39, 0x8f, 0xb4, 0xab, 0xe5, 0xe4, 0xd1, 0x25, 0xe7, 0xd3,
|
||||
0x2b, 0xf3, 0xb9, 0x23, 0x0b, 0x18, 0x92, 0x85, 0x0c, 0xcb, 0x05,
|
||||
0xbc, 0x92, 0x0b, 0x79, 0xe7, 0xea, 0x73, 0x8a, 0x18, 0x77, 0xf5,
|
||||
0x3b, 0x01, 0x26, 0xcc, 0x7b, 0x02, 0xfc, 0x91, 0x8b, 0xb0, 0x7c,
|
||||
0xc6, 0xc5, 0xcc, 0xf0, 0x99, 0xbe, 0x98, 0x5c, 0xe5, 0x62, 0xf2,
|
||||
0xe4, 0x12, 0x8a, 0xe4, 0x52, 0x82, 0xea, 0x83, 0x84, 0x95, 0x83,
|
||||
0x54, 0xca, 0x10, 0xd5, 0x72, 0x19, 0x51, 0xa3, 0xb3, 0x9c, 0xb8,
|
||||
0x5c, 0x41, 0xb3, 0x5c, 0x49, 0x52, 0xae, 0x22, 0x25, 0xc3, 0xa4,
|
||||
0x65, 0x09, 0x7d, 0xb2, 0x94, 0x41, 0xad, 0x5b, 0xc6, 0x63, 0xad,
|
||||
0x53, 0xc6, 0x0b, 0xb9, 0x9a, 0xb7, 0x72, 0x0d, 0x1f, 0xd4, 0x97,
|
||||
0x33, 0xae, 0x5c, 0xce, 0x5f, 0x59, 0xc1, 0x34, 0xcb, 0x58, 0x49,
|
||||
0xbe, 0xd1, 0x59, 0x4b, 0xa9, 0xac, 0x22, 0x22, 0xd7, 0x11, 0xb3,
|
||||
0xcc, 0xbd, 0xad, 0xa7, 0x45, 0x79, 0x03, 0x49, 0xd7, 0x29, 0xce,
|
||||
0x46, 0xdc, 0xcf, 0x5d, 0x37, 0x51, 0x20, 0x37, 0xbb, 0x27, 0x31,
|
||||
0x6e, 0x71, 0x27, 0x1a, 0xab, 0x89, 0xc8, 0x08, 0x09, 0xb9, 0x95,
|
||||
0x46, 0xdd, 0x5b, 0x0d, 0x69, 0xcd, 0xab, 0xa1, 0x47, 0x6e, 0xa3,
|
||||
0x5f, 0xd6, 0x72, 0xdf, 0x32, 0x7d, 0x1d, 0x8f, 0x94, 0xeb, 0x18,
|
||||
0x96, 0xdb, 0x19, 0x91, 0x3b, 0x18, 0x55, 0x5f, 0xcf, 0x27, 0xe5,
|
||||
0x7a, 0xbe, 0xc9, 0x28, 0x3f, 0xe5, 0x4e, 0x26, 0xd5, 0x37, 0x30,
|
||||
0xd5, 0x6f, 0x72, 0x03, 0xb3, 0xe4, 0x2e, 0xf2, 0xe5, 0x6e, 0x42,
|
||||
0xae, 0x38, 0x7b, 0xa8, 0x70, 0xcd, 0x21, 0x46, 0xad, 0x6c, 0x24,
|
||||
0xe6, 0xd9, 0x24, 0xf7, 0x92, 0x90, 0xfb, 0x48, 0xca, 0x38, 0xed,
|
||||
0x9e, 0x9d, 0x72, 0x3f, 0x19, 0x79, 0x80, 0x7e, 0xd9, 0xc4, 0x3d,
|
||||
0x8c, 0x07, 0xb9, 0xab, 0x7c, 0x88, 0x21, 0x79, 0x98, 0x27, 0xf2,
|
||||
0x08, 0xdd, 0x3e, 0xe3, 0x51, 0x9e, 0xf9, 0xb3, 0xbe, 0x94, 0xc7,
|
||||
0x78, 0x2d, 0x9b, 0x19, 0x93, 0x2d, 0x7c, 0xf4, 0xfc, 0x2a, 0x13,
|
||||
0x4c, 0xc8, 0xe3, 0xfc, 0x93, 0x27, 0xb0, 0xed, 0xac, 0xd3, 0xe5,
|
||||
0x49, 0x66, 0xcb, 0x53, 0x14, 0xca, 0xd3, 0x84, 0x3c, 0x4b, 0xe4,
|
||||
0x19, 0xaa, 0xe4, 0x59, 0x22, 0xf2, 0x1c, 0x51, 0xcf, 0xb8, 0x4c,
|
||||
0x92, 0x90, 0xe7, 0x69, 0x93, 0xad, 0x74, 0xc8, 0x36, 0x32, 0xf2,
|
||||
0x02, 0xa3, 0x3a, 0xd7, 0x45, 0x6e, 0x2b, 0xa7, 0x18, 0x90, 0x97,
|
||||
0xf8, 0x6c, 0x65, 0xfd, 0x21, 0x2f, 0xf3, 0x5b, 0xb6, 0x63, 0x69,
|
||||
0x9f, 0x57, 0x98, 0xe9, 0x99, 0x2b, 0xaf, 0x12, 0x90, 0x69, 0xc2,
|
||||
0xf2, 0x1a, 0x83, 0x76, 0xd6, 0x07, 0xf2, 0x3a, 0x0f, 0x65, 0x07,
|
||||
0x4f, 0x65, 0x27, 0xcf, 0xa5, 0xc3, 0x88, 0xec, 0xe2, 0x8d, 0xbc,
|
||||
0x41, 0x4a, 0x73, 0x6e, 0x32, 0xa6, 0xdc, 0xcd, 0x7b, 0xd9, 0xc3,
|
||||
0x17, 0xdb, 0xfc, 0xd7, 0x5e, 0xbe, 0x2b, 0x67, 0xf8, 0x25, 0x6f,
|
||||
0x31, 0x29, 0xfb, 0xb0, 0x73, 0xe0, 0x3f, 0x26, 0xa4, 0x81, 0x5a,
|
||||
0x19, 0x01, 0x00, 0x00, 0x78, 0xda, 0x25, 0xcf, 0x3b, 0x2c, 0x83,
|
||||
0x61, 0x14, 0x87, 0xf1, 0xa7, 0xed, 0x57, 0xd7, 0x56, 0x29, 0xa5,
|
||||
0xea, 0x56, 0x4a, 0xeb, 0x5a, 0x97, 0xb0, 0x5a, 0x0d, 0x16, 0x93,
|
||||
0x41, 0x62, 0xed, 0x2a, 0x91, 0x48, 0x4c, 0x2c, 0x86, 0x4e, 0x12,
|
||||
0xb1, 0x61, 0x90, 0x18, 0x0c, 0x12, 0x13, 0x93, 0xc1, 0xc2, 0x24,
|
||||
0x9d, 0x24, 0x36, 0x61, 0x34, 0x18, 0x49, 0x0c, 0x06, 0xfd, 0x1e,
|
||||
0x6f, 0xf2, 0xe5, 0x97, 0xff, 0x39, 0x6f, 0xce, 0x7b, 0x3e, 0xf8,
|
||||
0x3f, 0xd1, 0xfa, 0xb7, 0x1a, 0x83, 0x18, 0x11, 0xd6, 0x63, 0x61,
|
||||
0x8e, 0xb0, 0xa9, 0x51, 0x2a, 0x1a, 0x63, 0xcb, 0x7e, 0xc0, 0xae,
|
||||
0x39, 0x60, 0x5f, 0xe3, 0x54, 0xb5, 0x81, 0x23, 0x6d, 0xe4, 0xcc,
|
||||
0x79, 0x4d, 0x9c, 0xd4, 0x73, 0x03, 0xcd, 0x5c, 0x58, 0x6f, 0xe1,
|
||||
0x4a, 0x5b, 0x39, 0x88, 0x84, 0x73, 0x12, 0xdc, 0x98, 0x13, 0xdc,
|
||||
0x69, 0x92, 0x07, 0x6d, 0xa3, 0xe6, 0x3b, 0x29, 0x5e, 0xcc, 0x29,
|
||||
0xde, 0xb5, 0x9d, 0x4f, 0xed, 0xe0, 0xc7, 0x7e, 0x9a, 0x20, 0x08,
|
||||
0x73, 0x9a, 0xa4, 0x76, 0x92, 0xd5, 0x2e, 0x0a, 0x41, 0xd8, 0xcf,
|
||||
0x50, 0x36, 0x67, 0x58, 0xd2, 0x6e, 0x96, 0xb5, 0x87, 0x15, 0xfb,
|
||||
0x59, 0xd6, 0xcc, 0x59, 0x36, 0xb4, 0x97, 0x8a, 0xe6, 0xd8, 0xae,
|
||||
0x1b, 0xa1, 0x8f, 0x3d, 0xed, 0xa7, 0x6a, 0x7d, 0x80, 0x27, 0xff,
|
||||
0x6b, 0x90, 0x43, 0xf3, 0x10, 0xc7, 0xce, 0xc9, 0xf3, 0x1a, 0x0d,
|
||||
0x73, 0x9e, 0x0f, 0x1d, 0xe6, 0x5b, 0x47, 0x88, 0xba, 0x67, 0x81,
|
||||
0x94, 0x7b, 0x17, 0xc8, 0xe9, 0x28, 0x25, 0x1d, 0x63, 0xd1, 0x7e,
|
||||
0x91, 0x53, 0xe7, 0x15, 0x39, 0xd7, 0x12, 0x97, 0x3a, 0xce, 0xb5,
|
||||
0x4e, 0x70, 0x5b, 0x37, 0x60, 0x92, 0x7b, 0xf7, 0x99, 0xe2, 0xd1,
|
||||
0xfa, 0x34, 0x3b, 0xbe, 0x33, 0x43, 0xcd, 0x5c, 0xe6, 0x59, 0x67,
|
||||
0x79, 0xf3, 0xde, 0x1c, 0x5f, 0xe6, 0x79, 0x7e, 0x75, 0x81, 0x20,
|
||||
0x0e, 0x7f, 0x2f, 0x5b, 0x27, 0x31, 0xab, 0x00, 0x00, 0x00, 0x78,
|
||||
0xda, 0xed, 0xd0, 0xc7, 0x4e, 0x42, 0x51, 0x14, 0x05, 0xd0, 0x27,
|
||||
0x58, 0x50, 0x10, 0xec, 0x20, 0x48, 0xb1, 0xf7, 0x0e, 0x88, 0x4a,
|
||||
0x79, 0x20, 0x52, 0xf4, 0xa7, 0xf8, 0x74, 0x97, 0x86, 0x01, 0x13,
|
||||
0x46, 0x8c, 0x4c, 0xd8, 0x39, 0xeb, 0x26, 0x37, 0x39, 0xb9, 0xc9,
|
||||
0xbe, 0x41, 0x30, 0xcf, 0x6f, 0x3e, 0xe9, 0xd1, 0x67, 0xc0, 0x90,
|
||||
0x6f, 0xbe, 0x66, 0x78, 0x73, 0x81, 0x08, 0x51, 0x16, 0x59, 0x62,
|
||||
0x99, 0x15, 0x62, 0xac, 0xb2, 0x46, 0x9c, 0x04, 0xeb, 0x24, 0x49,
|
||||
0xb1, 0xc1, 0x26, 0x5b, 0x6c, 0xb3, 0xc3, 0x2e, 0x7b, 0xa4, 0xc9,
|
||||
0xb0, 0x4f, 0x96, 0x1c, 0x07, 0xe4, 0x29, 0x50, 0xa4, 0xc4, 0x21,
|
||||
0x47, 0x1c, 0x73, 0xc2, 0x29, 0x67, 0x9c, 0x73, 0xc1, 0x25, 0x57,
|
||||
0x5c, 0x73, 0xc3, 0x2d, 0x77, 0xdc, 0x4f, 0x74, 0x78, 0xe0, 0x91,
|
||||
0xa7, 0x7f, 0xde, 0x67, 0xb2, 0xc7, 0x33, 0x65, 0x2a, 0x54, 0x79,
|
||||
0xa1, 0xf6, 0xd7, 0x76, 0xd4, 0x72, 0x84, 0x86, 0x51, 0xf8, 0xea,
|
||||
0xf2, 0xc6, 0x3b, 0x75, 0x1a, 0x34, 0x19, 0x2f, 0x05, 0x6d, 0x3a,
|
||||
0x7c, 0xd0, 0x1d, 0xff, 0xc5, 0xb4, 0xfc, 0x00, 0xb3, 0x36, 0x12,
|
||||
0x63
|
||||
};
|
||||
|
|
2826
vprogs/server.h
2826
vprogs/server.h
File diff suppressed because it is too large
Load Diff
2398
vprogs/uimenu.h
2398
vprogs/uimenu.h
File diff suppressed because it is too large
Load Diff
|
@ -25,7 +25,7 @@ extern int prvm_developer;
|
|||
|
||||
#define PROG_CRC_SERVER 5103
|
||||
#define PROG_CRC_CLIENT 7430
|
||||
#define PROG_CRC_UIMENU 36416
|
||||
#define PROG_CRC_UIMENU 2460
|
||||
|
||||
enum op_state
|
||||
{
|
||||
|
|
Reference in New Issue