Browse Source

Merge @malortie's patches for Times of Troubles.

tot
Night Owl 8 years ago
parent
commit
44ccc8a6e8
  1. 11
      dlls/python.cpp
  2. 75
      dlls/scientist.cpp
  3. 93
      dlls/scientist.h
  4. 26
      dlls/scripted.cpp
  5. 143
      dlls/tot/civ.cpp
  6. 7
      dlls/weapons.cpp
  7. 5
      dlls/weapons.h

11
dlls/python.cpp

@ -111,6 +111,8 @@ BOOL CPython::Deploy()
pev->body = 0; pev->body = 0;
} }
m_flSoundDelay = 0;
return DefaultDeploy( "models/v_357.mdl", "models/p_357.mdl", PYTHON_DRAW, "python", UseDecrement(), pev->body ); 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_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
SendWeaponAnim( PYTHON_HOLSTER ); SendWeaponAnim( PYTHON_HOLSTER );
m_flSoundDelay = 0;
} }
void CPython::SecondaryAttack( void ) void CPython::SecondaryAttack( void )
@ -227,9 +231,10 @@ void CPython::Reload( void )
#else #else
bUseScope = g_pGameRules->IsMultiplayer(); bUseScope = g_pGameRules->IsMultiplayer();
#endif #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.5f;
} }
} }
@ -240,7 +245,7 @@ void CPython::WeaponIdle( void )
m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
// ALERT( at_console, "%.2f\n", gpGlobals->time - m_flSoundDelay ); // 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 ); EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/357_reload1.wav", RANDOM_FLOAT( 0.8, 0.9 ), ATTN_NORM );
m_flSoundDelay = 0; m_flSoundDelay = 0;

75
dlls/scientist.cpp

