mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-01-25 22:24:16 +00:00
Merge branch 'tot' into mobile_hacks
This commit is contained in:
commit
77daf36fea
@ -127,6 +127,7 @@ LOCAL_SRC_FILES := agrunt.cpp airtank.cpp \
|
||||
xen.cpp \
|
||||
zombie.cpp \
|
||||
redempt/roy.cpp \
|
||||
tot/civ.cpp \
|
||||
../pm_shared/pm_debug.c \
|
||||
../pm_shared/pm_math.c \
|
||||
../pm_shared/pm_shared.c
|
||||
|
@ -43,7 +43,8 @@ else()
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
|
||||
endif()
|
||||
|
||||
set (SVDLL_SOURCES
|
||||
set (SVDLL_SOURCES
|
||||
tot/civ.cpp
|
||||
agrunt.cpp
|
||||
airtank.cpp
|
||||
aflock.cpp
|
||||
|
@ -49,6 +49,7 @@ public:
|
||||
int m_iJuice;
|
||||
int m_iOn; // 0 = off, 1 = startup, 2 = going
|
||||
float m_flSoundTime;
|
||||
BOOL m_bTriggerable;
|
||||
};
|
||||
|
||||
TYPEDESCRIPTION CRecharge::m_SaveData[] =
|
||||
@ -58,6 +59,7 @@ TYPEDESCRIPTION CRecharge::m_SaveData[] =
|
||||
DEFINE_FIELD( CRecharge, m_iJuice, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( CRecharge, m_iOn, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( CRecharge, m_flSoundTime, FIELD_TIME ),
|
||||
DEFINE_FIELD( CRecharge, m_bTriggerable, FIELD_BOOLEAN )
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CRecharge, CBaseEntity )
|
||||
@ -94,6 +96,7 @@ void CRecharge::Spawn()
|
||||
UTIL_SetSize( pev, pev->mins, pev->maxs );
|
||||
SET_MODEL( ENT( pev ), STRING( pev->model ) );
|
||||
m_iJuice = (int)gSkillData.suitchargerCapacity;
|
||||
m_bTriggerable = !FStringNull( pev->target );
|
||||
pev->frame = 0;
|
||||
}
|
||||
|
||||
@ -118,6 +121,11 @@ void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE use
|
||||
if( m_iJuice <= 0 )
|
||||
{
|
||||
pev->frame = 1;
|
||||
if( m_bTriggerable )
|
||||
{
|
||||
FireTargets( STRING( pev->target ), pActivator, this, USE_TOGGLE, 0 );
|
||||
m_bTriggerable = FALSE;
|
||||
}
|
||||
Off();
|
||||
}
|
||||
|
||||
@ -172,6 +180,7 @@ void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE use
|
||||
void CRecharge::Recharge( void )
|
||||
{
|
||||
m_iJuice = (int)gSkillData.suitchargerCapacity;
|
||||
m_bTriggerable = !FStringNull( pev->target );
|
||||
pev->frame = 0;
|
||||
SetThink( &CBaseEntity::SUB_DoNothing );
|
||||
}
|
||||
|
@ -116,6 +116,7 @@ public:
|
||||
int m_iJuice;
|
||||
int m_iOn; // 0 = off, 1 = startup, 2 = going
|
||||
float m_flSoundTime;
|
||||
BOOL m_bTriggerable;
|
||||
};
|
||||
|
||||
TYPEDESCRIPTION CWallHealth::m_SaveData[] =
|
||||
@ -125,6 +126,7 @@ TYPEDESCRIPTION CWallHealth::m_SaveData[] =
|
||||
DEFINE_FIELD( CWallHealth, m_iJuice, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( CWallHealth, m_iOn, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( CWallHealth, m_flSoundTime, FIELD_TIME ),
|
||||
DEFINE_FIELD( CWallHealth, m_bTriggerable, FIELD_BOOLEAN )
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CWallHealth, CBaseEntity )
|
||||
@ -161,6 +163,7 @@ void CWallHealth::Spawn()
|
||||
UTIL_SetSize( pev, pev->mins, pev->maxs );
|
||||
SET_MODEL( ENT( pev ), STRING( pev->model ) );
|
||||
m_iJuice = (int)gSkillData.healthchargerCapacity;
|
||||
m_bTriggerable = !FStringNull( pev->target );
|
||||
pev->frame = 0;
|
||||
}
|
||||
|
||||
@ -183,6 +186,11 @@ void CWallHealth::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE u
|
||||
// if there is no juice left, turn it off
|
||||
if( m_iJuice <= 0 )
|
||||
{
|
||||
if( m_bTriggerable )
|
||||
{
|
||||
FireTargets( STRING( pev->target ), pActivator, this, USE_TOGGLE, 0 );
|
||||
m_bTriggerable = FALSE;
|
||||
}
|
||||
pev->frame = 1;
|
||||
Off();
|
||||
}
|
||||
@ -232,6 +240,7 @@ void CWallHealth::Recharge( void )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/medshot4.wav", 1.0, ATTN_NORM );
|
||||
m_iJuice = (int)gSkillData.healthchargerCapacity;
|
||||
m_bTriggerable = !FStringNull( pev->target );
|
||||
pev->frame = 0;
|
||||
SetThink( &CBaseEntity::SUB_DoNothing );
|
||||
}
|
||||
|
@ -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.0f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10.0f, 15.0f );
|
||||
SendWeaponAnim( PYTHON_HOLSTER );
|
||||
|
||||
m_flSoundDelay = 0;
|
||||
}
|
||||
|
||||
void CPython::SecondaryAttack( void )
|
||||
|
@ -26,16 +26,7 @@
|
||||
#include "scripted.h"
|
||||
#include "animation.h"
|
||||
#include "soundent.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
|
||||
};
|
||||
#include "scientist.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@ -68,56 +59,6 @@ enum
|
||||
//=======================================================
|
||||
// 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_rosenberg, CScientist )
|
||||
|
||||
@ -1180,20 +1121,6 @@ int CScientist::FriendNumber( int arrayNumber )
|
||||
//=========================================================
|
||||
// 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 const char *m_szPoses[7];
|
||||
};
|
||||
|
||||
const char *CDeadScientist::m_szPoses[] =
|
||||
{
|
||||
"lying_on_back",
|
||||
|
97
dlls/scientist.h
Normal file
97
dlls/scientist.h
Normal file
@ -0,0 +1,97 @@
|
||||
/***
|
||||
*
|
||||
* 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
|
||||
|
||||
#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 const char *m_szPoses[7];
|
||||
};
|
||||
|
||||
#endif // SCIENTIST_H
|
@ -372,6 +372,32 @@ void CCineMonster::PossessEntity( void )
|
||||
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
Normal file
143
dlls/tot/civ.cpp
Normal file
@ -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 const char *m_szPoses[7];
|
||||
};
|
||||
|
||||
const 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();
|
||||
}
|
@ -1630,3 +1630,10 @@ TYPEDESCRIPTION CSatchel::m_SaveData[] =
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon )
|
||||
|
||||
TYPEDESCRIPTION CPython::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CPython, m_flSoundDelay, FIELD_TIME ),
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CPython, CBasePlayerWeapon )
|
||||
|
@ -526,6 +526,11 @@ private:
|
||||
class CPython : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
#ifndef CLIENT_DLL
|
||||
int Save( CSave &save );
|
||||
int Restore( CRestore &restore );
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
#endif
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
int iItemSlot( void ) { return 2; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user