- Added sound hack that'll stop LFO sounds (e.g. cs_747 jet flyby) from killing your ears
- Fixed the spectator camera from caring about VIEWHEIGHT - Added menu labels and checkbox graphics (still WIP menu improvements) - Fix for not-loop ambient_generic entities
This commit is contained in:
parent
6b3504c560
commit
26efc3588e
13 changed files with 141 additions and 28 deletions
|
@ -233,7 +233,11 @@ void CSQC_UpdateView( float fWinWidth, float fWinHeight, float fGameFocus ) {
|
|||
if ( pSeat->fCameraTime > time ) {
|
||||
setproperty( VF_ORIGIN, pSeat->vCameraPos ) ;
|
||||
} else {
|
||||
setproperty( VF_ORIGIN, pSeat->vPlayerOrigin + [ 0, 0, getstatf( STAT_VIEWHEIGHT ) ] );
|
||||
if ( getstatf( STAT_HEALTH ) ) {
|
||||
setproperty( VF_ORIGIN, pSeat->vPlayerOrigin + [ 0, 0, getstatf( STAT_VIEWHEIGHT ) ] );
|
||||
} else {
|
||||
setproperty( VF_ORIGIN, pSeat->vPlayerOrigin );
|
||||
}
|
||||
View_DrawViewModel();
|
||||
}
|
||||
|
||||
|
|
|
@ -18,9 +18,28 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
void CSQC_ambient_generic( string sSample, float fVolume, float fAttenuation ) {
|
||||
void CSQC_ambient_generic( string sSample, float fVolume, float fAttenuation, float fLoop, float lFORate ) {
|
||||
//print( sprintf( "SOUND: %s, %f, %d\n%d %d %d", sSample, fVolume, fAttenuation, self.origin_x, self.origin_y, self.origin_z ) );
|
||||
sound( self, CHAN_VOICE, sSample, fVolume, fAttenuation, 0, SOUNDFLAG_FORCELOOP );
|
||||
static void LFOHack (void) {
|
||||
sound( self, CHAN_VOICE, self.classname, self.movetype, self.style, 0, 0 );
|
||||
self.nextthink = self.solid + time;
|
||||
}
|
||||
// Hack
|
||||
if ( lFORate ) {
|
||||
self.classname = sSample;
|
||||
self.movetype = fVolume;
|
||||
self.style = fAttenuation;
|
||||
self.think = LFOHack;
|
||||
self.solid = lFORate / 10;
|
||||
self.nextthink = self.solid + time;
|
||||
fLoop = FALSE;
|
||||
}
|
||||
|
||||
if ( fLoop ) {
|
||||
sound( self, CHAN_VOICE, sSample, fVolume, fAttenuation, 0, SOUNDFLAG_FORCELOOP );
|
||||
} else {
|
||||
sound( self, CHAN_VOICE, sSample, fVolume, fAttenuation, 0, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -73,7 +92,7 @@ void CSQC_Ent_Update( float flIsNew ) {
|
|||
|
||||
setorigin( self, self.origin );
|
||||
|
||||
CSQC_ambient_generic( readstring(), readfloat(), readbyte() );
|
||||
CSQC_ambient_generic( readstring(), readfloat(), readbyte(), readbyte(), readbyte() );
|
||||
} else if ( fEntType == ENT_SPRITE ) {
|
||||
self.origin_x = readcoord();
|
||||
self.origin_y = readcoord();
|
||||
|
|
|
@ -103,6 +103,7 @@ void runplayerphysics(void)
|
|||
self.maxs = VEC_HULL_MAX;
|
||||
self.view_ofs = VEC_PLAYER_VIEWPOS;
|
||||
}
|
||||
|
||||
self.maxspeed = Game_GetMaxSpeed( self.weapon );
|
||||
runstandardplayerphysics( self );
|
||||
if ( ( self.flags & FL_ONGROUND ) && self.movetype == MOVETYPE_WALK && ( fallvel > 100 )) {
|
||||
|
|
|
@ -62,5 +62,6 @@ void m_draw( vector vScreenSize ) {
|
|||
fcsMain[ iMenu ].vMenu();
|
||||
Header_Draw();
|
||||
|
||||
drawstring( '16 16', sprintf( "FreeCS Version: %s\n", __DATE__ ), FONTSIZE, '1 1 1', 1.0f, 0 );
|
||||
//drawstring( '16 16', , FONTSIZE, '1 1 1', 1.0f, 0 );
|
||||
Object_Label_Right( [ 640 - 16, 480 - 16 ], sprintf( "FreeCS Version: %s", __DATE__ ), FONTSIZE );
|
||||
}
|
||||
|
|
|
@ -29,6 +29,8 @@ void Menu_Configuration_Init( void );
|
|||
void m_init( void ) {
|
||||
precache_pic( "gfx/shell/splash" );
|
||||
precache_pic( "gfx/shell/btns_main" );
|
||||
precache_pic( "gfx/shell/cb_empty" );
|
||||
precache_pic( "gfx/shell/cb_checked" );
|
||||
|
||||
Menu_Configuration_Init();
|
||||
|
||||
|
|
|
@ -55,6 +55,13 @@ void Menu_Main( void ) {
|
|||
Object_Button( '72 384', BTN_README, __NULL__, fButtonAlpha[4] );
|
||||
Object_Button( '72 412', BTN_VISITWEB, __NULL__, fButtonAlpha[5] );
|
||||
Object_Button( '72 440', BTN_QUIT, Main_ButtonQuit, fButtonAlpha[6] );
|
||||
|
||||
Object_Desc( '244 282', "Change Counter-Strike's video, audio and control settings.", FONTSIZE );
|
||||
Object_Desc( '244 338', "Get online and play Counter-Strike with others around the world.", FONTSIZE );
|
||||
Object_Desc( '244 366', "Play/download other mods, or go back to Counter-Strike.", FONTSIZE );
|
||||
Object_Desc( '244 394', "Read Counter-Strike's readme.txt.", FONTSIZE );
|
||||
Object_Desc( '244 422', "Read the official Counter-Strike manual, learn how to play.", FONTSIZE );
|
||||
Object_Desc( '244 450', "Quit Counter-Strike.", FONTSIZE );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -207,6 +207,18 @@ void Object_Label_Right( vector vPosition, string sLabel, vector vSize ) {
|
|||
Object_Label( vPosition, sLabel, vSize );
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
Object_Desc
|
||||
|
||||
A label in a grey scheme
|
||||
=================
|
||||
*/
|
||||
void Object_Desc( vector vPosition, string sLabel, vector vSize ) {
|
||||
vPosition += vMenuOffset;
|
||||
drawstring( vPosition, sLabel, vSize, '0.68 0.68 0.68', 1.0f, 0 );
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
Object_Scrollbar
|
||||
|
@ -293,7 +305,7 @@ void Object_CvarToggle( vector vPosition, string sLabel, string sCvar ) {
|
|||
int iWidth = stringwidth( sLabel, FALSE );
|
||||
vPosition += vMenuOffset;
|
||||
|
||||
if ( Menu_InputCheckMouse( vPosition, [ iWidth + 32, 12 ] ) == TRUE ) {
|
||||
if ( Menu_InputCheckMouse( vPosition, [ iWidth + 32, 19 ] ) == TRUE ) {
|
||||
fAlpha = 1.0f;
|
||||
if ( fMouseClick == TRUE ) {
|
||||
if ( cvar( sCvar ) == 0 ) {
|
||||
|
@ -305,12 +317,14 @@ void Object_CvarToggle( vector vPosition, string sLabel, string sCvar ) {
|
|||
}
|
||||
}
|
||||
|
||||
drawfill( vPosition + '-2 -2', [ iWidth + 36, 16 ], '0 0 0', 0.8f );
|
||||
drawfill( vPosition + '-2 -2', [ iWidth + 48, 19 ], '0 0 0', 0.8f );
|
||||
|
||||
if ( cvar( sCvar ) == 0 ) {
|
||||
drawstring( vPosition, sprintf( "[ ] %s", sLabel ), FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
drawpic( vPosition, "gfx/shell/cb_empty", '19 19', '1 1 1', 1.0f, 0 );
|
||||
drawstring( vPosition+[24,4], sLabel, FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
} else {
|
||||
drawstring( vPosition, sprintf( "[X] %s", sLabel ), FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
drawpic( vPosition, "gfx/shell/cb_checked", '19 19', '1 1 1', 1.0f, 0 );
|
||||
drawstring( vPosition+[24,4], sLabel, FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -326,7 +340,7 @@ void Object_FuncToggle( vector vPosition, string sLabel, void( void ) vFunc, int
|
|||
int iWidth = stringwidth( sLabel, FALSE );
|
||||
vPosition += vMenuOffset;
|
||||
|
||||
if ( Menu_InputCheckMouse( vPosition, [ iWidth + 32, 12 ] ) == TRUE ) {
|
||||
if ( Menu_InputCheckMouse( vPosition, [ iWidth + 32, 19 ] ) == TRUE ) {
|
||||
fAlpha = 1.0f;
|
||||
if ( fMouseClick == TRUE ) {
|
||||
vFunc();
|
||||
|
@ -334,12 +348,14 @@ void Object_FuncToggle( vector vPosition, string sLabel, void( void ) vFunc, int
|
|||
}
|
||||
}
|
||||
|
||||
drawfill( vPosition + '-2 -2', [ iWidth + 36, 16 ], '0 0 0', 0.8f );
|
||||
drawfill( vPosition + '-2 -2', [ iWidth + 48, 19 ], '0 0 0', 0.8f );
|
||||
|
||||
if ( iValue == 0 ) {
|
||||
drawstring( vPosition, sprintf( "[ ] %s", sLabel ), FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
drawpic( vPosition, "gfx/shell/cb_empty", '19 19', '1 1 1', 1.0f, 0 );
|
||||
drawstring( vPosition+[24,4], sLabel, FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
} else {
|
||||
drawstring( vPosition, sprintf( "[X] %s", sLabel ), FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
drawpic( vPosition, "gfx/shell/cb_checked", '19 19', '1 1 1', 1.0f, 0 );
|
||||
drawstring( vPosition+[24,4], sLabel, FONTSIZE, autocvar_menu_fgcolor, fAlpha, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,8 @@ Not Toggled (32) - Older FGDs show this as Not Looped.
|
|||
Note that actual looping depends purely on cue points defined in the .wav file (see notes).
|
||||
*/
|
||||
.float pitch;
|
||||
.float loop;
|
||||
.float lforate;
|
||||
void ambient_generic( void ) {
|
||||
static float ambient_generic_send( entity ePEnt, float fChanged ) {
|
||||
WriteByte( MSG_ENTITY, ENT_AMBIENTSOUND );
|
||||
|
@ -50,6 +52,8 @@ void ambient_generic( void ) {
|
|||
WriteString( MSG_ENTITY, self.message );
|
||||
WriteFloat( MSG_ENTITY, self.health );
|
||||
WriteByte( MSG_ENTITY, self.style );
|
||||
WriteByte( MSG_ENTITY, self.loop );
|
||||
WriteByte( MSG_ENTITY, self.lforate );
|
||||
return TRUE;
|
||||
}
|
||||
static void ambient_generic_use( void ) {
|
||||
|
@ -72,11 +76,11 @@ void ambient_generic( void ) {
|
|||
ambient_generic_useloop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
precache_sound( self.message );
|
||||
setorigin( self, self.origin );
|
||||
self.health = self.health / 10;
|
||||
|
||||
|
||||
if ( self.spawnflags & 1 ) {
|
||||
self.style = ATTN_NONE;
|
||||
} else if ( self.spawnflags & 2 ) {
|
||||
|
@ -89,7 +93,13 @@ void ambient_generic( void ) {
|
|||
self.style = ATTN_STATIC;
|
||||
}
|
||||
|
||||
if( self.spawnflags & 32 ) {
|
||||
if ( self.spawnflags & 32 ) {
|
||||
self.loop = FALSE;
|
||||
} else {
|
||||
self.loop = TRUE;
|
||||
}
|
||||
|
||||
if( self.spawnflags & 16 ) {
|
||||
self.vUse = ambient_generic_use;
|
||||
} else {
|
||||
self.noise = self.message; // Needed later for resuming
|
||||
|
|
|
@ -28,6 +28,51 @@ enum {
|
|||
HOSTAGE_RUN
|
||||
};
|
||||
|
||||
enum {
|
||||
A_WALK,
|
||||
A_WALKSCARED,
|
||||
A_RUN,
|
||||
A_RUNSCARED,
|
||||
A_RUNLOOK,
|
||||
A_180LEFT,
|
||||
A_180RIGHT,
|
||||
A_FLINCH,
|
||||
A_PAIN,
|
||||
A_PAINLEFT,
|
||||
A_PAINRIGHT,
|
||||
A_PAINLEGLEFT,
|
||||
A_PAINLEGRIGHT,
|
||||
A_IDLE1,
|
||||
A_IDLE2,
|
||||
A_IDLE3,
|
||||
A_IDLE4,
|
||||
A_IDLE5,
|
||||
A_IDLE6,
|
||||
A_SCARED_END,
|
||||
A_SCARED1,
|
||||
A_SCARED2,
|
||||
A_SCARED3,
|
||||
A_PANIC,
|
||||
A_FEAR1,
|
||||
A_FEAR2,
|
||||
A_CRY,
|
||||
A_SCI1,
|
||||
A_SCI2,
|
||||
A_SCI3,
|
||||
A_DIE_SIMPLE,
|
||||
A_DIE_FORWARD1,
|
||||
A_DIE_FORWARD2,
|
||||
A_DIE_BACKWARD,
|
||||
A_DIE_HEADSHOT,
|
||||
A_DIE_GUTSHOT,
|
||||
A_LYING1,
|
||||
A_LYING2,
|
||||
A_DEADSIT,
|
||||
A_DEADTABLE1,
|
||||
A_DEADTABLE2,
|
||||
A_DEADTABLE3
|
||||
};
|
||||
|
||||
/*
|
||||
=================
|
||||
hostage_waypoint
|
||||
|
@ -73,7 +118,7 @@ Called whenever a hostage is shot
|
|||
=================
|
||||
*/
|
||||
void hostage_pain( int iHitBody ) {
|
||||
self.frame = 13 - floor( random( 1, 6 ) );
|
||||
self.frame = A_PAIN + floor( random( 0, 5 ) );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -85,7 +130,7 @@ hosdown.wav
|
|||
*/
|
||||
void hostage_die( int iHitBody ) {
|
||||
Radio_BroadcastMessage( RADIO_HOSDOWN );
|
||||
self.frame = 30 + floor( random( 1, 6 ) );
|
||||
self.frame = A_DIE_SIMPLE + floor( random( 0, 6 ) );
|
||||
|
||||
self.solid = SOLID_NOT;
|
||||
self.takedamage = DAMAGE_NO;
|
||||
|
@ -140,7 +185,6 @@ void hostage_physics( void ) {
|
|||
// Slowly turn towards target
|
||||
float fTurn = Math_LerpAngle( self.v_angle_y, vEndAngle_y, frametime * 4 );
|
||||
self.v_angle_y += fTurn;
|
||||
|
||||
self.v_angle_y = Math_FixDelta( self.v_angle_y );
|
||||
|
||||
// Is the waypoint close? if so, remove and go set the next one!
|
||||
|
@ -189,20 +233,20 @@ void hostage_physics( void ) {
|
|||
}
|
||||
|
||||
if ( fTurn > 0.01 ) {
|
||||
self.frame = 5;
|
||||
self.frame = A_180LEFT;
|
||||
} else if ( fTurn < -0.01 ){
|
||||
self.frame = 6;
|
||||
self.frame = A_180RIGHT;
|
||||
} else {
|
||||
self.frame = 13;
|
||||
self.frame = A_IDLE1;
|
||||
}
|
||||
|
||||
// Decide speed and stuff
|
||||
if ( self.style == HOSTAGE_WALK ) {
|
||||
self.frame = 0;
|
||||
self.frame = A_WALK;
|
||||
input_movevalues_x = 110;
|
||||
} else if ( self.style == HOSTAGE_RUN ) {
|
||||
input_movevalues_x = 220;
|
||||
self.frame = 2;
|
||||
self.frame = A_RUN;
|
||||
} else {
|
||||
input_movevalues_x = 0;
|
||||
}
|
||||
|
@ -250,11 +294,20 @@ void hostage_entity( void ) {
|
|||
self.vDeath = hostage_die;
|
||||
self.style = HOSTAGE_IDLE;
|
||||
|
||||
self.frame = 13; // Idle frame
|
||||
self.frame = A_IDLE1;
|
||||
self.health = 100;
|
||||
self.velocity = '0 0 0';
|
||||
self.iHasBeenUsed = FALSE;
|
||||
}
|
||||
|
||||
// Path hack
|
||||
if ( self.model == "/models/hostage.mdl" ) {
|
||||
self.model = "";
|
||||
}
|
||||
|
||||
if ( !self.model ) {
|
||||
self.model = "models/hostage.mdl";
|
||||
}
|
||||
|
||||
precache_model( self.model );
|
||||
hostage_entity_respawn();
|
||||
|
|
|
@ -48,15 +48,15 @@ chat messages and handle distribution ourselves.
|
|||
*/
|
||||
void SV_ParseClientCommand( string sCommand ) {
|
||||
tokenize( sCommand );
|
||||
|
||||
string chat = substring( sCommand, 4, strlen( sCommand ) - 4 )
|
||||
|
||||
|
||||
if ( argv( 1 ) == "timeleft" ) {
|
||||
float fTimeLeft = cvar( "mp_timelimit" ) - ( time / 60 );
|
||||
Vox_Singlecast( self, sprintf( "we have %s minutes remaining", Vox_TimeToString( fTimeLeft ) ) );
|
||||
return;
|
||||
}
|
||||
|
||||
string chat = substring( sCommand, 4, strlen( sCommand ) - 4 );
|
||||
|
||||
// Players talk to players, spectators to spectators.
|
||||
if ( self.health ) {
|
||||
if ( argv( 0 ) == "say" ) {
|
||||
|
|
Binary file not shown.
BIN
freecs/menu.dat
BIN
freecs/menu.dat
Binary file not shown.
BIN
freecs/progs.dat
BIN
freecs/progs.dat
Binary file not shown.
Loading…
Reference in a new issue