@ -26,16 +26,7 @@
#include "scripted.h" #include "scripted.h"
#include "animation.h" #include "animation.h"
#include "soundent.h" #include "soundent.h"
#include "scientist.h"
#define NUM_SCIENTIST_HEADS 4 // four heads available for scientist model
enum
{
HEAD_GLASSES = 0,
HEAD_EINSTEIN = 1,
HEAD_LUTHER = 2,
HEAD_SLICK = 3
};
enum enum
{ {
@ -68,56 +59,6 @@ enum
//======================================================= //=======================================================
// Scientist // Scientist
//======================================================= //=======================================================
class CScientist : public CTalkMonster
{
public:
void Spawn( void );
void Precache( void );
void SetYawSpeed( void );
int Classify( void );
void HandleAnimEvent( MonsterEvent_t *pEvent );
void RunTask( Task_t *pTask );
void StartTask( Task_t *pTask );
int ObjectCaps( void ) { return CTalkMonster::ObjectCaps() | FCAP_IMPULSE_USE; }
int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );
virtual int FriendNumber( int arrayNumber );
void SetActivity( Activity newActivity );
Activity GetStoppedActivity( void );
int ISoundMask( void );
void DeclineFollowing( void );
float CoverRadius( void ) { return 1200; } // Need more room for cover because scientists want to get far away!
BOOL DisregardEnemy( CBaseEntity *pEnemy ) { return !pEnemy->IsAlive() || ( gpGlobals->time - m_fearTime ) > 15; }
BOOL CanHeal( void );
void Heal( void );
void Scream( void );
// Override these to set behavior
Schedule_t *GetScheduleOfType( int Type );
Schedule_t *GetSchedule( void );
MONSTERSTATE GetIdealState( void );
void DeathSound( void );
void PainSound( void );
void TalkInit( void );
void Killed( entvars_t *pevAttacker, int iGib );
virtual int Save( CSave &save );
virtual int Restore( CRestore &restore );
static TYPEDESCRIPTION m_SaveData[];
CUSTOM_SCHEDULES
private:
float m_painTime;
float m_healTime;
float m_fearTime;
};
LINK_ENTITY_TO_CLASS( monster_scientist, CScientist ) LINK_ENTITY_TO_CLASS( monster_scientist, CScientist )
TYPEDESCRIPTION CScientist::m_SaveData[] = TYPEDESCRIPTION CScientist::m_SaveData[] =
@ -1082,20 +1023,6 @@ int CScientist::FriendNumber( int arrayNumber )
//========================================================= //=========================================================
// Dead Scientist PROP // Dead Scientist PROP
//========================================================= //=========================================================
class CDeadScientist : public CBaseMonster
{
public:
void Spawn( void );
int Classify( void )
{
return CLASS_HUMAN_PASSIVE;
}
void KeyValue( KeyValueData *pkvd );
int m_iPose;// which sequence to display
static char *m_szPoses[7];
};
char *CDeadScientist::m_szPoses[] = char *CDeadScientist::m_szPoses[] =
{ {
"lying_on_back", "lying_on_back",

93
dlls/scientist.h

@ -0,0 +1,93 @@
/***
*
* 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.
*
* This source code contains proprietary and confidential information of
* Valve LLC and its suppliers. Access to this code is restricted to
* persons who have executed a written SDK license with Valve. Any access,
* use or distribution of this code by or to any unlicensed person is illegal.
*
****/
#ifndef SCIENTIST_H
#define SCIENTIST_H
#if defined ( TOT_DLL )
#define NUM_SCIENTIST_HEADS 4 // four heads available for scientist model
enum { HEAD_GLASSES = 0, HEAD_EINSTEIN = 1, HEAD_LUTHER = 2, HEAD_SLICK = 3 };
//=======================================================
// Scientist
//=======================================================
class CScientist : public CTalkMonster
{
public:
virtual void Spawn(void);
virtual void Precache(void);
void SetYawSpeed(void);
int Classify(void);
void HandleAnimEvent(MonsterEvent_t *pEvent);
void RunTask(Task_t *pTask);
void StartTask(Task_t *pTask);
int ObjectCaps(void) { return CTalkMonster::ObjectCaps() | FCAP_IMPULSE_USE; }
int TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType);
virtual int FriendNumber(int arrayNumber);
void SetActivity(Activity newActivity);
Activity GetStoppedActivity(void);
int ISoundMask(void);
void DeclineFollowing(void);
float CoverRadius(void) { return 1200; } // Need more room for cover because scientists want to get far away!
BOOL DisregardEnemy(CBaseEntity *pEnemy) { return !pEnemy->IsAlive() || (gpGlobals->time - m_fearTime) > 15; }
virtual BOOL CanHeal(void);
void Heal(void);
void Scream(void);
// Override these to set behavior
Schedule_t *GetScheduleOfType(int Type);
Schedule_t *GetSchedule(void);
MONSTERSTATE GetIdealState(void);
void DeathSound(void);
void PainSound(void);
void TalkInit(void);
void Killed(entvars_t *pevAttacker, int iGib);
virtual int Save(CSave &save);
virtual int Restore(CRestore &restore);
static TYPEDESCRIPTION m_SaveData[];
CUSTOM_SCHEDULES;
private:
float m_painTime;
float m_healTime;
float m_fearTime;
};
//=========================================================
// Dead Scientist PROP
//=========================================================
class CDeadScientist : public CBaseMonster
{
public:
virtual void Spawn(void);
int Classify(void) { return CLASS_HUMAN_PASSIVE; }
void KeyValue(KeyValueData *pkvd);
int m_iPose;// which sequence to display
static char *m_szPoses[7];
};
#endif // defined ( TOT_DLL )
#endif // SCIENTIST_H

26
dlls/scripted.cpp

@ -372,6 +372,32 @@ void CCineMonster::PossessEntity( void )
pTarget->pev->framerate = 0; pTarget->pev->framerate = 0;
} }
} }
//
// Fix a bug where barney would not run to the osprey on map 7.
//
if( FStrEq( STRING( gpGlobals->mapname ), "map7" ) )
{
if( FStrEq(STRING( pev->target ), "jan_osprey15" ) )
{
CCineMonster *pSeq = (CCineMonster*)UTIL_FindEntityByTargetname( NULL, "jan_osprey3" );
if( pSeq )
{
pTarget->m_pGoalEnt = pSeq;
pTarget->m_pCine = pSeq;
pTarget->m_hTargetEnt = pSeq;
UTIL_SetOrigin( pTarget->pev, pSeq->pev->origin );
pTarget->pev->ideal_yaw = pSeq->pev->angles.y;
pTarget->pev->avelocity = Vector( 0, 0, 0 );
pTarget->pev->velocity = Vector( 0, 0, 0 );
pTarget->pev->effects |= EF_NOINTERP;
pTarget->pev->angles.y = pSeq->pev->angles.y;
pTarget->m_scriptState = SCRIPT_WAIT;
m_startTime = gpGlobals->time + 1E6;
}
}
}
} }
} }

143
dlls/tot/civ.cpp

