mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-02 18:14:26 +00:00
Merge @malortie's patches for Black Ops.
This commit is contained in:
parent
21317e7da3
commit
16d195e426
77
cl_dll/blackops/nightvision.cpp
Normal file
77
cl_dll/blackops/nightvision.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
|
||||
#include "hud.h"
|
||||
#include "cl_util.h"
|
||||
#include "parsemsg.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
DECLARE_MESSAGE(m_Nightvision, Nightvision)
|
||||
|
||||
int CHudNightvision::Init(void)
|
||||
{
|
||||
m_iFlags = 0;
|
||||
|
||||
HOOK_MESSAGE(Nightvision);
|
||||
|
||||
gHUD.AddHudElem(this);
|
||||
|
||||
return 1;
|
||||
};
|
||||
|
||||
|
||||
int CHudNightvision::VidInit(void)
|
||||
{
|
||||
return 1;
|
||||
};
|
||||
|
||||
int CHudNightvision::MsgFunc_Nightvision(const char *pszName, int iSize, void *pbuf)
|
||||
{
|
||||
BEGIN_READ(pbuf, iSize);
|
||||
int fActive = READ_BYTE();
|
||||
|
||||
if (fActive)
|
||||
m_iFlags |= HUD_ACTIVE;
|
||||
else
|
||||
m_iFlags &= ~HUD_ACTIVE;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int CHudNightvision::Draw(float flTime)
|
||||
{
|
||||
if (!(gHUD.m_iWeaponBits & (1 << (WEAPON_SUIT))))
|
||||
return 1;
|
||||
|
||||
int r, g, b, a;
|
||||
int x, y, w, h;
|
||||
|
||||
a = 128;
|
||||
|
||||
UnpackRGB(r, g, b, RGB_YELLOWISH);
|
||||
|
||||
ScaleColors(r, g, b, a);
|
||||
|
||||
x = y = 0;
|
||||
w = ScreenWidth;
|
||||
h = ScreenHeight;
|
||||
|
||||
FillRGBA( x, y, w, h, r, g, b, a );
|
||||
|
||||
return 1;
|
||||
}
|
@ -231,7 +231,7 @@ int CHudHealth::Draw( float flTime )
|
||||
|
||||
int iHeight = gHUD.m_iFontHeight;
|
||||
int iWidth = HealthWidth / 10;
|
||||
FillRGBA( x, y, iWidth, iHeight, 255, 160, 0, a );
|
||||
FillRGBA( x, y, iWidth, iHeight, r, g, b, a );
|
||||
}
|
||||
|
||||
DrawDamage( flTime );
|
||||
|
@ -227,6 +227,7 @@ void CHud::Init( void )
|
||||
m_AmmoSecondary.Init();
|
||||
m_TextMessage.Init();
|
||||
m_StatusIcons.Init();
|
||||
m_Nightvision.Init();
|
||||
m_MOTD.Init();
|
||||
m_Scoreboard.Init();
|
||||
|
||||
@ -396,6 +397,7 @@ void CHud::VidInit( void )
|
||||
m_AmmoSecondary.VidInit();
|
||||
m_TextMessage.VidInit();
|
||||
m_StatusIcons.VidInit();
|
||||
m_Nightvision.VidInit();
|
||||
m_Scoreboard.VidInit();
|
||||
m_MOTD.VidInit();
|
||||
}
|
||||
|
15
cl_dll/hud.h
15
cl_dll/hud.h
@ -20,7 +20,7 @@
|
||||
// CHud handles the message, calculation, and drawing the HUD
|
||||
//
|
||||
|
||||
#define RGB_YELLOWISH 0x00FFA000 //255,160,0
|
||||
#define RGB_YELLOWISH 0x00FF0000 //255,0,0
|
||||
#define RGB_REDISH 0x00FF1010 //255,160,0
|
||||
#define RGB_GREENISH 0x0000A000 //0,160,0
|
||||
|
||||
@ -556,6 +556,18 @@ private:
|
||||
icon_sprite_t m_IconList[MAX_ICONSPRITES];
|
||||
};
|
||||
|
||||
//
|
||||
//-----------------------------------------------------
|
||||
//
|
||||
class CHudNightvision : public CHudBase
|
||||
{
|
||||
public:
|
||||
int Init( void );
|
||||
int VidInit( void );
|
||||
int Draw( float flTime );
|
||||
int MsgFunc_Nightvision( const char *pszName, int iSize, void *pbuf );
|
||||
};
|
||||
|
||||
//
|
||||
//-----------------------------------------------------
|
||||
//
|
||||
@ -631,6 +643,7 @@ public:
|
||||
CHudAmmoSecondary m_AmmoSecondary;
|
||||
CHudTextMessage m_TextMessage;
|
||||
CHudStatusIcons m_StatusIcons;
|
||||
CHudNightvision m_Nightvision;
|
||||
CHudScoreboard m_Scoreboard;
|
||||
CHudMOTD m_MOTD;
|
||||
|
||||
|
@ -240,7 +240,7 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time )
|
||||
{
|
||||
int i, j, length, width;
|
||||
const char *pText;
|
||||
unsigned char line[80];
|
||||
unsigned char line[512];
|
||||
|
||||
pText = pMessage->pMessage;
|
||||
// Count lines
|
||||
|
89
dlls/blackops/hudtoggle.cpp
Normal file
89
dlls/blackops/hudtoggle.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2001, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
#include "extdll.h"
|
||||
#include "util.h"
|
||||
#include "cbase.h"
|
||||
#include "monsters.h"
|
||||
#include "customentity.h"
|
||||
#include "effects.h"
|
||||
#include "weapons.h"
|
||||
#include "decals.h"
|
||||
#include "func_break.h"
|
||||
#include "shake.h"
|
||||
#include "player.h"
|
||||
|
||||
class CHudToggle : public CPointEntity
|
||||
{
|
||||
public:
|
||||
virtual int Save(CSave &save);
|
||||
virtual int Restore(CRestore &restore);
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
|
||||
void Spawn(void);
|
||||
void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||||
|
||||
protected:
|
||||
BOOL m_fIsActive;
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS(env_hudtoggle, CHudToggle);
|
||||
|
||||
TYPEDESCRIPTION CHudToggle::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD(CHudToggle, m_fIsActive, FIELD_BOOLEAN),
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE(CHudToggle, CPointEntity);
|
||||
|
||||
void CHudToggle::Spawn(void)
|
||||
{
|
||||
pev->solid = SOLID_NOT;
|
||||
pev->movetype = MOVETYPE_NONE;
|
||||
pev->effects = 0;
|
||||
|
||||
m_fIsActive = TRUE;
|
||||
}
|
||||
|
||||
void CHudToggle::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
CBasePlayer* pPlayer = (CBasePlayer*)pActivator;
|
||||
if (!pPlayer)
|
||||
return;
|
||||
|
||||
switch (useType)
|
||||
{
|
||||
case USE_ON:
|
||||
case USE_TOGGLE:
|
||||
m_fIsActive = !m_fIsActive;
|
||||
break;
|
||||
|
||||
case USE_OFF:
|
||||
m_fIsActive = FALSE;
|
||||
break;
|
||||
|
||||
case USE_SET:
|
||||
m_fIsActive = value;
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_fIsActive)
|
||||
{
|
||||
pPlayer->m_iHideHUD &= ~HIDEHUD_ALL;
|
||||
}
|
||||
else
|
||||
{
|
||||
pPlayer->m_iHideHUD |= HIDEHUD_ALL;
|
||||
}
|
||||
}
|
@ -470,6 +470,17 @@ void ClientCommand( edict_t *pEntity )
|
||||
{
|
||||
// MenuSelect returns true only if the command is properly handled, so don't print a warning
|
||||
}*/
|
||||
else if( FStrEq( pcmd, "nightvision" ) )
|
||||
{
|
||||
CBasePlayer * pPlayer = GetClassPtr( (CBasePlayer *)pev );
|
||||
if( pPlayer )
|
||||
{
|
||||
if( !pPlayer->FlashlightIsOn() )
|
||||
pPlayer->FlashlightTurnOn();
|
||||
else
|
||||
pPlayer->FlashlightTurnOff();
|
||||
}
|
||||
}
|
||||
else if( FStrEq( pcmd, "VModEnable" ) )
|
||||
{
|
||||
// clear 'Unknown command: VModEnable' in singleplayer
|
||||
|
@ -181,16 +181,14 @@ class CItemSuit : public CItem
|
||||
void Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_suit.mdl" );
|
||||
PRECACHE_SOUND( "items/vest_pickup.wav" );
|
||||
}
|
||||
BOOL MyTouch( CBasePlayer *pPlayer )
|
||||
{
|
||||
if( pPlayer->pev->weapons & ( 1<<WEAPON_SUIT ) )
|
||||
return FALSE;
|
||||
|
||||
if( pev->spawnflags & SF_SUIT_SHORTLOGON )
|
||||
EMIT_SOUND_SUIT( pPlayer->edict(), "!HEV_A0" ); // short version of suit logon,
|
||||
else
|
||||
EMIT_SOUND_SUIT( pPlayer->edict(), "!HEV_AAx" ); // long version of suit logon
|
||||
EMIT_SOUND( pPlayer->edict(), CHAN_ITEM, "items/vest_pickup.wav", 1, ATTN_NORM );
|
||||
|
||||
pPlayer->pev->weapons |= ( 1 << WEAPON_SUIT );
|
||||
return TRUE;
|
||||
|
@ -184,6 +184,8 @@ int gmsgTeamNames = 0;
|
||||
int gmsgStatusText = 0;
|
||||
int gmsgStatusValue = 0;
|
||||
|
||||
int gmsgNightvision = 0;
|
||||
|
||||
void LinkUserMessages( void )
|
||||
{
|
||||
// Already taken care of?
|
||||
@ -228,6 +230,8 @@ void LinkUserMessages( void )
|
||||
|
||||
gmsgStatusText = REG_USER_MSG( "StatusText", -1 );
|
||||
gmsgStatusValue = REG_USER_MSG( "StatusValue", 3 );
|
||||
|
||||
gmsgNightvision = REG_USER_MSG( "Nightvision", 1 );
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS( player, CBasePlayer )
|
||||
@ -3180,7 +3184,7 @@ CBaseEntity *FindEntityForward( CBaseEntity *pMe )
|
||||
|
||||
BOOL CBasePlayer::FlashlightIsOn( void )
|
||||
{
|
||||
return FBitSet( pev->effects, EF_DIMLIGHT );
|
||||
return FBitSet( pev->effects, EF_BRIGHTLIGHT );
|
||||
}
|
||||
|
||||
void CBasePlayer::FlashlightTurnOn( void )
|
||||
@ -3193,26 +3197,34 @@ void CBasePlayer::FlashlightTurnOn( void )
|
||||
if( (pev->weapons & ( 1 << WEAPON_SUIT ) ) )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( pev ), CHAN_WEAPON, SOUND_FLASHLIGHT_ON, 1.0, ATTN_NORM, 0, PITCH_NORM );
|
||||
SetBits( pev->effects, EF_DIMLIGHT );
|
||||
SetBits( pev->effects, EF_BRIGHTLIGHT );
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgFlashlight, NULL, pev );
|
||||
WRITE_BYTE( 1 );
|
||||
WRITE_BYTE( m_iFlashBattery );
|
||||
MESSAGE_END();
|
||||
|
||||
m_flFlashLightTime = FLASH_DRAIN_TIME + gpGlobals->time;
|
||||
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgNightvision, NULL, pev );
|
||||
WRITE_BYTE( 1 );
|
||||
MESSAGE_END();
|
||||
}
|
||||
}
|
||||
|
||||
void CBasePlayer::FlashlightTurnOff( void )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( pev ), CHAN_WEAPON, SOUND_FLASHLIGHT_OFF, 1.0, ATTN_NORM, 0, PITCH_NORM );
|
||||
ClearBits( pev->effects, EF_DIMLIGHT );
|
||||
ClearBits( pev->effects, EF_BRIGHTLIGHT );
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgFlashlight, NULL, pev );
|
||||
WRITE_BYTE( 0 );
|
||||
WRITE_BYTE( m_iFlashBattery );
|
||||
MESSAGE_END();
|
||||
|
||||
m_flFlashLightTime = FLASH_CHARGE_TIME + gpGlobals->time;
|
||||
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgNightvision, NULL, pev );
|
||||
WRITE_BYTE( 0 );
|
||||
MESSAGE_END();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -55,8 +55,8 @@
|
||||
|
||||
#define CSUITNOREPEAT 32
|
||||
|
||||
#define SOUND_FLASHLIGHT_ON "items/flashlight1.wav"
|
||||
#define SOUND_FLASHLIGHT_OFF "items/flashlight1.wav"
|
||||
#define SOUND_FLASHLIGHT_ON "items/nvg_turnon.wav"
|
||||
#define SOUND_FLASHLIGHT_OFF "items/nvg_turnoff.wav"
|
||||
|
||||
#define TEAM_NAME_LENGTH 16
|
||||
|
||||
|
@ -111,6 +111,8 @@ BOOL CPython::Deploy()
|
||||
pev->body = 0;
|
||||
}
|
||||
|
||||
m_flSoundDelay = 0;
|
||||
|
||||
return DefaultDeploy( "models/v_357.mdl", "models/p_357.mdl", PYTHON_DRAW, "python", UseDecrement(), pev->body );
|
||||
}
|
||||
|
||||
@ -126,6 +128,8 @@ void CPython::Holster( int skiplocal /* = 0 */ )
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
SendWeaponAnim( PYTHON_HOLSTER );
|
||||
|
||||
m_flSoundDelay = 0;
|
||||
}
|
||||
|
||||
void CPython::SecondaryAttack( void )
|
||||
@ -227,9 +231,10 @@ void CPython::Reload( void )
|
||||
#else
|
||||
bUseScope = g_pGameRules->IsMultiplayer();
|
||||
#endif
|
||||
if( DefaultReload( 6, PYTHON_RELOAD, 2.0, bUseScope ) )
|
||||
int iResult = DefaultReload( PYTHON_MAX_CLIP, PYTHON_RELOAD, 2.0, bUseScope );
|
||||
if( iResult )
|
||||
{
|
||||
m_flSoundDelay = 1.5;
|
||||
m_flSoundDelay = gpGlobals->time + 1.5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,7 +245,7 @@ void CPython::WeaponIdle( void )
|
||||
m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
|
||||
|
||||
// ALERT( at_console, "%.2f\n", gpGlobals->time - m_flSoundDelay );
|
||||
if( m_flSoundDelay != 0 && m_flSoundDelay <= UTIL_WeaponTimeBase() )
|
||||
if( m_flSoundDelay != 0 && ( m_flSoundDelay <= UTIL_WeaponTimeBase() || m_flSoundDelay <= gpGlobals->time ) )
|
||||
{
|
||||
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/357_reload1.wav", RANDOM_FLOAT( 0.8, 0.9 ), ATTN_NORM );
|
||||
m_flSoundDelay = 0;
|
||||
|
@ -2381,3 +2381,65 @@ void CTriggerCamera::Move()
|
||||
float fraction = 2 * gpGlobals->frametime;
|
||||
pev->velocity = ( ( pev->movedir * pev->speed ) * fraction ) + ( pev->velocity * ( 1 - fraction ) );
|
||||
}
|
||||
|
||||
//
|
||||
// Adapted from TWHL - Using mp3s in Steam
|
||||
//
|
||||
class CTargetMP3Audio : public CBaseTrigger
|
||||
{
|
||||
public:
|
||||
virtual int Save( CSave &save );
|
||||
virtual int Restore( CRestore &restore );
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
|
||||
void Spawn( void );
|
||||
void KeyValue( KeyValueData *pkvd );
|
||||
|
||||
void Touch( CBaseEntity *pOther );
|
||||
|
||||
int m_iszTrack;
|
||||
BOOL m_bTriggered;
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( trigger_mp3audio, CTargetMP3Audio );
|
||||
|
||||
TYPEDESCRIPTION CTargetMP3Audio::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CTargetMP3Audio, m_bTriggered, FIELD_BOOLEAN ),
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CTargetMP3Audio, CBaseTrigger );
|
||||
|
||||
void CTargetMP3Audio::KeyValue( KeyValueData *pkvd )
|
||||
{
|
||||
if( FStrEq( pkvd->szKeyName, "track" ) )
|
||||
{
|
||||
m_iszTrack = ALLOC_STRING( pkvd->szValue );
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else
|
||||
CBaseTrigger::KeyValue( pkvd );
|
||||
}
|
||||
|
||||
void CTargetMP3Audio::Spawn( void )
|
||||
{
|
||||
InitTrigger();
|
||||
|
||||
m_bTriggered = FALSE;
|
||||
}
|
||||
|
||||
void CTargetMP3Audio::Touch( CBaseEntity *pOther )
|
||||
{
|
||||
if( m_bTriggered )
|
||||
return;
|
||||
|
||||
if( !pOther || !pOther->IsPlayer() )
|
||||
return;
|
||||
|
||||
m_bTriggered = TRUE;
|
||||
|
||||
if( FStrEq( STRING( gpGlobals->mapname ), "ops_17th" ) )
|
||||
{
|
||||
CLIENT_COMMAND( pOther->edict(), "play media/Suspense07.mp3\n" );
|
||||
}
|
||||
}
|
||||
|
@ -1527,3 +1527,9 @@ TYPEDESCRIPTION CSatchel::m_SaveData[] =
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon )
|
||||
|
||||
TYPEDESCRIPTION CPython::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CPython, m_flSoundDelay, FIELD_TIME ),
|
||||
};
|
||||
|
||||
|
@ -538,6 +538,12 @@ public:
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
int Save( CSave &save );
|
||||
int Restore( CRestore &restore );
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
#endif
|
||||
|
||||
private:
|
||||
unsigned short m_usFirePython;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user