mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-13 21:51:09 +00:00
Merge branch 'master' into game/eliteforce
Conflicts: code/renderergl1/tr_main.c code/renderergl2/tr_main.c
This commit is contained in:
commit
6b9a3a47db
17 changed files with 124 additions and 40 deletions
6
Makefile
6
Makefile
|
@ -356,7 +356,7 @@ MKDIR=mkdir
|
||||||
EXTRA_FILES=
|
EXTRA_FILES=
|
||||||
CLIENT_EXTRA_FILES=
|
CLIENT_EXTRA_FILES=
|
||||||
|
|
||||||
ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu"))
|
ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu" "gnu"))
|
||||||
|
|
||||||
ifeq ($(ARCH),x86_64)
|
ifeq ($(ARCH),x86_64)
|
||||||
LIB=lib64
|
LIB=lib64
|
||||||
|
@ -366,6 +366,10 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu"))
|
||||||
else
|
else
|
||||||
ifeq ($(ARCH),s390x)
|
ifeq ($(ARCH),s390x)
|
||||||
LIB=lib64
|
LIB=lib64
|
||||||
|
else
|
||||||
|
ifeq ($(ARCH),aarch64)
|
||||||
|
LIB=lib64
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -36,10 +36,6 @@ ENDIF
|
||||||
ssemask DWORD 0FFFFFFFFh, 0FFFFFFFFh, 0FFFFFFFFh, 00000000h
|
ssemask DWORD 0FFFFFFFFh, 0FFFFFFFFh, 0FFFFFFFFh, 00000000h
|
||||||
ssecw DWORD 00001F80h
|
ssecw DWORD 00001F80h
|
||||||
|
|
||||||
IFNDEF idx64
|
|
||||||
fpucw WORD 037Fh
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
IFDEF idx64
|
IFDEF idx64
|
||||||
|
|
|
@ -2445,7 +2445,7 @@ int PC_Directive_eval(source_t *source)
|
||||||
token.whitespace_p = source->scriptstack->script_p;
|
token.whitespace_p = source->scriptstack->script_p;
|
||||||
token.endwhitespace_p = source->scriptstack->script_p;
|
token.endwhitespace_p = source->scriptstack->script_p;
|
||||||
token.linescrossed = 0;
|
token.linescrossed = 0;
|
||||||
sprintf(token.string, "%d", abs(value));
|
sprintf(token.string, "%ld", labs(value));
|
||||||
token.type = TT_NUMBER;
|
token.type = TT_NUMBER;
|
||||||
token.subtype = TT_INTEGER|TT_LONG|TT_DECIMAL;
|
token.subtype = TT_INTEGER|TT_LONG|TT_DECIMAL;
|
||||||
PC_UnreadSourceToken(source, &token);
|
PC_UnreadSourceToken(source, &token);
|
||||||
|
@ -2550,12 +2550,12 @@ int PC_DollarDirective_evalint(source_t *source)
|
||||||
token.whitespace_p = source->scriptstack->script_p;
|
token.whitespace_p = source->scriptstack->script_p;
|
||||||
token.endwhitespace_p = source->scriptstack->script_p;
|
token.endwhitespace_p = source->scriptstack->script_p;
|
||||||
token.linescrossed = 0;
|
token.linescrossed = 0;
|
||||||
sprintf(token.string, "%d", abs(value));
|
sprintf(token.string, "%ld", labs(value));
|
||||||
token.type = TT_NUMBER;
|
token.type = TT_NUMBER;
|
||||||
token.subtype = TT_INTEGER|TT_LONG|TT_DECIMAL;
|
token.subtype = TT_INTEGER|TT_LONG|TT_DECIMAL;
|
||||||
|
|
||||||
#ifdef NUMBERVALUE
|
#ifdef NUMBERVALUE
|
||||||
token.intvalue = abs(value);
|
token.intvalue = labs(value);
|
||||||
token.floatvalue = token.intvalue;
|
token.floatvalue = token.intvalue;
|
||||||
#endif //NUMBERVALUE
|
#endif //NUMBERVALUE
|
||||||
|
|
||||||
|
|
|
@ -428,23 +428,28 @@ Returns waterlevel for entity origin
|
||||||
int CG_WaterLevel(centity_t *cent) {
|
int CG_WaterLevel(centity_t *cent) {
|
||||||
vec3_t point;
|
vec3_t point;
|
||||||
int contents, sample1, sample2, anim, waterlevel;
|
int contents, sample1, sample2, anim, waterlevel;
|
||||||
|
int viewheight;
|
||||||
|
|
||||||
// get waterlevel, accounting for ducking
|
|
||||||
waterlevel = 0;
|
|
||||||
VectorCopy(cent->lerpOrigin, point);
|
|
||||||
point[2] += MINS_Z + 1;
|
|
||||||
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
|
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
|
||||||
|
|
||||||
if (anim == LEGS_WALKCR || anim == LEGS_IDLECR) {
|
if (anim == LEGS_WALKCR || anim == LEGS_IDLECR) {
|
||||||
point[2] += CROUCH_VIEWHEIGHT;
|
viewheight = CROUCH_VIEWHEIGHT;
|
||||||
} else {
|
} else {
|
||||||
point[2] += DEFAULT_VIEWHEIGHT;
|
viewheight = DEFAULT_VIEWHEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// get waterlevel, accounting for ducking
|
||||||
|
//
|
||||||
|
waterlevel = 0;
|
||||||
|
|
||||||
|
point[0] = cent->lerpOrigin[0];
|
||||||
|
point[1] = cent->lerpOrigin[1];
|
||||||
|
point[2] = cent->lerpOrigin[2] + MINS_Z + 1;
|
||||||
contents = CG_PointContents(point, -1);
|
contents = CG_PointContents(point, -1);
|
||||||
|
|
||||||
if (contents & MASK_WATER) {
|
if (contents & MASK_WATER) {
|
||||||
sample2 = point[2] - MINS_Z;
|
sample2 = viewheight - MINS_Z;
|
||||||
sample1 = sample2 / 2;
|
sample1 = sample2 / 2;
|
||||||
waterlevel = 1;
|
waterlevel = 1;
|
||||||
point[2] = cent->lerpOrigin[2] + MINS_Z + sample1;
|
point[2] = cent->lerpOrigin[2] + MINS_Z + sample1;
|
||||||
|
@ -489,7 +494,7 @@ void CG_PainEvent( centity_t *cent, int health ) {
|
||||||
snd = "*pain100_1.wav";
|
snd = "*pain100_1.wav";
|
||||||
}
|
}
|
||||||
// play a gurp sound instead of a normal pain sound
|
// play a gurp sound instead of a normal pain sound
|
||||||
if (CG_WaterLevel(cent) >= 1) {
|
if (CG_WaterLevel(cent) == 3) {
|
||||||
if (rand()&1) {
|
if (rand()&1) {
|
||||||
trap_S_StartSound(NULL, cent->currentState.number, CHAN_VOICE, CG_CustomSound(cent->currentState.number, "sound/player/gurp1.wav"));
|
trap_S_StartSound(NULL, cent->currentState.number, CHAN_VOICE, CG_CustomSound(cent->currentState.number, "sound/player/gurp1.wav"));
|
||||||
} else {
|
} else {
|
||||||
|
@ -1164,7 +1169,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
case EV_DEATH3:
|
case EV_DEATH3:
|
||||||
DEBUGNAME("EV_DEATHx");
|
DEBUGNAME("EV_DEATHx");
|
||||||
|
|
||||||
if (CG_WaterLevel(cent) >= 1) {
|
if (CG_WaterLevel(cent) == 3) {
|
||||||
trap_S_StartSound(NULL, es->number, CHAN_VOICE, CG_CustomSound(es->number, "*drown.wav"));
|
trap_S_StartSound(NULL, es->number, CHAN_VOICE, CG_CustomSound(es->number, "*drown.wav"));
|
||||||
} else {
|
} else {
|
||||||
trap_S_StartSound(NULL, es->number, CHAN_VOICE, CG_CustomSound(es->number, va("*death%i.wav", event - EV_DEATH1 + 1)));
|
trap_S_StartSound(NULL, es->number, CHAN_VOICE, CG_CustomSound(es->number, va("*death%i.wav", event - EV_DEATH1 + 1)));
|
||||||
|
|
|
@ -480,7 +480,7 @@ static void CG_MapRestart( void ) {
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
if (cg_singlePlayerActive.integer) {
|
if (cg_singlePlayerActive.integer) {
|
||||||
trap_Cvar_Set("ui_matchStartTime", va("%i", cg.time));
|
trap_Cvar_Set("ui_matchStartTime", va("%i", cg.time));
|
||||||
if (cg_recordSPDemo.integer && cg_recordSPDemoName.string && *cg_recordSPDemoName.string) {
|
if (cg_recordSPDemo.integer && *cg_recordSPDemoName.string) {
|
||||||
trap_SendConsoleCommand(va("set g_synchronousclients 1 ; record %s \n", cg_recordSPDemoName.string));
|
trap_SendConsoleCommand(va("set g_synchronousclients 1 ; record %s \n", cg_recordSPDemoName.string));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,17 +122,6 @@ static ID_INLINE void WRITE_2BYTES( int x )
|
||||||
bufIndex += 2;
|
bufIndex += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
WRITE_1BYTES
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
static ID_INLINE void WRITE_1BYTES( int x )
|
|
||||||
{
|
|
||||||
buffer[ bufIndex ] = x;
|
|
||||||
bufIndex += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
START_CHUNK
|
START_CHUNK
|
||||||
|
|
|
@ -94,8 +94,8 @@ typedef struct {
|
||||||
qboolean looping, holdAtEnd, dirty, alterGameState, silent, shader;
|
qboolean looping, holdAtEnd, dirty, alterGameState, silent, shader;
|
||||||
fileHandle_t iFile;
|
fileHandle_t iFile;
|
||||||
e_status status;
|
e_status status;
|
||||||
unsigned int startTime;
|
int startTime;
|
||||||
unsigned int lastTime;
|
int lastTime;
|
||||||
long tfps;
|
long tfps;
|
||||||
long RoQPlayed;
|
long RoQPlayed;
|
||||||
long ROQSize;
|
long ROQSize;
|
||||||
|
|
|
@ -606,10 +606,10 @@ usercmd_t CL_CreateCmd( void ) {
|
||||||
// draw debug graphs of turning for mouse testing
|
// draw debug graphs of turning for mouse testing
|
||||||
if ( cl_debugMove->integer ) {
|
if ( cl_debugMove->integer ) {
|
||||||
if ( cl_debugMove->integer == 1 ) {
|
if ( cl_debugMove->integer == 1 ) {
|
||||||
SCR_DebugGraph( abs(cl.viewangles[YAW] - oldAngles[YAW]) );
|
SCR_DebugGraph( fabs(cl.viewangles[YAW] - oldAngles[YAW]) );
|
||||||
}
|
}
|
||||||
if ( cl_debugMove->integer == 2 ) {
|
if ( cl_debugMove->integer == 2 ) {
|
||||||
SCR_DebugGraph( abs(cl.viewangles[PITCH] - oldAngles[PITCH]) );
|
SCR_DebugGraph( fabs(cl.viewangles[PITCH] - oldAngles[PITCH]) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,14 +169,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
//================================================================= LINUX ===
|
//================================================================= LINUX ===
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__FreeBSD_kernel__)
|
#if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
|
||||||
|
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#define OS_STRING "linux"
|
#define OS_STRING "linux"
|
||||||
#else
|
#elif defined(__FreeBSD_kernel__)
|
||||||
#define OS_STRING "kFreeBSD"
|
#define OS_STRING "kFreeBSD"
|
||||||
|
#else
|
||||||
|
#define OS_STRING "GNU"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ID_INLINE inline
|
#define ID_INLINE inline
|
||||||
|
@ -205,6 +207,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
#define ARCH_STRING "sparc"
|
#define ARCH_STRING "sparc"
|
||||||
#elif defined __arm__
|
#elif defined __arm__
|
||||||
#define ARCH_STRING "arm"
|
#define ARCH_STRING "arm"
|
||||||
|
#elif defined __aarch64__
|
||||||
|
#define ARCH_STRING "aarch64"
|
||||||
#elif defined __cris__
|
#elif defined __cris__
|
||||||
#define ARCH_STRING "cris"
|
#define ARCH_STRING "cris"
|
||||||
#elif defined __hppa__
|
#elif defined __hppa__
|
||||||
|
|
|
@ -1012,6 +1012,10 @@ int R_SpriteFogNum( trRefEntity_t *ent ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( ent->e.renderfx & RF_CROSSHAIR ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ELITEFORCE
|
#ifdef ELITEFORCE
|
||||||
radius = ent->e.data.sprite.radius;
|
radius = ent->e.data.sprite.radius;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1578,6 +1578,23 @@ static qboolean ParseShader( char **text )
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( r_greyscale->integer )
|
||||||
|
{
|
||||||
|
float luminance;
|
||||||
|
|
||||||
|
luminance = LUMA( shader.fogParms.color[0], shader.fogParms.color[1], shader.fogParms.color[2] );
|
||||||
|
VectorSet( shader.fogParms.color, luminance, luminance, luminance );
|
||||||
|
}
|
||||||
|
else if ( r_greyscale->value )
|
||||||
|
{
|
||||||
|
float luminance;
|
||||||
|
|
||||||
|
luminance = LUMA( shader.fogParms.color[0], shader.fogParms.color[1], shader.fogParms.color[2] );
|
||||||
|
shader.fogParms.color[0] = LERP( shader.fogParms.color[0], luminance, r_greyscale->value );
|
||||||
|
shader.fogParms.color[1] = LERP( shader.fogParms.color[1], luminance, r_greyscale->value );
|
||||||
|
shader.fogParms.color[2] = LERP( shader.fogParms.color[2], luminance, r_greyscale->value );
|
||||||
|
}
|
||||||
|
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1680,6 +1680,10 @@ int R_SpriteFogNum( trRefEntity_t *ent ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( ent->e.renderfx & RF_CROSSHAIR ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ELITEFORCE
|
#ifdef ELITEFORCE
|
||||||
radius = ent->e.data.sprite.radius;
|
radius = ent->e.data.sprite.radius;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1866,6 +1866,23 @@ static qboolean ParseShader( char **text )
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( r_greyscale->integer )
|
||||||
|
{
|
||||||
|
float luminance;
|
||||||
|
|
||||||
|
luminance = LUMA( shader.fogParms.color[0], shader.fogParms.color[1], shader.fogParms.color[2] );
|
||||||
|
VectorSet( shader.fogParms.color, luminance, luminance, luminance );
|
||||||
|
}
|
||||||
|
else if ( r_greyscale->value )
|
||||||
|
{
|
||||||
|
float luminance;
|
||||||
|
|
||||||
|
luminance = LUMA( shader.fogParms.color[0], shader.fogParms.color[1], shader.fogParms.color[2] );
|
||||||
|
shader.fogParms.color[0] = LERP( shader.fogParms.color[0], luminance, r_greyscale->value );
|
||||||
|
shader.fogParms.color[1] = LERP( shader.fogParms.color[1], luminance, r_greyscale->value );
|
||||||
|
shader.fogParms.color[2] = LERP( shader.fogParms.color[2], luminance, r_greyscale->value );
|
||||||
|
}
|
||||||
|
|
||||||
token = COM_ParseExt( text, qfalse );
|
token = COM_ParseExt( text, qfalse );
|
||||||
if ( !token[0] )
|
if ( !token[0] )
|
||||||
{
|
{
|
||||||
|
|
|
@ -130,21 +130,21 @@ static void GLimp_DetectAvailableModes(void)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
char buf[ MAX_STRING_CHARS ] = { 0 };
|
char buf[ MAX_STRING_CHARS ] = { 0 };
|
||||||
size_t numSDLModes;
|
int numSDLModes;
|
||||||
SDL_Rect *modes;
|
SDL_Rect *modes;
|
||||||
int numModes = 0;
|
int numModes = 0;
|
||||||
|
|
||||||
int display = SDL_GetWindowDisplayIndex( SDL_window );
|
|
||||||
SDL_DisplayMode windowMode;
|
SDL_DisplayMode windowMode;
|
||||||
|
int display = SDL_GetWindowDisplayIndex( SDL_window );
|
||||||
|
numSDLModes = SDL_GetNumDisplayModes( display );
|
||||||
|
|
||||||
if( SDL_GetWindowDisplayMode( SDL_window, &windowMode ) < 0 )
|
if( SDL_GetWindowDisplayMode( SDL_window, &windowMode ) < 0 || numSDLModes <= 0 )
|
||||||
{
|
{
|
||||||
ri.Printf( PRINT_WARNING, "Couldn't get window display mode, no resolutions detected\n" );
|
ri.Printf( PRINT_WARNING, "Couldn't get window display mode, no resolutions detected\n" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
numSDLModes = SDL_GetNumDisplayModes( display );
|
modes = SDL_calloc( (size_t)numSDLModes, sizeof( SDL_Rect ) );
|
||||||
modes = SDL_calloc( numSDLModes, sizeof( SDL_Rect ) );
|
|
||||||
if ( !modes )
|
if ( !modes )
|
||||||
{
|
{
|
||||||
ri.Error( ERR_FATAL, "Out of memory" );
|
ri.Error( ERR_FATAL, "Out of memory" );
|
||||||
|
|
|
@ -410,6 +410,7 @@ char **Sys_ListFiles( const char *directory, const char *extension, char *filter
|
||||||
intptr_t findhandle;
|
intptr_t findhandle;
|
||||||
int flag;
|
int flag;
|
||||||
int i;
|
int i;
|
||||||
|
int extLen;
|
||||||
|
|
||||||
if (filter) {
|
if (filter) {
|
||||||
|
|
||||||
|
@ -443,6 +444,8 @@ char **Sys_ListFiles( const char *directory, const char *extension, char *filter
|
||||||
flag = _A_SUBDIR;
|
flag = _A_SUBDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extLen = strlen( extension );
|
||||||
|
|
||||||
Com_sprintf( search, sizeof(search), "%s\\*%s", directory, extension );
|
Com_sprintf( search, sizeof(search), "%s\\*%s", directory, extension );
|
||||||
|
|
||||||
// search
|
// search
|
||||||
|
@ -456,6 +459,14 @@ char **Sys_ListFiles( const char *directory, const char *extension, char *filter
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if ( (!wantsubs && flag ^ ( findinfo.attrib & _A_SUBDIR )) || (wantsubs && findinfo.attrib & _A_SUBDIR) ) {
|
if ( (!wantsubs && flag ^ ( findinfo.attrib & _A_SUBDIR )) || (wantsubs && findinfo.attrib & _A_SUBDIR) ) {
|
||||||
|
if (*extension) {
|
||||||
|
if ( strlen( findinfo.name ) < extLen ||
|
||||||
|
Q_stricmp(
|
||||||
|
findinfo.name + strlen( findinfo.name ) - extLen,
|
||||||
|
extension ) ) {
|
||||||
|
continue; // didn't match
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( nfiles == MAX_FOUND_FILES - 1 ) {
|
if ( nfiles == MAX_FOUND_FILES - 1 ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
30
misc/linux/server_compile.sh
Normal file
30
misc/linux/server_compile.sh
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/bash
|
||||||
|
localPATH=`pwd`
|
||||||
|
export BUILD_CLIENT="0"
|
||||||
|
export BUILD_SERVER="1"
|
||||||
|
export USE_CURL="1"
|
||||||
|
export USE_CODEC_OPUS="1"
|
||||||
|
export USE_VOIP="1"
|
||||||
|
export COPYDIR="~/ioquake3"
|
||||||
|
IOQ3REMOTE="https://github.com/ioquake/ioq3.git"
|
||||||
|
IOQ3LOCAL="/tmp/ioquake3compile"
|
||||||
|
JOPTS="-j2"
|
||||||
|
echo "This process requires you to have the following installed through your distribution:
|
||||||
|
make
|
||||||
|
git
|
||||||
|
and all of the ioquake3 dependencies necessary for an ioquake3 server.
|
||||||
|
If you do not have the necessary dependencies this script will bail out.
|
||||||
|
Please post a message to http://community.ioquake.org/ asking for help and include whatever error messages you received during the compile phase.
|
||||||
|
Please edit this script. Inside you will find a COPYDIR variable you can alter to change where ioquake3 will be installed to."
|
||||||
|
while true; do
|
||||||
|
read -p "Are you ready to compile ioquake3 in the $IOQ3LOCAL directory, and have it installed into $COPYDIR? " yn
|
||||||
|
case $yn in
|
||||||
|
[Yy]* )
|
||||||
|
if [ -x "$(command -v git)" ] && [ -x "$(command -v make)" ] ; then
|
||||||
|
git clone $IOQ3REMOTE $IOQ3LOCAL && cd $IOQ3LOCAL && make $JOPTS && make copyfiles && cd $localPATH && rm -rf $IOQ3LOCAL
|
||||||
|
fi
|
||||||
|
exit;;
|
||||||
|
[Nn]* ) exit;;
|
||||||
|
* ) echo "Please answer yes or no.";;
|
||||||
|
esac
|
||||||
|
done
|
3
misc/linux/start_server.sh
Normal file
3
misc/linux/start_server.sh
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
echo "Edit this script to change the path to ioquake3's dedicated server executable and which binary if you aren't on x86_64.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data"
|
||||||
|
~/ioquake3/ioq3ded.x86_64 +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64
|
Loading…
Reference in a new issue