@ -0,0 +1,143 @@
/***
*
* 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.
*
* This source code contains proprietary and confidential information of
* Valve LLC and its suppliers. Access to this code is restricted to
* persons who have executed a written SDK license with Valve. Any access,
* use or distribution of this code by or to any unlicensed person is illegal.
*
****/
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "talkmonster.h"
#include "schedule.h"
#include "defaultai.h"
#include "scripted.h"
#include "animation.h"
#include "soundent.h"
#include "scientist.h"
class CCivScientist : public CScientist
{
public:
void Spawn(void);
void Precache(void);
BOOL CanHeal(void);
};
LINK_ENTITY_TO_CLASS(monster_civ, CCivScientist);
//=========================================================
// Spawn
//=========================================================
void CCivScientist::Spawn(void)
{
Precache();
SET_MODEL(ENT(pev), "models/civ_sci.mdl");
UTIL_SetSize(pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX);
pev->solid = SOLID_SLIDEBOX;
pev->movetype = MOVETYPE_STEP;
m_bloodColor = BLOOD_COLOR_RED;
pev->health = gSkillData.scientistHealth;
pev->view_ofs = Vector(0, 0, 50);// position of the eyes relative to monster's origin.
m_flFieldOfView = VIEW_FIELD_WIDE; // NOTE: we need a wide field of view so scientists will notice player and say hello
m_MonsterState = MONSTERSTATE_NONE;
// m_flDistTooFar = 256.0;
m_afCapability = bits_CAP_HEAR | bits_CAP_TURN_HEAD | bits_CAP_OPEN_DOORS | bits_CAP_AUTO_DOORS | bits_CAP_USE;
// White hands
pev->skin = 0;
if (pev->body == -1)
{// -1 chooses a random head
pev->body = RANDOM_LONG(0, NUM_SCIENTIST_HEADS - 1);// pick a head, any head
}
// Luther is black, make his hands black
if (pev->body == HEAD_LUTHER)
pev->skin = 1;
MonsterInit();
SetUse(&CCivScientist::FollowerUse);
}
//=========================================================
// Precache - precaches all resources this monster needs
//=========================================================
void CCivScientist::Precache(void)
{
CScientist::Precache();
PRECACHE_MODEL("models/civ_sci.mdl");
}
BOOL CCivScientist::CanHeal(void)
{
return FALSE;
}
//=========================================================
// Dead Scientist PROP
//=========================================================
class CDeadCivScientist : public CDeadScientist
{
public:
void Spawn(void);
static char *m_szPoses[7];
};
char *CDeadCivScientist::m_szPoses[] = { "lying_on_back", "lying_on_stomach", "dead_sitting", "dead_hang", "dead_table1", "dead_table2", "dead_table3" };
LINK_ENTITY_TO_CLASS(monster_civ_dead, CDeadCivScientist);
//
// ********** DeadScientist SPAWN **********
//
void CDeadCivScientist::Spawn()
{
PRECACHE_MODEL("models/civ_sci.mdl");
SET_MODEL(ENT(pev), "models/civ_sci.mdl");
pev->effects = 0;
pev->sequence = 0;
// Corpses have less health
pev->health = 8;//gSkillData.scientistHealth;
m_bloodColor = BLOOD_COLOR_RED;
if (pev->body == -1)
{// -1 chooses a random head
pev->body = RANDOM_LONG(0, NUM_SCIENTIST_HEADS - 1);// pick a head, any head
}
// Luther is black, make his hands black
if (pev->body == HEAD_LUTHER)
pev->skin = 1;
else
pev->skin = 0;
pev->sequence = LookupSequence(m_szPoses[m_iPose]);
if (pev->sequence == -1)
{
ALERT(at_console, "Dead scientist with bad pose\n");
}
// pev->skin += 2; // use bloody skin -- UNDONE: Turn this back on when we have a bloody skin again!
MonsterInitDead();
}

7
dlls/weapons.cpp

@ -1527,3 +1527,10 @@ TYPEDESCRIPTION CSatchel::m_SaveData[] =
}; };
IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon ) IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon )
TYPEDESCRIPTION CPython::m_SaveData[] =
{
DEFINE_FIELD( CPython, m_flSoundDelay, FIELD_TIME ),
};
IMPLEMENT_SAVERESTORE( CPython, CBasePlayerWeapon )

5
dlls/weapons.h

@ -514,6 +514,11 @@ private:
class CPython : public CBasePlayerWeapon class CPython : public CBasePlayerWeapon
{ {
public: public:
#ifndef CLIENT_DLL
int Save( CSave &save );
int Restore( CRestore &restore );
static TYPEDESCRIPTION m_SaveData[];
#endif
void Spawn( void ); void Spawn( void );
void Precache( void ); void Precache( void );
int iItemSlot( void ) { return 2; } int iItemSlot( void ) { return 2; }

Loading…
Cancel
Save