Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
|
b62bf6e859 | ||
|
db6a3bc168 |
85 changed files with 1867 additions and 2888 deletions
BIN
bin/AnimatEd.exe
Normal file
BIN
bin/AnimatEd.exe
Normal file
Binary file not shown.
18
bin/README.txt
Normal file
18
bin/README.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
October 15th, 2002 - Thank you for downloading the sof2sdk-101b.zip file. This release contains the .ini
|
||||||
|
files for AnimatEd and SklView which allow you to change the load location for SDK files.
|
||||||
|
|
||||||
|
For exampe if you installed the SDK in E:\SOF2SDK, this should be entered into each file.
|
||||||
|
|
||||||
|
Both programs will assume that the base directory is one level deeper than your SDK directory. The
|
||||||
|
programs also assume the ext_data and skeletons directories are a level lower than that:
|
||||||
|
|
||||||
|
So if I installed in C:\SDK, I unpacked the pk3's and made a base
|
||||||
|
structure like this:
|
||||||
|
C:\SDK\base\skeletons
|
||||||
|
C:\SDK\base\ext_data
|
||||||
|
|
||||||
|
As always, these tools are released "as is" with no support from Raven Software or Activision.
|
||||||
|
|
||||||
|
Happy Modding!
|
||||||
|
|
||||||
|
- The SOF2 Development Team
|
|
@ -1 +0,0 @@
|
||||||
start spradiant .\sof2SP.qe4
|
|
BIN
bin/SklView.exe
BIN
bin/SklView.exe
Binary file not shown.
BIN
bin/SoF2MPDev.exe
Normal file
BIN
bin/SoF2MPDev.exe
Normal file
Binary file not shown.
1
bin/animatEd.ini
Normal file
1
bin/animatEd.ini
Normal file
|
@ -0,0 +1 @@
|
||||||
|
C:\SDK
|
1078
bin/entitiesSP.def
1078
bin/entitiesSP.def
File diff suppressed because it is too large
Load diff
|
@ -1,25 +0,0 @@
|
||||||
sof2sdk-101a.zip README:
|
|
||||||
|
|
||||||
Released: Friday, July 19th, 2002
|
|
||||||
|
|
||||||
|
|
||||||
This SDK release is a supplement to the sof2sdk-101.msi release.
|
|
||||||
|
|
||||||
|
|
||||||
It includes the following Single Player SDK files:
|
|
||||||
|
|
||||||
- EntitiesSP.def - Single Player Entities Definition File
|
|
||||||
- RadiantSP.bat - Batch file for running the single player QERadiant Editor
|
|
||||||
- sof2SP.qe4 - Project file for SOF2 single player QERadiant
|
|
||||||
- spradiant.exe - Single Player QERadiant Executable
|
|
||||||
|
|
||||||
|
|
||||||
Place these four files in your C:\SoF2SDK\bin (by default) folder with the rest of your 1.01 tools.
|
|
||||||
|
|
||||||
|
|
||||||
These tools are released "as is" and are unsupported by Raven Software or Activision technical support.
|
|
||||||
|
|
||||||
Enjoy!
|
|
||||||
|
|
||||||
- Raven Software
|
|
||||||
SOF2 Development Team
|
|
1
bin/sklview.ini
Normal file
1
bin/sklview.ini
Normal file
|
@ -0,0 +1 @@
|
||||||
|
C:\SDK
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"mapspath" ""
|
|
||||||
"basepath" "C:\SoF2SDK\base"
|
|
||||||
"rshcmd" ""
|
|
||||||
"remotebasepath" "C:\SoF2SDK\base"
|
|
||||||
"entitypath" "C:\SoF2SDK\bin\entitiesSP.def"
|
|
||||||
"texturepath" "C:\Program Files\Soldier of Fortune II - Double Helix\base\textures\"
|
|
||||||
"autosave" "C:\SoF2SDK\base\maps\autosave.map"
|
|
||||||
"confusedpath" "C:\SOF2SDK\confusEd\*.*"
|
|
||||||
"npcpath" "C:\SOF2SDK\npcs\*.*"
|
|
||||||
"bsp FullVis (1/2 LMs)" "C:\SoF2SDK\bin\sof2map -bsp -rename -samplesize 32 $ -class 4 && C:\SoF2SDK\bin\sof2map -vis $ -class 2 && C:\SoF2SDK\bin\sof2map -light -extra -samplesize 32 $"
|
|
||||||
"bsp FullVis" "C:\SoF2SDK\bin\sof2map -bsp -rename $ && C:\SoF2SDK\bin\sof2map -vis $ && C:\SoF2SDK\bin\sof2map -light $"
|
|
||||||
"bsp FullVis (extra)" "C:\SoF2SDK\bin\sof2map -bsp -rename $ && C:\SoF2SDK\bin\sof2map -vis $ && C:\SoF2SDK\bin\sof2map -light -extra $"
|
|
||||||
"bsp FullVis (nolight)" "C:\SoF2SDK\bin\sof2map -bsp -rename $ && C:\SoF2SDK\bin\sof2map -vis $"
|
|
||||||
"bsp FastVis (nolight)" "C:\SoF2SDK\bin\sof2map -bsp -rename $ && C:\SoF2SDK\bin\sof2map -vis -fast $"
|
|
||||||
"bsp FastVis" "C:\SoF2SDK\bin\sof2map -bsp -rename $ && C:\SoF2SDK\bin\sof2map -vis -fast $ && C:\SoF2SDK\bin\sof2map -light $"
|
|
||||||
"bsp NoVis" "C:\SoF2SDK\bin\localbatch\novis.bat $"
|
|
||||||
"bsp OnlyEnts" "C:\SoF2SDK\bin\sof2map -bsp -rename -onlyents $"
|
|
||||||
"bsp Info" "C:\SoF2SDK\bin\sof2map -info $"
|
|
||||||
"bsp Relight (extra)" "C:\SoF2SDK\bin\sof2map -bsp -rename -onlyents $ && C:\SoF2SDK\bin\sof2map -light -extra $"
|
|
||||||
"bsp Relight (1/2 LM)" "C:\SoF2SDK\bin\sof2map -bsp -rename -onlyents $ && C:\SoF2SDK\bin\sof2map -light -extra -samplesize 32 $"
|
|
||||||
"brush_primit" "0"
|
|
||||||
}
|
|
Binary file not shown.
BIN
bin/sof2sdk-eula.doc
Normal file
BIN
bin/sof2sdk-eula.doc
Normal file
Binary file not shown.
Binary file not shown.
|
@ -1,31 +1,31 @@
|
||||||
# Microsoft Developer Studio Project File - Name="Sof2MP" - Package Owner=<4>
|
# Microsoft Developer Studio Project File - Name="SoF2MP" - Package Owner=<4>
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
# ** DO NOT EDIT **
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Generic Project" 0x010a
|
# TARGTYPE "Win32 (x86) Generic Project" 0x010a
|
||||||
|
|
||||||
CFG=Sof2MP - Win32 Debug
|
CFG=SoF2MP - Win32 Debug
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
!MESSAGE use the Export Makefile command and run
|
!MESSAGE use the Export Makefile command and run
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "Sof2MP.mak".
|
!MESSAGE NMAKE /f "SoF2MP.mak".
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "Sof2MP.mak" CFG="Sof2MP - Win32 Debug"
|
!MESSAGE NMAKE /f "SoF2MP.mak" CFG="SoF2MP - Win32 Debug"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "Sof2MP - Win32 Release" (based on "Win32 (x86) Generic Project")
|
!MESSAGE "SoF2MP - Win32 Release" (based on "Win32 (x86) Generic Project")
|
||||||
!MESSAGE "Sof2MP - Win32 Debug" (based on "Win32 (x86) Generic Project")
|
!MESSAGE "SoF2MP - Win32 Debug" (based on "Win32 (x86) Generic Project")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "Sof2MP - Win32 Release"
|
!IF "$(CFG)" == "SoF2MP - Win32 Release"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
@ -38,7 +38,7 @@ MTL=midl.exe
|
||||||
# PROP Intermediate_Dir "Release"
|
# PROP Intermediate_Dir "Release"
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "Sof2MP - Win32 Debug"
|
!ELSEIF "$(CFG)" == "SoF2MP - Win32 Debug"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
@ -55,7 +55,7 @@ MTL=midl.exe
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
# Name "Sof2MP - Win32 Release"
|
# Name "SoF2MP - Win32 Release"
|
||||||
# Name "Sof2MP - Win32 Debug"
|
# Name "SoF2MP - Win32 Debug"
|
||||||
# End Target
|
# End Target
|
||||||
# End Project
|
# End Project
|
||||||
|
|
103
code/Sof2MP.dsw
103
code/Sof2MP.dsw
|
@ -3,6 +3,45 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "SoF2MP"=.\SoF2MP.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_ctf
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_dem
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_dm
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_elim
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_inf
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name gt_tdm
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name SoF2cgame
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name SoF2game
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name ui
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
Project: "SoF2cgame"=.\cgame\sof2_cgame.dsp - Package Owner=<4>
|
Project: "SoF2cgame"=.\cgame\sof2_cgame.dsp - Package Owner=<4>
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
|
@ -27,54 +66,6 @@ Package=<4>
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
Project: "SoF2ui"=.\ui\sof2_ui.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "Sof2MP"=.\Sof2MP.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name SoF2cgame
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name SoF2game
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name SoF2ui
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name gt_ctf
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name gt_dm
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name gt_elim
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name gt_inf
|
|
||||||
End Project Dependency
|
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name gt_tdm
|
|
||||||
End Project Dependency
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "gt_ctf"=.\gametype\gt_ctf\gt_ctf.dsp - Package Owner=<4>
|
Project: "gt_ctf"=.\gametype\gt_ctf\gt_ctf.dsp - Package Owner=<4>
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
|
@ -91,10 +82,6 @@ Project: "gt_dem"=.\gametype\gt_dem\gt_dem.dsp - Package Owner=<4>
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
{{{
|
{{{
|
||||||
begin source code control
|
|
||||||
"$/SoF2/code/gametype/gt_dem", ZRDAAAAA
|
|
||||||
.\gametype\gt_dem
|
|
||||||
end source code control
|
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
Package=<4>
|
Package=<4>
|
||||||
|
@ -151,6 +138,18 @@ Package=<4>
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "ui"=.\ui\sof2_ui.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
Global:
|
Global:
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
|
|
|
@ -586,6 +586,7 @@ void CG_InitConsoleCommands( void )
|
||||||
//
|
//
|
||||||
trap_AddCommand ("kill");
|
trap_AddCommand ("kill");
|
||||||
trap_AddCommand ("say");
|
trap_AddCommand ("say");
|
||||||
|
trap_AddCommand ("ignore");
|
||||||
trap_AddCommand ("say_team");
|
trap_AddCommand ("say_team");
|
||||||
trap_AddCommand ("tell");
|
trap_AddCommand ("tell");
|
||||||
trap_AddCommand ("vsay_team");
|
trap_AddCommand ("vsay_team");
|
||||||
|
|
|
@ -337,6 +337,22 @@ static void CG_DrawTeamScores ( float y )
|
||||||
char scores[2][16];
|
char scores[2][16];
|
||||||
float w;
|
float w;
|
||||||
const char* s;
|
const char* s;
|
||||||
|
vec4_t fade = {1,1,1,0.7f};
|
||||||
|
float x1;
|
||||||
|
float y1;
|
||||||
|
float x2;
|
||||||
|
float y2;
|
||||||
|
|
||||||
|
// Make sure the radar should be showing
|
||||||
|
if ( cg.weaponMenuUp )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( cgs.clientinfo[cg.predictedPlayerState.clientNum].team == TEAM_SPECTATOR )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( cgs.scores1 == SCORE_NOT_PRESENT )
|
if ( cgs.scores1 == SCORE_NOT_PRESENT )
|
||||||
{
|
{
|
||||||
|
@ -354,13 +370,72 @@ static void CG_DrawTeamScores ( float y )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Com_sprintf (scores[1], sizeof(scores[1]), "%i", cgs.scores2);
|
Com_sprintf (scores[1], sizeof(scores[1]), "%i", cgs.scores2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( cg_drawTeamScores.integer > 0 && cg_drawTeamScores.integer < 5 )
|
||||||
|
{
|
||||||
|
switch ( cg_drawTeamScores.integer )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 3:
|
||||||
|
x1 = 438;
|
||||||
|
x2 = 400;
|
||||||
|
y1 = 5;
|
||||||
|
y2 = 5;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
x1 = 430;
|
||||||
|
y1 = 425;
|
||||||
|
x2 = 470;
|
||||||
|
y2 = 425;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
x1 = 340;
|
||||||
|
y1 = 395;
|
||||||
|
x2 = 380;
|
||||||
|
y2 = 395;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
x1 = 600;
|
||||||
|
x2 = 600;
|
||||||
|
y1 = 200;
|
||||||
|
y2 = 250;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_R_SetColor ( fade );
|
||||||
|
CG_DrawPic ( x1, y1, 32, 32, cgs.media.redFriendShader );
|
||||||
|
CG_DrawPic ( x2, y2, 32, 32, cgs.media.blueFriendShader );
|
||||||
|
|
||||||
|
w = trap_R_GetTextWidth ( scores[0], cgs.media.hudFont, 0.5f, 0 );
|
||||||
|
CG_DrawText ( x1 + 16 - w / 2, y1 + 6, cgs.media.hudFont, 0.5f, colorWhite, scores[0], 0, DT_OUTLINE );
|
||||||
|
|
||||||
|
w = trap_R_GetTextWidth ( scores[1], cgs.media.hudFont, 0.5f, 0 );
|
||||||
|
CG_DrawText ( x2 + 16 - w / 2, y2 + 6, cgs.media.hudFont, 0.45f, colorWhite, scores[1], 0, DT_OUTLINE );
|
||||||
|
|
||||||
|
if ( cgs.gametypeData->respawnType == RT_NONE )
|
||||||
|
{
|
||||||
|
s = va("%d/%d", cg.predictedPlayerState.persistant[PERS_RED_ALIVE_COUNT], CG_TeamCount(TEAM_RED) );
|
||||||
|
w = trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.35f, 0 );
|
||||||
|
CG_DrawText ( x1 + 16 - w / 2, y1 + 24, cgs.media.hudFont, 0.35f, colorMdGrey, s, 0, DT_OUTLINE );
|
||||||
|
|
||||||
|
s = va("%d/%d", cg.predictedPlayerState.persistant[PERS_BLUE_ALIVE_COUNT], CG_TeamCount(TEAM_BLUE) );
|
||||||
|
w = trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.35f, 0 );
|
||||||
|
CG_DrawText ( x2 + 16 - w / 2, y2 + 24, cgs.media.hudFont, 0.35f, colorMdGrey, s, 0, DT_OUTLINE );
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_R_SetColor ( NULL );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = va ( "Red: %s Blue: %s", scores[0], scores[1] );
|
||||||
|
w = trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.35f, 0 );
|
||||||
|
CG_DrawText ( RADAR_X + RADAR_RADIUS - w / 2, y, cgs.media.hudFont, 0.35f, g_color_table[ColorIndex(COLOR_GREEN)], s, 0, DT_OUTLINE );
|
||||||
}
|
}
|
||||||
|
|
||||||
s = va ( "Red: %s Blue: %s", scores[0], scores[1] );
|
|
||||||
|
|
||||||
w = trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.35f, 0 );
|
|
||||||
|
|
||||||
CG_DrawText ( RADAR_X + RADAR_RADIUS - w / 2, y, cgs.media.hudFont, 0.35f, g_color_table[ColorIndex(COLOR_GREEN)], s, 0, DT_OUTLINE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1046,6 +1121,11 @@ static void CG_DrawCrosshair(void)
|
||||||
scale = 1;
|
scale = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( scale > 2 )
|
||||||
|
{
|
||||||
|
scale = 2;
|
||||||
|
}
|
||||||
|
|
||||||
w = w * scale;
|
w = w * scale;
|
||||||
h = h * scale;
|
h = h * scale;
|
||||||
|
|
||||||
|
@ -1736,16 +1816,15 @@ static void CG_Draw2D( void )
|
||||||
CG_DrawUpperRight();
|
CG_DrawUpperRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !CG_DrawFollow() )
|
|
||||||
{
|
|
||||||
CG_DrawWarmup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't draw center string if scoreboard is up
|
// don't draw center string if scoreboard is up
|
||||||
cg.scoreBoardShowing = CG_DrawScoreboard();
|
cg.scoreBoardShowing = CG_DrawScoreboard();
|
||||||
if ( !cg.scoreBoardShowing)
|
if ( !cg.scoreBoardShowing)
|
||||||
{
|
{
|
||||||
CG_DrawCenterText();
|
CG_DrawCenterText();
|
||||||
|
if ( !CG_DrawFollow() )
|
||||||
|
{
|
||||||
|
CG_DrawWarmup();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always Draw chat
|
// Always Draw chat
|
||||||
|
|
|
@ -353,6 +353,7 @@ static void CG_Obituary( entityState_t *ent )
|
||||||
|
|
||||||
case MOD_M1911A1_PISTOL:
|
case MOD_M1911A1_PISTOL:
|
||||||
case MOD_USSOCOM_PISTOL:
|
case MOD_USSOCOM_PISTOL:
|
||||||
|
case MOD_SILVER_TALON:
|
||||||
if ( attack == ATTACK_ALTERNATE )
|
if ( attack == ATTACK_ALTERNATE )
|
||||||
{
|
{
|
||||||
message = "was pistol whipped by";
|
message = "was pistol whipped by";
|
||||||
|
@ -377,11 +378,24 @@ static void CG_Obituary( entityState_t *ent )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MOD_M4_ASSAULT_RIFLE:
|
||||||
|
if ( attack == ATTACK_ALTERNATE )
|
||||||
|
{
|
||||||
|
message = "was detonated by";
|
||||||
|
message2 = va("'s %s", "M203" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
message = "was shot by";
|
||||||
|
message2 = va("'s %s", weaponParseInfo[mod].mName );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MOD_M60_MACHINEGUN:
|
case MOD_M60_MACHINEGUN:
|
||||||
case MOD_MICRO_UZI_SUBMACHINEGUN:
|
case MOD_MICRO_UZI_SUBMACHINEGUN:
|
||||||
case MOD_MP5:
|
case MOD_MP5:
|
||||||
case MOD_M3A1_SUBMACHINEGUN:
|
case MOD_M3A1_SUBMACHINEGUN:
|
||||||
case MOD_M4_ASSAULT_RIFLE:
|
case MOD_SIG551:
|
||||||
message = "was shot by";
|
message = "was shot by";
|
||||||
message2 = va("'s %s", weaponParseInfo[mod].mName );
|
message2 = va("'s %s", weaponParseInfo[mod].mName );
|
||||||
break;
|
break;
|
||||||
|
@ -778,6 +792,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
|
||||||
trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.waterWade[rand()%2], -1, -1 );
|
trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.waterWade[rand()%2], -1, -1 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EV_ITEM_PICKUP_QUIET:
|
||||||
case EV_ITEM_PICKUP:
|
case EV_ITEM_PICKUP:
|
||||||
{
|
{
|
||||||
gitem_t *item;
|
gitem_t *item;
|
||||||
|
@ -790,7 +805,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
|
||||||
autoswitch = (es->eventParm & ITEM_AUTOSWITCHBIT)?qtrue:qfalse;
|
autoswitch = (es->eventParm & ITEM_AUTOSWITCHBIT)?qtrue:qfalse;
|
||||||
|
|
||||||
// player predicted index
|
// player predicted index
|
||||||
index = es->eventParm & ~ITEM_AUTOSWITCHBIT;
|
index = es->eventParm & ~(ITEM_AUTOSWITCHBIT|ITEM_QUIETPICKUP);
|
||||||
|
|
||||||
if ( index < 1 || index >= bg_numItems )
|
if ( index < 1 || index >= bg_numItems )
|
||||||
{
|
{
|
||||||
|
@ -799,7 +814,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
|
||||||
|
|
||||||
item = &bg_itemlist[ index ];
|
item = &bg_itemlist[ index ];
|
||||||
|
|
||||||
if ( item->pickup_sound )
|
if ( event != EV_ITEM_PICKUP_QUIET && item->pickup_sound )
|
||||||
{
|
{
|
||||||
trap_S_StartSound (NULL, es->number, CHAN_AUTO, trap_S_RegisterSound( item->pickup_sound ), -1, -1 );
|
trap_S_StartSound (NULL, es->number, CHAN_AUTO, trap_S_RegisterSound( item->pickup_sound ), -1, -1 );
|
||||||
}
|
}
|
||||||
|
@ -939,7 +954,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
|
||||||
case EV_BULLET_HIT_WALL:
|
case EV_BULLET_HIT_WALL:
|
||||||
DEBUGNAME("EV_BULLET_HIT_WALL");
|
DEBUGNAME("EV_BULLET_HIT_WALL");
|
||||||
|
|
||||||
if ( !(cg_antiLag.integer && cg_impactPrediction.integer && es->otherEntityNum == cg.predictedPlayerState.clientNum ) )
|
if ( !(cg_antiLag.integer && cg_impactPrediction.integer && !cg_synchronousClients.integer && es->otherEntityNum == cg.predictedPlayerState.clientNum ) )
|
||||||
{
|
{
|
||||||
// eventParm contains the direction byte and the material id
|
// eventParm contains the direction byte and the material id
|
||||||
ByteToDir( (es->eventParm >> MATERIAL_BITS), dir );
|
ByteToDir( (es->eventParm >> MATERIAL_BITS), dir );
|
||||||
|
@ -970,7 +985,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _SOF2_FLESHIMPACTPREDICTION
|
#ifdef _SOF2_FLESHIMPACTPREDICTION
|
||||||
if ( !(cg_antiLag.integer && cg_impactPrediction.integer >= 2 && es->otherEntityNum == cg.predictedPlayerState.clientNum ) )
|
if ( !(cg_antiLag.integer && cg_impactPrediction.integer >= 2 && !!cg_synchronousClients.integer && es->otherEntityNum == cg.predictedPlayerState.clientNum ) )
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int fxtype = MATERIAL_FLESH;
|
int fxtype = MATERIAL_FLESH;
|
||||||
|
|
|
@ -236,6 +236,7 @@ void CG_DoGoreFromWeapon( int weaponnum, int attack, vec3_t hitloc, vec3_t hitdi
|
||||||
|
|
||||||
// Smaller guns with pistol whip altfires
|
// Smaller guns with pistol whip altfires
|
||||||
case WP_M1911A1_PISTOL:
|
case WP_M1911A1_PISTOL:
|
||||||
|
case WP_SILVER_TALON:
|
||||||
case WP_USSOCOM_PISTOL:
|
case WP_USSOCOM_PISTOL:
|
||||||
if (attack==ATTACK_ALTERNATE)
|
if (attack==ATTACK_ALTERNATE)
|
||||||
{ // Bonk on the head
|
{ // Bonk on the head
|
||||||
|
@ -293,6 +294,7 @@ void CG_DoGoreFromWeapon( int weaponnum, int attack, vec3_t hitloc, vec3_t hitdi
|
||||||
// Medium guns
|
// Medium guns
|
||||||
case WP_M3A1_SUBMACHINEGUN:
|
case WP_M3A1_SUBMACHINEGUN:
|
||||||
case WP_MP5:
|
case WP_MP5:
|
||||||
|
case WP_SIG551:
|
||||||
CG_AddGore(irand(PGORE_BULLET_E, PGORE_BULLET_G), flrand( 5.25f, 7.5f),
|
CG_AddGore(irand(PGORE_BULLET_E, PGORE_BULLET_G), flrand( 5.25f, 7.5f),
|
||||||
hitloc, hitdirection, entnum, entposition, entangle, ghoul2);
|
hitloc, hitdirection, entnum, entposition, entangle, ghoul2);
|
||||||
if (cg_goreDetail.integer>0)
|
if (cg_goreDetail.integer>0)
|
||||||
|
|
|
@ -265,7 +265,19 @@ void CG_DrawInformation( void )
|
||||||
cg.cheats = qtrue;
|
cg.cheats = qtrue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
s = Info_ValueForKey( info, "sv_punkbuster" );
|
||||||
|
if ( s[0] == '1' )
|
||||||
|
{
|
||||||
|
s = "PUNKBUSTER ENABLED";
|
||||||
|
CG_DrawText ( 320 - trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.53f, 0 ) / 2, y,
|
||||||
|
cgs.media.hudFont, 0.53f, colorWhite, s, 0, 0 );
|
||||||
|
|
||||||
|
y += PROP_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
cg.cheats = qfalse;
|
cg.cheats = qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
s = cgs.gametypeData->displayName;
|
s = cgs.gametypeData->displayName;
|
||||||
CG_DrawText ( 320 - trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.53f, 0 ) / 2, y,
|
CG_DrawText ( 320 - trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.53f, 0 ) / 2, y,
|
||||||
|
@ -289,6 +301,15 @@ void CG_DrawInformation( void )
|
||||||
cgs.media.hudFont, 0.53f, colorWhite, s, 0, 0 );
|
cgs.media.hudFont, 0.53f, colorWhite, s, 0, 0 );
|
||||||
y += PROP_HEIGHT;
|
y += PROP_HEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value = atoi( Info_ValueForKey( info, "g_friendlyFire" ) );
|
||||||
|
if ( value )
|
||||||
|
{
|
||||||
|
s = va( "FRIENDLY FIRE ON" );
|
||||||
|
CG_DrawText ( 320 - trap_R_GetTextWidth ( s, cgs.media.hudFont, 0.53f, 0 ) / 2, y,
|
||||||
|
cgs.media.hudFont, 0.53f, colorWhite, s, 0, 0 );
|
||||||
|
y += PROP_HEIGHT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -712,6 +712,7 @@ typedef struct
|
||||||
int timelimit;
|
int timelimit;
|
||||||
int maxclients;
|
int maxclients;
|
||||||
qboolean friendlyFire;
|
qboolean friendlyFire;
|
||||||
|
qboolean punkbuster;
|
||||||
char mapname[MAX_QPATH];
|
char mapname[MAX_QPATH];
|
||||||
char gameover[MAX_QPATH];
|
char gameover[MAX_QPATH];
|
||||||
|
|
||||||
|
@ -905,6 +906,8 @@ void CG_LoadMenus ( const char *menuFile);
|
||||||
void CG_KeyEvent ( int key, qboolean down);
|
void CG_KeyEvent ( int key, qboolean down);
|
||||||
void CG_MouseEvent ( int x, int y);
|
void CG_MouseEvent ( int x, int y);
|
||||||
void CG_EventHandling ( int type);
|
void CG_EventHandling ( int type);
|
||||||
|
int CG_TeamCount ( int team );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// cg_view.c
|
// cg_view.c
|
||||||
|
|
|
@ -27,6 +27,7 @@ static void C_GetLerpAngles (void);
|
||||||
static void C_GetModelScale (void);
|
static void C_GetModelScale (void);
|
||||||
static void C_Trace (void);
|
static void C_Trace (void);
|
||||||
static void C_CameraShake (void);
|
static void C_CameraShake (void);
|
||||||
|
int CG_TeamScore ( int team );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
|
@ -132,6 +133,7 @@ int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int a
|
||||||
// server is going to attempt to send out multiple broadcasts in hopes that
|
// server is going to attempt to send out multiple broadcasts in hopes that
|
||||||
// the client will receive one of them
|
// the client will receive one of them
|
||||||
cg.mMapChange = qtrue;
|
cg.mMapChange = qtrue;
|
||||||
|
cgs.voteTime = cgs.voteDuration = 0;
|
||||||
trap_S_ClearLoopingSounds ( qtrue );
|
trap_S_ClearLoopingSounds ( qtrue );
|
||||||
trap_S_StopAllSounds ( );
|
trap_S_StopAllSounds ( );
|
||||||
trap_UI_CloseAll ( );
|
trap_UI_CloseAll ( );
|
||||||
|
@ -160,6 +162,12 @@ int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int a
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case CG_GET_TEAM_COUNT:
|
||||||
|
return CG_TeamCount ( arg0 );
|
||||||
|
|
||||||
|
case CG_GET_TEAM_SCORE:
|
||||||
|
return CG_TeamScore ( arg0 );
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Com_Error( ERR_FATAL, "vmMain: unknown command %i", command );
|
Com_Error( ERR_FATAL, "vmMain: unknown command %i", command );
|
||||||
break;
|
break;
|
||||||
|
@ -501,6 +509,7 @@ void CG_RegisterCvars( void )
|
||||||
trap_Cvar_Register(NULL, "ui_about_gametypename", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_gametypename", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
trap_Cvar_Register(NULL, "ui_about_scorelimit", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_scorelimit", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
trap_Cvar_Register(NULL, "ui_about_timelimit", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_timelimit", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
|
trap_Cvar_Register(NULL, "ui_about_friendlyfire", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
trap_Cvar_Register(NULL, "ui_about_maxclients", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_maxclients", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
trap_Cvar_Register(NULL, "ui_about_dmflags", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_dmflags", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
trap_Cvar_Register(NULL, "ui_about_mapname", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
trap_Cvar_Register(NULL, "ui_about_mapname", "0", CVAR_ROM|CVAR_INTERNAL, 0.0, 0.0 );
|
||||||
|
@ -544,6 +553,59 @@ static void CG_ForceModelChange( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
CG_TeamScore
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
int CG_TeamScore ( int team )
|
||||||
|
{
|
||||||
|
switch ( team )
|
||||||
|
{
|
||||||
|
case TEAM_RED:
|
||||||
|
return cg.predictedPlayerState.persistant[PERS_RED_SCORE];
|
||||||
|
|
||||||
|
case TEAM_BLUE:
|
||||||
|
return cg.predictedPlayerState.persistant[PERS_BLUE_SCORE];
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
CG_TeamCount
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
int CG_TeamCount ( int team )
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
|
||||||
|
for ( i = 0 ; i < cgs.maxclients ; i++ )
|
||||||
|
{
|
||||||
|
clientInfo_t* cl;
|
||||||
|
|
||||||
|
cl = &cgs.clientinfo[ i ];
|
||||||
|
|
||||||
|
if ( !cl->infoValid )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( team != cl->team )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
CG_UpdateTeamCountCvars
|
CG_UpdateTeamCountCvars
|
||||||
|
@ -1913,6 +1975,11 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum )
|
||||||
if ( cgs.gametypeData->description || cgs.pickupsDisabled || cgs.gametypeData->teams )
|
if ( cgs.gametypeData->description || cgs.pickupsDisabled || cgs.gametypeData->teams )
|
||||||
{
|
{
|
||||||
cg.popupObjectives = qtrue;
|
cg.popupObjectives = qtrue;
|
||||||
|
trap_Cvar_Set ( "ui_info_showobjectives", "1" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trap_Cvar_Set ( "ui_info_showobjectives", "0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Cvar_Set ( "ui_info_gametype", va("%i",cgs.gametype ) );
|
trap_Cvar_Set ( "ui_info_gametype", va("%i",cgs.gametype ) );
|
||||||
|
|
|
@ -56,14 +56,8 @@ static void CG_DrawPlayerSniperBullet ( rectDef_t* rect, qhandle_t shader, int b
|
||||||
static void CG_DrawPlayerSniperMagnification ( rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
static void CG_DrawPlayerSniperMagnification ( rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
||||||
{
|
{
|
||||||
const char* mag;
|
const char* mag;
|
||||||
|
|
||||||
switch ( cg.predictedPlayerState.zoomFov )
|
mag = weaponData[cg.predictedPlayerState.weapon].zoom[cg.predictedPlayerState.zoomFov].name;
|
||||||
{
|
|
||||||
default:
|
|
||||||
case 20: mag = "5x"; break;
|
|
||||||
case 10: mag = "10x"; break;
|
|
||||||
case 5: mag = "20x"; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Center the text
|
// Center the text
|
||||||
CG_DrawText (rect->x, rect->y, font, scale, color, mag, 0, 0 );
|
CG_DrawText (rect->x, rect->y, font, scale, color, mag, 0, 0 );
|
||||||
|
@ -574,6 +568,19 @@ qboolean CG_OwnerDrawVisible(int flags, const char* param )
|
||||||
visible = (cg.predictedPlayerState.pm_flags&PMF_ZOOMED)?qtrue:qfalse;
|
visible = (cg.predictedPlayerState.pm_flags&PMF_ZOOMED)?qtrue:qfalse;
|
||||||
flags &= ~(CG_SHOW_HUD_SNIPERSCOPE);
|
flags &= ~(CG_SHOW_HUD_SNIPERSCOPE);
|
||||||
}
|
}
|
||||||
|
// Only draw the sniper clip when zoomed
|
||||||
|
else if ( flags & CG_SHOW_HUD_SNIPERCLIP )
|
||||||
|
{
|
||||||
|
if ( cg.predictedPlayerState.weapon == WP_MSG90A1 )
|
||||||
|
{
|
||||||
|
visible = (cg.predictedPlayerState.pm_flags&PMF_ZOOMED)?qtrue:qfalse;
|
||||||
|
flags &= ~(CG_SHOW_HUD_SNIPERCLIP);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
visible = qfalse;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Draw the health as long as we arent zoomed
|
// Draw the health as long as we arent zoomed
|
||||||
else if ( flags & CG_SHOW_HUD_HEALTH )
|
else if ( flags & CG_SHOW_HUD_HEALTH )
|
||||||
{
|
{
|
||||||
|
@ -597,9 +604,12 @@ qboolean CG_OwnerDrawVisible(int flags, const char* param )
|
||||||
// Should the alternate weapon information be shown?
|
// Should the alternate weapon information be shown?
|
||||||
else if (flags & (CG_SHOW_PLAYER_ALT_WEAPONINFO|CG_HIDE_PLAYER_ALT_WEAPONINFO) )
|
else if (flags & (CG_SHOW_PLAYER_ALT_WEAPONINFO|CG_HIDE_PLAYER_ALT_WEAPONINFO) )
|
||||||
{
|
{
|
||||||
if ( cg.predictedPlayerState.pm_flags & PMF_ZOOMED )
|
if ( cg.predictedPlayerState.weapon == WP_MSG90A1 )
|
||||||
{
|
{
|
||||||
visible = qfalse;
|
if ( cg.predictedPlayerState.pm_flags & PMF_ZOOMED )
|
||||||
|
{
|
||||||
|
visible = qfalse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cg.showScores )
|
if ( cg.showScores )
|
||||||
|
@ -623,7 +633,7 @@ qboolean CG_OwnerDrawVisible(int flags, const char* param )
|
||||||
// INvert the visible flag for hidden
|
// INvert the visible flag for hidden
|
||||||
if ( flags & CG_HIDE_PLAYER_ALT_WEAPONINFO )
|
if ( flags & CG_HIDE_PLAYER_ALT_WEAPONINFO )
|
||||||
{
|
{
|
||||||
if ( cg.predictedPlayerState.pm_flags & PMF_ZOOMED )
|
if ( cg.predictedPlayerState.weapon == WP_MSG90A1 && (cg.predictedPlayerState.pm_flags & PMF_ZOOMED ) )
|
||||||
{
|
{
|
||||||
visible = qfalse;
|
visible = qfalse;
|
||||||
}
|
}
|
||||||
|
@ -639,7 +649,12 @@ qboolean CG_OwnerDrawVisible(int flags, const char* param )
|
||||||
// Draw the weapon info when we arent zoomed
|
// Draw the weapon info when we arent zoomed
|
||||||
else if ( flags & CG_SHOW_HUD_WEAPONINFO )
|
else if ( flags & CG_SHOW_HUD_WEAPONINFO )
|
||||||
{
|
{
|
||||||
visible = (cg.showScores||(cg.predictedPlayerState.pm_flags&PMF_ZOOMED))?qfalse:qtrue;
|
qboolean zoomed = qfalse;
|
||||||
|
if ( cg.predictedPlayerState.weapon == WP_MSG90A1 && (cg.predictedPlayerState.pm_flags & PMF_ZOOMED ) )
|
||||||
|
{
|
||||||
|
zoomed = qtrue;
|
||||||
|
}
|
||||||
|
visible = (cg.showScores||zoomed)?qfalse:qtrue;
|
||||||
flags &= ~(CG_SHOW_HUD_WEAPONINFO);
|
flags &= ~(CG_SHOW_HUD_WEAPONINFO);
|
||||||
}
|
}
|
||||||
else if (flags & CG_SHOW_ANYTEAMGAME)
|
else if (flags & CG_SHOW_ANYTEAMGAME)
|
||||||
|
|
|
@ -578,6 +578,7 @@ static void CG_PlayerFloatSprite( centity_t *cent, qhandle_t shader )
|
||||||
{
|
{
|
||||||
int rf;
|
int rf;
|
||||||
refEntity_t ent;
|
refEntity_t ent;
|
||||||
|
clientInfo_t *ci = &cgs.clientinfo[cent->currentState.clientNum];
|
||||||
|
|
||||||
if ( cent->currentState.number == cg.snap->ps.clientNum && !cg.renderingThirdPerson )
|
if ( cent->currentState.number == cg.snap->ps.clientNum && !cg.renderingThirdPerson )
|
||||||
{
|
{
|
||||||
|
@ -590,8 +591,6 @@ static void CG_PlayerFloatSprite( centity_t *cent, qhandle_t shader )
|
||||||
}
|
}
|
||||||
|
|
||||||
memset( &ent, 0, sizeof( ent ) );
|
memset( &ent, 0, sizeof( ent ) );
|
||||||
VectorCopy( cent->lerpOrigin, ent.origin );
|
|
||||||
ent.origin[2] += 58;
|
|
||||||
ent.reType = RT_SPRITE;
|
ent.reType = RT_SPRITE;
|
||||||
ent.customShader = shader;
|
ent.customShader = shader;
|
||||||
ent.radius = 10;
|
ent.radius = 10;
|
||||||
|
@ -600,6 +599,20 @@ static void CG_PlayerFloatSprite( centity_t *cent, qhandle_t shader )
|
||||||
ent.shaderRGBA[1] = 255;
|
ent.shaderRGBA[1] = 255;
|
||||||
ent.shaderRGBA[2] = 255;
|
ent.shaderRGBA[2] = 255;
|
||||||
ent.shaderRGBA[3] = 255;
|
ent.shaderRGBA[3] = 255;
|
||||||
|
|
||||||
|
if ( ci->boltNightvision == -1 )
|
||||||
|
{
|
||||||
|
ci->boltNightvision = trap_G2API_AddBolt( cent->ghoul2, 0, "*head_t" );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fall back to make sure its correct
|
||||||
|
if ( !G2_PositionEntityOnBolt ( &ent, cent->ghoul2, 0, ci->boltNightvision, cent->lerpOrigin, cent->pe.ghoulLegsAngles, cent->modelScale ) )
|
||||||
|
{
|
||||||
|
ci->boltNightvision = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ent.origin[2] += 15;
|
||||||
|
|
||||||
trap_R_AddRefEntityToScene( &ent );
|
trap_R_AddRefEntityToScene( &ent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,21 +874,12 @@ static void CG_UpdatePlayerAnimations ( centity_t* cent )
|
||||||
CG_PlayerGametypeItems
|
CG_PlayerGametypeItems
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
void CG_PlayerGametypeItems ( centity_t* cent, vec3_t angles )
|
void CG_PlayerGametypeItems ( centity_t* cent, vec3_t angles, int rf )
|
||||||
{
|
{
|
||||||
clientInfo_t *ci = &cgs.clientinfo[cent->currentState.clientNum];
|
clientInfo_t *ci = &cgs.clientinfo[cent->currentState.clientNum];
|
||||||
int i;
|
int i;
|
||||||
int rf;
|
|
||||||
|
|
||||||
if ( cent->currentState.number == cg.snap->ps.clientNum && !cg.renderingThirdPerson )
|
rf = rf & RF_THIRD_PERSON;
|
||||||
{
|
|
||||||
// only show in mirrors
|
|
||||||
rf = RF_THIRD_PERSON;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rf = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the player is wearing goggles then draw them on their head
|
// If the player is wearing goggles then draw them on their head
|
||||||
if ( cent->currentState.eFlags & EF_GOGGLES )
|
if ( cent->currentState.eFlags & EF_GOGGLES )
|
||||||
|
@ -924,7 +928,10 @@ void CG_PlayerGametypeItems ( centity_t* cent, vec3_t angles )
|
||||||
memset ( &item, 0, sizeof(item) );
|
memset ( &item, 0, sizeof(item) );
|
||||||
item.renderfx = rf | RF_MINLIGHT;
|
item.renderfx = rf | RF_MINLIGHT;
|
||||||
item.ghoul2 = cg_items[ MODELINDEX_GAMETYPE_ITEM + i ].boltModel;
|
item.ghoul2 = cg_items[ MODELINDEX_GAMETYPE_ITEM + i ].boltModel;
|
||||||
G2_PositionEntityOnBolt ( &item, cent->ghoul2, 0, ci->boltGametypeItems[i], cent->lerpOrigin, angles, cent->modelScale );
|
if ( !G2_PositionEntityOnBolt ( &item, cent->ghoul2, 0, ci->boltGametypeItems[i], cent->lerpOrigin, angles, cent->modelScale ) )
|
||||||
|
{
|
||||||
|
ci->boltGametypeItems[i] = -1;
|
||||||
|
}
|
||||||
trap_R_AddRefEntityToScene(&item);
|
trap_R_AddRefEntityToScene(&item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -959,7 +966,10 @@ void CG_UpdatePlayerWeaponModel ( centity_t* cent, qboolean force )
|
||||||
// If the weapon model hasnt changed then dont update it
|
// If the weapon model hasnt changed then dont update it
|
||||||
else if ( !force && cent->currentState.weapon == cent->pe.weapon )
|
else if ( !force && cent->currentState.weapon == cent->pe.weapon )
|
||||||
{
|
{
|
||||||
return;
|
if ( -1 != trap_G2API_GetBoltIndex ( cent->ghoul2, cent->pe.weaponModelSpot ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -972,7 +982,7 @@ void CG_UpdatePlayerWeaponModel ( centity_t* cent, qboolean force )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get rid of whats in their hand
|
// Get rid of whats in their hand
|
||||||
if ( cent->pe.weaponModelSpot )
|
if ( cent->pe.weaponModelSpot && cent->pe.weaponModelSpot != -1 )
|
||||||
{
|
{
|
||||||
trap_G2API_DetachG2Model ( cent->ghoul2, cent->pe.weaponModelSpot );
|
trap_G2API_DetachG2Model ( cent->ghoul2, cent->pe.weaponModelSpot );
|
||||||
trap_G2API_RemoveGhoul2Model( ¢->ghoul2, cent->pe.weaponModelSpot );
|
trap_G2API_RemoveGhoul2Model( ¢->ghoul2, cent->pe.weaponModelSpot );
|
||||||
|
@ -1211,7 +1221,7 @@ void CG_Player( centity_t *cent )
|
||||||
// Render any of the floating sprites above the players head
|
// Render any of the floating sprites above the players head
|
||||||
CG_PlayerSprites ( cent );
|
CG_PlayerSprites ( cent );
|
||||||
|
|
||||||
CG_PlayerGametypeItems ( cent, cent->pe.ghoulLegsAngles );
|
CG_PlayerGametypeItems ( cent, cent->pe.ghoulLegsAngles, renderfx );
|
||||||
|
|
||||||
VectorCopy ( save, cent->lerpOrigin );
|
VectorCopy ( save, cent->lerpOrigin );
|
||||||
}
|
}
|
||||||
|
@ -1225,6 +1235,11 @@ A player just came into view or teleported, so reset all animation info
|
||||||
*/
|
*/
|
||||||
void CG_ResetPlayerEntity( centity_t *cent )
|
void CG_ResetPlayerEntity( centity_t *cent )
|
||||||
{
|
{
|
||||||
|
clientInfo_t *ci;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ci = &cgs.clientinfo[cent->currentState.clientNum];
|
||||||
|
|
||||||
cent->errorTime = -99999; // guarantee no error decay added
|
cent->errorTime = -99999; // guarantee no error decay added
|
||||||
cent->extrapolated = qfalse;
|
cent->extrapolated = qfalse;
|
||||||
|
|
||||||
|
@ -1236,6 +1251,7 @@ void CG_ResetPlayerEntity( centity_t *cent )
|
||||||
|
|
||||||
cent->pe.legs.anim = -1;
|
cent->pe.legs.anim = -1;
|
||||||
cent->pe.torso.anim = -1;
|
cent->pe.torso.anim = -1;
|
||||||
|
cent->pe.weapon = -1;
|
||||||
|
|
||||||
memset( ¢->pe.legs, 0, sizeof( cent->pe.legs ) );
|
memset( ¢->pe.legs, 0, sizeof( cent->pe.legs ) );
|
||||||
cent->pe.legs.yawAngle = cent->rawAngles[YAW];
|
cent->pe.legs.yawAngle = cent->rawAngles[YAW];
|
||||||
|
@ -1248,6 +1264,12 @@ void CG_ResetPlayerEntity( centity_t *cent )
|
||||||
cent->pe.torso.yawing = qfalse;
|
cent->pe.torso.yawing = qfalse;
|
||||||
cent->pe.torso.pitchAngle = cent->rawAngles[PITCH];
|
cent->pe.torso.pitchAngle = cent->rawAngles[PITCH];
|
||||||
cent->pe.torso.pitching = qfalse;
|
cent->pe.torso.pitching = qfalse;
|
||||||
|
|
||||||
|
// Reset all bolt position
|
||||||
|
for ( i = 0; i < MAX_GAMETYPE_ITEMS; i ++ )
|
||||||
|
{
|
||||||
|
ci->boltGametypeItems[i] = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -226,7 +226,7 @@ void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look for a zoom transition that isnt the first zoom in
|
// Look for a zoom transition that isnt the first zoom in
|
||||||
if ( ops->zoomFov && (ps->zoomFov != ops->zoomFov) )
|
if ( weaponData[ops->weapon].zoom[ops->zoomFov].fov && (weaponData[ps->weapon].zoom[ps->zoomFov].fov != weaponData[ops->weapon].zoom[ops->zoomFov].fov) )
|
||||||
{
|
{
|
||||||
trap_S_StartLocalSound ( cgs.media.zoomSound, CHAN_AUTO );
|
trap_S_StartLocalSound ( cgs.media.zoomSound, CHAN_AUTO );
|
||||||
}
|
}
|
||||||
|
@ -252,6 +252,9 @@ void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops )
|
||||||
cg.thisFrameTeleport = qtrue;
|
cg.thisFrameTeleport = qtrue;
|
||||||
// make sure we don't get any unwanted transition effects
|
// make sure we don't get any unwanted transition effects
|
||||||
*ops = *ps;
|
*ops = *ps;
|
||||||
|
|
||||||
|
CG_SetWeaponAnim(ps->weaponAnimId&(~ANIM_TOGGLEBIT),ps);
|
||||||
|
CG_UpdateViewWeaponSurfaces ( ps );
|
||||||
}
|
}
|
||||||
|
|
||||||
// damage events (player is getting wounded)
|
// damage events (player is getting wounded)
|
||||||
|
|
|
@ -369,6 +369,7 @@ static void CG_TouchItem( centity_t *cent )
|
||||||
{
|
{
|
||||||
gitem_t *item;
|
gitem_t *item;
|
||||||
qboolean autoswitch = qfalse;
|
qboolean autoswitch = qfalse;
|
||||||
|
int eventID;
|
||||||
|
|
||||||
if ( !cg_predictItems.integer )
|
if ( !cg_predictItems.integer )
|
||||||
{
|
{
|
||||||
|
@ -413,8 +414,17 @@ static void CG_TouchItem( centity_t *cent )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( cg.predictedPlayerState.pm_flags & PMF_DUCKED )
|
||||||
|
{
|
||||||
|
eventID = EV_ITEM_PICKUP_QUIET;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventID = EV_ITEM_PICKUP;
|
||||||
|
}
|
||||||
|
|
||||||
// grab it
|
// grab it
|
||||||
BG_AddPredictableEventToPlayerstate( EV_ITEM_PICKUP, cent->currentState.modelindex|(autoswitch?ITEM_AUTOSWITCHBIT:0) , &cg.predictedPlayerState);
|
BG_AddPredictableEventToPlayerstate( eventID, cent->currentState.modelindex|(autoswitch?ITEM_AUTOSWITCHBIT:0) , &cg.predictedPlayerState);
|
||||||
|
|
||||||
// remove it from the frame so it won't be drawn
|
// remove it from the frame so it won't be drawn
|
||||||
cent->currentState.eFlags |= EF_NODRAW;
|
cent->currentState.eFlags |= EF_NODRAW;
|
||||||
|
|
|
@ -346,6 +346,9 @@ typedef enum
|
||||||
|
|
||||||
CG_VOICE_EVENT,
|
CG_VOICE_EVENT,
|
||||||
|
|
||||||
|
CG_GET_TEAM_COUNT,
|
||||||
|
CG_GET_TEAM_SCORE,
|
||||||
|
|
||||||
} cgameExport_t;
|
} cgameExport_t;
|
||||||
|
|
||||||
// CG_POINT_CONTENTS
|
// CG_POINT_CONTENTS
|
||||||
|
|
|
@ -90,6 +90,7 @@ void CG_ParseServerinfo( void )
|
||||||
cgs.timelimit = atoi( Info_ValueForKey( info, "timelimit" ) );
|
cgs.timelimit = atoi( Info_ValueForKey( info, "timelimit" ) );
|
||||||
cgs.maxclients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
|
cgs.maxclients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
|
||||||
cgs.friendlyFire = atoi( Info_ValueForKey( info, "g_friendlyFire" ) ) ? qtrue : qfalse;
|
cgs.friendlyFire = atoi( Info_ValueForKey( info, "g_friendlyFire" ) ) ? qtrue : qfalse;
|
||||||
|
cgs.punkbuster = atoi( Info_ValueForKey( info, "sv_punkbster" ) ) ? qtrue : qfalse;
|
||||||
mapname = Info_ValueForKey( info, "mapname" );
|
mapname = Info_ValueForKey( info, "mapname" );
|
||||||
Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname );
|
Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname );
|
||||||
|
|
||||||
|
@ -97,6 +98,7 @@ void CG_ParseServerinfo( void )
|
||||||
trap_Cvar_Set ( "ui_about_gametypename", cgs.gametypeData->displayName );
|
trap_Cvar_Set ( "ui_about_gametypename", cgs.gametypeData->displayName );
|
||||||
trap_Cvar_Set ( "ui_about_scorelimit", va("%i", cgs.scorelimit ) );
|
trap_Cvar_Set ( "ui_about_scorelimit", va("%i", cgs.scorelimit ) );
|
||||||
trap_Cvar_Set ( "ui_about_timelimit", va("%i", cgs.timelimit ) );
|
trap_Cvar_Set ( "ui_about_timelimit", va("%i", cgs.timelimit ) );
|
||||||
|
trap_Cvar_Set ( "ui_about_friendlyfire", va("%i", cgs.friendlyFire) );
|
||||||
trap_Cvar_Set ( "ui_about_maxclients", va("%i", cgs.maxclients ) );
|
trap_Cvar_Set ( "ui_about_maxclients", va("%i", cgs.maxclients ) );
|
||||||
trap_Cvar_Set ( "ui_about_dmflags", va("%i", cgs.dmflags ) );
|
trap_Cvar_Set ( "ui_about_dmflags", va("%i", cgs.dmflags ) );
|
||||||
trap_Cvar_Set ( "ui_about_mapname", mapname );
|
trap_Cvar_Set ( "ui_about_mapname", mapname );
|
||||||
|
|
|
@ -27,8 +27,6 @@ static void CG_ResetEntity( centity_t *cent )
|
||||||
{
|
{
|
||||||
CG_ResetPlayerEntity( cent );
|
CG_ResetPlayerEntity( cent );
|
||||||
}
|
}
|
||||||
|
|
||||||
cent->pe.weapon = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -588,7 +588,6 @@ static void CG_OffsetFirstPersonView( void )
|
||||||
float f;
|
float f;
|
||||||
vec3_t predictedVelocity;
|
vec3_t predictedVelocity;
|
||||||
int timeDelta;
|
int timeDelta;
|
||||||
vec3_t right;
|
|
||||||
|
|
||||||
if ( cg.snap->ps.pm_type == PM_INTERMISSION ) {
|
if ( cg.snap->ps.pm_type == PM_INTERMISSION ) {
|
||||||
return;
|
return;
|
||||||
|
@ -732,8 +731,8 @@ static void CG_OffsetFirstPersonView( void )
|
||||||
|
|
||||||
leanOffset = (float)(cg.predictedPlayerState.leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
leanOffset = (float)(cg.predictedPlayerState.leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
||||||
angles[ROLL] += leanOffset / 4;
|
angles[ROLL] += leanOffset / 4;
|
||||||
AngleVectors( cg.predictedPlayerState.viewangles, NULL, right, NULL );
|
|
||||||
VectorMA( origin, leanOffset, right, origin );
|
BG_ApplyLeanOffset ( &cg.predictedPlayerState, origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure view doesnt invert on itself
|
// Make sure view doesnt invert on itself
|
||||||
|
@ -856,7 +855,7 @@ static int CG_CalcFov( void ) {
|
||||||
|
|
||||||
if ( cg.predictedPlayerState.pm_flags & PMF_ZOOMED )
|
if ( cg.predictedPlayerState.pm_flags & PMF_ZOOMED )
|
||||||
{
|
{
|
||||||
zoomFov = (float)cg.predictedPlayerState.zoomFov;
|
zoomFov = (float)weaponData[cg.predictedPlayerState.weapon].zoom[cg.predictedPlayerState.zoomFov].fov;
|
||||||
|
|
||||||
if (!cg.predictedPlayerState.pm_flags & PMF_ZOOM_LOCKED )
|
if (!cg.predictedPlayerState.pm_flags & PMF_ZOOM_LOCKED )
|
||||||
{
|
{
|
||||||
|
@ -885,6 +884,8 @@ static int CG_CalcFov( void ) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
zoomFov = (float)weaponData[cg.predictedPlayerState.weapon].zoom[cg.predictedPlayerState.zoomFov].fov;
|
||||||
|
|
||||||
f = ( cg.time - cg.predictedPlayerState.zoomTime ) / ZOOM_OUT_TIME;
|
f = ( cg.time - cg.predictedPlayerState.zoomTime ) / ZOOM_OUT_TIME;
|
||||||
if ( f > 1.0 )
|
if ( f > 1.0 )
|
||||||
{
|
{
|
||||||
|
@ -892,7 +893,7 @@ static int CG_CalcFov( void ) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fov_x = cg.predictedPlayerState.zoomFov + f * ( fov_x - cg.predictedPlayerState.zoomFov );
|
fov_x = zoomFov + f * ( fov_x - zoomFov );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1285,7 +1286,14 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
|
||||||
}
|
}
|
||||||
else if ( cg.snap->ps.pm_flags & PMF_FOLLOW )
|
else if ( cg.snap->ps.pm_flags & PMF_FOLLOW )
|
||||||
{
|
{
|
||||||
cg.renderingThirdPerson = qtrue;
|
if ( cg.snap->ps.pm_flags & PMF_FOLLOWFIRST )
|
||||||
|
{
|
||||||
|
cg.renderingThirdPerson = qfalse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cg.renderingThirdPerson = qtrue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -382,6 +382,7 @@ void CG_UpdateViewWeaponSurfaces ( playerState_t* ps )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_M1911A1_PISTOL:
|
case WP_M1911A1_PISTOL:
|
||||||
|
case WP_SILVER_TALON:
|
||||||
case WP_USSOCOM_PISTOL:
|
case WP_USSOCOM_PISTOL:
|
||||||
{
|
{
|
||||||
int forward;
|
int forward;
|
||||||
|
@ -1000,7 +1001,7 @@ void CG_PredictedBullet ( centity_t* cent, attackType_t attack )
|
||||||
ent = ¢->currentState;
|
ent = ¢->currentState;
|
||||||
|
|
||||||
// Dont bother if antilag is turned off or its a projectile weapon
|
// Dont bother if antilag is turned off or its a projectile weapon
|
||||||
if ( cg_antiLag.integer < 1 || !cg_impactPrediction.integer || (weaponData[ent->weapon].attack[attack].weaponFlags & PROJECTILE_FIRE))
|
if ( cg_antiLag.integer < 1 || cg_synchronousClients.integer || !cg_impactPrediction.integer || (weaponData[ent->weapon].attack[attack].weaponFlags & PROJECTILE_FIRE))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1019,12 +1020,7 @@ void CG_PredictedBullet ( centity_t* cent, attackType_t attack )
|
||||||
VectorCopy(cg.predictedPlayerState.viewangles, fireAngs);
|
VectorCopy(cg.predictedPlayerState.viewangles, fireAngs);
|
||||||
if ( cg.predictedPlayerState.pm_flags & PMF_LEANING )
|
if ( cg.predictedPlayerState.pm_flags & PMF_LEANING )
|
||||||
{
|
{
|
||||||
vec3_t right;
|
BG_ApplyLeanOffset ( &cg.predictedPlayerState, start );
|
||||||
float leanOffset;
|
|
||||||
|
|
||||||
leanOffset = (float)(cg.predictedPlayerState.leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
|
||||||
AngleVectors( fireAngs, NULL, right, NULL );
|
|
||||||
VectorMA( start, leanOffset, right, start );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
seed = cg.predictedPlayerState.stats[STAT_SEED];
|
seed = cg.predictedPlayerState.stats[STAT_SEED];
|
||||||
|
@ -1778,7 +1774,7 @@ void CG_WeaponCallback ( playerState_t* ps, centity_t* cent, int weapon, int ani
|
||||||
{
|
{
|
||||||
// Play sound.
|
// Play sound.
|
||||||
// FIXME: randomly select sound??
|
// FIXME: randomly select sound??
|
||||||
trap_S_StartSound(NULL,ent->number,CHAN_WEAPON,weaponInfo->otherWeaponSounds[i][0], -1, -1);
|
trap_S_StartSound(NULL,ent->number,CHAN_AUTO,weaponInfo->otherWeaponSounds[i][0], -1, -1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||||
|
|
||||||
CFG=SoF2cgame - Win32 SH Debug SoF2
|
CFG=SoF2cgame - Win32 Release SoF2
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
!MESSAGE use the Export Makefile command and run
|
!MESSAGE use the Export Makefile command and run
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
@ -13,19 +13,16 @@ CFG=SoF2cgame - Win32 SH Debug SoF2
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "sof2_cgame.mak" CFG="SoF2cgame - Win32 SH Debug SoF2"
|
!MESSAGE NMAKE /f "sof2_cgame.mak" CFG="SoF2cgame - Win32 Release SoF2"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "SoF2cgame - Win32 Release SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "SoF2cgame - Win32 Release SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "SoF2cgame - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "SoF2cgame - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "SoF2cgame - Win32 SH Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
# PROP Scc_ProjName ""
|
|
||||||
# PROP Scc_LocalPath ""
|
|
||||||
CPP=cl.exe
|
CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
@ -88,562 +85,152 @@ LINK32=link.exe
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x30000000" /subsystem:windows /dll /map:"..\Debug\sof2mp_cgamex86.map" /debug /machine:I386 /def:".\SoF2_cgame.def" /out:"..\Debug\sof2mp_cgamex86.dll"
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x30000000" /subsystem:windows /dll /map:"..\Debug\sof2mp_cgamex86.map" /debug /machine:I386 /def:".\SoF2_cgame.def" /out:"..\Debug\sof2mp_cgamex86.dll"
|
||||||
# SUBTRACT LINK32 /pdb:none
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "SoF2cgame___Win32_SH_Debug_SoF2"
|
|
||||||
# PROP BASE Intermediate_Dir "SoF2cgame___Win32_SH_Debug_SoF2"
|
|
||||||
# PROP BASE Ignore_Export_Lib 0
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "SoF2cgame___Win32_SH_Debug_SoF2"
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /G5 /MTd /W4 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MISSIONPACK" /D "_SOF2" /FR /YX /FD /c
|
|
||||||
# ADD CPP /nologo /G5 /MTd /W4 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MISSIONPACK" /D "_SOF2" /D "MEM_DEBUG" /D "CGAME" /FR /YX /FD /c
|
|
||||||
# ADD BASE MTL /nologo /D "_Debug SoF2" /mktyplib203 /o "NUL" /win32
|
|
||||||
# ADD MTL /nologo /D "_Debug SoF2" /mktyplib203 /o "NUL" /win32
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_Debug SoF2"
|
|
||||||
# ADD RSC /l 0x409 /d "_Debug SoF2"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 /nologo /base:"0x30000000" /subsystem:windows /dll /map:"..\Debug\sof2mp_cgamex86.map" /debug /machine:I386 /def:".\SoF2_cgame.def" /out:"..\Debug\sof2mp_cgamex86.dll"
|
|
||||||
# SUBTRACT BASE LINK32 /pdb:none
|
|
||||||
# ADD LINK32 /nologo /base:"0x30000000" /subsystem:windows /dll /pdb:"..\SHDebug/sof2mp_cgamex86.pdb" /map:"..\SHDebug\sof2mp_cgamex86.map" /debug /machine:I386 /def:".\SoF2_cgame.def" /out:"..\SHDebug\sof2mp_cgamex86.dll"
|
|
||||||
# SUBTRACT LINK32 /pdb:none
|
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
# Name "SoF2cgame - Win32 Release SoF2"
|
# Name "SoF2cgame - Win32 Release SoF2"
|
||||||
# Name "SoF2cgame - Win32 Debug SoF2"
|
# Name "SoF2cgame - Win32 Debug SoF2"
|
||||||
# Name "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
# PROP Default_Filter "c"
|
# PROP Default_Filter "c"
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_gametype.c
|
SOURCE=..\game\bg_gametype.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_lib.c
|
SOURCE=..\game\bg_lib.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Exclude_From_Build 1
|
# PROP BASE Exclude_From_Build 1
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Exclude_From_Build 1
|
|
||||||
# PROP Exclude_From_Build 1
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Exclude_From_Build 1
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
# PROP Exclude_From_Build 1
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_misc.c
|
SOURCE=..\game\bg_misc.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_player.c
|
SOURCE=..\game\bg_player.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_pmove.c
|
SOURCE=..\game\bg_pmove.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_slidemove.c
|
SOURCE=..\game\bg_slidemove.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\bg_weapons.c
|
SOURCE=..\game\bg_weapons.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_consolecmds.c
|
SOURCE=.\cg_consolecmds.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_draw.c
|
SOURCE=.\cg_draw.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_drawtools.c
|
SOURCE=.\cg_drawtools.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_effects.c
|
SOURCE=.\cg_effects.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_ents.c
|
SOURCE=.\cg_ents.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_event.c
|
SOURCE=.\cg_event.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_gametype.c
|
SOURCE=.\cg_gametype.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_gore.c
|
SOURCE=.\cg_gore.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_info.c
|
SOURCE=.\cg_info.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_light.c
|
SOURCE=.\cg_light.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_localents.c
|
SOURCE=.\cg_localents.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_main.c
|
SOURCE=.\cg_main.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_miscents.c
|
SOURCE=.\cg_miscents.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_newDraw.c
|
SOURCE=.\cg_newDraw.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_players.c
|
SOURCE=.\cg_players.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_playerstate.c
|
SOURCE=.\cg_playerstate.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_predict.c
|
SOURCE=.\cg_predict.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_scoreboard.c
|
SOURCE=.\cg_scoreboard.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_servercmds.c
|
SOURCE=.\cg_servercmds.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_snapshot.c
|
SOURCE=.\cg_snapshot.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_syscalls.c
|
SOURCE=.\cg_syscalls.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_view.c
|
SOURCE=.\cg_view.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_weaponinit.c
|
SOURCE=.\cg_weaponinit.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\cg_weapons.c
|
SOURCE=.\cg_weapons.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\q_math.c
|
SOURCE=..\game\q_math.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\game\q_shared.c
|
SOURCE=..\game\q_shared.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\ui\ui_shared.c
|
SOURCE=..\ui\ui_shared.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2cgame - Win32 Release SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 Debug SoF2"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\SoF2cgame"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Header Files"
|
# Begin Group "Header Files"
|
||||||
|
@ -679,10 +266,18 @@ SOURCE=.\cg_public.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\cg_was.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\qcommon\disablewarnings.h
|
SOURCE=..\qcommon\disablewarnings.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\fx_local.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\ghoul2\G2.h
|
SOURCE=..\ghoul2\G2.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -748,11 +343,6 @@ SOURCE=.\SoF2_cgame.def
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2cgame - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Exclude_From_Build 1
|
|
||||||
# PROP Exclude_From_Build 1
|
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
|
|
|
@ -726,6 +726,7 @@ int BotAISetupClient(int client, struct bot_settings_s *settings, qboolean resta
|
||||||
bs->botWeaponWeights[WP_NONE] = 0;
|
bs->botWeaponWeights[WP_NONE] = 0;
|
||||||
bs->botWeaponWeights[WP_KNIFE] = 1;
|
bs->botWeaponWeights[WP_KNIFE] = 1;
|
||||||
bs->botWeaponWeights[WP_M1911A1_PISTOL] = 3;
|
bs->botWeaponWeights[WP_M1911A1_PISTOL] = 3;
|
||||||
|
bs->botWeaponWeights[WP_SILVER_TALON] = 4;
|
||||||
bs->botWeaponWeights[WP_USSOCOM_PISTOL] = 2;
|
bs->botWeaponWeights[WP_USSOCOM_PISTOL] = 2;
|
||||||
bs->botWeaponWeights[WP_M4_ASSAULT_RIFLE] = 10;
|
bs->botWeaponWeights[WP_M4_ASSAULT_RIFLE] = 10;
|
||||||
bs->botWeaponWeights[WP_AK74_ASSAULT_RIFLE] = 9;
|
bs->botWeaponWeights[WP_AK74_ASSAULT_RIFLE] = 9;
|
||||||
|
@ -742,6 +743,7 @@ int BotAISetupClient(int client, struct bot_settings_s *settings, qboolean resta
|
||||||
bs->botWeaponWeights[WP_ANM14_GRENADE] = 2;
|
bs->botWeaponWeights[WP_ANM14_GRENADE] = 2;
|
||||||
bs->botWeaponWeights[WP_M15_GRENADE] = 2;
|
bs->botWeaponWeights[WP_M15_GRENADE] = 2;
|
||||||
bs->botWeaponWeights[WP_MP5] = 7;
|
bs->botWeaponWeights[WP_MP5] = 7;
|
||||||
|
bs->botWeaponWeights[WP_SIG551] = 7;
|
||||||
|
|
||||||
BotUtilizePersonality(bs);
|
BotUtilizePersonality(bs);
|
||||||
|
|
||||||
|
@ -3489,6 +3491,7 @@ float BotWeaponCanLead(bot_state_t *bs)
|
||||||
|
|
||||||
// no leading needed for any bullet weapons
|
// no leading needed for any bullet weapons
|
||||||
case WP_M1911A1_PISTOL:
|
case WP_M1911A1_PISTOL:
|
||||||
|
case WP_SILVER_TALON:
|
||||||
case WP_USSOCOM_PISTOL:
|
case WP_USSOCOM_PISTOL:
|
||||||
case WP_M4_ASSAULT_RIFLE:
|
case WP_M4_ASSAULT_RIFLE:
|
||||||
case WP_AK74_ASSAULT_RIFLE:
|
case WP_AK74_ASSAULT_RIFLE:
|
||||||
|
@ -3496,6 +3499,7 @@ float BotWeaponCanLead(bot_state_t *bs)
|
||||||
case WP_MICRO_UZI_SUBMACHINEGUN:
|
case WP_MICRO_UZI_SUBMACHINEGUN:
|
||||||
case WP_M3A1_SUBMACHINEGUN:
|
case WP_M3A1_SUBMACHINEGUN:
|
||||||
case WP_MP5:
|
case WP_MP5:
|
||||||
|
case WP_SIG551:
|
||||||
case WP_MSG90A1:
|
case WP_MSG90A1:
|
||||||
case WP_USAS_12_SHOTGUN:
|
case WP_USAS_12_SHOTGUN:
|
||||||
case WP_M590_SHOTGUN:
|
case WP_M590_SHOTGUN:
|
||||||
|
|
|
@ -1353,6 +1353,7 @@ float botGlobalNavWeaponWeights[WP_NUM_WEAPONS] =
|
||||||
6,//WP_M15_GRENADE,
|
6,//WP_M15_GRENADE,
|
||||||
|
|
||||||
6,//WP_MP5
|
6,//WP_MP5
|
||||||
|
6,//WP_SIG551
|
||||||
};
|
};
|
||||||
|
|
||||||
int GetNearestVisibleWPToItem(vec3_t org, int ignore)
|
int GetNearestVisibleWPToItem(vec3_t org, int ignore)
|
||||||
|
|
|
@ -223,6 +223,27 @@ Pistol, uses 45 rounds
|
||||||
OUTFITTING_GROUP_PISTOL,
|
OUTFITTING_GROUP_PISTOL,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/*QUAKED pickup_weapon_silvertalon (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
|
Pistol, uses 45 rounds
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"pickup_weapon_silvertalon",
|
||||||
|
"sound/player/pickup/weapon.wav",
|
||||||
|
{ "models/weapons/silver_talon/world/silver_talonworld.glm",
|
||||||
|
0, 0, 0},
|
||||||
|
/* icon */ "gfx/menus/hud/weapon_icons/silver_talonicon",
|
||||||
|
"*gfx/menus/weapon_renders/silver_talon",
|
||||||
|
"a",
|
||||||
|
/* pickup */ "Silver Talon",
|
||||||
|
7,
|
||||||
|
IT_WEAPON,
|
||||||
|
WP_SILVER_TALON,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ "",
|
||||||
|
|
||||||
|
OUTFITTING_GROUP_PISTOL,
|
||||||
|
},
|
||||||
|
|
||||||
/*QUAKED pickup_weapon_microuzi (0 .6 .6) (-15 -15 -15) (15 15 15)
|
/*QUAKED pickup_weapon_microuzi (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
Sub-Machinegun, uses 9mm rounds
|
Sub-Machinegun, uses 9mm rounds
|
||||||
*/
|
*/
|
||||||
|
@ -265,6 +286,27 @@ Sub-Machinegun, uses 45 rounds
|
||||||
OUTFITTING_GROUP_SECONDARY,
|
OUTFITTING_GROUP_SECONDARY,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/*QUAKED pickup_weapon_MP5 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
|
Sub-Machinegun, uses 9mm rounds
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"pickup_weapon_MP5",
|
||||||
|
"sound/player/pickup/weapon.wav",
|
||||||
|
{ "models/weapons/mp5/world/mp5world.glm",
|
||||||
|
0, 0, 0},
|
||||||
|
/* icon */ "gfx/menus/hud/weapon_icons/mp5_icon",
|
||||||
|
"gfx/menus/weapon_renders/mp5",
|
||||||
|
"a",
|
||||||
|
/* pickup */ "MP5 Sub-machinegun",
|
||||||
|
30,
|
||||||
|
IT_WEAPON,
|
||||||
|
WP_MP5,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ "",
|
||||||
|
|
||||||
|
OUTFITTING_GROUP_PRIMARY,
|
||||||
|
},
|
||||||
|
|
||||||
/*QUAKED pickup_weapon_USAS_12 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
/*QUAKED pickup_weapon_USAS_12 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
Shotgun, uses 12-gauge rounds
|
Shotgun, uses 12-gauge rounds
|
||||||
ammo ---------- amount of ammo (defaults to 10)
|
ammo ---------- amount of ammo (defaults to 10)
|
||||||
|
@ -371,6 +413,27 @@ Assault Rifle, uses 5.56 rounds
|
||||||
OUTFITTING_GROUP_PRIMARY,
|
OUTFITTING_GROUP_PRIMARY,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/*QUAKED pickup_weapon_SIG551 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
|
Assault Rifle, uses 5.56 rounds
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"pickup_weapon_SIG551",
|
||||||
|
"sound/player/pickup/weapon.wav",
|
||||||
|
{ "models/weapons/sig551/world/sig551world.glm",
|
||||||
|
0, 0, 0},
|
||||||
|
/* icon */ "gfx/menus/hud/weapon_icons/sig551_icon",
|
||||||
|
"gfx/menus/weapon_renders/sig551",
|
||||||
|
"an",
|
||||||
|
/* pickup */ "SIG551 Assault",
|
||||||
|
30,
|
||||||
|
IT_WEAPON,
|
||||||
|
WP_SIG551,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ "",
|
||||||
|
|
||||||
|
OUTFITTING_GROUP_PRIMARY,
|
||||||
|
},
|
||||||
|
|
||||||
/*QUAKED pickup_weapon_M60 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
/*QUAKED pickup_weapon_M60 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
||||||
Machinegun, uses 7.62 rounds
|
Machinegun, uses 7.62 rounds
|
||||||
*/
|
*/
|
||||||
|
@ -518,27 +581,6 @@ White Phosphorus Grenade
|
||||||
OUTFITTING_GROUP_GRENADE,
|
OUTFITTING_GROUP_GRENADE,
|
||||||
},
|
},
|
||||||
|
|
||||||
/*QUAKED pickup_weapon_MP5 (0 .6 .6) (-15 -15 -15) (15 15 15)
|
|
||||||
Sub-Machinegun, uses 9mm rounds
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
"pickup_weapon_MP5",
|
|
||||||
"sound/player/pickup/weapon.wav",
|
|
||||||
{ "models/weapons/mp5/world/mp5world.glm",
|
|
||||||
0, 0, 0},
|
|
||||||
/* icon */ "gfx/menus/hud/weapon_icons/mp5_icon",
|
|
||||||
"gfx/menus/weapon_renders/mp5",
|
|
||||||
"a",
|
|
||||||
/* pickup */ "MP5 Sub-machinegun",
|
|
||||||
30,
|
|
||||||
IT_WEAPON,
|
|
||||||
WP_MP5,
|
|
||||||
/* precache */ "",
|
|
||||||
/* sounds */ "",
|
|
||||||
|
|
||||||
OUTFITTING_GROUP_PRIMARY,
|
|
||||||
},
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// AMMO ITEMS
|
// AMMO ITEMS
|
||||||
//
|
//
|
||||||
|
|
|
@ -36,11 +36,11 @@ char bg_availableOutfitting[WP_NUM_WEAPONS] = {-1};
|
||||||
|
|
||||||
int bg_outfittingGroups[OUTFITTING_GROUP_MAX][MAX_OUTFITTING_GROUPITEM] =
|
int bg_outfittingGroups[OUTFITTING_GROUP_MAX][MAX_OUTFITTING_GROUPITEM] =
|
||||||
{
|
{
|
||||||
{ MODELINDEX_WEAPON_AK74, MODELINDEX_WEAPON_M4, MODELINDEX_WEAPON_USAS12, MODELINDEX_WEAPON_MSG90A1, MODELINDEX_WEAPON_M60, MODELINDEX_WEAPON_MP5, MODELINDEX_WEAPON_RPG7, MODELINDEX_WEAPON_MM1, -1, -1 },
|
{ MODELINDEX_WEAPON_AK74, MODELINDEX_WEAPON_M4, MODELINDEX_WEAPON_SIG551, MODELINDEX_WEAPON_USAS12, MODELINDEX_WEAPON_MSG90A1, MODELINDEX_WEAPON_M60, MODELINDEX_WEAPON_MP5, MODELINDEX_WEAPON_RPG7, MODELINDEX_WEAPON_MM1, -1, -1, -1 },
|
||||||
{ MODELINDEX_WEAPON_M590, MODELINDEX_WEAPON_MICROUZI, MODELINDEX_WEAPON_M3A1, -1, -1, -1, -1, -1, -1, - 1 },
|
{ MODELINDEX_WEAPON_M590, MODELINDEX_WEAPON_MICROUZI, MODELINDEX_WEAPON_M3A1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
||||||
{ MODELINDEX_WEAPON_M19, MODELINDEX_WEAPON_SOCOM, -1, -1, -1, -1, -1, -1, -1, -1 },
|
{ MODELINDEX_WEAPON_M19, MODELINDEX_WEAPON_SOCOM, MODELINDEX_WEAPON_SILVERTALON, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
||||||
{ MODELINDEX_WEAPON_SMOHG92, MODELINDEX_WEAPON_M84, MODELINDEX_WEAPON_M15, MODELINDEX_WEAPON_ANM14, -1, -1, -1, -1, -1, -1 },
|
{ MODELINDEX_WEAPON_SMOHG92, MODELINDEX_WEAPON_M84, MODELINDEX_WEAPON_M15, MODELINDEX_WEAPON_ANM14, -1, -1, -1, -1, -1, -1, -1, -1 },
|
||||||
{ MODELINDEX_ARMOR, MODELINDEX_NIGHTVISION, MODELINDEX_THERMAL, -1, -1, -1, -1, -1, -1, -1 },
|
{ MODELINDEX_ARMOR, MODELINDEX_NIGHTVISION, MODELINDEX_THERMAL, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1743,4 +1743,21 @@ int BG_ParseOutfittingTemplates ( qboolean force )
|
||||||
return bg_outfittingCount;
|
return bg_outfittingCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================
|
||||||
|
BG_ApplyLeanOffset
|
||||||
|
|
||||||
|
Applies the given lean offset to the origin
|
||||||
|
========================
|
||||||
|
*/
|
||||||
|
void BG_ApplyLeanOffset ( playerState_t* ps, vec3_t origin )
|
||||||
|
{
|
||||||
|
float leanOffset;
|
||||||
|
vec3_t up;
|
||||||
|
vec3_t right;
|
||||||
|
|
||||||
|
leanOffset = (float)(ps->leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
||||||
|
AngleVectors( ps->viewangles, NULL, right, up);
|
||||||
|
VectorMA( origin, leanOffset, right, origin );
|
||||||
|
VectorMA( origin, Q_fabs(leanOffset) * -0.20f, up, origin );
|
||||||
|
}
|
||||||
|
|
|
@ -1197,7 +1197,7 @@ static void PM_CrashLand( int impactMaterial, vec3_t impactNormal )
|
||||||
pm->ps->velocity[0] *= 0.25f;
|
pm->ps->velocity[0] *= 0.25f;
|
||||||
pm->ps->velocity[1] *= 0.25f;
|
pm->ps->velocity[1] *= 0.25f;
|
||||||
|
|
||||||
pm->ps->pm_time = 500;
|
pm->ps->pm_time = 750;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a local entity event to play the sound
|
// create a local entity event to play the sound
|
||||||
|
@ -2382,7 +2382,7 @@ static void PM_FinishWeaponChange( void )
|
||||||
|
|
||||||
PM_HandleWeaponAction(WACT_READY);
|
PM_HandleWeaponAction(WACT_READY);
|
||||||
|
|
||||||
pm->ps->weaponTime = min(500,pm->ps->weaponTime);
|
pm->ps->weaponTime = min(150,pm->ps->weaponTime);
|
||||||
|
|
||||||
PM_StartTorsoAnim( pm->ps, weaponData[pm->ps->weapon].animRaise, pm->ps->weaponAnimTime );
|
PM_StartTorsoAnim( pm->ps, weaponData[pm->ps->weapon].animRaise, pm->ps->weaponAnimTime );
|
||||||
}
|
}
|
||||||
|
@ -2500,6 +2500,24 @@ int PM_GetAttackButtons(void)
|
||||||
pm->ps->pm_debounce &= ~PMD_FIREMODE;
|
pm->ps->pm_debounce &= ~PMD_FIREMODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As soon as the button is released you are ok to press attack again
|
||||||
|
if ( pm->ps->pm_debounce & PMD_ATTACK )
|
||||||
|
{
|
||||||
|
if ( !(buttons & BUTTON_ATTACK) )
|
||||||
|
{
|
||||||
|
pm->ps->pm_debounce &= ~(PMD_ATTACK);
|
||||||
|
}
|
||||||
|
else if ( pm->ps->firemode[pm->ps->weapon] != WP_FIREMODE_AUTO )
|
||||||
|
{
|
||||||
|
buttons &= ~BUTTON_ATTACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pm->ps->stats[STAT_FROZEN] )
|
||||||
|
{
|
||||||
|
buttons &= ~BUTTON_ATTACK;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle firebutton in varous firemodes.
|
// Handle firebutton in varous firemodes.
|
||||||
switch( pm->ps->firemode[pm->ps->weapon] )
|
switch( pm->ps->firemode[pm->ps->weapon] )
|
||||||
{
|
{
|
||||||
|
@ -2507,26 +2525,16 @@ int PM_GetAttackButtons(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_FIREMODE_BURST:
|
case WP_FIREMODE_BURST:
|
||||||
|
|
||||||
// Debounce attack button and disable other buttons during burst fire.
|
// Debounce attack button and disable other buttons during burst fire.
|
||||||
if(buttons&BUTTON_ATTACK)
|
if(buttons&BUTTON_ATTACK)
|
||||||
{
|
{
|
||||||
if( !(pm->ps->pm_debounce & PMD_ATTACK))
|
if(!pm->ps->weaponFireBurstCount)
|
||||||
{
|
{
|
||||||
pm->ps->pm_debounce |= PMD_ATTACK;
|
pm->ps->weaponFireBurstCount=3;
|
||||||
if(!pm->ps->weaponFireBurstCount)
|
|
||||||
{
|
|
||||||
pm->ps->weaponFireBurstCount=3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buttons &= ~BUTTON_ATTACK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
pm->ps->pm_debounce &= ~PMD_ATTACK;
|
|
||||||
}
|
|
||||||
if(pm->ps->weaponFireBurstCount)
|
if(pm->ps->weaponFireBurstCount)
|
||||||
{
|
{
|
||||||
buttons|=BUTTON_ATTACK;
|
buttons|=BUTTON_ATTACK;
|
||||||
|
@ -2539,23 +2547,6 @@ int PM_GetAttackButtons(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_FIREMODE_SINGLE:
|
case WP_FIREMODE_SINGLE:
|
||||||
// Debounce attack button.
|
|
||||||
if(buttons&BUTTON_ATTACK)
|
|
||||||
{
|
|
||||||
if(!(pm->ps->pm_debounce & PMD_ATTACK))
|
|
||||||
{
|
|
||||||
pm->ps->pm_debounce |= PMD_ATTACK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buttons&=~BUTTON_ATTACK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pm->ps->pm_debounce &= ~PMD_ATTACK;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2598,15 +2589,19 @@ static void PM_Weapon_AddInaccuracy( attackType_t attack )
|
||||||
// Zoomed sniper weapons don't add innacuracy if ont hte ground
|
// Zoomed sniper weapons don't add innacuracy if ont hte ground
|
||||||
if( (pm->ps->pm_flags & PMF_ZOOMED) && pml.groundPlane )
|
if( (pm->ps->pm_flags & PMF_ZOOMED) && pml.groundPlane )
|
||||||
{
|
{
|
||||||
return;
|
pm->ps->inaccuracy += weaponData[pm->ps->weapon].attack[attack].zoomInaccuracy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pm->ps->inaccuracy += weaponData[pm->ps->weapon].attack[attack].inaccuracy;
|
||||||
}
|
}
|
||||||
|
|
||||||
pm->ps->inaccuracy += weaponData[pm->ps->weapon].attack[attack].inaccuracy;
|
|
||||||
|
|
||||||
pm->ps->inaccuracyTime = RECOVER_TIME;
|
pm->ps->inaccuracyTime = RECOVER_TIME;
|
||||||
|
|
||||||
if ( pm->ps->inaccuracy > weaponData[pm->ps->weapon].attack[attack].maxInaccuracy )
|
if ( pm->ps->inaccuracy > weaponData[pm->ps->weapon].attack[attack].maxInaccuracy )
|
||||||
|
{
|
||||||
pm->ps->inaccuracy = weaponData[pm->ps->weapon].attack[attack].maxInaccuracy;
|
pm->ps->inaccuracy = weaponData[pm->ps->weapon].attack[attack].maxInaccuracy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2948,11 +2943,6 @@ static void PM_Weapon( void )
|
||||||
if( pm->ps->weaponstate == WEAPON_ZOOMIN )
|
if( pm->ps->weaponstate == WEAPON_ZOOMIN )
|
||||||
{
|
{
|
||||||
// The zoomfov may still be remembered from a reload while zooming
|
// The zoomfov may still be remembered from a reload while zooming
|
||||||
if ( !pm->ps->zoomFov )
|
|
||||||
{
|
|
||||||
pm->ps->zoomFov = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
pm->ps->pm_flags |= PMF_ZOOMED;
|
pm->ps->pm_flags |= PMF_ZOOMED;
|
||||||
pm->ps->pm_flags |= PMF_ZOOM_LOCKED;
|
pm->ps->pm_flags |= PMF_ZOOM_LOCKED;
|
||||||
pm->ps->pm_flags &= ~PMF_ZOOM_REZOOM;
|
pm->ps->pm_flags &= ~PMF_ZOOM_REZOOM;
|
||||||
|
@ -3026,6 +3016,7 @@ static void PM_Weapon( void )
|
||||||
pm->ps->weaponstate=WEAPON_READY;
|
pm->ps->weaponstate=WEAPON_READY;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3116,7 +3107,7 @@ static void PM_Weapon( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle zooming in/out for sniper rifle.
|
// Handle zooming in/out for sniper rifle.
|
||||||
if(pm->ps->weapon==WP_MSG90A1)
|
if( weaponData[pm->ps->weapon].zoom[0].fov )
|
||||||
{
|
{
|
||||||
if( (attackButtons&BUTTON_ALT_ATTACK) || (pm->ps->pm_flags & PMF_ZOOM_REZOOM) )
|
if( (attackButtons&BUTTON_ALT_ATTACK) || (pm->ps->pm_flags & PMF_ZOOM_REZOOM) )
|
||||||
{
|
{
|
||||||
|
@ -3134,22 +3125,20 @@ static void PM_Weapon( void )
|
||||||
{
|
{
|
||||||
if(pm->cmd.buttons&BUTTON_ZOOMIN)
|
if(pm->cmd.buttons&BUTTON_ZOOMIN)
|
||||||
{
|
{
|
||||||
pm->ps->zoomFov = pm->ps->zoomFov >> 1;
|
if ( pm->ps->zoomFov + 1 < ZOOMLEVEL_MAX && weaponData[pm->ps->weapon].zoom[pm->ps->zoomFov+1].fov )
|
||||||
if ( pm->ps->zoomFov < 5)
|
{
|
||||||
{
|
pm->ps->zoomFov++;
|
||||||
pm->ps->zoomFov = 5;
|
pm->ps->weaponTime=175;
|
||||||
}
|
}
|
||||||
pm->ps->weaponTime=175;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(pm->cmd.buttons&BUTTON_ZOOMOUT)
|
else if(pm->cmd.buttons&BUTTON_ZOOMOUT)
|
||||||
{
|
{
|
||||||
pm->ps->zoomFov = pm->ps->zoomFov << 1;
|
if ( pm->ps->zoomFov > 0 )
|
||||||
if(pm->ps->zoomFov > 20 )
|
|
||||||
{
|
{
|
||||||
pm->ps->zoomFov = 20;
|
pm->ps->zoomFov--;
|
||||||
|
pm->ps->weaponTime=175;
|
||||||
}
|
}
|
||||||
pm->ps->weaponTime=175;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3263,6 +3252,8 @@ static void PM_Weapon( void )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pm->ps->pm_debounce |= PMD_ATTACK;
|
||||||
|
|
||||||
// Decrease the ammo
|
// Decrease the ammo
|
||||||
(*ammoSource) -= attackData->fireAmount;
|
(*ammoSource) -= attackData->fireAmount;
|
||||||
|
|
||||||
|
@ -3408,10 +3399,9 @@ static void PM_CheckLean( void )
|
||||||
|
|
||||||
// check for collision
|
// check for collision
|
||||||
VectorCopy( pm->ps->origin, start );
|
VectorCopy( pm->ps->origin, start );
|
||||||
start[2] += pm->ps->viewheight;
|
|
||||||
AngleVectors( pm->ps->viewangles, NULL, right, NULL );
|
AngleVectors( pm->ps->viewangles, NULL, right, NULL );
|
||||||
VectorSet( mins, -6, -6, -8 );
|
VectorSet( mins, -6, -6, -20 );
|
||||||
VectorSet( maxs, 6, 6, 8 );
|
VectorSet( maxs, 6, 6, 20 );
|
||||||
|
|
||||||
// since we're moving the camera over
|
// since we're moving the camera over
|
||||||
// check that move
|
// check that move
|
||||||
|
@ -3877,13 +3867,8 @@ void PM_UpdatePVSOrigin ( pmove_t *pmove )
|
||||||
// Set a pm flag for leaning and calculate the view origin for the lean
|
// Set a pm flag for leaning and calculate the view origin for the lean
|
||||||
if ( pm->ps->leanTime - LEAN_TIME != 0 )
|
if ( pm->ps->leanTime - LEAN_TIME != 0 )
|
||||||
{
|
{
|
||||||
vec3_t right;
|
VectorCopy ( pm->ps->origin, pm->ps->pvsOrigin );
|
||||||
float leanOffset;
|
BG_ApplyLeanOffset ( pm->ps, pm->ps->pvsOrigin );
|
||||||
|
|
||||||
leanOffset = (float)(pm->ps->leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
|
||||||
|
|
||||||
AngleVectors( pm->ps->viewangles, NULL, right, NULL );
|
|
||||||
VectorMA( pm->ps->origin, leanOffset, right, pm->ps->pvsOrigin );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,10 +12,36 @@
|
||||||
#include "../../ui/menudef.h"
|
#include "../../ui/menudef.h"
|
||||||
#include "inv.h"
|
#include "inv.h"
|
||||||
|
|
||||||
|
//#define GAME_VERSION "sof2mp-0.01" sent on 11/26/2001
|
||||||
|
//#define GAME_VERSION "sof2mp-0.02" sent on 12/10/2001
|
||||||
|
//#define GAME_VERSION "sof2mp-0.03" sent on 12/16/2001
|
||||||
|
//#define GAME_VERSION "sof2mp-0.081" sent on 1/15/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.09" sent on 1/24/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.10" sent on 1/31/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.11" sent on 2/7/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.12" sent on 2/14/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.13" sent on 2/21/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.13b" public beta #1 on 3/1/3002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.14" sent on 3/4/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.15" sent on 3/11/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.15b" public beta #2 on 3/13/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.16" sent on 3/18/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.16b" public beta #3 on 3/20/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.17" sent on 3/24/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-1.01t" sent on 3/28/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.18" sent on 4/1/2002 - April Fools!
|
||||||
|
//#define GAME_VERSION "sof2mp-1.02t" sent on 4/5/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.19" sent on 4/8/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-0.20" sent on 4/15/2002 - Tax Day!
|
||||||
|
//#define GAME_VERSION "sof2mp-0.21" sent on 4/22/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-1.00.22" sent on 4/26/2002
|
||||||
|
//#define GAME_VERSION "sof2mp-1.00.23" sent on 4/27/2002
|
||||||
#ifdef GERMAN_BUILD
|
#ifdef GERMAN_BUILD
|
||||||
#define GAME_VERSION "sof2mp-mod-1.01g"
|
// #define GAME_VERSION "sof2mp-1.00g"
|
||||||
|
#define GAME_VERSION "sof2mp-1.02g"
|
||||||
#else
|
#else
|
||||||
#define GAME_VERSION "sof2mp-mod-1.01"
|
// #define GAME_VERSION "sof2mp-1.00"
|
||||||
|
#define GAME_VERSION "sof2mp-1.02"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_GRAVITY 800
|
#define DEFAULT_GRAVITY 800
|
||||||
|
@ -36,12 +62,12 @@
|
||||||
#define SCORE_NOT_PRESENT -9999 // for the CS_SCORES[12] when only one player is present
|
#define SCORE_NOT_PRESENT -9999 // for the CS_SCORES[12] when only one player is present
|
||||||
|
|
||||||
#define DEFAULT_PLAYER_Z_MAX 43
|
#define DEFAULT_PLAYER_Z_MAX 43
|
||||||
#define CROUCH_PLAYER_Z_MAX 26
|
#define CROUCH_PLAYER_Z_MAX 18
|
||||||
#define PRONE_PLAYER_Z_MAX -12
|
#define PRONE_PLAYER_Z_MAX -12
|
||||||
#define DEAD_PLAYER_Z_MAX -30
|
#define DEAD_PLAYER_Z_MAX -30
|
||||||
|
|
||||||
#define DUCK_ACCURACY_MODIFIER 0.75f
|
#define DUCK_ACCURACY_MODIFIER 0.75f
|
||||||
#define JUMP_ACCURACY_MODIFIER 1.5f
|
#define JUMP_ACCURACY_MODIFIER 2.0f
|
||||||
|
|
||||||
#define MINS_Z -46
|
#define MINS_Z -46
|
||||||
|
|
||||||
|
@ -325,6 +351,7 @@ typedef struct ladder_s
|
||||||
// changes so a restart of the same anim can be detected
|
// changes so a restart of the same anim can be detected
|
||||||
#define ANIM_TOGGLEBIT 2048 // Note that there are 12 bits (max 4095) for animations.
|
#define ANIM_TOGGLEBIT 2048 // Note that there are 12 bits (max 4095) for animations.
|
||||||
#define ITEM_AUTOSWITCHBIT (1<<31)
|
#define ITEM_AUTOSWITCHBIT (1<<31)
|
||||||
|
#define ITEM_QUIETPICKUP (1<<30)
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -382,6 +409,7 @@ typedef enum {
|
||||||
#define PMF_AUTORELOAD 0x00400000 // autoreloading enabled
|
#define PMF_AUTORELOAD 0x00400000 // autoreloading enabled
|
||||||
|
|
||||||
#define PMF_SIAMESETWINS 0x00800000
|
#define PMF_SIAMESETWINS 0x00800000
|
||||||
|
#define PMF_FOLLOWFIRST 0x01000000 // First person following
|
||||||
|
|
||||||
#define PMF_ALL_TIMES (PMF_TIME_WATERJUMP|PMF_TIME_LAND|PMF_TIME_KNOCKBACK)
|
#define PMF_ALL_TIMES (PMF_TIME_WATERJUMP|PMF_TIME_LAND|PMF_TIME_KNOCKBACK)
|
||||||
#define PMF_ZOOM_FLAGS (PMF_ZOOMED|PMF_ZOOM_LOCKED|PMF_ZOOM_REZOOM|PMF_ZOOM_DEFER_RELOAD)
|
#define PMF_ZOOM_FLAGS (PMF_ZOOMED|PMF_ZOOM_LOCKED|PMF_ZOOM_REZOOM|PMF_ZOOM_DEFER_RELOAD)
|
||||||
|
@ -503,6 +531,9 @@ typedef enum
|
||||||
PERS_RED_SCORE, // Blue team score
|
PERS_RED_SCORE, // Blue team score
|
||||||
PERS_BLUE_SCORE, // red team score
|
PERS_BLUE_SCORE, // red team score
|
||||||
|
|
||||||
|
PERS_RED_ALIVE_COUNT, // number of alive people on the red team
|
||||||
|
PERS_BLUE_ALIVE_COUNT, // number of alive people on the blue team
|
||||||
|
|
||||||
} persEnum_t;
|
} persEnum_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -591,6 +622,7 @@ typedef enum
|
||||||
EV_WATER_CLEAR,
|
EV_WATER_CLEAR,
|
||||||
|
|
||||||
EV_ITEM_PICKUP, // normal item pickups are predictable
|
EV_ITEM_PICKUP, // normal item pickups are predictable
|
||||||
|
EV_ITEM_PICKUP_QUIET, // quiet pickup
|
||||||
|
|
||||||
EV_NOAMMO,
|
EV_NOAMMO,
|
||||||
EV_CHANGE_WEAPON,
|
EV_CHANGE_WEAPON,
|
||||||
|
@ -1018,7 +1050,7 @@ typedef struct SSkinTemplate
|
||||||
#define MAX_MODEL_SOUNDS 8
|
#define MAX_MODEL_SOUNDS 8
|
||||||
#define MAX_IDENTITIES 256
|
#define MAX_IDENTITIES 256
|
||||||
#define MAX_OUTFITTINGS 64
|
#define MAX_OUTFITTINGS 64
|
||||||
#define MAX_OUTFITTING_GROUPITEM 10
|
#define MAX_OUTFITTING_GROUPITEM 12
|
||||||
|
|
||||||
typedef struct SModelSounds
|
typedef struct SModelSounds
|
||||||
{
|
{
|
||||||
|
@ -1064,7 +1096,7 @@ extern TIdentity bg_identities[];
|
||||||
extern int bg_identityCount;
|
extern int bg_identityCount;
|
||||||
extern goutfitting_t bg_outfittings[];
|
extern goutfitting_t bg_outfittings[];
|
||||||
extern int bg_outfittingCount;
|
extern int bg_outfittingCount;
|
||||||
extern int bg_outfittingGroups[][10];
|
extern int bg_outfittingGroups[][MAX_OUTFITTING_GROUPITEM];
|
||||||
extern char *bg_weaponNames[WP_NUM_WEAPONS];
|
extern char *bg_weaponNames[WP_NUM_WEAPONS];
|
||||||
extern stringID_table_t bg_animTable [MAX_ANIMATIONS+1];
|
extern stringID_table_t bg_animTable [MAX_ANIMATIONS+1];
|
||||||
|
|
||||||
|
@ -1081,6 +1113,7 @@ void BG_DecompressOutfitting ( const char* compressed, goutfitting_t* outf
|
||||||
void BG_CompressOutfitting ( goutfitting_t* outfitting, char* compressed, int size );
|
void BG_CompressOutfitting ( goutfitting_t* outfitting, char* compressed, int size );
|
||||||
int BG_ParseOutfittingTemplates ( qboolean force );
|
int BG_ParseOutfittingTemplates ( qboolean force );
|
||||||
int BG_FindOutfitting ( goutfitting_t* outfitting);
|
int BG_FindOutfitting ( goutfitting_t* outfitting);
|
||||||
|
void BG_ApplyLeanOffset ( playerState_t* ps, vec3_t origin );
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -14,6 +14,7 @@ char *bg_weaponNames[WP_NUM_WEAPONS] =
|
||||||
"Knife", // WP_KNIFE,
|
"Knife", // WP_KNIFE,
|
||||||
"M1911A1", // WP_M1911A1_PISTOL,
|
"M1911A1", // WP_M1911A1_PISTOL,
|
||||||
"US SOCOM", // WP_US_SOCOM_PISTOL,
|
"US SOCOM", // WP_US_SOCOM_PISTOL,
|
||||||
|
"Silver Talon", // WP_SILVER_TALON,
|
||||||
"M590", // WP_M590_SHOTGUN,
|
"M590", // WP_M590_SHOTGUN,
|
||||||
"Micro Uzi", // WP_MICRO_UZI_SUBMACHINEGUN,
|
"Micro Uzi", // WP_MICRO_UZI_SUBMACHINEGUN,
|
||||||
"M3A1", // WP_M3A1_SUBMACHINEGUN,
|
"M3A1", // WP_M3A1_SUBMACHINEGUN,
|
||||||
|
@ -21,6 +22,7 @@ char *bg_weaponNames[WP_NUM_WEAPONS] =
|
||||||
"USAS-12", // WP_USAS_12_SHOTGUN,
|
"USAS-12", // WP_USAS_12_SHOTGUN,
|
||||||
"M4", // WP_M4_ASSAULT_RIFLE,
|
"M4", // WP_M4_ASSAULT_RIFLE,
|
||||||
"AK74", // WP_AK74_ASSAULT_RIFLE,
|
"AK74", // WP_AK74_ASSAULT_RIFLE,
|
||||||
|
"Sig 551", // WP_SIG551
|
||||||
"MSG90A1", // WP_MSG90A1_SNIPER_RIFLE,
|
"MSG90A1", // WP_MSG90A1_SNIPER_RIFLE,
|
||||||
"M60", // WP_M60_MACHINEGUN,
|
"M60", // WP_M60_MACHINEGUN,
|
||||||
"MM1", // WP_MM1_GRENADE_LAUNCHER,
|
"MM1", // WP_MM1_GRENADE_LAUNCHER,
|
||||||
|
@ -156,6 +158,38 @@ static qboolean BG_ParseAttackStats ( int weaponNum, attackData_t* attack, void
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Zoom information
|
||||||
|
trap_GPG_FindPairValue(attacksub, "action", "", tmpStr);
|
||||||
|
if ( !Q_stricmp ( tmpStr, "toggleZoom" ) )
|
||||||
|
{
|
||||||
|
weaponData_t *weapon;
|
||||||
|
void *value;
|
||||||
|
int zoomlvl;
|
||||||
|
|
||||||
|
weapon = &weaponData[weaponNum];
|
||||||
|
|
||||||
|
sub = trap_GPG_FindSubGroup(attacksub, "zoomFactors");
|
||||||
|
if ( !sub )
|
||||||
|
{
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = trap_GPG_GetPairs(sub);
|
||||||
|
zoomlvl = 0;
|
||||||
|
while(value)
|
||||||
|
{
|
||||||
|
trap_GPV_GetName ( value, weapon->zoom[zoomlvl].name );
|
||||||
|
trap_GPV_GetTopValue(value, tmpStr );
|
||||||
|
|
||||||
|
weapon->zoom[zoomlvl].fov = atoi ( tmpStr );
|
||||||
|
|
||||||
|
value = trap_GPV_GetNext ( value );
|
||||||
|
zoomlvl ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
// Assign a melee attribute if there is one
|
// Assign a melee attribute if there is one
|
||||||
trap_GPG_FindPairValue(attacksub, "mp_melee||melee", "none", tmpStr );
|
trap_GPG_FindPairValue(attacksub, "mp_melee||melee", "none", tmpStr );
|
||||||
if ( Q_stricmp ( tmpStr, "none" ) )
|
if ( Q_stricmp ( tmpStr, "none" ) )
|
||||||
|
@ -219,6 +253,8 @@ static qboolean BG_ParseAttackStats ( int weaponNum, attackData_t* attack, void
|
||||||
attack->damage = atoi(tmpStr);
|
attack->damage = atoi(tmpStr);
|
||||||
trap_GPG_FindPairValue(attacksub, "mp_inaccuracy||inaccuracy", "0", tmpStr);
|
trap_GPG_FindPairValue(attacksub, "mp_inaccuracy||inaccuracy", "0", tmpStr);
|
||||||
attack->inaccuracy = (int)(atof(tmpStr)*1000.0f);
|
attack->inaccuracy = (int)(atof(tmpStr)*1000.0f);
|
||||||
|
trap_GPG_FindPairValue(attacksub, "mp_zoominaccuracy", "0", tmpStr);
|
||||||
|
attack->zoomInaccuracy = (int)(atof(tmpStr)*1000.0f);
|
||||||
trap_GPG_FindPairValue(attacksub, "mp_maxInaccuracy||maxInaccuracy", "0", tmpStr);
|
trap_GPG_FindPairValue(attacksub, "mp_maxInaccuracy||maxInaccuracy", "0", tmpStr);
|
||||||
attack->maxInaccuracy = (int)(atof(tmpStr)*1000.0f);
|
attack->maxInaccuracy = (int)(atof(tmpStr)*1000.0f);
|
||||||
trap_GPG_FindPairValue(attacksub, "mp_gore||gore", "YES", tmpStr);
|
trap_GPG_FindPairValue(attacksub, "mp_gore||gore", "YES", tmpStr);
|
||||||
|
@ -1196,12 +1232,12 @@ void BG_CalculateBulletEndpoint ( vec3_t muzzlePoint, vec3_t fireAngs, float ina
|
||||||
float f1;
|
float f1;
|
||||||
float f2;
|
float f2;
|
||||||
|
|
||||||
f1 = (float)(Q_rand ( seed ) % 15000) / 15000.0f;
|
f1 = (float)((unsigned int)Q_rand ( seed ) % 15000) / 15000.0f;
|
||||||
f2 = (float)(Q_rand ( seed ) % 15000) / 15000.0f;
|
f2 = (float)((unsigned int)Q_rand ( seed ) % 15000) / 15000.0f;
|
||||||
fGaussianX = (f1-0.5f) + (f2-0.5f);
|
fGaussianX = (f1-0.5f) + (f2-0.5f);
|
||||||
|
|
||||||
f1 = (float)(Q_rand ( seed ) % 15000) / 15000.0f;
|
f1 = (float)((unsigned int)Q_rand ( seed ) % 15000) / 15000.0f;
|
||||||
f2 = (float)(Q_rand ( seed ) % 15000) / 15000.0f;
|
f2 = (float)((unsigned int)Q_rand ( seed ) % 15000) / 15000.0f;
|
||||||
fGaussianY = (f1-0.5f) + (f2-0.5f);
|
fGaussianY = (f1-0.5f) + (f2-0.5f);
|
||||||
|
|
||||||
fGaussian = fGaussianX * fGaussianX + fGaussianY * fGaussianY;
|
fGaussian = fGaussianX * fGaussianX + fGaussianY * fGaussianY;
|
||||||
|
|
|
@ -16,6 +16,7 @@ typedef enum
|
||||||
// Pistols
|
// Pistols
|
||||||
MOD_M1911A1_PISTOL,
|
MOD_M1911A1_PISTOL,
|
||||||
MOD_USSOCOM_PISTOL,
|
MOD_USSOCOM_PISTOL,
|
||||||
|
MOD_SILVER_TALON,
|
||||||
|
|
||||||
// Secondarys
|
// Secondarys
|
||||||
MOD_M590_SHOTGUN,
|
MOD_M590_SHOTGUN,
|
||||||
|
@ -27,6 +28,8 @@ typedef enum
|
||||||
MOD_USAS_12_SHOTGUN,
|
MOD_USAS_12_SHOTGUN,
|
||||||
MOD_M4_ASSAULT_RIFLE,
|
MOD_M4_ASSAULT_RIFLE,
|
||||||
MOD_AK74_ASSAULT_RIFLE,
|
MOD_AK74_ASSAULT_RIFLE,
|
||||||
|
MOD_SIG551,
|
||||||
|
|
||||||
MOD_MSG90A1_SNIPER_RIFLE,
|
MOD_MSG90A1_SNIPER_RIFLE,
|
||||||
MOD_M60_MACHINEGUN,
|
MOD_M60_MACHINEGUN,
|
||||||
MOD_MM1_GRENADE_LAUNCHER,
|
MOD_MM1_GRENADE_LAUNCHER,
|
||||||
|
@ -60,6 +63,7 @@ typedef enum
|
||||||
// Pistols
|
// Pistols
|
||||||
WP_M1911A1_PISTOL,
|
WP_M1911A1_PISTOL,
|
||||||
WP_USSOCOM_PISTOL,
|
WP_USSOCOM_PISTOL,
|
||||||
|
WP_SILVER_TALON,
|
||||||
|
|
||||||
// Secondarys
|
// Secondarys
|
||||||
WP_M590_SHOTGUN,
|
WP_M590_SHOTGUN,
|
||||||
|
@ -71,6 +75,8 @@ typedef enum
|
||||||
WP_USAS_12_SHOTGUN,
|
WP_USAS_12_SHOTGUN,
|
||||||
WP_M4_ASSAULT_RIFLE,
|
WP_M4_ASSAULT_RIFLE,
|
||||||
WP_AK74_ASSAULT_RIFLE,
|
WP_AK74_ASSAULT_RIFLE,
|
||||||
|
WP_SIG551,
|
||||||
|
|
||||||
WP_MSG90A1,
|
WP_MSG90A1,
|
||||||
WP_M60_MACHINEGUN,
|
WP_M60_MACHINEGUN,
|
||||||
WP_MM1_GRENADE_LAUNCHER,
|
WP_MM1_GRENADE_LAUNCHER,
|
||||||
|
@ -140,6 +146,16 @@ typedef enum
|
||||||
|
|
||||||
} ECategory;
|
} ECategory;
|
||||||
|
|
||||||
|
#define MAX_ZOOMNAME 8
|
||||||
|
#define ZOOMLEVEL_MAX 3
|
||||||
|
|
||||||
|
typedef struct zoomData_s
|
||||||
|
{
|
||||||
|
int fov;
|
||||||
|
char name[MAX_ZOOMNAME];
|
||||||
|
|
||||||
|
} zoomData_t;
|
||||||
|
|
||||||
typedef struct attackData_s
|
typedef struct attackData_s
|
||||||
{
|
{
|
||||||
char name[MAX_QPATH];
|
char name[MAX_QPATH];
|
||||||
|
@ -160,6 +176,7 @@ typedef struct attackData_s
|
||||||
int fireFromClip; // 0 = fire from approp. ammo pool, 1 = fire from clip
|
int fireFromClip; // 0 = fire from approp. ammo pool, 1 = fire from clip
|
||||||
int damage; // how much damage is done per hit
|
int damage; // how much damage is done per hit
|
||||||
float inaccuracy; // how inaccurate is weapon
|
float inaccuracy; // how inaccurate is weapon
|
||||||
|
float zoomInaccuracy; // how inaccurate is the weapon when zoomed
|
||||||
float maxInaccuracy; // maximum lvl of inaccuracy
|
float maxInaccuracy; // maximum lvl of inaccuracy
|
||||||
int pellets; // how many individual 'bullets' are shot with one trigger pull?
|
int pellets; // how many individual 'bullets' are shot with one trigger pull?
|
||||||
int weaponFlags; // which fire modes are available, projectiles timed or impact, .etc
|
int weaponFlags; // which fire modes are available, projectiles timed or impact, .etc
|
||||||
|
@ -207,6 +224,7 @@ typedef struct weaponData_s
|
||||||
|
|
||||||
attackData_t attack[ATTACK_MAX];
|
attackData_t attack[ATTACK_MAX];
|
||||||
|
|
||||||
|
zoomData_t zoom[ZOOMLEVEL_MAX];
|
||||||
|
|
||||||
} weaponData_t;
|
} weaponData_t;
|
||||||
|
|
||||||
|
|
|
@ -499,6 +499,9 @@ void G_UpdatePlayerStateScores ( gentity_t* ent )
|
||||||
{
|
{
|
||||||
ent->client->ps.persistant[PERS_RED_SCORE] = level.teamScores[TEAM_RED];
|
ent->client->ps.persistant[PERS_RED_SCORE] = level.teamScores[TEAM_RED];
|
||||||
ent->client->ps.persistant[PERS_BLUE_SCORE] = level.teamScores[TEAM_BLUE];
|
ent->client->ps.persistant[PERS_BLUE_SCORE] = level.teamScores[TEAM_BLUE];
|
||||||
|
|
||||||
|
ent->client->ps.persistant[PERS_BLUE_ALIVE_COUNT] = level.teamAliveCount[TEAM_BLUE];
|
||||||
|
ent->client->ps.persistant[PERS_RED_ALIVE_COUNT] = level.teamAliveCount[TEAM_RED];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -566,6 +569,11 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd )
|
||||||
// attack button cycles through spectators
|
// attack button cycles through spectators
|
||||||
if ( client->sess.spectatorState != SPECTATOR_FOLLOW && g_forceFollow.integer )
|
if ( client->sess.spectatorState != SPECTATOR_FOLLOW && g_forceFollow.integer )
|
||||||
{
|
{
|
||||||
|
if ( g_forceFollow.integer > 1 )
|
||||||
|
{
|
||||||
|
client->sess.spectatorFirstPerson = qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
Cmd_FollowCycle_f( ent, 1 );
|
Cmd_FollowCycle_f( ent, 1 );
|
||||||
}
|
}
|
||||||
if ( ( client->buttons & BUTTON_ATTACK ) && ! ( client->oldbuttons & BUTTON_ATTACK ) )
|
if ( ( client->buttons & BUTTON_ATTACK ) && ! ( client->oldbuttons & BUTTON_ATTACK ) )
|
||||||
|
@ -575,11 +583,33 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd )
|
||||||
else if ( ( client->buttons & BUTTON_ALT_ATTACK ) && ! ( client->oldbuttons & BUTTON_ALT_ATTACK ) )
|
else if ( ( client->buttons & BUTTON_ALT_ATTACK ) && ! ( client->oldbuttons & BUTTON_ALT_ATTACK ) )
|
||||||
{
|
{
|
||||||
Cmd_FollowCycle_f( ent, -1 );
|
Cmd_FollowCycle_f( ent, -1 );
|
||||||
}
|
}
|
||||||
else if ( !g_forceFollow.integer && ucmd->upmove > 0 && (client->ps.pm_flags & PMF_FOLLOW) )
|
else if ( !g_forceFollow.integer && ucmd->upmove > 0 && (client->ps.pm_flags & PMF_FOLLOW) )
|
||||||
{
|
{
|
||||||
G_StopFollowing( ent );
|
G_StopFollowing( ent );
|
||||||
}
|
}
|
||||||
|
else if ( (client->buttons & BUTTON_USE) && !( client->oldbuttons & BUTTON_USE ) )
|
||||||
|
{
|
||||||
|
// If not following then go to either third or first
|
||||||
|
if ( client->sess.spectatorState != SPECTATOR_FOLLOW )
|
||||||
|
{
|
||||||
|
client->sess.spectatorFirstPerson = g_forceFollow.integer < 2 ? qfalse : qtrue;
|
||||||
|
Cmd_FollowCycle_f( ent, -1 );
|
||||||
|
}
|
||||||
|
// If in first person then either go to free float or third person
|
||||||
|
else if ( client->sess.spectatorFirstPerson )
|
||||||
|
{
|
||||||
|
if ( g_forceFollow.integer < 2 )
|
||||||
|
{
|
||||||
|
client->sess.spectatorFirstPerson = qfalse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Must be in third person so just go to first
|
||||||
|
else
|
||||||
|
{
|
||||||
|
client->sess.spectatorFirstPerson = qtrue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1101,6 +1131,15 @@ void ClientThink_real( gentity_t *ent )
|
||||||
|
|
||||||
// Update the client animation info
|
// Update the client animation info
|
||||||
G_UpdateClientAnimations ( ent );
|
G_UpdateClientAnimations ( ent );
|
||||||
|
|
||||||
|
if ( ent->client->ps.pm_flags & PMF_LEANING )
|
||||||
|
{
|
||||||
|
ent->r.svFlags |= SVF_LINKHACK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent->r.svFlags &= ~SVF_LINKHACK;
|
||||||
|
}
|
||||||
|
|
||||||
// link entity now, after any personal teleporters have been used
|
// link entity now, after any personal teleporters have been used
|
||||||
trap_LinkEntity (ent);
|
trap_LinkEntity (ent);
|
||||||
|
@ -1358,6 +1397,10 @@ void SpectatorClientEndFrame( gentity_t *ent )
|
||||||
|
|
||||||
ent->client->ps = cl->ps;
|
ent->client->ps = cl->ps;
|
||||||
ent->client->ps.pm_flags |= PMF_FOLLOW;
|
ent->client->ps.pm_flags |= PMF_FOLLOW;
|
||||||
|
if ( ent->client->sess.spectatorFirstPerson )
|
||||||
|
{
|
||||||
|
ent->client->ps.pm_flags |= PMF_FOLLOWFIRST;
|
||||||
|
}
|
||||||
ent->client->ps.eFlags = flags;
|
ent->client->ps.eFlags = flags;
|
||||||
ent->client->ps.persistant[PERS_SPAWN_COUNT] = count;
|
ent->client->ps.persistant[PERS_SPAWN_COUNT] = count;
|
||||||
ent->client->ps.persistant[PERS_SCORE] = score;
|
ent->client->ps.persistant[PERS_SCORE] = score;
|
||||||
|
|
|
@ -232,15 +232,17 @@ void G_UndoAntiLag ( void )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( other->r.svFlags & SVF_DOUBLED_BBOX )
|
if ( other->r.svFlags & SVF_INFLATED_BBOX )
|
||||||
{
|
{
|
||||||
// Put the hitbox back the way it was
|
// Put the hitbox back the way it was
|
||||||
other->r.maxs[0] = other->client->maxSave[0];
|
other->r.maxs[0] = other->client->maxSave[0];
|
||||||
other->r.maxs[1] = other->client->maxSave[1];
|
other->r.maxs[1] = other->client->maxSave[1];
|
||||||
|
other->r.maxs[2] = other->client->maxSave[2];
|
||||||
|
|
||||||
other->r.mins[0] = other->client->minSave[0];
|
other->r.mins[0] = other->client->minSave[0];
|
||||||
other->r.mins[1] = other->client->minSave[1];
|
other->r.mins[1] = other->client->minSave[1];
|
||||||
|
|
||||||
other->r.svFlags &= (~SVF_DOUBLED_BBOX);
|
other->r.svFlags &= (~SVF_INFLATED_BBOX);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_UndoClientAntiLag ( other );
|
G_UndoClientAntiLag ( other );
|
||||||
|
@ -306,8 +308,15 @@ void G_ApplyAntiLag ( gentity_t* ref, qboolean enlargeHitBox )
|
||||||
{
|
{
|
||||||
other->client->minSave[0] = other->r.mins[0];
|
other->client->minSave[0] = other->r.mins[0];
|
||||||
other->client->minSave[1] = other->r.mins[1];
|
other->client->minSave[1] = other->r.mins[1];
|
||||||
|
|
||||||
other->client->maxSave[0] = other->r.maxs[0];
|
other->client->maxSave[0] = other->r.maxs[0];
|
||||||
other->client->maxSave[1] = other->r.maxs[1];
|
other->client->maxSave[1] = other->r.maxs[1];
|
||||||
|
other->client->maxSave[2] = other->r.maxs[2];
|
||||||
|
|
||||||
|
if ( other->client->ps.pm_flags & PMF_DUCKED )
|
||||||
|
{
|
||||||
|
other->r.maxs[2] += 10;
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust the hit box to account for hands and such
|
// Adjust the hit box to account for hands and such
|
||||||
// that are sticking out of the normal bounding box
|
// that are sticking out of the normal bounding box
|
||||||
|
@ -327,7 +336,7 @@ void G_ApplyAntiLag ( gentity_t* ref, qboolean enlargeHitBox )
|
||||||
other->r.mins[1] *= 2.0f;
|
other->r.mins[1] *= 2.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
other->r.svFlags |= SVF_DOUBLED_BBOX;
|
other->r.svFlags |= SVF_INFLATED_BBOX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relink the entity into the world
|
// Relink the entity into the world
|
||||||
|
|
|
@ -182,6 +182,23 @@ const char *G_GetArenaInfoByMap( const char *map )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
G_DoesMapExist
|
||||||
|
|
||||||
|
determines whether or not the given map exists on the server
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
qboolean G_DoesMapExist ( const char* mapname )
|
||||||
|
{
|
||||||
|
if ( G_GetArenaInfoByMap ( mapname ) )
|
||||||
|
{
|
||||||
|
return qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
G_DoesMapSupportGametype
|
G_DoesMapSupportGametype
|
||||||
|
|
|
@ -176,7 +176,9 @@ gspawn_t* G_SelectRandomSpawnPoint ( team_t team )
|
||||||
return tfspawns[ rand() % tfcount ];
|
return tfspawns[ rand() % tfcount ];
|
||||||
}
|
}
|
||||||
|
|
||||||
return spawns[ rand() % count ];
|
i = rand() % count;
|
||||||
|
|
||||||
|
return spawns[ i ];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1218,12 +1220,16 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot )
|
||||||
gclient_t *client;
|
gclient_t *client;
|
||||||
char userinfo[MAX_INFO_STRING];
|
char userinfo[MAX_INFO_STRING];
|
||||||
char ip[128];
|
char ip[128];
|
||||||
|
char guid[64];
|
||||||
gentity_t *ent;
|
gentity_t *ent;
|
||||||
|
|
||||||
ent = &g_entities[ clientNum ];
|
ent = &g_entities[ clientNum ];
|
||||||
|
|
||||||
trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) );
|
trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) );
|
||||||
|
|
||||||
|
value = Info_ValueForKey (userinfo, "cl_guid");
|
||||||
|
Com_sprintf ( guid, sizeof(guid), value );
|
||||||
|
|
||||||
// check to see if they are on the banned IP list
|
// check to see if they are on the banned IP list
|
||||||
value = Info_ValueForKey (userinfo, "ip");
|
value = Info_ValueForKey (userinfo, "ip");
|
||||||
Com_sprintf ( ip, sizeof(ip), value );
|
Com_sprintf ( ip, sizeof(ip), value );
|
||||||
|
@ -1271,7 +1277,7 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot )
|
||||||
}
|
}
|
||||||
|
|
||||||
// get and distribute relevent paramters
|
// get and distribute relevent paramters
|
||||||
G_LogPrintf( "ClientConnect: %i - %s\n", clientNum, ip );
|
G_LogPrintf( "ClientConnect: %i - %s [%s]\n", clientNum, ip, guid );
|
||||||
ClientUserinfoChanged( clientNum );
|
ClientUserinfoChanged( clientNum );
|
||||||
|
|
||||||
// don't do the "xxx connected" messages if they were caried over from previous level
|
// don't do the "xxx connected" messages if they were caried over from previous level
|
||||||
|
@ -1290,6 +1296,7 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot )
|
||||||
CalculateRanks();
|
CalculateRanks();
|
||||||
|
|
||||||
// Make sure they are unlinked
|
// Make sure they are unlinked
|
||||||
|
ent->s.number = clientNum;
|
||||||
trap_UnlinkEntity ( ent );
|
trap_UnlinkEntity ( ent );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1366,7 +1373,7 @@ void ClientBegin( int clientNum )
|
||||||
{
|
{
|
||||||
// If there are ghosts already then spawn as a ghost because
|
// If there are ghosts already then spawn as a ghost because
|
||||||
// the game is already in progress.
|
// the game is already in progress.
|
||||||
if ( (level.gametypeJoinTime && (level.time - level.gametypeJoinTime) > (g_roundjointime.integer * 1000)) )
|
if ( !level.warmupTime && (level.gametypeJoinTime && (level.time - level.gametypeJoinTime) > (g_roundjointime.integer * 1000)) )
|
||||||
{
|
{
|
||||||
G_StartGhosting ( ent );
|
G_StartGhosting ( ent );
|
||||||
}
|
}
|
||||||
|
@ -1554,6 +1561,7 @@ void ClientSpawn(gentity_t *ent)
|
||||||
VectorCopy (playerMaxs, ent->r.maxs);
|
VectorCopy (playerMaxs, ent->r.maxs);
|
||||||
|
|
||||||
client->ps.clientNum = index;
|
client->ps.clientNum = index;
|
||||||
|
ent->s.number = index;
|
||||||
|
|
||||||
// Bring back the saved firemodes
|
// Bring back the saved firemodes
|
||||||
memcpy ( client->ps.firemode, client->pers.firemode, sizeof(client->ps.firemode) );
|
memcpy ( client->ps.firemode, client->pers.firemode, sizeof(client->ps.firemode) );
|
||||||
|
@ -1566,7 +1574,7 @@ void ClientSpawn(gentity_t *ent)
|
||||||
// Give the client their weapons depending on whether or not pickups are enabled
|
// Give the client their weapons depending on whether or not pickups are enabled
|
||||||
if ( level.pickupsDisabled )
|
if ( level.pickupsDisabled )
|
||||||
{
|
{
|
||||||
G_UpdateOutfitting ( ent->s.number );
|
G_UpdateOutfitting ( index );
|
||||||
|
|
||||||
// Prevent the client from picking up a whole bunch of stuff
|
// Prevent the client from picking up a whole bunch of stuff
|
||||||
client->ps.pm_flags |= PMF_LIMITED_INVENTORY;
|
client->ps.pm_flags |= PMF_LIMITED_INVENTORY;
|
||||||
|
@ -1659,6 +1667,10 @@ void ClientSpawn(gentity_t *ent)
|
||||||
client->ps.torsoAnim = -1;
|
client->ps.torsoAnim = -1;
|
||||||
client->ps.legsAnim = LEGS_IDLE;
|
client->ps.legsAnim = LEGS_IDLE;
|
||||||
|
|
||||||
|
client->ps.weaponAnimIdChoice = 0;
|
||||||
|
client->ps.weaponCallbackStep = 0;
|
||||||
|
client->ps.weaponCallbackTime = 0;
|
||||||
|
|
||||||
// Not on a ladder
|
// Not on a ladder
|
||||||
client->ps.ladder = -1;
|
client->ps.ladder = -1;
|
||||||
|
|
||||||
|
@ -1670,6 +1682,12 @@ void ClientSpawn(gentity_t *ent)
|
||||||
MoveClientToIntermission( ent );
|
MoveClientToIntermission( ent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Frozen?
|
||||||
|
if ( level.gametypeDelayTime > level.time )
|
||||||
|
{
|
||||||
|
ent->client->ps.stats[STAT_FROZEN] = level.gametypeDelayTime - level.time;
|
||||||
|
}
|
||||||
|
|
||||||
// run a client frame to drop exactly to the floor,
|
// run a client frame to drop exactly to the floor,
|
||||||
// initialize animations and other things
|
// initialize animations and other things
|
||||||
client->ps.commandTime = level.time - 100;
|
client->ps.commandTime = level.time - 100;
|
||||||
|
@ -1690,12 +1708,6 @@ void ClientSpawn(gentity_t *ent)
|
||||||
// clear entity state values
|
// clear entity state values
|
||||||
BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue );
|
BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue );
|
||||||
|
|
||||||
// Frozen?
|
|
||||||
if ( level.gametypeDelayTime > level.time )
|
|
||||||
{
|
|
||||||
ent->client->ps.stats[STAT_FROZEN] = level.gametypeDelayTime - level.time;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle a deferred name change
|
// Handle a deferred name change
|
||||||
if ( client->pers.deferredname[0] )
|
if ( client->pers.deferredname[0] )
|
||||||
{
|
{
|
||||||
|
@ -1901,3 +1913,51 @@ gentity_t* G_FindNearbyClient ( vec3_t origin, team_t team, float radius, gentit
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
G_IgnoreClientChat
|
||||||
|
|
||||||
|
Instructs all chat to be ignored by the given
|
||||||
|
============
|
||||||
|
*/
|
||||||
|
void G_IgnoreClientChat ( int ignorer, int ignoree, qboolean ignore )
|
||||||
|
{
|
||||||
|
// Cant ignore yourself
|
||||||
|
if ( ignorer == ignoree )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is no client connected then dont bother
|
||||||
|
if ( g_entities[ignoree].client->pers.connected != CON_CONNECTED )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ignore )
|
||||||
|
{
|
||||||
|
g_entities[ignoree].client->sess.chatIgnoreClients[ignorer/32] |= (1<<(ignorer%32));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_entities[ignoree].client->sess.chatIgnoreClients[ignorer/32] &= ~(1<<(ignorer%32));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
G_IsClientChatIgnored
|
||||||
|
|
||||||
|
Checks to see if the given client is being ignored by a specific client
|
||||||
|
============
|
||||||
|
*/
|
||||||
|
qboolean G_IsClientChatIgnored ( int ignorer, int ignoree )
|
||||||
|
{
|
||||||
|
if ( g_entities[ignoree].client->sess.chatIgnoreClients[ignorer/32] & (1<<(ignorer%32)) )
|
||||||
|
{
|
||||||
|
return qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
|
|
@ -288,7 +288,7 @@ void Cmd_DropItem_f ( gentity_t* ent )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
G_DropGametypeItems ( ent );
|
G_DropGametypeItems ( ent, 3000 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -753,6 +753,9 @@ void SetTeam( gentity_t *ent, char *s, const char* identity )
|
||||||
client->sess.spectatorState = specState;
|
client->sess.spectatorState = specState;
|
||||||
client->sess.spectatorClient = specClient;
|
client->sess.spectatorClient = specClient;
|
||||||
|
|
||||||
|
// Kill any child entities of this client to protect against grenade team changers
|
||||||
|
G_FreeEnitityChildren ( ent );
|
||||||
|
|
||||||
// Always spawn into a ctf game using a respawn timer.
|
// Always spawn into a ctf game using a respawn timer.
|
||||||
if ( team != TEAM_SPECTATOR && level.gametypeData->respawnType == RT_INTERVAL )
|
if ( team != TEAM_SPECTATOR && level.gametypeData->respawnType == RT_INTERVAL )
|
||||||
{
|
{
|
||||||
|
@ -767,7 +770,7 @@ void SetTeam( gentity_t *ent, char *s, const char* identity )
|
||||||
{
|
{
|
||||||
// If there are ghosts already then spawn as a ghost because
|
// If there are ghosts already then spawn as a ghost because
|
||||||
// the game is already in progress.
|
// the game is already in progress.
|
||||||
if ( (level.gametypeJoinTime && (level.time - level.gametypeJoinTime) > (g_roundjointime.integer * 1000)) || noOutfittingChange || client->sess.noTeamChange )
|
if ( !level.warmupTime && (level.gametypeJoinTime && (level.time - level.gametypeJoinTime) > (g_roundjointime.integer * 1000)) || noOutfittingChange || client->sess.noTeamChange )
|
||||||
{
|
{
|
||||||
ghost = qtrue;
|
ghost = qtrue;
|
||||||
}
|
}
|
||||||
|
@ -903,19 +906,6 @@ void G_StopFollowing( gentity_t *ent )
|
||||||
ent->client->ps.persistant[PERS_TEAM] = ent->client->sess.team;
|
ent->client->ps.persistant[PERS_TEAM] = ent->client->sess.team;
|
||||||
ent->r.svFlags &= ~SVF_BOT;
|
ent->r.svFlags &= ~SVF_BOT;
|
||||||
|
|
||||||
// Ghots dont really become spectators, just psuedo spectators
|
|
||||||
if ( ent->client->sess.ghost )
|
|
||||||
{
|
|
||||||
// Do a start and stop to ensure the variables are all set properly
|
|
||||||
G_StopGhosting ( ent );
|
|
||||||
G_StartGhosting ( ent );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ent->client->sess.team = TEAM_SPECTATOR;
|
|
||||||
ent->client->ps.persistant[ PERS_TEAM ] = TEAM_SPECTATOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we were in fact following someone, then make the angles and origin nice for
|
// If we were in fact following someone, then make the angles and origin nice for
|
||||||
// when we stop
|
// when we stop
|
||||||
if ( ent->client->sess.spectatorClient != -1 )
|
if ( ent->client->sess.spectatorClient != -1 )
|
||||||
|
@ -928,7 +918,7 @@ void G_StopFollowing( gentity_t *ent )
|
||||||
ent->client->ps.delta_angles[i] = ANGLE2SHORT(cl->ps.viewangles[i] - SHORT2ANGLE(ent->client->pers.cmd.angles[i]));
|
ent->client->ps.delta_angles[i] = ANGLE2SHORT(cl->ps.viewangles[i] - SHORT2ANGLE(ent->client->pers.cmd.angles[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorCopy ( cl->ps.viewangles, ent->client->ps.viewangles );
|
VectorCopy ( cl->ps.viewangles, ent->client->ps.viewangles );
|
||||||
VectorCopy ( cl->ps.origin, ent->client->ps.origin );
|
VectorCopy ( cl->ps.origin, ent->client->ps.origin );
|
||||||
VectorClear ( ent->client->ps.velocity );
|
VectorClear ( ent->client->ps.velocity );
|
||||||
ent->client->ps.movementDir = 0;
|
ent->client->ps.movementDir = 0;
|
||||||
|
@ -936,7 +926,18 @@ void G_StopFollowing( gentity_t *ent )
|
||||||
BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue );
|
BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue );
|
||||||
}
|
}
|
||||||
|
|
||||||
ent->client->sess.spectatorClient = -1;
|
// Ghots dont really become spectators, just psuedo spectators
|
||||||
|
if ( ent->client->sess.ghost )
|
||||||
|
{
|
||||||
|
// Do a start and stop to ensure the variables are all set properly
|
||||||
|
G_StopGhosting ( ent );
|
||||||
|
G_StartGhosting ( ent );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent->client->sess.team = TEAM_SPECTATOR;
|
||||||
|
ent->client->ps.persistant[ PERS_TEAM ] = TEAM_SPECTATOR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1186,6 +1187,11 @@ static void G_SayTo( gentity_t *ent, gentity_t *other, int mode, const char *nam
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( ent->client->sess.muted || G_IsClientChatIgnored ( other->s.number, ent->s.number ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( !level.intermissiontime && !level.intermissionQueued )
|
if ( !level.intermissiontime && !level.intermissionQueued )
|
||||||
{
|
{
|
||||||
// Spectators cant talk to alive people
|
// Spectators cant talk to alive people
|
||||||
|
@ -1674,7 +1680,7 @@ void Cmd_CallVote_f( gentity_t *ent )
|
||||||
trap_SendServerCommand( ent-g_entities, va("print \"You are not allowed to vote within %d minute of a failed vote.\n\"", g_failedVoteDelay.integer ) );
|
trap_SendServerCommand( ent-g_entities, va("print \"You are not allowed to vote within %d minute of a failed vote.\n\"", g_failedVoteDelay.integer ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the voting client id
|
// Save the voting client id
|
||||||
level.voteClient = ent->s.number;
|
level.voteClient = ent->s.number;
|
||||||
|
|
||||||
|
@ -1737,6 +1743,12 @@ void Cmd_CallVote_f( gentity_t *ent )
|
||||||
}
|
}
|
||||||
else if ( !Q_stricmp( arg1, "map" ) )
|
else if ( !Q_stricmp( arg1, "map" ) )
|
||||||
{
|
{
|
||||||
|
if ( !G_DoesMapExist ( arg2 ) )
|
||||||
|
{
|
||||||
|
trap_SendServerCommand( ent-g_entities, "print \"Unknown mapname.\n\"" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s %s", arg1, arg2 );
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s %s", arg1, arg2 );
|
||||||
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
||||||
}
|
}
|
||||||
|
@ -1749,7 +1761,7 @@ void Cmd_CallVote_f( gentity_t *ent )
|
||||||
trap_Argv( 4, arg4, sizeof( arg4 ) );
|
trap_Argv( 4, arg4, sizeof( arg4 ) );
|
||||||
|
|
||||||
Com_sprintf( level.voteString, sizeof( level.voteString ), "rmgmap 1 %s 2 %s 3 %s 4 \"%s\" 0", arg2, arg3, arg4, ConcatArgs ( 5 ) );
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "rmgmap 1 %s 2 %s 3 %s 4 \"%s\" 0", arg2, arg3, arg4, ConcatArgs ( 5 ) );
|
||||||
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "Randomly Generated Map" );
|
||||||
}
|
}
|
||||||
else if ( !Q_stricmp( arg1, "mapcycle" ) )
|
else if ( !Q_stricmp( arg1, "mapcycle" ) )
|
||||||
{
|
{
|
||||||
|
@ -1823,9 +1835,19 @@ void Cmd_CallVote_f( gentity_t *ent )
|
||||||
trap_SendServerCommand( ent-g_entities, va("print \"This server does not allow time extensions.\n\"") );
|
trap_SendServerCommand( ent-g_entities, va("print \"This server does not allow time extensions.\n\"") );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Com_sprintf ( level.voteString, sizeof(level.voteString ), "extendtime %d", g_timeextension.integer );
|
Com_sprintf ( level.voteString, sizeof(level.voteString ), "extendtime %d", g_timeextension.integer );
|
||||||
Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "extend timelimit by %d minutes", g_timeextension.integer );
|
Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "extend timelimit by %d minutes", g_timeextension.integer );
|
||||||
}
|
}
|
||||||
|
else if ( !Q_stricmp ( arg1, "timelimit" ) ||
|
||||||
|
!Q_stricmp ( arg1, "scorelimit" ) ||
|
||||||
|
!Q_stricmp ( arg1, "map_restart" ) ||
|
||||||
|
!Q_stricmp ( arg1, "g_doWarmup" ) ||
|
||||||
|
!Q_stricmp ( arg1, "g_friendlyfire" ) )
|
||||||
|
{
|
||||||
|
Com_sprintf ( level.voteString, sizeof(level.voteString ), "%s %d", arg1, atoi(arg2) );
|
||||||
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s \"%s\"", arg1, arg2 );
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s \"%s\"", arg1, arg2 );
|
||||||
|
@ -1900,6 +1922,39 @@ void Cmd_Vote_f( gentity_t *ent )
|
||||||
// for players entering or leaving
|
// for players entering or leaving
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Cmd_Ignore_f
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void Cmd_Ignore_f( gentity_t *ent )
|
||||||
|
{
|
||||||
|
char buffer[MAX_TOKEN_CHARS];
|
||||||
|
int ignoree;
|
||||||
|
qboolean ignore;
|
||||||
|
|
||||||
|
trap_Argv( 1, buffer, sizeof( buffer ) );
|
||||||
|
|
||||||
|
ignoree = atoi( buffer );
|
||||||
|
ignore = G_IsClientChatIgnored ( ent->s.number, ignoree ) ? qfalse : qtrue;
|
||||||
|
|
||||||
|
if ( ignoree == ent->s.number )
|
||||||
|
{
|
||||||
|
trap_SendServerCommand( ent-g_entities, va("print \"cant ignore yourself.\n\""));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_IgnoreClientChat ( ent->s.number, ignoree, ignore);
|
||||||
|
|
||||||
|
if ( ignore )
|
||||||
|
{
|
||||||
|
trap_SendServerCommand( ent-g_entities, va("print \"%s ignored.\n\"", g_entities[ignoree].client->pers.netname));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trap_SendServerCommand( ent-g_entities, va("print \"%s unignored.\n\"", g_entities[ignoree].client->pers.netname));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
|
@ -2030,6 +2085,8 @@ void ClientCommand( int clientNum ) {
|
||||||
Cmd_Vote_f (ent);
|
Cmd_Vote_f (ent);
|
||||||
else if (Q_stricmp (cmd, "setviewpos") == 0)
|
else if (Q_stricmp (cmd, "setviewpos") == 0)
|
||||||
Cmd_SetViewpos_f( ent );
|
Cmd_SetViewpos_f( ent );
|
||||||
|
else if (Q_stricmp ( cmd, "ignore" ) == 0 )
|
||||||
|
Cmd_Ignore_f ( ent );
|
||||||
|
|
||||||
#ifdef _SOF2_BOTS
|
#ifdef _SOF2_BOTS
|
||||||
else if (Q_stricmp (cmd, "addbot") == 0)
|
else if (Q_stricmp (cmd, "addbot") == 0)
|
||||||
|
|
|
@ -67,7 +67,7 @@ void TossClientItems( gentity_t *self )
|
||||||
G_DropWeapon ( self, weapon, 0 );
|
G_DropWeapon ( self, weapon, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
G_DropGametypeItems ( self );
|
G_DropGametypeItems ( self, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -115,6 +115,7 @@ char *modNames[] =
|
||||||
|
|
||||||
"MOD_M1911A1_PISTOL",
|
"MOD_M1911A1_PISTOL",
|
||||||
"MOD_US_SOCOM_PISTOL",
|
"MOD_US_SOCOM_PISTOL",
|
||||||
|
"MOD_SILVER_TALON",
|
||||||
|
|
||||||
"MOD_M590_SHOTGUN",
|
"MOD_M590_SHOTGUN",
|
||||||
"MOD_MICRO_UZI_SUBMACHINEGUN",
|
"MOD_MICRO_UZI_SUBMACHINEGUN",
|
||||||
|
@ -124,6 +125,7 @@ char *modNames[] =
|
||||||
"MOD_USAS_12_SHOTGUN",
|
"MOD_USAS_12_SHOTGUN",
|
||||||
"MOD_M4_ASSAULT_RIFLE",
|
"MOD_M4_ASSAULT_RIFLE",
|
||||||
"MOD_AK74_ASSAULT_RIFLE",
|
"MOD_AK74_ASSAULT_RIFLE",
|
||||||
|
"MOD_SIG551",
|
||||||
"MOD_MSG90A1_SNIPER_RIFLE",
|
"MOD_MSG90A1_SNIPER_RIFLE",
|
||||||
"MOD_M60_MACHINEGUN",
|
"MOD_M60_MACHINEGUN",
|
||||||
"MOD_MM1_GRENADE_LAUNCHER",
|
"MOD_MM1_GRENADE_LAUNCHER",
|
||||||
|
@ -246,7 +248,12 @@ void player_die(
|
||||||
{
|
{
|
||||||
gentity_t* missile;
|
gentity_t* missile;
|
||||||
missile = G_FireWeapon( self, ATTACK_NORMAL );
|
missile = G_FireWeapon( self, ATTACK_NORMAL );
|
||||||
missile->dflags |= DAMAGE_NO_TEAMKILL;
|
|
||||||
|
if ( attacker && attacker->client && attacker->client->sess.team != self->client->sess.team )
|
||||||
|
{
|
||||||
|
missile->dflags |= DAMAGE_NO_TEAMKILL;
|
||||||
|
}
|
||||||
|
|
||||||
if ( missile )
|
if ( missile )
|
||||||
{
|
{
|
||||||
VectorClear ( missile->s.pos.trDelta );
|
VectorClear ( missile->s.pos.trDelta );
|
||||||
|
@ -879,7 +886,7 @@ int G_Damage (
|
||||||
// if the attacker was on the same team
|
// if the attacker was on the same team
|
||||||
if ( targ != attacker && OnSameTeam (targ, attacker) )
|
if ( targ != attacker && OnSameTeam (targ, attacker) )
|
||||||
{
|
{
|
||||||
if ( !g_friendlyFire.integer )
|
if ( !g_friendlyFire.integer || level.warmupTime )
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -920,6 +927,17 @@ int G_Damage (
|
||||||
{
|
{
|
||||||
int actualtake = Com_Clamp ( 0, targ->health, take );
|
int actualtake = Com_Clamp ( 0, targ->health, take );
|
||||||
|
|
||||||
|
if ( targ->client->ps.stats[STAT_GAMETYPE_ITEMS] )
|
||||||
|
{
|
||||||
|
actualtake *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if this damage falls into the no excuse damage
|
||||||
|
if ( level.gametypeData->respawnType == RT_NONE && level.time - level.gametypeDelayTime < g_teamkillNoExcuseTime.integer * 1000 )
|
||||||
|
{
|
||||||
|
actualtake *= g_teamkillNoExcuseMultiplier.integer;
|
||||||
|
}
|
||||||
|
|
||||||
attacker->client->sess.teamkillDamage += actualtake;
|
attacker->client->sess.teamkillDamage += actualtake;
|
||||||
attacker->client->sess.teamkillForgiveTime = level.time;
|
attacker->client->sess.teamkillForgiveTime = level.time;
|
||||||
}
|
}
|
||||||
|
@ -1027,7 +1045,7 @@ int G_Damage (
|
||||||
}
|
}
|
||||||
|
|
||||||
// Friendly fire
|
// Friendly fire
|
||||||
if ( g_friendlyFire.integer && targ != attacker && OnSameTeam ( targ, attacker ) )
|
if ( !level.warmupTime && g_friendlyFire.integer && targ != attacker && OnSameTeam ( targ, attacker ) )
|
||||||
{
|
{
|
||||||
vec3_t diff;
|
vec3_t diff;
|
||||||
|
|
||||||
|
@ -1333,7 +1351,10 @@ qboolean G_RadiusDamage (
|
||||||
if ( d && ent->client )
|
if ( d && ent->client )
|
||||||
{
|
{
|
||||||
// Only one of the grenade hits will count for tk damage
|
// Only one of the grenade hits will count for tk damage
|
||||||
dflags |= DAMAGE_NO_TEAMKILL;
|
if ( ent != attacker )
|
||||||
|
{
|
||||||
|
dflags |= DAMAGE_NO_TEAMKILL;
|
||||||
|
}
|
||||||
|
|
||||||
// Put some procedural gore on the target.
|
// Put some procedural gore on the target.
|
||||||
tent = G_TempEntity( origin, EV_EXPLOSION_HIT_FLESH );
|
tent = G_TempEntity( origin, EV_EXPLOSION_HIT_FLESH );
|
||||||
|
|
|
@ -285,7 +285,7 @@ void G_ResetGametypeEntities ( void )
|
||||||
G_RespawnClients
|
G_RespawnClients
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
void G_RespawnClients ( qboolean force, team_t team )
|
void G_RespawnClients ( qboolean force, team_t team, qboolean fullRestart )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -339,6 +339,16 @@ void G_RespawnClients ( qboolean force, team_t team )
|
||||||
|
|
||||||
trap_UnlinkEntity (ent);
|
trap_UnlinkEntity (ent);
|
||||||
ClientSpawn ( ent );
|
ClientSpawn ( ent );
|
||||||
|
|
||||||
|
if ( fullRestart )
|
||||||
|
{
|
||||||
|
ent->client->sess.score = 0;
|
||||||
|
ent->client->sess.kills = 0;
|
||||||
|
ent->client->sess.deaths = 0;
|
||||||
|
ent->client->sess.teamkillDamage = 0;
|
||||||
|
ent->client->sess.teamkillForgiveTime = 0;
|
||||||
|
ent->client->pers.enterTime = level.time;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,7 +432,7 @@ void G_ResetEntities ( void )
|
||||||
G_ResetGametype
|
G_ResetGametype
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
void G_ResetGametype ( void )
|
void G_ResetGametype ( qboolean fullRestart )
|
||||||
{
|
{
|
||||||
gentity_t* tent;
|
gentity_t* tent;
|
||||||
|
|
||||||
|
@ -435,6 +445,13 @@ void G_ResetGametype ( void )
|
||||||
// Reset the gametype itself
|
// Reset the gametype itself
|
||||||
G_ResetGametypeEntities ( );
|
G_ResetGametypeEntities ( );
|
||||||
|
|
||||||
|
// Cant have a 0 roundtimelimit
|
||||||
|
if ( g_roundtimelimit.integer < 1 )
|
||||||
|
{
|
||||||
|
trap_Cvar_Set ( "g_roundtimelimit", "1" );
|
||||||
|
trap_Cvar_Update ( &g_roundtimelimit );
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize the respawn interval since this is a interval gametype
|
// Initialize the respawn interval since this is a interval gametype
|
||||||
switch ( level.gametypeData->respawnType )
|
switch ( level.gametypeData->respawnType )
|
||||||
{
|
{
|
||||||
|
@ -446,7 +463,7 @@ void G_ResetGametype ( void )
|
||||||
|
|
||||||
case RT_NONE:
|
case RT_NONE:
|
||||||
level.gametypeDelayTime = level.time + g_roundstartdelay.integer * 1000;
|
level.gametypeDelayTime = level.time + g_roundstartdelay.integer * 1000;
|
||||||
level.gametypeRoundTime = level.time + (g_roundtimelimit.integer * 60000);
|
level.gametypeRoundTime = level.time + (g_roundtimelimit.integer * 60000) + g_roundstartdelay.integer * 1000;
|
||||||
|
|
||||||
if ( level.gametypeDelayTime != level.time )
|
if ( level.gametypeDelayTime != level.time )
|
||||||
{
|
{
|
||||||
|
@ -466,12 +483,21 @@ void G_ResetGametype ( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Respawn all clients
|
// Respawn all clients
|
||||||
G_RespawnClients ( qtrue, TEAM_RED );
|
G_RespawnClients ( qtrue, TEAM_RED, fullRestart );
|
||||||
G_RespawnClients ( qtrue, TEAM_BLUE );
|
G_RespawnClients ( qtrue, TEAM_BLUE, fullRestart );
|
||||||
|
|
||||||
level.gametypeStartTime = level.time;
|
level.gametypeStartTime = level.time;
|
||||||
level.gametypeResetTime = 0;
|
level.gametypeResetTime = 0;
|
||||||
|
|
||||||
|
if ( fullRestart )
|
||||||
|
{
|
||||||
|
level.warmupTime = 0;
|
||||||
|
level.startTime = level.time;
|
||||||
|
memset ( level.teamScores, 0, sizeof(level.teamScores) );
|
||||||
|
trap_SetConfigstring( CS_WARMUP, va("%i", level.warmupTime) );
|
||||||
|
trap_SetConfigstring( CS_LEVEL_START_TIME, va("%i", level.startTime ) );
|
||||||
|
}
|
||||||
|
|
||||||
// Reset the clients local effects
|
// Reset the clients local effects
|
||||||
tent = G_TempEntity( vec3_origin, EV_GAMETYPE_RESTART );
|
tent = G_TempEntity( vec3_origin, EV_GAMETYPE_RESTART );
|
||||||
tent->r.svFlags |= SVF_BROADCAST;
|
tent->r.svFlags |= SVF_BROADCAST;
|
||||||
|
@ -615,7 +641,7 @@ G_DropGametypeItems
|
||||||
Drops all of the gametype items held by the player
|
Drops all of the gametype items held by the player
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
void G_DropGametypeItems ( gentity_t* self )
|
void G_DropGametypeItems ( gentity_t* self, int delayPickup )
|
||||||
{
|
{
|
||||||
float angle;
|
float angle;
|
||||||
int i;
|
int i;
|
||||||
|
@ -642,9 +668,12 @@ void G_DropGametypeItems ( gentity_t* self )
|
||||||
drop->count = 1;
|
drop->count = 1;
|
||||||
angle += 45;
|
angle += 45;
|
||||||
|
|
||||||
drop->nextthink = level.time + 3000;
|
if ( delayPickup )
|
||||||
drop->s.eFlags |= EF_NOPICKUP;
|
{
|
||||||
drop->think = G_EnableGametypeItemPickup;
|
drop->nextthink = level.time + delayPickup;
|
||||||
|
drop->s.eFlags |= EF_NOPICKUP;
|
||||||
|
drop->think = G_EnableGametypeItemPickup;
|
||||||
|
}
|
||||||
|
|
||||||
// TAke it away from the client just in case
|
// TAke it away from the client just in case
|
||||||
self->client->ps.stats[STAT_GAMETYPE_ITEMS] &= ~(1<<i);
|
self->client->ps.stats[STAT_GAMETYPE_ITEMS] &= ~(1<<i);
|
||||||
|
@ -675,10 +704,9 @@ void CheckGametype ( void )
|
||||||
// the first person joins
|
// the first person joins
|
||||||
if ( !level.gametypeStartTime )
|
if ( !level.gametypeStartTime )
|
||||||
{
|
{
|
||||||
int counts[TEAM_NUM_TEAMS];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset ( counts, 0, sizeof(counts) );
|
memset ( level.teamAliveCount, 0, sizeof(level.teamAliveCount) );
|
||||||
|
|
||||||
for ( i = 0; i < level.numConnectedClients; i ++ )
|
for ( i = 0; i < level.numConnectedClients; i ++ )
|
||||||
{
|
{
|
||||||
|
@ -694,12 +722,12 @@ void CheckGametype ( void )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
counts[other->client->sess.team]++;
|
level.teamAliveCount[other->client->sess.team]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( counts[TEAM_RED] || counts[TEAM_BLUE] )
|
if ( level.teamAliveCount[TEAM_RED] || level.teamAliveCount[TEAM_BLUE] || level.teamAliveCount[TEAM_FREE] )
|
||||||
{
|
{
|
||||||
G_ResetGametype ( );
|
G_ResetGametype ( qfalse );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -712,7 +740,7 @@ void CheckGametype ( void )
|
||||||
// Dont do this again
|
// Dont do this again
|
||||||
level.gametypeResetTime = 0;
|
level.gametypeResetTime = 0;
|
||||||
|
|
||||||
G_ResetGametype ( );
|
G_ResetGametype ( qfalse );
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -727,7 +755,7 @@ void CheckGametype ( void )
|
||||||
if ( level.gametypeRespawnTime[team] && level.time > level.gametypeRespawnTime[team] )
|
if ( level.gametypeRespawnTime[team] && level.time > level.gametypeRespawnTime[team] )
|
||||||
{
|
{
|
||||||
// Respawn all dead clients
|
// Respawn all dead clients
|
||||||
G_RespawnClients ( qfalse, team );
|
G_RespawnClients ( qfalse, team, qfalse );
|
||||||
|
|
||||||
// Next interval
|
// Next interval
|
||||||
level.gametypeRespawnTime[team] = 0;
|
level.gametypeRespawnTime[team] = 0;
|
||||||
|
@ -736,13 +764,12 @@ void CheckGametype ( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are in RT_NONE respawn mode then we need to look for everyone being dead
|
// If we are in RT_NONE respawn mode then we need to look for everyone being dead
|
||||||
if ( level.time > level.gametypeDelayTime && level.gametypeData->respawnType == RT_NONE && level.gametypeStartTime )
|
if ( level.gametypeData->respawnType == RT_NONE && level.gametypeStartTime )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int alive[TEAM_NUM_TEAMS];
|
|
||||||
int dead[TEAM_NUM_TEAMS];
|
int dead[TEAM_NUM_TEAMS];
|
||||||
|
|
||||||
memset ( &alive[0], 0, sizeof(alive) );
|
memset ( &level.teamAliveCount[0], 0, sizeof(level.teamAliveCount) );
|
||||||
memset ( &dead[0], 0, sizeof(dead) );
|
memset ( &dead[0], 0, sizeof(dead) );
|
||||||
for ( i = 0; i < level.numConnectedClients; i ++ )
|
for ( i = 0; i < level.numConnectedClients; i ++ )
|
||||||
{
|
{
|
||||||
|
@ -759,26 +786,29 @@ void CheckGametype ( void )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
alive[ent->client->sess.team] ++;
|
level.teamAliveCount[ent->client->sess.team] ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If everyone is dead on a team then reset the gametype, but only if
|
if ( level.time > level.gametypeDelayTime )
|
||||||
// there was someone on that team to begin with.
|
|
||||||
if ( !alive[TEAM_RED] && dead[TEAM_RED] )
|
|
||||||
{
|
|
||||||
trap_GT_SendEvent ( GTEV_TEAM_ELIMINATED, level.time, TEAM_RED, 0, 0, 0, 0 );
|
|
||||||
}
|
|
||||||
else if ( !alive[TEAM_BLUE] && dead[TEAM_BLUE] )
|
|
||||||
{
|
|
||||||
trap_GT_SendEvent ( GTEV_TEAM_ELIMINATED, level.time, TEAM_BLUE, 0, 0, 0, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the time has expired
|
|
||||||
if ( level.time > level.gametypeRoundTime )
|
|
||||||
{
|
{
|
||||||
trap_GT_SendEvent ( GTEV_TIME_EXPIRED, level.time, 0, 0, 0, 0, 0 );
|
// If everyone is dead on a team then reset the gametype, but only if
|
||||||
}
|
// there was someone on that team to begin with.
|
||||||
|
if ( !level.teamAliveCount[TEAM_RED] && dead[TEAM_RED] )
|
||||||
|
{
|
||||||
|
trap_GT_SendEvent ( GTEV_TEAM_ELIMINATED, level.time, TEAM_RED, 0, 0, 0, 0 );
|
||||||
|
}
|
||||||
|
else if ( !level.teamAliveCount[TEAM_BLUE] && dead[TEAM_BLUE] )
|
||||||
|
{
|
||||||
|
trap_GT_SendEvent ( GTEV_TEAM_ELIMINATED, level.time, TEAM_BLUE, 0, 0, 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if the time has expired
|
||||||
|
if ( level.time > level.gametypeRoundTime )
|
||||||
|
{
|
||||||
|
trap_GT_SendEvent ( GTEV_TIME_EXPIRED, level.time, 0, 0, 0, 0, 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,7 +826,7 @@ int G_GametypeCommand ( int cmd, int arg0, int arg1, int arg2, int arg3, int arg
|
||||||
case GTCMD_RESTART:
|
case GTCMD_RESTART:
|
||||||
if ( arg0 <= 0 )
|
if ( arg0 <= 0 )
|
||||||
{
|
{
|
||||||
G_ResetGametype ( );
|
G_ResetGametype ( qfalse );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -298,6 +298,7 @@ void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace)
|
||||||
int respawn;
|
int respawn;
|
||||||
qboolean predict;
|
qboolean predict;
|
||||||
qboolean autoswitch;
|
qboolean autoswitch;
|
||||||
|
int eventID;
|
||||||
|
|
||||||
if (!other->client)
|
if (!other->client)
|
||||||
return;
|
return;
|
||||||
|
@ -362,19 +363,25 @@ void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !respawn )
|
if ( !respawn && !(ent->flags & FL_DROPPED_ITEM) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eventID = EV_ITEM_PICKUP;
|
||||||
|
if ( other->client && (other->client->ps.pm_flags & PMF_DUCKED ) )
|
||||||
|
{
|
||||||
|
eventID = EV_ITEM_PICKUP_QUIET;
|
||||||
|
}
|
||||||
|
|
||||||
// play the normal pickup sound
|
// play the normal pickup sound
|
||||||
if (predict)
|
if (predict)
|
||||||
{
|
{
|
||||||
G_AddPredictableEvent( other, EV_ITEM_PICKUP, ent->s.modelindex | (autoswitch?ITEM_AUTOSWITCHBIT:0) );
|
G_AddPredictableEvent( other, eventID, ent->s.modelindex | (autoswitch?ITEM_AUTOSWITCHBIT:0) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
G_AddEvent( other, EV_ITEM_PICKUP, ent->s.modelindex | (autoswitch?ITEM_AUTOSWITCHBIT:0) );
|
G_AddEvent( other, eventID, ent->s.modelindex | (autoswitch?ITEM_AUTOSWITCHBIT:0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// fire item targets
|
// fire item targets
|
||||||
|
@ -610,6 +617,12 @@ gentity_t* G_DropWeapon ( gentity_t* ent, weapon_t weapon, int pickupDelay )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure they have the weapon
|
||||||
|
if ( !(ent->client->ps.stats[STAT_WEAPONS] & (1<<weapon) ) )
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// No more outfitting changes
|
// No more outfitting changes
|
||||||
ent->client->noOutfittingChange = qtrue;
|
ent->client->noOutfittingChange = qtrue;
|
||||||
|
|
||||||
|
@ -847,11 +860,28 @@ void SaveRegisteredItems( void )
|
||||||
G_ItemDisabled
|
G_ItemDisabled
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
int G_ItemDisabled( gitem_t *item )
|
qboolean G_ItemDisabled( gitem_t *item )
|
||||||
{
|
{
|
||||||
char name[128];
|
char name[128];
|
||||||
|
int val;
|
||||||
Com_sprintf(name, sizeof(name), "disable_%s", item->classname);
|
Com_sprintf(name, sizeof(name), "disable_%s", item->classname);
|
||||||
return trap_Cvar_VariableIntegerValue( name );
|
|
||||||
|
val = trap_Cvar_VariableIntegerValue( name );
|
||||||
|
|
||||||
|
if ( !val )
|
||||||
|
{
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( val == 2 )
|
||||||
|
{
|
||||||
|
if ( !level.gametypeData->pickupsDisabled )
|
||||||
|
{
|
||||||
|
return qfalse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -188,6 +188,7 @@ typedef enum
|
||||||
SPECTATOR_NOT,
|
SPECTATOR_NOT,
|
||||||
SPECTATOR_FREE,
|
SPECTATOR_FREE,
|
||||||
SPECTATOR_FOLLOW,
|
SPECTATOR_FOLLOW,
|
||||||
|
SPECTATOR_FOLLOWFIRST,
|
||||||
SPECTATOR_SCOREBOARD
|
SPECTATOR_SCOREBOARD
|
||||||
|
|
||||||
} spectatorState_t;
|
} spectatorState_t;
|
||||||
|
@ -233,6 +234,7 @@ typedef struct
|
||||||
team_t team; // current team
|
team_t team; // current team
|
||||||
int spectatorTime; // for determining next-in-line to play
|
int spectatorTime; // for determining next-in-line to play
|
||||||
spectatorState_t spectatorState;
|
spectatorState_t spectatorState;
|
||||||
|
qboolean spectatorFirstPerson; // First person following?
|
||||||
int spectatorClient; // for chasecam and follow mode
|
int spectatorClient; // for chasecam and follow mode
|
||||||
int score; // total score
|
int score; // total score
|
||||||
int kills; // number of kills
|
int kills; // number of kills
|
||||||
|
@ -241,6 +243,8 @@ typedef struct
|
||||||
int teamkillDamage; // amount of damage death to teammates
|
int teamkillDamage; // amount of damage death to teammates
|
||||||
int teamkillForgiveTime; // time when team damage will be forgivin
|
int teamkillForgiveTime; // time when team damage will be forgivin
|
||||||
qboolean noTeamChange; // cant change teams when this is true (rt_none only)
|
qboolean noTeamChange; // cant change teams when this is true (rt_none only)
|
||||||
|
int chatIgnoreClients[2]; // Clients which are ignoring this client. [0] = (0-31) [1] = (32-63)
|
||||||
|
qboolean muted;
|
||||||
|
|
||||||
} clientSession_t;
|
} clientSession_t;
|
||||||
|
|
||||||
|
@ -362,7 +366,7 @@ struct gclient_s
|
||||||
int voiceFloodTimer; // Timer used to forgive voice chat flooding
|
int voiceFloodTimer; // Timer used to forgive voice chat flooding
|
||||||
int voiceFloodCount; // Amount of voice chats that need to be forgivin
|
int voiceFloodCount; // Amount of voice chats that need to be forgivin
|
||||||
int voiceFloodPenalty; // Time when a client can voice chat again
|
int voiceFloodPenalty; // Time when a client can voice chat again
|
||||||
|
|
||||||
// Anti-lag information
|
// Anti-lag information
|
||||||
gantilag_t antilag[MAX_ANTILAG];
|
gantilag_t antilag[MAX_ANTILAG];
|
||||||
gantilag_t antilagUndo;
|
gantilag_t antilagUndo;
|
||||||
|
@ -424,6 +428,7 @@ typedef struct
|
||||||
int globalVoiceTime; // last global voice
|
int globalVoiceTime; // last global voice
|
||||||
|
|
||||||
int teamScores[TEAM_NUM_TEAMS];
|
int teamScores[TEAM_NUM_TEAMS];
|
||||||
|
int teamAliveCount[TEAM_NUM_TEAMS];
|
||||||
int lastTeamLocationTime; // last time of client team location update
|
int lastTeamLocationTime; // last time of client team location update
|
||||||
|
|
||||||
qboolean newSession; // don't use any old session data, because
|
qboolean newSession; // don't use any old session data, because
|
||||||
|
@ -607,6 +612,7 @@ void G_Sound( gentity_t *ent, int channel, int soundIndex );
|
||||||
void G_SoundAtLoc( vec3_t loc, int channel, int soundIndex );
|
void G_SoundAtLoc( vec3_t loc, int channel, int soundIndex );
|
||||||
void G_EntitySound( gentity_t *ent, int channel, int soundIndex );
|
void G_EntitySound( gentity_t *ent, int channel, int soundIndex );
|
||||||
void G_FreeEntity( gentity_t *e );
|
void G_FreeEntity( gentity_t *e );
|
||||||
|
void G_FreeEnitityChildren( gentity_t* ent );
|
||||||
qboolean G_EntitiesFree( void );
|
qboolean G_EntitiesFree( void );
|
||||||
|
|
||||||
void G_TouchTriggers (gentity_t *ent);
|
void G_TouchTriggers (gentity_t *ent);
|
||||||
|
@ -747,6 +753,8 @@ void G_UpdateClientAnimations ( gentity_t* ent );
|
||||||
void G_SetRespawnTimer ( gentity_t* ent );
|
void G_SetRespawnTimer ( gentity_t* ent );
|
||||||
gentity_t* G_FindNearbyClient ( vec3_t origin, team_t team, float radius, gentity_t* ignore );
|
gentity_t* G_FindNearbyClient ( vec3_t origin, team_t team, float radius, gentity_t* ignore );
|
||||||
void G_AddClientSpawn ( gentity_t* ent, team_t team );
|
void G_AddClientSpawn ( gentity_t* ent, team_t team );
|
||||||
|
qboolean G_IsClientChatIgnored ( int ignorer, int ingnoree );
|
||||||
|
void G_IgnoreClientChat ( int ignorer, int ignoree, qboolean ignore );
|
||||||
|
|
||||||
//
|
//
|
||||||
// g_svcmds.c
|
// g_svcmds.c
|
||||||
|
@ -826,7 +834,8 @@ qboolean G_BotConnect( int clientNum, qboolean restart );
|
||||||
void Svcmd_AddBot_f( void );
|
void Svcmd_AddBot_f( void );
|
||||||
void Svcmd_BotList_f( void );
|
void Svcmd_BotList_f( void );
|
||||||
void BotInterbreedEndMatch( void );
|
void BotInterbreedEndMatch( void );
|
||||||
qboolean G_DoesMapSupportGametype ( const char* gametype );
|
qboolean G_DoesMapSupportGametype ( const char* gametype );
|
||||||
|
qboolean G_DoesMapExist ( const char* mapname );
|
||||||
void G_LoadArenas ( void );
|
void G_LoadArenas ( void );
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -837,11 +846,11 @@ gentity_t* G_SpawnGametypeItem ( const char* pickup_name, qboolean dropped,
|
||||||
gentity_t* G_SelectRandomGametypeSpawnPoint ( team_t team );
|
gentity_t* G_SelectRandomGametypeSpawnPoint ( team_t team );
|
||||||
qboolean G_ParseGametypeFile ( void );
|
qboolean G_ParseGametypeFile ( void );
|
||||||
qboolean G_ExecuteGametypeScript ( gentity_t* activator, const char* name );
|
qboolean G_ExecuteGametypeScript ( gentity_t* activator, const char* name );
|
||||||
void G_ResetGametype ( void );
|
void G_ResetGametype ( qboolean fullRestart );
|
||||||
qboolean G_CanGametypeTriggerBeUsed ( gentity_t* self, gentity_t* activator );
|
qboolean G_CanGametypeTriggerBeUsed ( gentity_t* self, gentity_t* activator );
|
||||||
void G_ResetGametypeItem ( gitem_t* item );
|
void G_ResetGametypeItem ( gitem_t* item );
|
||||||
void gametype_item_use ( gentity_t* self, gentity_t* other );
|
void gametype_item_use ( gentity_t* self, gentity_t* other );
|
||||||
void G_DropGametypeItems ( gentity_t* self );
|
void G_DropGametypeItems ( gentity_t* self, int delayPickup );
|
||||||
|
|
||||||
// ai_main.c
|
// ai_main.c
|
||||||
#define MAX_FILEPATH 144
|
#define MAX_FILEPATH 144
|
||||||
|
@ -928,6 +937,8 @@ extern vmCvar_t g_teamkillPenalty;
|
||||||
extern vmCvar_t g_teamkillDamageMax;
|
extern vmCvar_t g_teamkillDamageMax;
|
||||||
extern vmCvar_t g_teamkillDamageForgive;
|
extern vmCvar_t g_teamkillDamageForgive;
|
||||||
extern vmCvar_t g_teamkillBanTime;
|
extern vmCvar_t g_teamkillBanTime;
|
||||||
|
extern vmCvar_t g_teamkillNoExcuseTime;
|
||||||
|
extern vmCvar_t g_teamkillNoExcuseMultiplier;
|
||||||
extern vmCvar_t g_voiceFloodCount;
|
extern vmCvar_t g_voiceFloodCount;
|
||||||
extern vmCvar_t g_voiceFloodPenalty;
|
extern vmCvar_t g_voiceFloodPenalty;
|
||||||
extern vmCvar_t g_voiceTalkingGhosts;
|
extern vmCvar_t g_voiceTalkingGhosts;
|
||||||
|
|
|
@ -79,6 +79,8 @@ vmCvar_t g_teamkillPenalty; // Amount of score added for killing a teammates
|
||||||
vmCvar_t g_teamkillDamageMax; // max damage one can do to teammates before being kicked
|
vmCvar_t g_teamkillDamageMax; // max damage one can do to teammates before being kicked
|
||||||
vmCvar_t g_teamkillDamageForgive; // amount of teamkill damage forgiven each minute
|
vmCvar_t g_teamkillDamageForgive; // amount of teamkill damage forgiven each minute
|
||||||
vmCvar_t g_teamkillBanTime; // number of minutes to ban someone for after being kicked
|
vmCvar_t g_teamkillBanTime; // number of minutes to ban someone for after being kicked
|
||||||
|
vmCvar_t g_teamkillNoExcuseTime; // number of seconds into a round where tk damage is inexcusable
|
||||||
|
vmCvar_t g_teamkillNoExcuseMultiplier; // multipier for tk damage that is inexcusable
|
||||||
vmCvar_t g_voiceFloodCount; // Number of voice messages in one minute to be concidered flooding
|
vmCvar_t g_voiceFloodCount; // Number of voice messages in one minute to be concidered flooding
|
||||||
vmCvar_t g_voiceFloodPenalty; // Amount of time a void flooder must wait before they can use voice again
|
vmCvar_t g_voiceFloodPenalty; // Amount of time a void flooder must wait before they can use voice again
|
||||||
vmCvar_t g_suddenDeath;
|
vmCvar_t g_suddenDeath;
|
||||||
|
@ -166,7 +168,28 @@ static cvarTable_t gameCvarTable[] =
|
||||||
|
|
||||||
{ &g_roundstartdelay, "g_roundstartdelay", "5", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
{ &g_roundstartdelay, "g_roundstartdelay", "5", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
||||||
|
|
||||||
{ &g_availableWeapons, "g_availableWeapons", "22222222222211", CVAR_ARCHIVE|CVAR_SERVERINFO|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
{ &g_availableWeapons, "g_availableWeapons", "0", CVAR_SERVERINFO|CVAR_ROM|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
|
||||||
|
{ NULL, "disable_weapon_knife", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_US_SOCOM", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M19", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_silvertalon", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_microuzi", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M3A1", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_MP5", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_USAS_12", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M590", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_MSG90A1", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M4", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_AK_74", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_SIG551", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M60", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_RPG_7", "2", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_MM_1", "2", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M84", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_SMOHG92", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_AN_M14", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
{ NULL, "disable_pickup_weapon_M15", "0", CVAR_ARCHIVE|CVAR_LATCH, 0.0, 0.0, 0, qfalse },
|
||||||
|
|
||||||
{ &g_forceFollow, "g_forceFollow", "0", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
{ &g_forceFollow, "g_forceFollow", "0", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
||||||
{ &g_followEnemy, "g_followEnemy", "1", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
{ &g_followEnemy, "g_followEnemy", "1", CVAR_ARCHIVE, 0.0, 0.0, 0, qfalse },
|
||||||
|
@ -180,10 +203,12 @@ static cvarTable_t gameCvarTable[] =
|
||||||
{ &g_voiceFloodCount, "g_voiceFloodCount", "6", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_voiceFloodCount, "g_voiceFloodCount", "6", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ &g_voiceFloodPenalty, "g_voiceFloodPenalty", "60", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_voiceFloodPenalty, "g_voiceFloodPenalty", "60", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
|
||||||
{ &g_teamkillPenalty, "g_teamkillPenalty", "-1", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_teamkillPenalty, "g_teamkillPenalty", "-1", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ &g_teamkillDamageMax, "g_teamkillDamageMax", "300", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_teamkillDamageMax, "g_teamkillDamageMax", "300", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ &g_teamkillDamageForgive, "g_teamkillDamageForgive", "50", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_teamkillDamageForgive, "g_teamkillDamageForgive", "50", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ &g_teamkillBanTime, "g_teamkillBanTime", "5", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_teamkillBanTime, "g_teamkillBanTime", "5", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
{ &g_teamkillNoExcuseTime, "g_teamkillNoExcuseTime", "8", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
{ &g_teamkillNoExcuseMultiplier, "g_teamkillNoExcuseMultiplier", "3", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
|
||||||
{ &g_suddenDeath, "g_suddenDeath", "1", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ &g_suddenDeath, "g_suddenDeath", "1", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
|
||||||
|
@ -417,6 +442,47 @@ void G_UpdateCvars( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
G_UpdateAvailableWeapons
|
||||||
|
|
||||||
|
Updates the g_availableWeapons cvar using the disable cvars.
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
void G_UpdateAvailableWeapons ( void )
|
||||||
|
{
|
||||||
|
weapon_t weapon;
|
||||||
|
char available[WP_NUM_WEAPONS+1];
|
||||||
|
|
||||||
|
memset ( available, 0, sizeof(available) );
|
||||||
|
|
||||||
|
for ( weapon = WP_KNIFE; weapon < WP_NUM_WEAPONS; weapon ++ )
|
||||||
|
{
|
||||||
|
gitem_t* item = BG_FindWeaponItem ( weapon );
|
||||||
|
if ( !item )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( (int)trap_Cvar_VariableValue ( va("disable_%s", item->classname ) ) )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
available[weapon-1] = '2';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
available[weapon-1] = '0';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
available[weapon-1] = '1';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_Cvar_Set ( "g_availableWeapons", available );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
G_SetGametype
|
G_SetGametype
|
||||||
|
@ -512,6 +578,9 @@ void G_InitGame( int levelTime, int randomSeed, int restart )
|
||||||
// Set the current gametype
|
// Set the current gametype
|
||||||
G_SetGametype(g_gametype.string);
|
G_SetGametype(g_gametype.string);
|
||||||
|
|
||||||
|
// Sets the available weapons cvar from the disable_ cvars.
|
||||||
|
G_UpdateAvailableWeapons ( );
|
||||||
|
|
||||||
// Set the available outfitting
|
// Set the available outfitting
|
||||||
BG_SetAvailableOutfitting ( g_availableWeapons.string );
|
BG_SetAvailableOutfitting ( g_availableWeapons.string );
|
||||||
|
|
||||||
|
@ -1362,15 +1431,18 @@ void CheckExitRules( void )
|
||||||
// Check to see if the timelimit was hit
|
// Check to see if the timelimit was hit
|
||||||
if ( g_timelimit.integer && !level.warmupTime )
|
if ( g_timelimit.integer && !level.warmupTime )
|
||||||
{
|
{
|
||||||
if ( level.time - level.startTime >= (g_timelimit.integer + level.timeExtension)*60000 )
|
if ( level.gametypeData->respawnType != RT_NONE || level.gametypeResetTime )
|
||||||
{
|
{
|
||||||
gentity_t* tent;
|
if ( level.time - level.startTime >= (g_timelimit.integer + level.timeExtension)*60000 )
|
||||||
tent = G_TempEntity( vec3_origin, EV_GAME_OVER );
|
{
|
||||||
tent->s.eventParm = GAME_OVER_TIMELIMIT;
|
gentity_t* tent;
|
||||||
tent->r.svFlags = SVF_BROADCAST;
|
tent = G_TempEntity( vec3_origin, EV_GAME_OVER );
|
||||||
|
tent->s.eventParm = GAME_OVER_TIMELIMIT;
|
||||||
|
tent->r.svFlags = SVF_BROADCAST;
|
||||||
|
|
||||||
LogExit( "Timelimit hit." );
|
LogExit( "Timelimit hit." );
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1509,10 +1581,12 @@ void CheckWarmup ( void )
|
||||||
// if the warmup time has counted down, restart
|
// if the warmup time has counted down, restart
|
||||||
if ( level.time > level.warmupTime )
|
if ( level.time > level.warmupTime )
|
||||||
{
|
{
|
||||||
level.warmupTime += 10000;
|
// level.warmupTime += 10000;
|
||||||
trap_Cvar_Set( "g_restarted", "1" );
|
// trap_Cvar_Set( "g_restarted", "1" );
|
||||||
trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
|
|
||||||
level.restarted = qtrue;
|
G_ResetGametype ( qtrue );
|
||||||
|
// trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
|
||||||
|
// level.restarted = qtrue;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ void G_ExplodeMissile( gentity_t *ent ) {
|
||||||
if (ent->dflags & DAMAGE_AREA_DAMAGE)
|
if (ent->dflags & DAMAGE_AREA_DAMAGE)
|
||||||
{
|
{
|
||||||
// do damage over time rather than instantly
|
// do damage over time rather than instantly
|
||||||
G_CreateDamageArea ( ent->r.currentOrigin, ent->parent, ent->splashDamage*0.05f,ent->splashRadius, 8000,ent->methodOfDeath );
|
G_CreateDamageArea ( ent->r.currentOrigin, ent->parent, ent->splashDamage*0.06f,ent->splashRadius, 8000,ent->methodOfDeath );
|
||||||
|
|
||||||
// do some instant damage
|
// do some instant damage
|
||||||
G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->damage, ent->splashRadius, ent,
|
G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->damage, ent->splashRadius, ent,
|
||||||
|
@ -443,7 +443,7 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace )
|
||||||
if (ent->dflags & DAMAGE_AREA_DAMAGE)
|
if (ent->dflags & DAMAGE_AREA_DAMAGE)
|
||||||
{
|
{
|
||||||
// do damage over time rather than instantly
|
// do damage over time rather than instantly
|
||||||
G_CreateDamageArea ( trace->endpos, ent->parent, ent->splashDamage*0.10f,ent->splashRadius*2, 8000,ent->methodOfDeath );
|
G_CreateDamageArea ( trace->endpos, ent->parent, ent->splashDamage*0.06f,ent->splashRadius*2, 8000,ent->methodOfDeath );
|
||||||
|
|
||||||
// do some instant damage
|
// do some instant damage
|
||||||
G_RadiusDamage( trace->endpos, ent->parent, ent->damage, ent->splashRadius, other,
|
G_RadiusDamage( trace->endpos, ent->parent, ent->damage, ent->splashRadius, other,
|
||||||
|
@ -554,21 +554,13 @@ void G_RunMissile( gentity_t *ent )
|
||||||
if ( tr.fraction != 1 )
|
if ( tr.fraction != 1 )
|
||||||
{
|
{
|
||||||
// Hit the sky or moving through something
|
// Hit the sky or moving through something
|
||||||
if ( tr.surfaceFlags & SURF_NOIMPACT )
|
if ( (tr.surfaceFlags & SURF_NOIMPACT) && (tr.surfaceFlags & SURF_SKY) )
|
||||||
{
|
{
|
||||||
// Dont kill a missle that hits the sky and has gravity
|
// Dont kill a missle that hits the sky and has gravity
|
||||||
if ( tr.surfaceFlags & SURF_SKY )
|
ent->s.eFlags |= EF_INSKY;
|
||||||
{
|
ent->r.svFlags |= SVF_BROADCAST;
|
||||||
ent->s.eFlags |= EF_INSKY;
|
VectorCopy ( origin, ent->r.currentOrigin );
|
||||||
ent->r.svFlags |= SVF_BROADCAST;
|
trap_LinkEntity( ent );
|
||||||
VectorCopy ( origin, ent->r.currentOrigin );
|
|
||||||
trap_LinkEntity( ent );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
G_FreeEntity( ent );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,10 @@
|
||||||
|
|
||||||
#define SVF_GLASS_BRUSH 0x08000000 // Ent is a glass brush
|
#define SVF_GLASS_BRUSH 0x08000000 // Ent is a glass brush
|
||||||
|
|
||||||
#define SVF_DOUBLED_BBOX 0x00001000 // Bounding box has been doubled
|
#define SVF_INFLATED_BBOX 0x00001000 // Bounding box has been doubled
|
||||||
|
#define SVF_LINKHACK 0x10000000 // Hack to link an entity into extra clusters
|
||||||
|
#define SVF_DETAIL 0x20000000 // Entity is a detail entity and can be dropped from the snapshot
|
||||||
|
#define SVF_SKIP 0x80000000 // Dont include this entity in the current snapshot (internal use only)
|
||||||
|
|
||||||
//===============================================================
|
//===============================================================
|
||||||
|
|
||||||
|
@ -63,6 +66,8 @@ typedef struct {
|
||||||
// by the second array index.
|
// by the second array index.
|
||||||
int broadcastClients[2];
|
int broadcastClients[2];
|
||||||
|
|
||||||
|
int detailTime;
|
||||||
|
|
||||||
} entityShared_t;
|
} entityShared_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -261,6 +261,7 @@ spawn_t spawns[] =
|
||||||
{"pickup_ammo", 0},
|
{"pickup_ammo", 0},
|
||||||
{"script_runner", 0},
|
{"script_runner", 0},
|
||||||
{"trigger_arioche_objective", 0},
|
{"trigger_arioche_objective", 0},
|
||||||
|
{"func_brushmodel_child", 0},
|
||||||
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
@ -1017,7 +1018,7 @@ void SP_worldspawn( void )
|
||||||
|
|
||||||
trap_SetConfigstring( CS_MOTD, g_motd.string ); // message of the day
|
trap_SetConfigstring( CS_MOTD, g_motd.string ); // message of the day
|
||||||
|
|
||||||
G_SpawnString( "gravity", "800", &text );
|
G_SpawnString( "gravity", va("%d", g_gravity.integer), &text );
|
||||||
trap_Cvar_Set( "g_gravity", text );
|
trap_Cvar_Set( "g_gravity", text );
|
||||||
|
|
||||||
// Handle all the worldspawn stuff common to both main bsp and sub bsp
|
// Handle all the worldspawn stuff common to both main bsp and sub bsp
|
||||||
|
|
|
@ -103,6 +103,44 @@ void Svcmd_AutoKickList_f ( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Svcmd_Mute_f ( void )
|
||||||
|
{
|
||||||
|
char str[MAX_TOKEN_CHARS];
|
||||||
|
int clientnum;
|
||||||
|
|
||||||
|
if ( trap_Argc() < 2 )
|
||||||
|
{
|
||||||
|
Com_Printf("Usage: mute <clientid>\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_Argv( 1, str, sizeof( str ) );
|
||||||
|
clientnum = atoi ( str );
|
||||||
|
|
||||||
|
if ( clientnum < 0 || clientnum > MAX_CLIENTS )
|
||||||
|
{
|
||||||
|
Com_Printf("invalid client id\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.clients[clientnum].pers.connected != CON_CONNECTED )
|
||||||
|
{
|
||||||
|
Com_Printf("no client connected with that client id\n" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.clients[clientnum].sess.muted = level.clients[clientnum].sess.muted ? qfalse : qtrue;
|
||||||
|
|
||||||
|
if ( level.clients[clientnum].sess.muted )
|
||||||
|
{
|
||||||
|
Com_Printf("client %d muted\n", clientnum );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Com_Printf("client %d unmuted\n", clientnum );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gclient_t *ClientForString( const char *s ) {
|
gclient_t *ClientForString( const char *s ) {
|
||||||
gclient_t *cl;
|
gclient_t *cl;
|
||||||
int i;
|
int i;
|
||||||
|
@ -228,7 +266,8 @@ qboolean ConsoleCommand( void )
|
||||||
|
|
||||||
if (Q_stricmp (cmd, "gametype_restart" ) == 0 )
|
if (Q_stricmp (cmd, "gametype_restart" ) == 0 )
|
||||||
{
|
{
|
||||||
G_ResetGametype ( );
|
trap_Argv( 1, cmd, sizeof( cmd ) );
|
||||||
|
G_ResetGametype ( Q_stricmp ( cmd, "full" ) == 0 );
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,6 +283,12 @@ qboolean ConsoleCommand( void )
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( Q_stricmp ( cmd, "mute" ) == 0 )
|
||||||
|
{
|
||||||
|
Svcmd_Mute_f ( );
|
||||||
|
return qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_dedicated.integer)
|
if (g_dedicated.integer)
|
||||||
{
|
{
|
||||||
if (Q_stricmp (cmd, "say") == 0)
|
if (Q_stricmp (cmd, "say") == 0)
|
||||||
|
|
|
@ -518,6 +518,33 @@ void G_FreeEntity( gentity_t *ed )
|
||||||
ed->inuse = qfalse;
|
ed->inuse = qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
G_FreeEnitityChildren
|
||||||
|
|
||||||
|
Frees any entity that is a child of the given entity
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void G_FreeEnitityChildren( gentity_t* ent )
|
||||||
|
{
|
||||||
|
gentity_t* from;
|
||||||
|
|
||||||
|
for ( from = g_entities; from < &g_entities[level.num_entities] ; from++)
|
||||||
|
{
|
||||||
|
if ( !from->inuse )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( from->parent != ent )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_FreeEntity ( from );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
G_TempEntity
|
G_TempEntity
|
||||||
|
@ -695,6 +722,7 @@ void G_SoundAtLoc( vec3_t loc, int channel, int soundIndex ) {
|
||||||
|
|
||||||
te = G_TempEntity( loc, EV_GENERAL_SOUND );
|
te = G_TempEntity( loc, EV_GENERAL_SOUND );
|
||||||
te->s.eventParm = soundIndex;
|
te->s.eventParm = soundIndex;
|
||||||
|
te->r.svFlags |= SVF_BROADCAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -210,6 +210,8 @@ void G_FireBullet ( gentity_t* ent, int weapon, int attack )
|
||||||
int i;
|
int i;
|
||||||
vec3_t muzzlePoint;
|
vec3_t muzzlePoint;
|
||||||
vec3_t fwd;
|
vec3_t fwd;
|
||||||
|
vec3_t right;
|
||||||
|
vec3_t up;
|
||||||
vec3_t fireAngs;
|
vec3_t fireAngs;
|
||||||
float damageMult;
|
float damageMult;
|
||||||
int hitcount;
|
int hitcount;
|
||||||
|
@ -239,14 +241,14 @@ void G_FireBullet ( gentity_t* ent, int weapon, int attack )
|
||||||
inaccuracy = (float)ent->client->ps.inaccuracy / 1000.0f;
|
inaccuracy = (float)ent->client->ps.inaccuracy / 1000.0f;
|
||||||
if ( detailed )
|
if ( detailed )
|
||||||
{
|
{
|
||||||
if ( ent->client->ps.pm_flags & PMF_DUCKED )
|
if ( ent->client->ps.pm_flags & PMF_JUMPING )
|
||||||
{
|
|
||||||
inaccuracy *= DUCK_ACCURACY_MODIFIER;
|
|
||||||
}
|
|
||||||
else if ( ent->client->ps.pm_flags & PMF_JUMPING )
|
|
||||||
{
|
{
|
||||||
inaccuracy *= JUMP_ACCURACY_MODIFIER;
|
inaccuracy *= JUMP_ACCURACY_MODIFIER;
|
||||||
}
|
}
|
||||||
|
else if ( ent->client->ps.pm_flags & PMF_DUCKED )
|
||||||
|
{
|
||||||
|
inaccuracy *= DUCK_ACCURACY_MODIFIER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Anti-lag
|
// Anti-lag
|
||||||
|
@ -258,18 +260,14 @@ void G_FireBullet ( gentity_t* ent, int weapon, int attack )
|
||||||
|
|
||||||
// Handle leaning
|
// Handle leaning
|
||||||
VectorCopy(ent->client->ps.viewangles, fireAngs);
|
VectorCopy(ent->client->ps.viewangles, fireAngs);
|
||||||
|
|
||||||
|
AngleVectors( fireAngs, fwd, right, up);
|
||||||
|
|
||||||
if ( ent->client->ps.pm_flags & PMF_LEANING )
|
if ( ent->client->ps.pm_flags & PMF_LEANING )
|
||||||
{
|
{
|
||||||
vec3_t right;
|
BG_ApplyLeanOffset ( &ent->client->ps, muzzlePoint );
|
||||||
float leanOffset;
|
|
||||||
|
|
||||||
leanOffset = (float)(ent->client->ps.leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
|
||||||
AngleVectors( fireAngs, NULL, right, NULL );
|
|
||||||
VectorMA( muzzlePoint, leanOffset, right, muzzlePoint );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AngleVectors( fireAngs, fwd, NULL, NULL );
|
|
||||||
|
|
||||||
// Move the start trace back a bit to account for bumping up against someone
|
// Move the start trace back a bit to account for bumping up against someone
|
||||||
VectorMA ( muzzlePoint, -15, fwd, muzzlePoint );
|
VectorMA ( muzzlePoint, -15, fwd, muzzlePoint );
|
||||||
|
|
||||||
|
@ -486,7 +484,7 @@ void G_FireBullet ( gentity_t* ent, int weapon, int attack )
|
||||||
if ( level.time - traceEnt->client->invulnerableTime >= g_respawnInvulnerability.integer * 1000 )
|
if ( level.time - traceEnt->client->invulnerableTime >= g_respawnInvulnerability.integer * 1000 )
|
||||||
{
|
{
|
||||||
// Shot my a teammate with ff off?
|
// Shot my a teammate with ff off?
|
||||||
if ( !level.gametypeData->teams || (ent->client && !(OnSameTeam(ent,traceEnt) && !g_friendlyFire.integer ) ) )
|
if ( !level.gametypeData->teams || (ent->client && !(OnSameTeam(ent,traceEnt) && (!g_friendlyFire.integer || level.warmupTime) ) ) )
|
||||||
{
|
{
|
||||||
flesh = qtrue;
|
flesh = qtrue;
|
||||||
}
|
}
|
||||||
|
@ -526,6 +524,8 @@ void G_FireBullet ( gentity_t* ent, int weapon, int attack )
|
||||||
tent->s.eventParm <<= MATERIAL_BITS;
|
tent->s.eventParm <<= MATERIAL_BITS;
|
||||||
tent->s.eventParm |= (tr.surfaceFlags & MATERIAL_MASK);
|
tent->s.eventParm |= (tr.surfaceFlags & MATERIAL_MASK);
|
||||||
tent->s.time = weapon + ((attack&0xFF)<<8);
|
tent->s.time = weapon + ((attack&0xFF)<<8);
|
||||||
|
tent->r.detailTime = level.time + rand() % 1000;
|
||||||
|
tent->r.svFlags |= SVF_DETAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tent->s.otherEntityNum = ent->s.number;
|
tent->s.otherEntityNum = ent->s.number;
|
||||||
|
@ -601,12 +601,7 @@ gentity_t* G_FireProjectile ( gentity_t *ent, weapon_t weapon, attackType_t atta
|
||||||
|
|
||||||
if ( ent->client->ps.pm_flags & PMF_LEANING )
|
if ( ent->client->ps.pm_flags & PMF_LEANING )
|
||||||
{
|
{
|
||||||
float leanOffset;
|
BG_ApplyLeanOffset ( &ent->client->ps, muzzlePoint );
|
||||||
|
|
||||||
leanOffset = (float)(ent->client->ps.leanTime - LEAN_TIME) / LEAN_TIME * LEAN_OFFSET;
|
|
||||||
fireAngs[ROLL] += leanOffset / 4;
|
|
||||||
AngleVectors( fireAngs, NULL, right, NULL );
|
|
||||||
VectorMA( muzzlePoint, leanOffset /* * 0.75f */, right, muzzlePoint );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AngleVectors( fireAngs, fwd, right, up );
|
AngleVectors( fireAngs, fwd, right, up );
|
||||||
|
|
|
@ -54,42 +54,44 @@ typedef enum
|
||||||
MODELINDEX_WEAPON_KNIFE, // 6
|
MODELINDEX_WEAPON_KNIFE, // 6
|
||||||
MODELINDEX_WEAPON_SOCOM,
|
MODELINDEX_WEAPON_SOCOM,
|
||||||
MODELINDEX_WEAPON_M19,
|
MODELINDEX_WEAPON_M19,
|
||||||
MODELINDEX_WEAPON_MICROUZI,
|
MODELINDEX_WEAPON_SILVERTALON,
|
||||||
MODELINDEX_WEAPON_M3A1,
|
MODELINDEX_WEAPON_MICROUZI,
|
||||||
|
|
||||||
MODELINDEX_WEAPON_USAS12, // 11
|
MODELINDEX_WEAPON_M3A1, // 11
|
||||||
|
MODELINDEX_WEAPON_MP5,
|
||||||
|
MODELINDEX_WEAPON_USAS12,
|
||||||
MODELINDEX_WEAPON_M590,
|
MODELINDEX_WEAPON_M590,
|
||||||
MODELINDEX_WEAPON_MSG90A1,
|
MODELINDEX_WEAPON_MSG90A1,
|
||||||
MODELINDEX_WEAPON_M4,
|
|
||||||
MODELINDEX_WEAPON_AK74,
|
|
||||||
|
|
||||||
MODELINDEX_WEAPON_M60, // 16
|
MODELINDEX_WEAPON_M4, // 16
|
||||||
|
MODELINDEX_WEAPON_AK74,
|
||||||
|
MODELINDEX_WEAPON_SIG551,
|
||||||
|
MODELINDEX_WEAPON_M60,
|
||||||
MODELINDEX_WEAPON_RPG7,
|
MODELINDEX_WEAPON_RPG7,
|
||||||
MODELINDEX_WEAPON_MM1,
|
|
||||||
|
MODELINDEX_WEAPON_MM1, // 21
|
||||||
MODELINDEX_WEAPON_M84,
|
MODELINDEX_WEAPON_M84,
|
||||||
MODELINDEX_WEAPON_SMOHG92,
|
MODELINDEX_WEAPON_SMOHG92,
|
||||||
|
MODELINDEX_WEAPON_ANM14,
|
||||||
MODELINDEX_WEAPON_ANM14, // 21
|
|
||||||
MODELINDEX_WEAPON_M15,
|
MODELINDEX_WEAPON_M15,
|
||||||
MODELINDEX_WEAPON_MP5,
|
|
||||||
|
|
||||||
MODELINDEX_AMMO_045,
|
MODELINDEX_AMMO_045, // 26
|
||||||
MODELINDEX_AMMO_9MM,
|
MODELINDEX_AMMO_9MM,
|
||||||
MODELINDEX_AMMO_12GAUGE,
|
MODELINDEX_AMMO_12GAUGE,
|
||||||
|
MODELINDEX_AMMO_762,
|
||||||
|
MODELINDEX_AMMO_556,
|
||||||
|
|
||||||
MODELINDEX_AMMO_762, // 26
|
MODELINDEX_AMMO_40MM, // 31
|
||||||
MODELINDEX_AMMO_556,
|
|
||||||
MODELINDEX_AMMO_40MM,
|
|
||||||
MODELINDEX_AMMO_RPG7,
|
MODELINDEX_AMMO_RPG7,
|
||||||
MODELINDEX_BACKPACK,
|
MODELINDEX_BACKPACK,
|
||||||
|
|
||||||
MODELINDEX_GAMETYPE_ITEM, // 31
|
MODELINDEX_GAMETYPE_ITEM, // 34
|
||||||
MODELINDEX_GAMETYPE_ITEM_2,
|
MODELINDEX_GAMETYPE_ITEM_2,
|
||||||
MODELINDEX_GAMETYPE_ITEM_3,
|
MODELINDEX_GAMETYPE_ITEM_3,
|
||||||
MODELINDEX_GAMETYPE_ITEM_4,
|
MODELINDEX_GAMETYPE_ITEM_4,
|
||||||
MODELINDEX_GAMETYPE_ITEM_5,
|
MODELINDEX_GAMETYPE_ITEM_5,
|
||||||
|
|
||||||
MODELINDEX_ARMOR, // 36
|
MODELINDEX_ARMOR, // 39
|
||||||
MODELINDEX_NIGHTVISION,
|
MODELINDEX_NIGHTVISION,
|
||||||
MODELINDEX_THERMAL,
|
MODELINDEX_THERMAL,
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,49 @@
|
||||||
// q_shared.h -- included first by ALL program modules.
|
// q_shared.h -- included first by ALL program modules.
|
||||||
// A user mod should never modify this file
|
// A user mod should never modify this file
|
||||||
|
|
||||||
#ifdef GERMAN_BUILD
|
//#define Q3_VERSION "SOF2MP V0.01" sent on 11/26/2001
|
||||||
#define Q3_VERSION "SOF2MP V1.01g" // sent on 6/10/2002
|
//#define Q3_VERSION "SOF2MP V0.02" sent on 12/10/2001
|
||||||
#define SOF2_VERSION_ID "1.01g" // sent on 6/10/2002
|
//#define Q3_VERSION "SOF2MP V0.03" sent on 12/16/2001
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.081" sent on 1/15/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.09" sent on 1/24/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.10" sent on 1/31/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.11" sent on 2/7/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.12" sent on 2/14/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.13" sent on 2/21/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.13b" public beta #1 on 3/1/3002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.14" sent on 3/4/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.15" sent on 3/11/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.15b" public beta #2 on 3/13/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.16" sent on 3/18/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.16b" public beta #3 on 3/20/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.17" sent on 3/24/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP TEST V1.01t" sent on 3/28/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.18" sent on 4/1/2002 - April Fools!
|
||||||
|
//#define Q3_VERSION "SOF2MP V1.02t" sent on 4/5/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.19" sent on 4/8/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.20" sent on 4/15/2002 - Tax Day!
|
||||||
|
//#define Q3_VERSION "SOF2MP V0.21" sent on 4/22/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V1.00.22" sent on 4/26/2002
|
||||||
|
//#define Q3_VERSION "SOF2MP V1.00.23" sent on 4/27/2002
|
||||||
|
#if !defined(_SOF2DEV_) || defined(_DEBUG)
|
||||||
|
#ifdef GERMAN_BUILD
|
||||||
|
// #define Q3_VERSION "SOF2MP V1.00g"
|
||||||
|
#define Q3_VERSION "SOF2MP V1.02g" // sent on 6/10/2002
|
||||||
|
// #define SOF2_VERSION_ID "1.00g"
|
||||||
|
#define SOF2_VERSION_ID "1.02g" // sent on 6/10/2002
|
||||||
|
#else
|
||||||
|
// #define Q3_VERSION "SOF2MP V1.00"
|
||||||
|
#define Q3_VERSION "SOF2MP V1.02" // sent on 6/10/2002
|
||||||
|
// #define SOF2_VERSION_ID "1.00"
|
||||||
|
#define SOF2_VERSION_ID "1.02" // sent on 6/10/2002
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define Q3_VERSION "SOF2MP V1.01" // sent on 6/10/2002
|
|
||||||
#define SOF2_VERSION_ID "1.01" // sent on 6/10/2002
|
#define Q3_VERSION "SOF2MP V1.02 Developer" // sent on 6/10/2002
|
||||||
|
// #define SOF2_VERSION_ID "1.00"
|
||||||
|
#define SOF2_VERSION_ID "1.02D" // sent on 6/10/2002
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define SPECIAL_PRE_CACHE 1
|
//#define SPECIAL_PRE_CACHE 1
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,6 +17,7 @@ CFG=gt_ctf - Win32 Debug SoF2
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
!MESSAGE "gt_ctf - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "gt_ctf - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "gt_ctf - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
|
@ -26,8 +27,38 @@ CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "gt_ctf - Win32 Debug SoF2"
|
!IF "$(CFG)" == "gt_ctf - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GT_CTF_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GT_CTF_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "gt_ctf - Win32 Debug SoF2"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "..\..\Debug"
|
# PROP Output_Dir "..\..\Debug"
|
||||||
|
@ -51,6 +82,7 @@ LINK32=link.exe
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "gt_ctf - Win32 Debug"
|
||||||
# Name "gt_ctf - Win32 Debug SoF2"
|
# Name "gt_ctf - Win32 Debug SoF2"
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,9 @@ static cvarTable_t gametypeCvarTable[] =
|
||||||
// don't override the cheat state set by the system
|
// don't override the cheat state set by the system
|
||||||
{ >_flagReturnTime, "gt_flagReturnTime", "30", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ >_flagReturnTime, "gt_flagReturnTime", "30", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ >_simpleScoring, "gt_simpleScoring", "0", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ >_simpleScoring, "gt_simpleScoring", "0", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
{ NULL, NULL, NULL, 0, 0.0f, 0.0f, 0, qfalse },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int gametypeCvarTableSize = sizeof( gametypeCvarTable ) / sizeof( gametypeCvarTable[0] );
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
vmMain
|
vmMain
|
||||||
|
@ -79,10 +78,9 @@ GT_RegisterCvars
|
||||||
*/
|
*/
|
||||||
void GT_RegisterCvars( void )
|
void GT_RegisterCvars( void )
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
cvarTable_t *cv;
|
cvarTable_t *cv;
|
||||||
|
|
||||||
for ( i = 0, cv = gametypeCvarTable ; i < gametypeCvarTableSize ; i++, cv++ )
|
for ( cv = gametypeCvarTable ; cv->cvarName != NULL; cv++ )
|
||||||
{
|
{
|
||||||
trap_Cvar_Register( cv->vmCvar, cv->cvarName, cv->defaultString, cv->cvarFlags, cv->mMinValue, cv->mMaxValue );
|
trap_Cvar_Register( cv->vmCvar, cv->cvarName, cv->defaultString, cv->cvarFlags, cv->mMinValue, cv->mMaxValue );
|
||||||
|
|
||||||
|
@ -100,10 +98,9 @@ GT_UpdateCvars
|
||||||
*/
|
*/
|
||||||
void GT_UpdateCvars( void )
|
void GT_UpdateCvars( void )
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
cvarTable_t *cv;
|
cvarTable_t *cv;
|
||||||
|
|
||||||
for ( i = 0, cv = gametypeCvarTable ; i < gametypeCvarTableSize ; i++, cv++ )
|
for ( cv = gametypeCvarTable ; cv->cvarName != NULL; cv++ )
|
||||||
{
|
{
|
||||||
if ( cv->vmCvar )
|
if ( cv->vmCvar )
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,8 +23,6 @@ CFG=gt_dem - Win32 Debug SoF2
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
# PROP Scc_ProjName ""$/SoF2/code/gametype/gt_dem", ZRDAAAAA"
|
|
||||||
# PROP Scc_LocalPath "."
|
|
||||||
CPP=cl.exe
|
CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
|
@ -41,7 +41,7 @@ static cvarTable_t gametypeCvarTable[] =
|
||||||
{ >_bombDefuseTime, "gt_bombDefuseTime", "3", CVAR_ARCHIVE|CVAR_LATCH, 0.0f, 0.0f, 0, qfalse },
|
{ >_bombDefuseTime, "gt_bombDefuseTime", "3", CVAR_ARCHIVE|CVAR_LATCH, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ >_bombPlantTime, "gt_bombPlantTime", "3", CVAR_ARCHIVE|CVAR_LATCH, 0.0f, 0.0f, 0, qfalse },
|
{ >_bombPlantTime, "gt_bombPlantTime", "3", CVAR_ARCHIVE|CVAR_LATCH, 0.0f, 0.0f, 0, qfalse },
|
||||||
{ >_simpleScoring, "gt_simpleScoring", "0", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
{ >_simpleScoring, "gt_simpleScoring", "0", CVAR_ARCHIVE, 0.0f, 0.0f, 0, qfalse },
|
||||||
|
{ NULL, NULL, NULL, 0, 0.0f, 0.0f, 0, qfalse },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int gametypeCvarTableSize = sizeof( gametypeCvarTable ) / sizeof( gametypeCvarTable[0] );
|
static int gametypeCvarTableSize = sizeof( gametypeCvarTable ) / sizeof( gametypeCvarTable[0] );
|
||||||
|
@ -88,10 +88,9 @@ GT_RegisterCvars
|
||||||
*/
|
*/
|
||||||
void GT_RegisterCvars( void )
|
void GT_RegisterCvars( void )
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
cvarTable_t *cv;
|
cvarTable_t *cv;
|
||||||
|
|
||||||
for ( i = 0, cv = gametypeCvarTable ; i < gametypeCvarTableSize ; i++, cv++ )
|
for ( cv = gametypeCvarTable ; cv->cvarName != NULL; cv++ )
|
||||||
{
|
{
|
||||||
trap_Cvar_Register( cv->vmCvar, cv->cvarName, cv->defaultString, cv->cvarFlags, cv->mMinValue, cv->mMaxValue );
|
trap_Cvar_Register( cv->vmCvar, cv->cvarName, cv->defaultString, cv->cvarFlags, cv->mMinValue, cv->mMaxValue );
|
||||||
|
|
||||||
|
@ -109,10 +108,9 @@ GT_UpdateCvars
|
||||||
*/
|
*/
|
||||||
void GT_UpdateCvars( void )
|
void GT_UpdateCvars( void )
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
cvarTable_t *cv;
|
cvarTable_t *cv;
|
||||||
|
|
||||||
for ( i = 0, cv = gametypeCvarTable ; i < gametypeCvarTableSize ; i++, cv++ )
|
for ( cv = gametypeCvarTable ; cv->cvarName != NULL; cv++ )
|
||||||
{
|
{
|
||||||
if ( cv->vmCvar )
|
if ( cv->vmCvar )
|
||||||
{
|
{
|
||||||
|
@ -248,12 +246,12 @@ void GT_RunFrame ( int time )
|
||||||
trap_Cmd_TextMessage ( -1, "Blue team has destroyed the target!" );
|
trap_Cmd_TextMessage ( -1, "Blue team has destroyed the target!" );
|
||||||
trap_Cmd_StartGlobalSound ( gametype.bombExplodedSound );
|
trap_Cmd_StartGlobalSound ( gametype.bombExplodedSound );
|
||||||
trap_Cmd_Restart ( 5 );
|
trap_Cmd_Restart ( 5 );
|
||||||
}
|
|
||||||
|
|
||||||
// Give the guy who planted it some props
|
// Give the guy who planted it some props
|
||||||
if ( !gt_simpleScoring.integer )
|
if ( !gt_simpleScoring.integer )
|
||||||
{
|
{
|
||||||
trap_Cmd_AddClientScore ( gametype.bombPlantClient, 10 );
|
trap_Cmd_AddClientScore ( gametype.bombPlantClient, 10 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gametype.bombPlantTime = 0;
|
gametype.bombPlantTime = 0;
|
||||||
|
@ -341,6 +339,7 @@ int GT_Event ( int cmd, int time, int arg0, int arg1, int arg2, int arg3, int ar
|
||||||
trap_Cmd_TextMessage ( -1, "Red team has defended the bomb site!" );
|
trap_Cmd_TextMessage ( -1, "Red team has defended the bomb site!" );
|
||||||
trap_Cmd_AddTeamScore ( TEAM_RED, 1 );
|
trap_Cmd_AddTeamScore ( TEAM_RED, 1 );
|
||||||
trap_Cmd_Restart ( 5 );
|
trap_Cmd_Restart ( 5 );
|
||||||
|
gametype.roundOver = qtrue;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GTEV_TEAM_ELIMINATED:
|
case GTEV_TEAM_ELIMINATED:
|
||||||
|
@ -380,11 +379,11 @@ int GT_Event ( int cmd, int time, int arg0, int arg1, int arg2, int arg3, int ar
|
||||||
trap_Cmd_Restart ( 5 );
|
trap_Cmd_Restart ( 5 );
|
||||||
gametype.roundOver = qtrue;
|
gametype.roundOver = qtrue;
|
||||||
|
|
||||||
// Give the guy who defused it some props
|
// Give the guy who defused it some props
|
||||||
if ( !gt_simpleScoring.integer )
|
if ( !gt_simpleScoring.integer )
|
||||||
{
|
{
|
||||||
trap_Cmd_AddClientScore ( arg1, 10 );
|
trap_Cmd_AddClientScore ( arg1, 10 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ CFG=gt_dm - Win32 Debug SoF2
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
!MESSAGE "gt_dm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "gt_dm - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "gt_dm - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
|
@ -26,8 +27,38 @@ CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "gt_dm - Win32 Debug SoF2"
|
!IF "$(CFG)" == "gt_dm - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_dm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_dm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "gt_dm - Win32 Debug SoF2"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "..\..\Debug"
|
# PROP Output_Dir "..\..\Debug"
|
||||||
|
@ -51,6 +82,7 @@ LINK32=link.exe
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "gt_dm - Win32 Debug"
|
||||||
# Name "gt_dm - Win32 Debug SoF2"
|
# Name "gt_dm - Win32 Debug SoF2"
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@ set cc=..\..\..\..\bin\sof2lcc -A -DQ3_VM -DMISSIONPACK -S -Wf-target=bytecode -
|
||||||
..\..\..\..\bin\sof2asm -f ../gt_elim
|
..\..\..\..\bin\sof2asm -f ../gt_elim
|
||||||
@if errorlevel 1 goto quit
|
@if errorlevel 1 goto quit
|
||||||
|
|
||||||
mkdir "..\..\..\..\base\vm"
|
mkdir "..\..\..\Debug\base\MP\vm"
|
||||||
copy *.map "..\..\..\..\base\vm"
|
copy *.map "..\..\..\Debug\base\MP\vm"
|
||||||
copy *.qvm "..\..\..\..\base\vm"
|
copy *.qvm "..\..\..\Debug\base\MP\vm"
|
||||||
|
|
||||||
:quit
|
:quit
|
||||||
cd ..
|
cd ..
|
||||||
|
|
|
@ -17,6 +17,7 @@ CFG=gt_inf - Win32 Debug SoF2
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
!MESSAGE "gt_inf - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "gt_inf - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "gt_inf - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
|
@ -26,8 +27,38 @@ CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "gt_inf - Win32 Debug SoF2"
|
!IF "$(CFG)" == "gt_inf - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_inf_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_inf_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "gt_inf - Win32 Debug SoF2"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "..\..\Debug"
|
# PROP Output_Dir "..\..\Debug"
|
||||||
|
@ -51,6 +82,7 @@ LINK32=link.exe
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "gt_inf - Win32 Debug"
|
||||||
# Name "gt_inf - Win32 Debug SoF2"
|
# Name "gt_inf - Win32 Debug SoF2"
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ CFG=gt_tdm - Win32 Debug SoF2
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
!MESSAGE "gt_tdm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "gt_tdm - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "gt_tdm - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
|
@ -26,8 +27,38 @@ CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "gt_tdm - Win32 Debug SoF2"
|
!IF "$(CFG)" == "gt_tdm - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_tdm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "gt_tdm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "gt_tdm - Win32 Debug SoF2"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug SoF2"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "..\..\Debug"
|
# PROP Output_Dir "..\..\Debug"
|
||||||
|
@ -51,6 +82,7 @@ LINK32=link.exe
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "gt_tdm - Win32 Debug"
|
||||||
# Name "gt_tdm - Win32 Debug SoF2"
|
# Name "gt_tdm - Win32 Debug SoF2"
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,8 @@ typedef enum {
|
||||||
K_F14,
|
K_F14,
|
||||||
K_F15,
|
K_F15,
|
||||||
|
|
||||||
|
K_SCROLL,
|
||||||
|
|
||||||
K_KP_HOME,
|
K_KP_HOME,
|
||||||
K_KP_UPARROW,
|
K_KP_UPARROW,
|
||||||
K_KP_PGUP,
|
K_KP_PGUP,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Microsoft Developer Studio Project File - Name="SoF2ui" - Package Owner=<4>
|
# Microsoft Developer Studio Project File - Name="ui" - Package Owner=<4>
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
# ** DO NOT EDIT **
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
@ -13,13 +13,12 @@ CFG=ui - Win32 SH Debug SoF2
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "sof2_ui.mak" CFG="SoF2ui - Win32 SH Debug SoF2"
|
!MESSAGE NMAKE /f "sof2_ui.mak" CFG="ui - Win32 SH Debug SoF2"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "SoF2ui - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "ui - Win32 Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "SoF2ui - Win32 Release SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
!MESSAGE "ui - Win32 Release SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
!MESSAGE "SoF2ui - Win32 SH Debug SoF2" (based on "Win32 (x86) Dynamic-Link Library")
|
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
|
@ -28,12 +27,12 @@ CPP=cl.exe
|
||||||
MTL=midl.exe
|
MTL=midl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "SoF2ui - Win32 Debug SoF2"
|
!IF "$(CFG)" == "ui - Win32 Debug SoF2"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
# PROP BASE Output_Dir "SoF2ui___Win32_Debug_SoF2"
|
# PROP BASE Output_Dir "ui___Win32_Debug_SoF2"
|
||||||
# PROP BASE Intermediate_Dir "SoF2ui___Win32_Debug_SoF2"
|
# PROP BASE Intermediate_Dir "ui___Win32_Debug_SoF2"
|
||||||
# PROP BASE Ignore_Export_Lib 0
|
# PROP BASE Ignore_Export_Lib 0
|
||||||
# PROP BASE Target_Dir ""
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
|
@ -57,12 +56,12 @@ LINK32=link.exe
|
||||||
# ADD LINK32 /nologo /base:"0x40000000" /dll /map:"..\Debug\of2mp_uix86.map" /debug /machine:I386 /out:"../Debug/sof2mp_uix86.dll" /pdbtype:sept
|
# ADD LINK32 /nologo /base:"0x40000000" /dll /map:"..\Debug\of2mp_uix86.map" /debug /machine:I386 /out:"../Debug/sof2mp_uix86.dll" /pdbtype:sept
|
||||||
# SUBTRACT LINK32 /pdb:none
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2ui - Win32 Release SoF2"
|
!ELSEIF "$(CFG)" == "ui - Win32 Release SoF2"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
# PROP BASE Output_Dir "SoF2ui___Win32_Release_SoF2"
|
# PROP BASE Output_Dir "ui___Win32_Release_SoF2"
|
||||||
# PROP BASE Intermediate_Dir "SoF2ui___Win32_Release_SoF2"
|
# PROP BASE Intermediate_Dir "ui___Win32_Release_SoF2"
|
||||||
# PROP BASE Ignore_Export_Lib 0
|
# PROP BASE Ignore_Export_Lib 0
|
||||||
# PROP BASE Target_Dir ""
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
|
@ -86,42 +85,12 @@ LINK32=link.exe
|
||||||
# ADD BASE LINK32 /nologo /base:"0x40000000" /dll /map /debug /machine:I386 /out:"../Release JK2/uix86.dll"
|
# ADD BASE LINK32 /nologo /base:"0x40000000" /dll /map /debug /machine:I386 /out:"../Release JK2/uix86.dll"
|
||||||
# ADD LINK32 /nologo /base:"0x40000000" /dll /map:"../Release/sof2mp_uix86.map" /debug /machine:I386 /out:"../Release/sof2mp_uix86.dll"
|
# ADD LINK32 /nologo /base:"0x40000000" /dll /map:"../Release/sof2mp_uix86.map" /debug /machine:I386 /out:"../Release/sof2mp_uix86.dll"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SoF2ui - Win32 SH Debug SoF2"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "SoF2ui___Win32_SH_Debug_SoF2"
|
|
||||||
# PROP BASE Intermediate_Dir "SoF2ui___Win32_SH_Debug_SoF2"
|
|
||||||
# PROP BASE Ignore_Export_Lib 0
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "..\SHDebug\ui"
|
|
||||||
# PROP Intermediate_Dir "..\SHDebug\ui"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_USRDLL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_SOF2" /FR /YX /FD /GZ /c
|
|
||||||
# ADD CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_USRDLL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_SOF2" /D "MEM_DEBUG" /FR /YX /FD /GZ /c
|
|
||||||
# ADD BASE MTL /nologo /D "_Debug JK2" /mktyplib203 /win32
|
|
||||||
# ADD MTL /nologo /D "_Debug JK2" /mktyplib203 /win32
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_Debug JK2"
|
|
||||||
# ADD RSC /l 0x409 /d "_Debug JK2"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 /nologo /base:"0x40000000" /dll /map:"..\Debug\of2mp_uix86.map" /debug /machine:I386 /out:"../Debug/sof2mp_uix86.dll" /pdbtype:sept
|
|
||||||
# SUBTRACT BASE LINK32 /pdb:none
|
|
||||||
# ADD LINK32 /nologo /base:"0x40000000" /dll /map:"..\SHDebug\of2mp_uix86.map" /debug /machine:I386 /out:"../SHDebug/sof2mp_uix86.dll" /pdbtype:sept
|
|
||||||
# SUBTRACT LINK32 /pdb:none
|
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
# Name "SoF2ui - Win32 Debug SoF2"
|
# Name "ui - Win32 Debug SoF2"
|
||||||
# Name "SoF2ui - Win32 Release SoF2"
|
# Name "ui - Win32 Release SoF2"
|
||||||
# Name "SoF2ui - Win32 SH Debug SoF2"
|
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
|
|
@ -742,6 +742,13 @@ void trap_Parental_Update ( void );
|
||||||
void trap_Parental_SetPassword ( const char* password );
|
void trap_Parental_SetPassword ( const char* password );
|
||||||
void trap_Parental_GetPassword ( char* password, int size );
|
void trap_Parental_GetPassword ( char* password, int size );
|
||||||
|
|
||||||
|
void trap_PunkBuster_Enable ( void );
|
||||||
|
void trap_PunkBuster_Disable ( void );
|
||||||
|
int trap_PunkBuster_IsEnabled ( void );
|
||||||
|
|
||||||
|
int trap_GetTeamCount ( int team );
|
||||||
|
int trap_GetTeamScore ( int team );
|
||||||
|
|
||||||
void trap_Print( const char *string );
|
void trap_Print( const char *string );
|
||||||
void trap_Error( const char *string );
|
void trap_Error( const char *string );
|
||||||
int trap_Milliseconds( void );
|
int trap_Milliseconds( void );
|
||||||
|
|
|
@ -714,6 +714,16 @@ void UI_DrawObjectivePhotos ( rectDef_t *rect, qhandle_t font, float scale, vec4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void UI_DrawTeamCount ( int team, rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
||||||
|
{
|
||||||
|
UI_DrawText (rect->x, rect->y, font, scale, color, va("%d",trap_GetTeamCount(team)), 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void UI_DrawTeamScore ( int team, rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
||||||
|
{
|
||||||
|
UI_DrawText (rect->x, rect->y, font, scale, color, va("%d",trap_GetTeamScore(team)), 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
// ui_gameType assumes gametype 0 is -1 ALL and will not show
|
// ui_gameType assumes gametype 0 is -1 ALL and will not show
|
||||||
static void UI_DrawGameType(rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
static void UI_DrawGameType(rectDef_t *rect, qhandle_t font, float scale, vec4_t color )
|
||||||
{
|
{
|
||||||
|
@ -1447,6 +1457,22 @@ static void UI_OwnerDraw(float x, float y, float w, float h, float text_x, float
|
||||||
|
|
||||||
switch (ownerDraw)
|
switch (ownerDraw)
|
||||||
{
|
{
|
||||||
|
case UI_RED_TEAM_COUNT:
|
||||||
|
UI_DrawTeamCount ( TEAM_RED, &rect, font, scale, color );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UI_BLUE_TEAM_COUNT:
|
||||||
|
UI_DrawTeamCount ( TEAM_BLUE, &rect, font, scale, color );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UI_RED_TEAM_SCORE:
|
||||||
|
UI_DrawTeamScore ( TEAM_RED, &rect, font, scale, color );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UI_BLUE_TEAM_SCORE:
|
||||||
|
UI_DrawTeamScore ( TEAM_BLUE, &rect, font, scale, color );
|
||||||
|
break;
|
||||||
|
|
||||||
case UI_OUTFITTING_SLOT_RENDER:
|
case UI_OUTFITTING_SLOT_RENDER:
|
||||||
UI_DrawOutfittingSlotRender ( &rect, atoi ( param ));
|
UI_DrawOutfittingSlotRender ( &rect, atoi ( param ));
|
||||||
break;
|
break;
|
||||||
|
@ -2510,6 +2536,8 @@ static void UI_RunMenuScript(const char **args)
|
||||||
else if ( Q_stricmp ( name, "autoTeamJoin" ) == 0 )
|
else if ( Q_stricmp ( name, "autoTeamJoin" ) == 0 )
|
||||||
{
|
{
|
||||||
qboolean joinRed = qfalse;
|
qboolean joinRed = qfalse;
|
||||||
|
int countRed = 0;
|
||||||
|
int countBlue = 0;
|
||||||
|
|
||||||
if ( !String_Parse(args, &name) || !name )
|
if ( !String_Parse(args, &name) || !name )
|
||||||
{
|
{
|
||||||
|
@ -2521,18 +2549,21 @@ static void UI_RunMenuScript(const char **args)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
countRed = trap_GetTeamCount ( TEAM_RED );
|
||||||
|
countBlue = trap_GetTeamCount ( TEAM_BLUE );
|
||||||
|
|
||||||
// If the teams have the same number of players then join the
|
// If the teams have the same number of players then join the
|
||||||
// team that has less points
|
// team that has less points
|
||||||
if ( ui_info_bluecount.integer == ui_info_redcount.integer )
|
if ( countRed == countBlue )
|
||||||
{
|
{
|
||||||
// If the blue team has more points then join red
|
// If the blue team has more points then join red
|
||||||
if ( ui_info_bluescore.integer > ui_info_redscore.integer )
|
if ( trap_GetTeamScore ( TEAM_BLUE ) > trap_GetTeamScore ( TEAM_RED ) )
|
||||||
{
|
{
|
||||||
joinRed = qtrue;
|
joinRed = qtrue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If the blue team has more players then join red
|
// If the blue team has more players then join red
|
||||||
else if ( ui_info_bluecount.integer > ui_info_redcount.integer )
|
else if ( countBlue > countRed )
|
||||||
{
|
{
|
||||||
joinRed = qtrue;
|
joinRed = qtrue;
|
||||||
}
|
}
|
||||||
|
@ -2810,10 +2841,29 @@ static void UI_RunMenuScript(const char **args)
|
||||||
} else if (Q_stricmp(name, "RefreshServers") == 0) {
|
} else if (Q_stricmp(name, "RefreshServers") == 0) {
|
||||||
UI_StartServerRefresh(qtrue);
|
UI_StartServerRefresh(qtrue);
|
||||||
UI_BuildServerDisplayList(qtrue);
|
UI_BuildServerDisplayList(qtrue);
|
||||||
} else if (Q_stricmp(name, "RefreshFilter") == 0) {
|
}
|
||||||
|
else if (Q_stricmp(name, "RefreshFilter") == 0)
|
||||||
|
{
|
||||||
UI_StartServerRefresh(qfalse);
|
UI_StartServerRefresh(qfalse);
|
||||||
UI_BuildServerDisplayList(qtrue);
|
UI_BuildServerDisplayList(qtrue);
|
||||||
} else if (Q_stricmp(name, "RunSPDemo") == 0) {
|
}
|
||||||
|
else if (Q_stricmp(name, "updatePunkbuster" ) == 0 )
|
||||||
|
{
|
||||||
|
int enabled = (int)trap_Cvar_VariableValue ( "ui_browserPunkbuster" );
|
||||||
|
|
||||||
|
if ( enabled )
|
||||||
|
{
|
||||||
|
trap_PunkBuster_Enable ( );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trap_PunkBuster_Disable ( );
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_Cvar_Set ( "ui_browserPunkbuster", trap_PunkBuster_IsEnabled ( ) ? "1":"0" );
|
||||||
|
}
|
||||||
|
else if (Q_stricmp(name, "RunSPDemo") == 0)
|
||||||
|
{
|
||||||
if (uiInfo.demoAvailable) {
|
if (uiInfo.demoAvailable) {
|
||||||
trap_Cmd_ExecuteText( EXEC_APPEND, va("demo %s_%s\n", uiInfo.mapList[ui_currentMap.integer].mapLoadName, bg_gametypeData[ui_gameType.integer].name));
|
trap_Cmd_ExecuteText( EXEC_APPEND, va("demo %s_%s\n", uiInfo.mapList[ui_currentMap.integer].mapLoadName, bg_gametypeData[ui_gameType.integer].name));
|
||||||
}
|
}
|
||||||
|
@ -2852,7 +2902,11 @@ static void UI_RunMenuScript(const char **args)
|
||||||
uiInfo.serverStatus.nextDisplayRefresh = 0;
|
uiInfo.serverStatus.nextDisplayRefresh = 0;
|
||||||
uiInfo.nextServerStatusRefresh = 0;
|
uiInfo.nextServerStatusRefresh = 0;
|
||||||
uiInfo.nextFindPlayerRefresh = 0;
|
uiInfo.nextFindPlayerRefresh = 0;
|
||||||
} else if (Q_stricmp(name, "UpdateFilter") == 0) {
|
}
|
||||||
|
else if (Q_stricmp(name, "UpdateFilter") == 0)
|
||||||
|
{
|
||||||
|
trap_Cvar_Set ( "ui_browserPunkbuster", trap_PunkBuster_IsEnabled ( ) ? "1" : "0" );
|
||||||
|
|
||||||
if (ui_netSource.integer == AS_LOCAL) {
|
if (ui_netSource.integer == AS_LOCAL) {
|
||||||
UI_StartServerRefresh(qtrue);
|
UI_StartServerRefresh(qtrue);
|
||||||
}
|
}
|
||||||
|
@ -3910,7 +3964,7 @@ static const char *UI_FeederItemText(float feederID, int index, int column, qhan
|
||||||
static char info[MAX_STRING_CHARS];
|
static char info[MAX_STRING_CHARS];
|
||||||
static char info2[MAX_STRING_CHARS];
|
static char info2[MAX_STRING_CHARS];
|
||||||
static char hostname[MAX_STRING_CHARS];
|
static char hostname[MAX_STRING_CHARS];
|
||||||
static char needpass[2];
|
static char yesno[5];
|
||||||
static char clientBuff[32];
|
static char clientBuff[32];
|
||||||
static int lastColumn = -1;
|
static int lastColumn = -1;
|
||||||
static int lastTime = 0;
|
static int lastTime = 0;
|
||||||
|
@ -3974,10 +4028,27 @@ static const char *UI_FeederItemText(float feederID, int index, int column, qhan
|
||||||
|
|
||||||
switch (column)
|
switch (column)
|
||||||
{
|
{
|
||||||
|
case SORT_PUNKBUSTER:
|
||||||
|
if ( atoi(Info_ValueForKey(info, "sv_punkbuster")) )
|
||||||
|
{
|
||||||
|
strcpy ( yesno, "*" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy ( yesno, "" );
|
||||||
|
}
|
||||||
|
return yesno;
|
||||||
|
|
||||||
case SORT_NEEDPASS:
|
case SORT_NEEDPASS:
|
||||||
needpass[0] = atoi(Info_ValueForKey(info, "needpass"))?'*':' ';
|
if ( atoi(Info_ValueForKey(info, "needpass")) )
|
||||||
needpass[1] = 0;
|
{
|
||||||
return needpass;
|
strcpy ( yesno, "*" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy ( yesno, "" );
|
||||||
|
}
|
||||||
|
return yesno;
|
||||||
|
|
||||||
case SORT_HOST :
|
case SORT_HOST :
|
||||||
if (ping <= 0)
|
if (ping <= 0)
|
||||||
|
@ -4024,11 +4095,11 @@ static const char *UI_FeederItemText(float feederID, int index, int column, qhan
|
||||||
game = BG_FindGametype ( Info_ValueForKey(info, "gametype") );
|
game = BG_FindGametype ( Info_ValueForKey(info, "gametype") );
|
||||||
if (ping <= 0)
|
if (ping <= 0)
|
||||||
{
|
{
|
||||||
return "Inactive";
|
return "----";
|
||||||
}
|
}
|
||||||
else if (game < 0)
|
else if (game < 0)
|
||||||
{
|
{
|
||||||
return "Unknown";
|
return "????";
|
||||||
}
|
}
|
||||||
|
|
||||||
return bg_gametypeData[game].name;
|
return bg_gametypeData[game].name;
|
||||||
|
@ -4956,7 +5027,7 @@ void UI_DrawConnectScreen( qboolean overlay ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// display global MOTD at bottom
|
// display global MOTD at bottom
|
||||||
Text_PaintCenter(centerPoint, 600, uiInfo.uiDC.Assets.defaultFont, scale, colorWhite, Info_ValueForKey( cstate.updateInfoString, "motd" ), 0 );
|
Text_PaintCenter(centerPoint, yStart + 13, uiInfo.uiDC.Assets.defaultFont, scale, colorWhite, Info_ValueForKey( cstate.updateInfoString, "motd" ), 0 );
|
||||||
|
|
||||||
// print any server info (server full, bad version, etc)
|
// print any server info (server full, bad version, etc)
|
||||||
if ( cstate.connState < CA_CONNECTED )
|
if ( cstate.connState < CA_CONNECTED )
|
||||||
|
@ -4980,7 +5051,7 @@ void UI_DrawConnectScreen( qboolean overlay ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Text_PaintCenter(centerPoint, yStart + 112, uiInfo.uiDC.Assets.defaultFont, scale, colorRed, cstate.messageString, 0 );
|
Text_PaintCenter(centerPoint, yStart + 112, uiInfo.uiDC.Assets.defaultFont, scale * 0.8f, colorRed, cstate.messageString, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( lastConnState > cstate.connState ) {
|
if ( lastConnState > cstate.connState ) {
|
||||||
|
@ -5136,6 +5207,7 @@ vmCvar_t ui_info_team;
|
||||||
vmCvar_t ui_info_teamgame;
|
vmCvar_t ui_info_teamgame;
|
||||||
vmCvar_t ui_info_redscore;
|
vmCvar_t ui_info_redscore;
|
||||||
vmCvar_t ui_info_bluescore;
|
vmCvar_t ui_info_bluescore;
|
||||||
|
vmCvar_t ui_info_showobjectives;
|
||||||
vmCvar_t ui_joinserver;
|
vmCvar_t ui_joinserver;
|
||||||
|
|
||||||
vmCvar_t ui_allowparental;
|
vmCvar_t ui_allowparental;
|
||||||
|
@ -5220,6 +5292,7 @@ static cvarTable_t cvarTable[] =
|
||||||
{ &ui_info_redscore, "ui_info_redscore", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_redscore, "ui_info_redscore", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
{ &ui_info_bluescore, "ui_info_bluescore", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_bluescore, "ui_info_bluescore", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
{ &ui_info_objectives, "ui_info_objectives", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_objectives, "ui_info_objectives", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
|
{ &ui_info_showobjectives, "ui_info_showobjectives", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
{ &ui_info_gametype, "ui_info_gametype", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_gametype, "ui_info_gametype", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
{ &ui_info_team, "ui_info_team", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_team, "ui_info_team", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
{ &ui_info_teamgame, "ui_info_teamgame", "0", CVAR_ROM|CVAR_INTERNAL },
|
{ &ui_info_teamgame, "ui_info_teamgame", "0", CVAR_ROM|CVAR_INTERNAL },
|
||||||
|
|
|
@ -227,6 +227,13 @@ typedef enum
|
||||||
UI_VERSION_GET_SITE,
|
UI_VERSION_GET_SITE,
|
||||||
UI_VERSION_DOWNLOAD,
|
UI_VERSION_DOWNLOAD,
|
||||||
|
|
||||||
|
UI_PB_ENABLE,
|
||||||
|
UI_PB_DISABLE,
|
||||||
|
UI_PB_ISENABLED,
|
||||||
|
|
||||||
|
UI_GET_TEAM_COUNT,
|
||||||
|
UI_GET_TEAM_SCORE,
|
||||||
|
|
||||||
} uiImport_t;
|
} uiImport_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -249,6 +256,7 @@ typedef enum
|
||||||
#define SORT_CLIENTS 3
|
#define SORT_CLIENTS 3
|
||||||
#define SORT_GAME 4
|
#define SORT_GAME 4
|
||||||
#define SORT_PING 5
|
#define SORT_PING 5
|
||||||
|
#define SORT_PUNKBUSTER 6
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
|
@ -5306,6 +5306,9 @@ menuDef_t *Menus_ActivateByName(const char *p)
|
||||||
menuDef_t *m = NULL;
|
menuDef_t *m = NULL;
|
||||||
menuDef_t *focus = Menu_GetFocused();
|
menuDef_t *focus = Menu_GetFocused();
|
||||||
|
|
||||||
|
DC->tooltiptime = DC->realTime;
|
||||||
|
DC->tooltipItem = NULL;
|
||||||
|
|
||||||
// If we find a match for the window then save the pointer, otherwise
|
// If we find a match for the window then save the pointer, otherwise
|
||||||
// clear the focus of the window since the window we are looking
|
// clear the focus of the window since the window we are looking
|
||||||
// for will get the focus eventually
|
// for will get the focus eventually
|
||||||
|
|
|
@ -148,6 +148,11 @@ equ trap_Version_GetDescription -174 ; UI_VERSION_GET_DESCRIPTION
|
||||||
equ trap_Version_GetNumSites -175 ; UI_VERSION_GET_NUM_SITES
|
equ trap_Version_GetNumSites -175 ; UI_VERSION_GET_NUM_SITES
|
||||||
equ trap_Version_GetSite -176 ; UI_VERSION_GET_SITE
|
equ trap_Version_GetSite -176 ; UI_VERSION_GET_SITE
|
||||||
equ trap_Version_Download -177 ; UI_VERSION_DOWNLOAD
|
equ trap_Version_Download -177 ; UI_VERSION_DOWNLOAD
|
||||||
|
equ trap_PunkBuster_Enable -178 ; UI_PB_ENABLE
|
||||||
|
equ trap_PunkBuster_Disable -179 ; UI_PB_DISABLE
|
||||||
|
equ trap_PunkBuster_IsEnabled -180 ; UI_PB_ISENABLED
|
||||||
|
equ trap_GetTeamCount -181 ; UI_GET_TEAM_COUNT
|
||||||
|
equ trap_GetTeamScore -182 ; UI_GET_TEAM_SCORE
|
||||||
|
|
||||||
|
|
||||||
; hardcoded functions
|
; hardcoded functions
|
||||||
|
|
|
@ -699,3 +699,29 @@ void trap_Version_Download(int index)
|
||||||
{
|
{
|
||||||
syscall(UI_VERSION_DOWNLOAD, index);
|
syscall(UI_VERSION_DOWNLOAD, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void trap_PunkBuster_Enable ( void )
|
||||||
|
{
|
||||||
|
syscall ( UI_PB_ENABLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
void trap_PunkBuster_Disable ( void )
|
||||||
|
{
|
||||||
|
syscall ( UI_PB_DISABLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
int trap_PunkBuster_IsEnabled ( void )
|
||||||
|
{
|
||||||
|
return syscall ( UI_PB_ISENABLED );
|
||||||
|
}
|
||||||
|
|
||||||
|
int trap_GetTeamCount ( int team )
|
||||||
|
{
|
||||||
|
return syscall ( UI_GET_TEAM_COUNT, team );
|
||||||
|
}
|
||||||
|
|
||||||
|
int trap_GetTeamScore ( int team )
|
||||||
|
{
|
||||||
|
return syscall ( UI_GET_TEAM_SCORE, team );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
10
readme.txt
10
readme.txt
|
@ -11,6 +11,7 @@ bin
|
||||||
sof2map.exe
|
sof2map.exe
|
||||||
sof2data.exe
|
sof2data.exe
|
||||||
striped.exe
|
striped.exe
|
||||||
|
sof2mpdev.exe
|
||||||
docs
|
docs
|
||||||
Docs for:
|
Docs for:
|
||||||
Vertigons (surface sprites)
|
Vertigons (surface sprites)
|
||||||
|
@ -29,8 +30,17 @@ resources
|
||||||
Max files for a male figure and the inview hands
|
Max files for a male figure and the inview hands
|
||||||
|
|
||||||
|
|
||||||
|
SDK V1.02 09/24/2002
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
- Now includes sof2mpdev.exe to allow mod makers to use the cvars that were
|
||||||
|
removed from 1.02.
|
||||||
|
- Updated 1.02 source code
|
||||||
|
|
||||||
|
|
||||||
SDK V0.02 07/03/2002
|
SDK V0.02 07/03/2002
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -862,6 +862,44 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name punkbuster_field
|
||||||
|
group createserver_options
|
||||||
|
type ITEM_TYPE_YESNO
|
||||||
|
style WINDOW_STYLE_FILLED
|
||||||
|
text "PunkBuster:"
|
||||||
|
|
||||||
|
cvar "sv_punkbuster"
|
||||||
|
rect 50 207 210 15
|
||||||
|
textalign ITEM_ALIGN_RIGHT
|
||||||
|
textalignx 120
|
||||||
|
textaligny 0
|
||||||
|
textfont "hud"
|
||||||
|
textscale .43
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
visible 1
|
||||||
|
|
||||||
|
action
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/select.wav" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseEnter
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/hilite1.wav" ;
|
||||||
|
setitemcolor punkbuster_field backcolor .12 .14 .08 1
|
||||||
|
setitemcolor punkbuster_field forecolor .49 .56 .27 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseExit
|
||||||
|
{
|
||||||
|
setitemcolor punkbuster_field backcolor 0 0 0 0
|
||||||
|
setitemcolor punkbuster_field forecolor .12 .14 .08 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name dedicated_field
|
name dedicated_field
|
||||||
|
@ -872,7 +910,7 @@
|
||||||
|
|
||||||
cvar "ui_dedicated"
|
cvar "ui_dedicated"
|
||||||
cvarFloatList { "No" 0 "LAN" 1 "Internet" 2 }
|
cvarFloatList { "No" 0 "LAN" 1 "Internet" 2 }
|
||||||
rect 50 207 210 15
|
rect 50 222 210 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 120
|
textalignx 120
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -911,7 +949,7 @@
|
||||||
maxChars 32
|
maxChars 32
|
||||||
maxPaintChars 22
|
maxPaintChars 22
|
||||||
cvar "sv_hostname"
|
cvar "sv_hostname"
|
||||||
rect 50 222 325 15
|
rect 50 237 325 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 120
|
textalignx 120
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -949,7 +987,7 @@
|
||||||
text "Maximum Players:"
|
text "Maximum Players:"
|
||||||
maxChars 2
|
maxChars 2
|
||||||
cvar "sv_maxclients"
|
cvar "sv_maxclients"
|
||||||
rect 30 237 230 15
|
rect 30 252 230 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 140
|
textalignx 140
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -987,7 +1025,7 @@
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
text "Password:"
|
text "Password:"
|
||||||
cvar "g_password"
|
cvar "g_password"
|
||||||
rect 50 252 325 15
|
rect 50 267 325 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 120
|
textalignx 120
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
|
12
ui/hud.menu
12
ui/hud.menu
|
@ -341,7 +341,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
|
@ -353,7 +353,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
|
@ -364,7 +364,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
|
@ -375,7 +375,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
visible 1
|
visible 1
|
||||||
decoration
|
decoration
|
||||||
|
|
||||||
ownerdrawflag CG_SHOW_HUD_SNIPERSCOPE
|
ownerdrawflag CG_SHOW_HUD_SNIPERCLIP
|
||||||
}
|
}
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
rect 0 10 300 20
|
rect 0 0 300 20
|
||||||
name gametypefield
|
name gametypefield
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
style 0
|
style 0
|
||||||
|
@ -128,7 +128,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
rect 0 25 300 20
|
rect 0 15 300 20
|
||||||
name gametypefield
|
name gametypefield
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
style 0
|
style 0
|
||||||
|
@ -148,7 +148,7 @@
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 40 300 20
|
rect 0 30 300 20
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
cvar "ui_about_gametypename"
|
cvar "ui_about_gametypename"
|
||||||
text "GameType:"
|
text "GameType:"
|
||||||
|
@ -164,7 +164,7 @@
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 55 300 20
|
rect 0 45 300 20
|
||||||
maxPaintChars 12
|
maxPaintChars 12
|
||||||
cvar "ui_about_scorelimit"
|
cvar "ui_about_scorelimit"
|
||||||
text "Score Limit:"
|
text "Score Limit:"
|
||||||
|
@ -181,7 +181,7 @@
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 70 300 20
|
rect 0 60 300 20
|
||||||
maxPaintChars 12
|
maxPaintChars 12
|
||||||
cvar "ui_about_timelimit"
|
cvar "ui_about_timelimit"
|
||||||
text "Time Limit:"
|
text "Time Limit:"
|
||||||
|
@ -194,11 +194,45 @@
|
||||||
decoration
|
decoration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name window
|
||||||
|
type ITEM_TYPE_YESNO
|
||||||
|
rect 0 75 300 20
|
||||||
|
maxPaintChars 12
|
||||||
|
cvar "ui_about_friendlyfire"
|
||||||
|
text "Friendly Fire:"
|
||||||
|
textalign ITEM_ALIGN_RIGHT
|
||||||
|
textalignx 128
|
||||||
|
textfont "hud"
|
||||||
|
textscale .40
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
visible 1
|
||||||
|
decoration
|
||||||
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name window
|
||||||
|
type ITEM_TYPE_YESNO
|
||||||
|
rect 0 90 300 20
|
||||||
|
maxPaintChars 12
|
||||||
|
cvar "cl_punkbuster"
|
||||||
|
text "Punk Buster:"
|
||||||
|
textalign ITEM_ALIGN_RIGHT
|
||||||
|
textalignx 128
|
||||||
|
textfont "hud"
|
||||||
|
textscale .40
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
visible 1
|
||||||
|
decoration
|
||||||
|
}
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 95 300 20
|
rect 0 115 300 20
|
||||||
cvar "protocol"
|
cvar "protocol"
|
||||||
maxPaintChars 12
|
maxPaintChars 12
|
||||||
text "Protocol:"
|
text "Protocol:"
|
||||||
|
@ -215,7 +249,7 @@
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 110 300 20
|
rect 0 130 300 20
|
||||||
cvar "ui_about_maxclients"
|
cvar "ui_about_maxclients"
|
||||||
maxPaintChars 12
|
maxPaintChars 12
|
||||||
text "Max Clients:"
|
text "Max Clients:"
|
||||||
|
@ -232,7 +266,7 @@
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 125 300 20
|
rect 0 145 300 20
|
||||||
cvar "ui_about_hostname"
|
cvar "ui_about_hostname"
|
||||||
maxPaintChars 12
|
maxPaintChars 12
|
||||||
text "Host Name:"
|
text "Host Name:"
|
||||||
|
@ -248,7 +282,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
rect 0 150 300 20
|
rect 0 170 300 20
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
cvar "ui_about_needpass"
|
cvar "ui_about_needpass"
|
||||||
text "Password:"
|
text "Password:"
|
||||||
|
@ -264,7 +298,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
rect 0 165 300 20
|
rect 0 185 300 20
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
cvar "ui_about_dmflags"
|
cvar "ui_about_dmflags"
|
||||||
text "DM Flags:"
|
text "DM Flags:"
|
||||||
|
@ -280,7 +314,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
rect 0 180 300 20
|
rect 0 200 300 20
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
cvar "ui_about_seed"
|
cvar "ui_about_seed"
|
||||||
text "RMG Seed:"
|
text "RMG Seed:"
|
||||||
|
@ -301,29 +335,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
itemDef
|
|
||||||
{
|
|
||||||
name window
|
|
||||||
type ITEM_TYPE_YESNO
|
|
||||||
rect 0 180 300 20
|
|
||||||
cvar "bot_minplayers"
|
|
||||||
text "Bot/Min:"
|
|
||||||
textalign ITEM_ALIGN_RIGHT
|
|
||||||
textalignx 128
|
|
||||||
textfont "hud"
|
|
||||||
textscale .40
|
|
||||||
forecolor .12 .14 .08 1
|
|
||||||
visible 1
|
|
||||||
decoration
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
type ITEM_TYPE_EDITFIELD
|
type ITEM_TYPE_EDITFIELD
|
||||||
rect 0 205 300 20
|
rect 0 215 300 20
|
||||||
cvar "version"
|
cvar "version"
|
||||||
maxPaintChars 32
|
maxPaintChars 32
|
||||||
text "Version:"
|
text "Version:"
|
||||||
|
|
|
@ -299,12 +299,11 @@
|
||||||
border 1
|
border 1
|
||||||
bordercolor 0 0 0 1
|
bordercolor 0 0 0 1
|
||||||
|
|
||||||
cvarTest "ui_about_gametype"
|
cvarTest "ui_info_showobjectives"
|
||||||
|
|
||||||
disableCvar
|
disableCvar
|
||||||
{
|
{
|
||||||
"0" ;
|
"0" ;
|
||||||
"1" ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
action
|
action
|
||||||
|
|
|
@ -375,7 +375,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
rect 410 275 0 0
|
rect 410 275 0 0
|
||||||
cvar ui_info_redcount
|
ownerdraw UI_RED_TEAM_COUNT
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textalign 2
|
textalign 2
|
||||||
textscale .43
|
textscale .43
|
||||||
|
@ -398,7 +398,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
rect 230 275 0 0
|
rect 230 275 0 0
|
||||||
cvar ui_info_bluecount
|
ownerdraw UI_BLUE_TEAM_COUNT
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
forecolor 0 0 0 1
|
forecolor 0 0 0 1
|
||||||
|
@ -424,7 +424,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
rect 410 315 0 0
|
rect 410 315 0 0
|
||||||
cvar ui_info_redscore
|
ownerdraw UI_RED_TEAM_SCORE
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textalign 2
|
textalign 2
|
||||||
textscale .43
|
textscale .43
|
||||||
|
@ -447,7 +447,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
rect 230 315 0 0
|
rect 230 315 0 0
|
||||||
cvar ui_info_bluescore
|
ownerdraw UI_BLUE_TEAM_SCORE
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
forecolor 0 0 0 1
|
forecolor 0 0 0 1
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
{
|
{
|
||||||
name mapname_column
|
name mapname_column
|
||||||
group columns_group
|
group columns_group
|
||||||
rect 245 89 121 170
|
rect 245 89 101 170
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
visible 1
|
visible 1
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
{
|
{
|
||||||
name players_column
|
name players_column
|
||||||
group columns_group
|
group columns_group
|
||||||
rect 365 89 66 170
|
rect 345 89 66 170
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
visible 1
|
visible 1
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
{
|
{
|
||||||
name type_column
|
name type_column
|
||||||
group columns_group
|
group columns_group
|
||||||
rect 430 89 51 170
|
rect 410 89 46 170
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
visible 1
|
visible 1
|
||||||
|
@ -92,7 +92,18 @@
|
||||||
{
|
{
|
||||||
name ping_column
|
name ping_column
|
||||||
group columns_group
|
group columns_group
|
||||||
rect 480 89 59 170
|
rect 455 89 44 170
|
||||||
|
style WINDOW_STYLE_FILLED
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
visible 1
|
||||||
|
decoration
|
||||||
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name punkbuster_column
|
||||||
|
group columns_group
|
||||||
|
rect 497 89 23 170
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
visible 1
|
visible 1
|
||||||
|
@ -106,14 +117,14 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name serverlist
|
name serverlist
|
||||||
rect 5 89 533 170
|
rect 5 89 533 171
|
||||||
type ITEM_TYPE_LISTBOX
|
type ITEM_TYPE_LISTBOX
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
elementwidth 120
|
elementwidth 120
|
||||||
elementheight 15
|
elementheight 12
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .33
|
||||||
textaligny -13
|
textaligny -10
|
||||||
elementtype LISTBOX_TEXT
|
elementtype LISTBOX_TEXT
|
||||||
feeder FEEDER_SERVERS
|
feeder FEEDER_SERVERS
|
||||||
border 1
|
border 1
|
||||||
|
@ -121,7 +132,7 @@
|
||||||
bordercolor 0 0 0 1
|
bordercolor 0 0 0 1
|
||||||
outlinecolor .12 .14 .08 1
|
outlinecolor .12 .14 .08 1
|
||||||
visible 1
|
visible 1
|
||||||
columns 6 0 3 20 20 40 30 240 40 16 360 5 10 425 20 10 475 20 20
|
columns 7 0 3 20 20 40 30 240 40 16 340 5 10 405 20 10 450 20 20 490 10 10
|
||||||
|
|
||||||
doubleClick
|
doubleClick
|
||||||
{
|
{
|
||||||
|
@ -325,11 +336,11 @@
|
||||||
name empty_filter
|
name empty_filter
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Empty:"
|
rect 340 9 80 16
|
||||||
|
text "Empty:"
|
||||||
cvar "ui_browserShowEmpty"
|
cvar "ui_browserShowEmpty"
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
rect 144 40 80 16
|
|
||||||
textstyle 0
|
textstyle 0
|
||||||
textalign ITEM_ALIGN_LEFT
|
textalign ITEM_ALIGN_LEFT
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -364,9 +375,9 @@
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Full:"
|
text "Full:"
|
||||||
cvar "ui_browserShowFull"
|
cvar "ui_browserShowFull"
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
rect 244 40 80 16
|
rect 340 24 80 16
|
||||||
textstyle 0
|
textstyle 0
|
||||||
textalign ITEM_ALIGN_LEFT
|
textalign ITEM_ALIGN_LEFT
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -394,6 +405,43 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name pb_filter
|
||||||
|
style WINDOW_STYLE_FILLED
|
||||||
|
type ITEM_TYPE_YESNO
|
||||||
|
text "PunkBuster Enabled:"
|
||||||
|
rect 144 40 184 16
|
||||||
|
textstyle 0
|
||||||
|
textalign ITEM_ALIGN_LEFT
|
||||||
|
textaligny 0
|
||||||
|
textalignx 1
|
||||||
|
textfont "hud"
|
||||||
|
textscale .43
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
cvar "ui_browserPunkbuster"
|
||||||
|
visible 1
|
||||||
|
|
||||||
|
action
|
||||||
|
{
|
||||||
|
uiScript updatePunkbuster ;
|
||||||
|
play "sound/misc/menus/select.wav" ;
|
||||||
|
}
|
||||||
|
mouseEnter
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/hilite1.wav" ;
|
||||||
|
setitemcolor pb_filter backcolor .12 .14 .08 1
|
||||||
|
setitemcolor pb_filter forecolor .49 .56 .27 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseExit
|
||||||
|
{
|
||||||
|
setitemcolor pb_filter forecolor .12 .14 .08 1
|
||||||
|
setitemcolor pb_filter backcolor 0 0 0 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name window
|
name window
|
||||||
|
@ -654,7 +702,7 @@
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
rect 365 72 53 18
|
rect 345 72 53 18
|
||||||
textalign 0
|
textalign 0
|
||||||
textalignx 2 // center
|
textalignx 2 // center
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -670,7 +718,7 @@
|
||||||
name players_tab_button
|
name players_tab_button
|
||||||
type ITEM_TYPE_BUTTON
|
type ITEM_TYPE_BUTTON
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
rect 365 72 53 18
|
rect 345 72 53 18
|
||||||
visible 1
|
visible 1
|
||||||
|
|
||||||
mouseEnter
|
mouseEnter
|
||||||
|
@ -708,7 +756,7 @@
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
rect 430 72 39 18
|
rect 410 72 39 18
|
||||||
textalign 0
|
textalign 0
|
||||||
textalignx 2 // center
|
textalignx 2 // center
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -724,7 +772,7 @@
|
||||||
name type_tab_button
|
name type_tab_button
|
||||||
type ITEM_TYPE_BUTTON
|
type ITEM_TYPE_BUTTON
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
rect 430 72 39 18
|
rect 410 72 39 18
|
||||||
visible 1
|
visible 1
|
||||||
|
|
||||||
mouseEnter
|
mouseEnter
|
||||||
|
@ -762,7 +810,7 @@
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
rect 480 72 39 18
|
rect 455 72 36 18
|
||||||
textalign 0
|
textalign 0
|
||||||
textalignx 2 // center
|
textalignx 2 // center
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -778,7 +826,7 @@
|
||||||
name ping_tab_button
|
name ping_tab_button
|
||||||
type ITEM_TYPE_BUTTON
|
type ITEM_TYPE_BUTTON
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
rect 480 72 39 18
|
rect 455 72 39 18
|
||||||
visible 1
|
visible 1
|
||||||
|
|
||||||
mouseEnter
|
mouseEnter
|
||||||
|
@ -808,6 +856,74 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name punkbuster_tab
|
||||||
|
group tabs_group
|
||||||
|
style WINDOW_STYLE_FILLED
|
||||||
|
rect 496 72 20 18
|
||||||
|
textalign 0
|
||||||
|
textalignx 3
|
||||||
|
textaligny 0
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
bordercolor 0 0 0 1
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
visible 1
|
||||||
|
border 1
|
||||||
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name punkbuster_tab
|
||||||
|
group tabs_group
|
||||||
|
style WINDOW_STYLE_SHADER
|
||||||
|
background "gfx/menus/icons/icon_punkbuster"
|
||||||
|
rect 496 72 20 18
|
||||||
|
textalign 0
|
||||||
|
textalignx 3
|
||||||
|
textaligny 0
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
bordercolor 0 0 0 1
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
visible 1
|
||||||
|
border 1
|
||||||
|
}
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name punkbuster_tab_button
|
||||||
|
type ITEM_TYPE_BUTTON
|
||||||
|
style WINDOW_STYLE_EMPTY
|
||||||
|
rect 496 72 20 18
|
||||||
|
visible 1
|
||||||
|
|
||||||
|
mouseEnter
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/hilite1.wav" ;
|
||||||
|
setitemcolor punkbuster_tab backcolor .12 .14 .08 1
|
||||||
|
setitemcolor punkbuster_tab forecolor .49 .56 .27 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseExit
|
||||||
|
{
|
||||||
|
setitemcolor punkbuster_tab forecolor .12 .14 .08 1
|
||||||
|
setitemcolor punkbuster_tab backcolor 0 0 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
action
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/select.wav" ;
|
||||||
|
|
||||||
|
uiScript ServerSort 6 ;
|
||||||
|
setitemcolor tabs_group backcolor 0 0 0 0;
|
||||||
|
setitemcolor tabs_group forecolor .12 .14 .08 1;
|
||||||
|
setitemcolor punkbuster_tab backcolor .12 .14 .08 1
|
||||||
|
setitemcolor punkbuster_tab forecolor .49 .56 .27 1
|
||||||
|
setitemcolor columns_group backcolor 0 0 0 0 ;
|
||||||
|
setitemcolor punkbuster_column backcolor .12 .14 .08 .35;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// COLUMN BORDERS
|
// COLUMN BORDERS
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -839,7 +955,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name column_border
|
name column_border
|
||||||
rect 245 89 121 171
|
rect 245 89 101 171
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
border 1
|
border 1
|
||||||
bordersize 1
|
bordersize 1
|
||||||
|
@ -851,7 +967,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name column_border
|
name column_border
|
||||||
rect 365 89 66 171
|
rect 345 89 66 171
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
border 1
|
border 1
|
||||||
bordersize 1
|
bordersize 1
|
||||||
|
@ -863,7 +979,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name column_border
|
name column_border
|
||||||
rect 430 89 51 171
|
rect 410 89 46 171
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
border 1
|
border 1
|
||||||
bordersize 1
|
bordersize 1
|
||||||
|
@ -875,7 +991,7 @@
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name column_border
|
name column_border
|
||||||
rect 480 89 59 171
|
rect 455 89 42 171
|
||||||
style WINDOW_STYLE_EMPTY
|
style WINDOW_STYLE_EMPTY
|
||||||
border 1
|
border 1
|
||||||
bordersize 1
|
bordersize 1
|
||||||
|
|
|
@ -86,6 +86,7 @@
|
||||||
#define CG_SHOW_HUD_THERMAL 0x00800000
|
#define CG_SHOW_HUD_THERMAL 0x00800000
|
||||||
#define CG_SHOW_PLAYER_ALT_WEAPONINFO 0x20000000
|
#define CG_SHOW_PLAYER_ALT_WEAPONINFO 0x20000000
|
||||||
#define CG_HIDE_PLAYER_ALT_WEAPONINFO 0x40000000
|
#define CG_HIDE_PLAYER_ALT_WEAPONINFO 0x40000000
|
||||||
|
#define CG_SHOW_HUD_SNIPERCLIP 0x80000000
|
||||||
|
|
||||||
|
|
||||||
#define UI_SHOW_LEADER 0x00000001
|
#define UI_SHOW_LEADER 0x00000001
|
||||||
|
@ -185,6 +186,11 @@
|
||||||
|
|
||||||
#define UI_OBJECTIVE_PHOTOS 275
|
#define UI_OBJECTIVE_PHOTOS 275
|
||||||
|
|
||||||
|
#define UI_RED_TEAM_COUNT 280
|
||||||
|
#define UI_BLUE_TEAM_COUNT 281
|
||||||
|
#define UI_RED_TEAM_SCORE 282
|
||||||
|
#define UI_BLUE_TEAM_SCORE 283
|
||||||
|
|
||||||
#define VOICECHAT_GETFLAG "getflag" // command someone to get the flag
|
#define VOICECHAT_GETFLAG "getflag" // command someone to get the flag
|
||||||
#define VOICECHAT_OFFENSE "offense" // command someone to go on offense
|
#define VOICECHAT_OFFENSE "offense" // command someone to go on offense
|
||||||
#define VOICECHAT_DEFEND "defend" // command someone to go on defense
|
#define VOICECHAT_DEFEND "defend" // command someone to go on defense
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
textalign 0
|
textalign 0
|
||||||
textalignx 20
|
textalignx 15
|
||||||
textaligny 1
|
textaligny 1
|
||||||
forecolor .12 .14 .08 1
|
forecolor .12 .14 .08 1
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
|
@ -129,8 +129,7 @@
|
||||||
action
|
action
|
||||||
{
|
{
|
||||||
play "sound/misc/menus/select.wav" ;
|
play "sound/misc/menus/select.wav" ;
|
||||||
close patch_info ;
|
uiScript loadNewVersionFromBrowser ;
|
||||||
open patch_location ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mouseEnter
|
mouseEnter
|
||||||
|
@ -147,45 +146,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
itemDef
|
|
||||||
{
|
|
||||||
name browser_button
|
|
||||||
text "Manual Download"
|
|
||||||
type ITEM_TYPE_BUTTON
|
|
||||||
style WINDOW_STYLE_FILLED
|
|
||||||
rect 250 350 120 20
|
|
||||||
textfont "hud"
|
|
||||||
textscale .43
|
|
||||||
textalign 0
|
|
||||||
textalignx 5
|
|
||||||
textaligny 1
|
|
||||||
forecolor .12 .14 .08 1
|
|
||||||
backcolor 0 0 0 0
|
|
||||||
visible 1
|
|
||||||
border 1
|
|
||||||
bordercolor 0 0 0 1
|
|
||||||
|
|
||||||
|
|
||||||
action
|
|
||||||
{
|
|
||||||
play "sound/misc/menus/select.wav" ;
|
|
||||||
uiScript loadNewVersionFromBrowser ;
|
|
||||||
}
|
|
||||||
|
|
||||||
mouseEnter
|
|
||||||
{
|
|
||||||
play "sound/misc/menus/hilite1.wav" ;
|
|
||||||
setitemcolor browser_button backcolor .12 .14 .08 1
|
|
||||||
setitemcolor browser_button forecolor .49 .56 .27 1
|
|
||||||
}
|
|
||||||
|
|
||||||
mouseExit
|
|
||||||
{
|
|
||||||
setitemcolor browser_button forecolor .12 .14 .08 1
|
|
||||||
setitemcolor browser_button backcolor 0 0 0 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name ignore_button
|
name ignore_button
|
||||||
|
@ -196,7 +156,7 @@
|
||||||
textfont "hud"
|
textfont "hud"
|
||||||
textscale .43
|
textscale .43
|
||||||
textalign 0
|
textalign 0
|
||||||
textalignx 30
|
textalignx 25
|
||||||
textaligny 1
|
textaligny 1
|
||||||
forecolor .12 .14 .08 1
|
forecolor .12 .14 .08 1
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
|
|
|
@ -9,6 +9,49 @@
|
||||||
rect 50 110 432 254
|
rect 50 110 432 254
|
||||||
focusColor .49 .56 .27 1
|
focusColor .49 .56 .27 1
|
||||||
|
|
||||||
|
itemDef
|
||||||
|
{
|
||||||
|
name teamscores_multi
|
||||||
|
style WINDOW_STYLE_FILLED
|
||||||
|
type ITEM_TYPE_MULTI
|
||||||
|
text "Team Scores:"
|
||||||
|
cvar "cg_drawteamscores"
|
||||||
|
rect 50 14 240 15
|
||||||
|
textalign ITEM_ALIGN_RIGHT
|
||||||
|
textalignx 125
|
||||||
|
textaligny 0
|
||||||
|
textfont "hud"
|
||||||
|
textscale .43
|
||||||
|
forecolor .12 .14 .08 1
|
||||||
|
backcolor 0 0 0 0
|
||||||
|
visible 1
|
||||||
|
|
||||||
|
cvarFloatList
|
||||||
|
{
|
||||||
|
"Off" 0
|
||||||
|
"Bottom Right" 1
|
||||||
|
"Bottom Center" 2
|
||||||
|
"Top Right" 3
|
||||||
|
"Right" 4
|
||||||
|
"Slim" 5
|
||||||
|
}
|
||||||
|
action
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/select.wav" ;
|
||||||
|
}
|
||||||
|
mouseEnter
|
||||||
|
{
|
||||||
|
play "sound/misc/menus/hilite1.wav" ;
|
||||||
|
setitemcolor teamscores_multi backcolor .12 .14 .08 1
|
||||||
|
setitemcolor teamscores_multi forecolor .49 .56 .27 1
|
||||||
|
}
|
||||||
|
mouseExit
|
||||||
|
{
|
||||||
|
setitemcolor teamscores_multi forecolor .12 .14 .08 1
|
||||||
|
setitemcolor teamscores_multi backcolor 0 0 0 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
itemDef
|
itemDef
|
||||||
{
|
{
|
||||||
name autoswitch_multi
|
name autoswitch_multi
|
||||||
|
@ -16,7 +59,7 @@
|
||||||
type ITEM_TYPE_MULTI
|
type ITEM_TYPE_MULTI
|
||||||
text "Auto Switch:"
|
text "Auto Switch:"
|
||||||
cvar "cg_autoswitch"
|
cvar "cg_autoswitch"
|
||||||
rect 50 19 240 15
|
rect 50 29 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -56,7 +99,7 @@
|
||||||
type ITEM_TYPE_MULTI
|
type ITEM_TYPE_MULTI
|
||||||
text "Weapon Selection:"
|
text "Weapon Selection:"
|
||||||
cvar "cg_weaponMenuFast"
|
cvar "cg_weaponMenuFast"
|
||||||
rect 50 34 240 15
|
rect 50 44 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -95,7 +138,7 @@
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Auto Reload:"
|
text "Auto Reload:"
|
||||||
cvar "cg_autoReload"
|
cvar "cg_autoReload"
|
||||||
rect 50 49 240 15
|
rect 50 59 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -130,7 +173,7 @@
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Defer Players:"
|
text "Defer Players:"
|
||||||
cvar "cg_deferPlayers"
|
cvar "cg_deferPlayers"
|
||||||
rect 50 64 240 15
|
rect 50 74 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -164,7 +207,7 @@
|
||||||
type ITEM_TYPE_MULTI
|
type ITEM_TYPE_MULTI
|
||||||
text "Identify Target:"
|
text "Identify Target:"
|
||||||
cvar "cg_drawCrosshairNames"
|
cvar "cg_drawCrosshairNames"
|
||||||
rect 50 79 240 15
|
rect 50 89 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -205,7 +248,7 @@
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Draw Team Icons:"
|
text "Draw Team Icons:"
|
||||||
cvar "cg_drawFriend"
|
cvar "cg_drawFriend"
|
||||||
rect 50 94 240 15
|
rect 50 104 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -239,7 +282,7 @@
|
||||||
type ITEM_TYPE_MULTI
|
type ITEM_TYPE_MULTI
|
||||||
text "Radar Type:"
|
text "Radar Type:"
|
||||||
cvar "cg_drawRadar"
|
cvar "cg_drawRadar"
|
||||||
rect 50 109 240 15
|
rect 50 119 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -279,7 +322,7 @@
|
||||||
type ITEM_TYPE_YESNO
|
type ITEM_TYPE_YESNO
|
||||||
text "Draw HUD Icons:"
|
text "Draw HUD Icons:"
|
||||||
cvar "cg_drawHUDIcons"
|
cvar "cg_drawHUDIcons"
|
||||||
rect 50 124 240 15
|
rect 50 134 240 15
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 125
|
textalignx 125
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -311,7 +354,7 @@
|
||||||
name crosshair
|
name crosshair
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
text "Crosshair:"
|
text "Crosshair:"
|
||||||
rect 50 139 240 30
|
rect 50 149 240 30
|
||||||
ownerdraw UI_CROSSHAIR
|
ownerdraw UI_CROSSHAIR
|
||||||
textalign ITEM_ALIGN_RIGHT
|
textalign ITEM_ALIGN_RIGHT
|
||||||
textalignx 115
|
textalignx 115
|
||||||
|
@ -345,7 +388,7 @@
|
||||||
name brightness_slider
|
name brightness_slider
|
||||||
style WINDOW_STYLE_FILLED
|
style WINDOW_STYLE_FILLED
|
||||||
text "Brightness"
|
text "Brightness"
|
||||||
rect 70 169 140 15
|
rect 70 179 140 15
|
||||||
forecolor .12 .14 .08 1
|
forecolor .12 .14 .08 1
|
||||||
backcolor 0 0 0 0
|
backcolor 0 0 0 0
|
||||||
textaligny 0
|
textaligny 0
|
||||||
|
@ -362,7 +405,7 @@
|
||||||
type ITEM_TYPE_SLIDER
|
type ITEM_TYPE_SLIDER
|
||||||
text ""
|
text ""
|
||||||
cvarfloat "r_gamma" 1 0.5 2
|
cvarfloat "r_gamma" 1 0.5 2
|
||||||
rect 70 184 128 40
|
rect 70 194 128 40
|
||||||
visible 1
|
visible 1
|
||||||
|
|
||||||
action
|
action
|
||||||
|
|
Loading…
Reference in a new issue