- 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:
Marco Hladik 2018-06-10 11:40:44 +02:00
parent 6b3504c560
commit 26efc3588e
13 changed files with 141 additions and 28 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

Binary file not shown.

Binary file not shown.