Actor improvements p2

This commit is contained in:
mohabhassan 2019-06-29 23:43:30 +02:00
parent da28beeab4
commit 32fddb163f
37 changed files with 718 additions and 710 deletions

View file

@ -35,13 +35,13 @@ VehicleWheelsX2::VehicleWheelsX2()
m_iGear = 1;
m_iRPM = 0;
gravity = 1.0;
m_fDifferentialRatio = 4.8800001;
m_fGearEfficiency = 0.69999999;
m_fGearRatio[0] = -2.9400001;
m_fGearRatio[1] = 2.9400001;
m_fGearRatio[2] = 1.9400001;
m_fGearRatio[3] = 1.0;
m_fAccelerator = 0.0;
m_fDifferentialRatio = 4.8800001f;
m_fGearEfficiency = 0.69999999f;
m_fGearRatio[0] = -2.9400001f;
m_fGearRatio[1] = 2.9400001f;
m_fGearRatio[2] = 1.9400001f;
m_fGearRatio[3] = 1.0f;
m_fAccelerator = 0.0f;
m_bAutomatic = qtrue;
m_bBackSlipping = qfalse;
m_bFrontSlipping = qfalse;

View file

@ -35,13 +35,13 @@ VehicleWheelsX4::VehicleWheelsX4()
m_iGear = 1;
m_iRPM = 0;
gravity = 1.0;
m_fDifferentialRatio = 4.8800001;
m_fGearEfficiency = 0.69999999;
m_fGearRatio[0] = -2.9400001;
m_fGearRatio[1] = 2.9400001;
m_fGearRatio[2] = 1.9400001;
m_fGearRatio[3] = 1.0;
m_fAccelerator = 0.0;
m_fDifferentialRatio = 4.8800001f;
m_fGearEfficiency = 0.69999999f;
m_fGearRatio[0] = -2.9400001f;
m_fGearRatio[1] = 2.9400001f;
m_fGearRatio[2] = 1.9400001f;
m_fGearRatio[3] = 1.0f;
m_fAccelerator = 0.0f;
m_bBackSlipping = qfalse;
m_bAutomatic = qtrue;
m_bFrontSlipping = qfalse;

File diff suppressed because it is too large Load diff

View file

@ -157,60 +157,60 @@ typedef struct
// Actor flags
#define ACTOR_FLAG_NOISE_HEARD 0
#define ACTOR_FLAG_INVESTIGATING 1
#define ACTOR_FLAG_INVESTIGATING 1
#define ACTOR_FLAG_DEATHGIB 2
#define ACTOR_FLAG_DEATHFADE 3
#define ACTOR_FLAG_NOCHATTER 4
#define ACTOR_FLAG_DEATHFADE 3
#define ACTOR_FLAG_NOCHATTER 4
#define ACTOR_FLAG_INACTIVE 5
#define ACTOR_FLAG_ANIM_DONE 6
#define ACTOR_FLAG_ANIM_DONE 6
#define ACTOR_FLAG_STATE_DONE_TIME_VALID 7
#define ACTOR_FLAG_AI_ON 8
#define ACTOR_FLAG_AI_ON 8
#define ACTOR_FLAG_LAST_CANSEEENEMY 9
#define ACTOR_FLAG_LAST_CANSEEENEMY_NOFOV 10
#define ACTOR_FLAG_DIALOG_PLAYING 11
#define ACTOR_FLAG_ALLOW_TALK 12
#define ACTOR_FLAG_ALLOW_TALK 12
#define ACTOR_FLAG_DAMAGE_ONCE_ON 13
#define ACTOR_FLAG_DAMAGE_ONCE_DAMAGED 14
#define ACTOR_FLAG_BOUNCE_OFF 15
#define ACTOR_FLAG_BOUNCE_OFF 15
#define ACTOR_FLAG_NOTIFY_OTHERS_AT_DEATH 16
#define ACTOR_FLAG_HAS_THING1 17
#define ACTOR_FLAG_HAS_THING2 18
#define ACTOR_FLAG_HAS_THING3 19
#define ACTOR_FLAG_HAS_THING4 20
#define ACTOR_FLAG_HAS_THING1 17
#define ACTOR_FLAG_HAS_THING2 18
#define ACTOR_FLAG_HAS_THING3 19
#define ACTOR_FLAG_HAS_THING4 20
#define ACTOR_FLAG_LAST_ATTACK_HIT 21
#define ACTOR_FLAG_STARTED 22
#define ACTOR_FLAG_STARTED 22
#define ACTOR_FLAG_ALLOW_HANGBACK 23
#define ACTOR_FLAG_USE_GRAVITY 24
#define ACTOR_FLAG_SPAWN_FAILED 25
#define ACTOR_FLAG_FADING_OUT 26
#define ACTOR_FLAG_FADING_OUT 26
#define ACTOR_FLAG_DEATHSHRINK 27
#define ACTOR_FLAG_DEATHSINK 28
#define ACTOR_FLAG_STAYSOLID 29
#define ACTOR_FLAG_STUNNED 30
#define ACTOR_FLAG_ALLOW_FALL 31
#define ACTOR_FLAG_FINISHED 32
#define ACTOR_FLAG_IN_LIMBO 33
#define ACTOR_FLAG_CAN_WALK_ON_OTHERS 34
#define ACTOR_FLAG_PUSHABLE 35
#define ACTOR_FLAG_LAST_TRY_TALK 36
#define ACTOR_FLAG_ATTACKABLE_BY_ACTORS 37
#define ACTOR_FLAG_TARGETABLE 38
#define ACTOR_FLAG_ATTACK_ACTORS 39
#define ACTOR_FLAG_DEATHSINK 28
#define ACTOR_FLAG_STAYSOLID 29
#define ACTOR_FLAG_STUNNED 30
#define ACTOR_FLAG_ALLOW_FALL 31
#define ACTOR_FLAG_FINISHED 32
#define ACTOR_FLAG_IN_LIMBO 33
#define ACTOR_FLAG_CAN_WALK_ON_OTHERS 34
#define ACTOR_FLAG_PUSHABLE 35
#define ACTOR_FLAG_LAST_TRY_TALK 36
#define ACTOR_FLAG_ATTACKABLE_BY_ACTORS 37
#define ACTOR_FLAG_TARGETABLE 38
#define ACTOR_FLAG_ATTACK_ACTORS 39
#define ACTOR_FLAG_IMMORTAL 40
#define ACTOR_FLAG_TURNING_HEAD 41
#define ACTOR_FLAG_DIE_COMPLETELY 42
#define ACTOR_FLAG_BLEED_AFTER_DEATH 43
#define ACTOR_FLAG_IGNORE_STUCK_WARNING 44
#define ACTOR_FLAG_IGNORE_STUCK_WARNING 44
#define ACTOR_FLAG_IGNORE_OFF_GROUND_WARNING 45
#define ACTOR_FLAG_ALLOWED_TO_KILL 46
#define ACTOR_FLAG_TOUCH_TRIGGERS 47
#define ACTOR_FLAG_IGNORE_WATER 48
#define ACTOR_FLAG_NEVER_IGNORE_SOUNDS 49
#define ACTOR_FLAG_SIMPLE_PATHFINDING 50
#define ACTOR_FLAG_HAVE_MOVED 51
#define ACTOR_FLAG_HAVE_MOVED 51
#define ACTOR_FLAG_NO_PAIN_SOUNDS 52
#define ACTOR_FLAG_UPDATE_BOSS_HEALTH 53
#define ACTOR_FLAG_IGNORE_PAIN_FROM_ACTORS 54
#define ACTOR_FLAG_IGNORE_PAIN_FROM_ACTORS 54
#define ACTOR_FLAG_DAMAGE_ALLOWED 55
#define ACTOR_FLAG_ALWAYS_GIVE_WATER 56
@ -220,11 +220,8 @@ typedef struct
#define ACTOR_FLAG_MAX 56
#define MAX_ORIGIN_HISTORY 4
#define MAX_THINKMAP 9
#define MAX_THINKLEVELS 29
#define MAX_COVER_NODES 16
#define MAX_BODYQUEUE 5
#define MAX_GLOBAL_FUNCS 35
typedef enum
{
@ -257,15 +254,19 @@ typedef struct {
vec3_t pos[ 1 ];
} FallPath;
#define THINKSTATE_VOID 0
#define THINKSTATE_IDLE 1
#define THINKSTATE_PAIN 2
#define THINKSTATE_KILLED 3
#define THINKSTATE_ATTACK 4
#define THINKSTATE_CURIOUS 5
#define THINKSTATE_DISGUISE 6
#define THINKSTATE_GRENADE 7
#define THINKSTATE_NOCLIP 8
enum eThinkState
{
THINKSTATE_VOID,
THINKSTATE_IDLE,
THINKSTATE_PAIN,
THINKSTATE_KILLED,
THINKSTATE_ATTACK,
THINKSTATE_CURIOUS,
THINKSTATE_DISGUISE,
THINKSTATE_GRENADE,
THINKSTATE_NOCLIP,
NUM_THINKSTATES,
};
#define AI_EVENT_NONE 0
#define AI_EVENT_WEAPON_FIRE 1
@ -280,7 +281,7 @@ typedef struct {
#define AI_EVENT_FOOTSTEP 10
#define AI_EVENT_GRENADE 11
enum thinkNums
enum eThinkNum
{
THINK_VOID,
THINK_TURRET,
@ -316,10 +317,11 @@ enum thinkNums
THINK_BALCONY_KILLED,
THINK_WEAPONLESS,
THINK_NOCLIP,
THINK_DEAD
THINK_DEAD,
NUM_THINKS,
};
enum thinkLevelNums
enum eThinkLevel
{
THINKLEVEL_NORMAL, //I think it should be THINKLEVEL_IDLE
THINKLEVEL_PAIN,
@ -352,27 +354,36 @@ class Actor : public SimpleActor
};
public:
/* GlobalFuncs: contains different funcs needed for each actor think/thinkstate */
static GlobalFuncs_t GlobalFuncs[MAX_GLOBAL_FUNCS];
/* GlobalFuncs: contains different funcs needed for each actor think
* think is basically a mode for the actor
* when m_ThinkLevel changes, new think value is inside m_Think
* to access current think : m_Think[m_ThinkLevel]
* to access GlobalFuncs related to current think
* GlobalFuncs[m_Think[m_ThinkLevel]];
**/
static GlobalFuncs_t GlobalFuncs[NUM_THINKS];
/* const string array containig think names */
static const_str m_csThinkNames[MAX_GLOBAL_FUNCS];
static const_str m_csThinkNames[NUM_THINKS];
/* const string array containig think state names */
static const_str m_csThinkStateNames[MAX_THINKMAP];
static const_str m_csThinkStateNames[NUM_THINKSTATES];
/* map contating every think value for each thinkstate */
int m_ThinkMap[MAX_THINKMAP];
eThinkNum m_ThinkMap[NUM_THINKSTATES];
/* think state for every think level */
int m_ThinkStates[NUM_THINKLEVELS];
eThinkState m_ThinkStates[NUM_THINKLEVELS];
/* think value for every think level */
int m_Think[NUM_THINKLEVELS];
/* current think level */
int m_ThinkLevel;
/* current think state */
int m_ThinkState;
eThinkNum m_Think[NUM_THINKLEVELS];
/* current think level
* think levels are more like priorities
* highest level is used.
**/
eThinkLevel m_ThinkLevel;
/* current think state*/
eThinkState m_ThinkState;
/* current state (different than think state) */
int m_State;
/* current state change time */
int m_iStateTime;
/* should block think state ? */
/* should lock think state ? */
bool m_bLockThinkState;
/* think state changed */
bool m_bDirtyThinkState;
@ -685,7 +696,7 @@ public:
void FixAIParameters( void );
bool AttackEntryAnimation( void );
void CheckForThinkStateTransition( void );
bool CheckForTransition( int state, int level );
bool CheckForTransition( eThinkState state, eThinkLevel level );
bool PassesTransitionConditions_Grenade( void );
bool PassesTransitionConditions_Attack( void );
bool PassesTransitionConditions_Disguise( void );
@ -1092,9 +1103,9 @@ public:
void EventSetAccuracy( Event *ev );
void EventGetAccuracy( Event *ev );
int GetThinkType( const_str csName );
void SetThink( int state, int think );
void SetThinkIdle( int think_idle );
void SetThinkState( int state, int level );
void SetThink( eThinkState state, eThinkNum think );
void SetThinkIdle( eThinkNum think_idle );
void SetThinkState( eThinkState state, eThinkLevel level );
void EndCurrentThinkState( void );
void ClearThinkStates( void );
int CurrentThink( void ) const;
@ -1294,19 +1305,19 @@ inline void Actor::Archive
{
SimpleActor::Archive( arc );
for( int i = MAX_THINKMAP - 1; i >= 0; i-- )
for( int i = NUM_THINKSTATES - 1; i >= 0; i-- )
{
arc.ArchiveInteger( &m_ThinkMap[ i ] );
ArchiveEnum(m_ThinkMap[i], eThinkNum);
}
for( int i = NUM_THINKLEVELS - 1; i >= 0; i-- )
{
arc.ArchiveInteger( &m_ThinkStates[ i ] );
arc.ArchiveInteger( &m_Think[ i ] );
ArchiveEnum(m_ThinkStates[i], eThinkState);
ArchiveEnum(m_Think[i], eThinkNum);
}
arc.ArchiveInteger( &m_ThinkLevel );
arc.ArchiveInteger( &m_ThinkState);
ArchiveEnum(m_ThinkLevel, eThinkLevel);
ArchiveEnum(m_ThinkState, eThinkState);
arc.ArchiveInteger( &m_State);
arc.ArchiveInteger( &m_iStateTime);
arc.ArchiveBool( &m_bLockThinkState);

View file

@ -54,10 +54,7 @@ void SimpleActor::Anim_Attack
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = NULL;
m_NextAnimLabel = m_AttackHandler;
m_bNextForceStart = false;
DesiredAnimation(1, m_AttackHandler);
}
void SimpleActor::Anim_Sniper
@ -66,10 +63,7 @@ void SimpleActor::Anim_Sniper
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = NULL;
m_NextAnimLabel = m_SniperHandler;
m_bNextForceStart = false;
DesiredAnimation(1, m_SniperHandler);
}
void SimpleActor::Anim_Aim
@ -78,9 +72,7 @@ void SimpleActor::Anim_Aim
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_AIM_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_AIM_SCR);
}
void SimpleActor::Anim_Shoot
@ -89,9 +81,7 @@ void SimpleActor::Anim_Shoot
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_SHOOT_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_SHOOT_SCR);
}
void SimpleActor::Anim_Idle
@ -100,9 +90,7 @@ void SimpleActor::Anim_Idle
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_IDLE_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_IDLE_SCR);
}
void SimpleActor::Anim_Crouch
@ -111,9 +99,7 @@ void SimpleActor::Anim_Crouch
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_CROUCH_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_CROUCH_SCR);
}
void SimpleActor::Anim_Prone
@ -122,9 +108,7 @@ void SimpleActor::Anim_Prone
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_PRONE_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_PRONE_SCR);
}
void SimpleActor::Anim_Stand
@ -133,9 +117,7 @@ void SimpleActor::Anim_Stand
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_STAND_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_STAND_SCR);
}
void SimpleActor::Anim_Cower
@ -144,9 +126,7 @@ void SimpleActor::Anim_Cower
)
{
m_eNextAnimMode = 1;
m_csNextAnimString = STRING_ANIM_COWER_SCR;
m_bNextForceStart = false;
DesiredAnimation(1, STRING_ANIM_COWER_SCR);
}
void SimpleActor::Anim_Killed
@ -155,10 +135,8 @@ void SimpleActor::Anim_Killed
)
{
m_eAnimMode = 1;
m_csNextAnimString = NULL;
m_NextAnimLabel = m_DeathHandler;
m_bNextForceStart = false;
Com_Printf("m_eAnimMode Anim_Killed \n");
DesiredAnimation(1, m_DeathHandler);
}
void SimpleActor::Anim_StartPain
@ -167,10 +145,9 @@ void SimpleActor::Anim_StartPain
)
{
m_eAnimMode = 1;
m_csNextAnimString = NULL;
m_NextAnimLabel = m_PainHandler;
m_bNextForceStart = true;
Com_Printf("m_eAnimMode Anim_StartPain \n");
StartAnimation(1, m_PainHandler);
}
void SimpleActor::Anim_Pain
@ -189,9 +166,7 @@ void SimpleActor::Anim_CrouchRunTo
)
{
m_csNextAnimString = STRING_ANIM_CROUCH_RUN_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_CROUCH_RUN_SCR);
}
void SimpleActor::Anim_CrouchWalkTo
@ -200,9 +175,7 @@ void SimpleActor::Anim_CrouchWalkTo
)
{
m_csNextAnimString = STRING_ANIM_CROUCH_WALK_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_CROUCH_WALK_SCR);
}
void SimpleActor::Anim_StandRunTo
@ -211,9 +184,7 @@ void SimpleActor::Anim_StandRunTo
)
{
m_csNextAnimString = STRING_ANIM_RUN_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUN_SCR);
}
void SimpleActor::Anim_StandWalkTo
@ -222,9 +193,7 @@ void SimpleActor::Anim_StandWalkTo
)
{
m_csNextAnimString = STRING_ANIM_WALK_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_WALK_SCR);
}
void SimpleActor::Anim_RunTo
@ -233,9 +202,7 @@ void SimpleActor::Anim_RunTo
)
{
m_bNextForceStart = false;
m_csNextAnimString = GetRunAnim();
m_eNextAnimMode = eAnimMode;
DesiredAnimation(eAnimMode, GetRunAnim());
}
void SimpleActor::Anim_WalkTo
@ -244,9 +211,7 @@ void SimpleActor::Anim_WalkTo
)
{
m_bNextForceStart = false;
m_csNextAnimString = GetWalkAnim();
m_eNextAnimMode = eAnimMode;
DesiredAnimation(eAnimMode, GetWalkAnim());
}
void SimpleActor::Anim_RunAwayFiring
@ -255,9 +220,7 @@ void SimpleActor::Anim_RunAwayFiring
)
{
m_csNextAnimString = STRING_ANIM_RUNAWAYFIRING_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNAWAYFIRING_SCR);
}
void SimpleActor::Anim_RunToShooting
@ -266,9 +229,7 @@ void SimpleActor::Anim_RunToShooting
)
{
m_csNextAnimString = STRING_ANIM_RUN_SHOOT_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUN_SHOOT_SCR);
}
void SimpleActor::Anim_RunToAlarm
@ -277,9 +238,7 @@ void SimpleActor::Anim_RunToAlarm
)
{
m_csNextAnimString = STRING_ANIM_RUNTO_ALARM_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_ALARM_SCR);
}
void SimpleActor::Anim_RunToCasual
@ -288,9 +247,7 @@ void SimpleActor::Anim_RunToCasual
)
{
m_csNextAnimString = STRING_ANIM_RUNTO_CASUAL_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_CASUAL_SCR);
}
void SimpleActor::Anim_RunToCover
@ -299,9 +256,7 @@ void SimpleActor::Anim_RunToCover
)
{
m_csNextAnimString = STRING_ANIM_RUNTO_COVER_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_COVER_SCR);
}
void SimpleActor::Anim_RunToDanger
@ -310,9 +265,7 @@ void SimpleActor::Anim_RunToDanger
)
{
m_csNextAnimString = STRING_ANIM_RUNTO_DANGER_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_DANGER_SCR);
}
void SimpleActor::Anim_RunToDive
@ -321,9 +274,7 @@ void SimpleActor::Anim_RunToDive
)
{
m_csNextAnimString = STRING_ANIM_RUNTO_DIVE_SCR;
m_eNextAnimMode = eAnimMode;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_DIVE_SCR);
}
void SimpleActor::Anim_RunToFlee
@ -332,9 +283,7 @@ void SimpleActor::Anim_RunToFlee
)
{
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = STRING_ANIM_RUNTO_FLEE_SCR;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_FLEE_SCR);
}
void SimpleActor::Anim_RunToInOpen
@ -343,9 +292,7 @@ void SimpleActor::Anim_RunToInOpen
)
{
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = STRING_ANIM_RUNTO_INOPEN_SCR;
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_RUNTO_INOPEN_SCR);
}
void SimpleActor::Anim_Emotion
@ -386,14 +333,11 @@ void SimpleActor::Anim_FullBody
{
if( m_csAnimName == csFullBodyAnim )
{
m_bNextForceStart = false;
DesiredAnimation(eAnimMode, STRING_ANIM_FULLBODY_SCR);
}
else
{
m_bNextForceStart = true;
m_csAnimName = csFullBodyAnim;
StartAnimation(eAnimMode, STRING_ANIM_FULLBODY_SCR);
}
m_csNextAnimString = STRING_ANIM_FULLBODY_SCR;
m_eNextAnimMode = eAnimMode;
}

View file

@ -47,11 +47,9 @@ void Actor::Begin_AnimCurious
DoForceActivate();
m_csMood = STRING_CURIOUS;
m_bNextForceStart = true;
m_YawAchieved = true;
m_eNextAnimMode = m_AnimMode;
StartAnimation(m_AnimMode, m_csAnimScript);
StopTurning();
m_iCuriousTime = level.inttime;
m_csNextAnimString = m_csAnimScript;
}
void Actor::Think_AnimCurious
@ -67,6 +65,7 @@ void Actor::Think_AnimCurious
m_pszDebugState = "";
LookAtCuriosity();
TimeOutCurious();
DesiredAnimation(m_AnimMode, m_csAnimScript);
CheckForThinkStateTransition();
PostThink( false );
}

View file

@ -47,7 +47,7 @@ void Actor::Begin_Curious
{
Vector vDelta;
float fDistSquared;
//float fDistSquared;
DoForceActivate();
m_csMood = STRING_CURIOUS;
@ -202,6 +202,7 @@ void Actor::Think_Curious
ContinueAnimation();
//LABEL_16:
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 1\n");
PostThink(true);
return;
}
@ -221,11 +222,13 @@ void Actor::Think_Curious
{
if (level.inttime > m_iCuriousTime + 500)
{
glbs.Printf("Think_Curious m_Enemy: %s EnemyIsDisguised: %s\n", m_Enemy ? "true": "false", EnemyIsDisguised() ? "true" : "false");
SetThinkState(THINKSTATE_IDLE, THINKLEVEL_NORMAL);
m_iCuriousTime = 0;
}
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 2\n");
PostThink(true);
return;
}
@ -244,6 +247,7 @@ void Actor::Think_Curious
}
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 3\n");
PostThink(true);
return;
}
@ -288,6 +292,7 @@ void Actor::Think_Curious
LookAtCuriosity();
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 4\n");
PostThink(true);
return;
}
@ -334,6 +339,7 @@ void Actor::Think_Curious
LookAtCuriosity();
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 5\n");
PostThink(true);
return;
}
@ -352,6 +358,7 @@ void Actor::Think_Curious
}
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 6\n");
PostThink(true);
return;
}
@ -395,6 +402,7 @@ void Actor::Think_Curious
LookAtCuriosity();
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 7\n");
PostThink(true);
return;
}
@ -411,6 +419,7 @@ void Actor::Think_Curious
}
}
CheckForThinkStateTransition();
glbs.Printf("Think_Curious CheckForThinkStateTransition 8\n");
PostThink(true);
return;
}
@ -506,7 +515,6 @@ void Actor::SetCuriousAnimHint
(
int iAnimHint
)
{
m_iCuriousAnimHint = iAnimHint;
}

View file

@ -190,6 +190,6 @@ void Actor::Think_DisguiseRover
assert(!"invalid think state");
}
CheckForTransition(THINKSTATE_GRENADE, 0);
CheckForTransition(THINKSTATE_GRENADE, THINKLEVEL_NORMAL);
PostThink(true);
}

View file

@ -189,7 +189,7 @@ void Actor::Think_DisguiseSentry
assert(!"invalid think state");
break;
}
CheckForTransition(THINKSTATE_GRENADE, 0);
CheckForTransition(THINKSTATE_GRENADE, THINKLEVEL_NORMAL);
PostThink(true);
}
}

View file

@ -62,7 +62,7 @@ bool Actor::Grenade_Acquire
if (PathComplete())
{
m_bHasDesiredLookAngles = false;
if (m_pGrenade->velocity.lengthXY(true) >= 1024)
if (m_pGrenade->velocity.lengthXYSquared() >= 1024)
{
Anim_Stand();
}
@ -119,7 +119,7 @@ void Actor::Grenade_Flee
)
{
float origin_ratio;
//float origin_ratio;
float fMinCloseDistSquared;
float fCosAngle;
float fSinAngle;
@ -180,7 +180,7 @@ void Actor::Grenade_Flee
else
{
if ((origin - m_vGrenadePos).lengthXY(true) >= 100352
if ((origin - m_vGrenadePos).lengthXYSquared() >= 100352
|| !G_SightTrace(
centroid,
vec_zero,
@ -302,7 +302,7 @@ void Actor::Grenade_MartyrAcquire
m_pGrenade->velocity = vec_zero;
//weird ? m_pGrenade->velocity is vec_zero ???
if (m_pGrenade->velocity.lengthXY(true) < 1024)
if (m_pGrenade->velocity.lengthXYSquared() < 1024)
{
m_pGrenade->velocity = vec_zero;
@ -315,7 +315,7 @@ void Actor::Grenade_MartyrAcquire
{
Anim_RunToCasual(3);
m_csPathGoalEndAnimScript = STRING_ANIM_GRENADEMARTYR_SCR;
if ((origin-m_vGrenadePos).lengthXY(true) > 16384)
if ((origin-m_vGrenadePos).lengthXYSquared() > 16384)
{
FaceMotion();
}
@ -491,7 +491,7 @@ void Actor::Begin_Grenade
}
vDelta = m_vGrenadePos - origin;
vDelta.z = 0;
fDistSquared = vDelta.lengthXY(true);
fDistSquared = vDelta.lengthXYSquared();
if (fDistSquared >= 65536)
{
m_eGrenadeState = AI_GRENSTATE_FLEE;

View file

@ -42,6 +42,7 @@ void Actor::Begin_Idle
)
{
glbs.Printf("Begin_Idle\n");
m_csMood = m_csIdleMood;
ClearPath();
}
@ -67,7 +68,6 @@ void Actor::IdleThink
)
{
//FIXME: revision
IdlePoint();
IdleLook();
if (PathExists() && PathComplete())
@ -78,28 +78,23 @@ void Actor::IdleThink
{
SetPathToNotBlockSentient((Sentient *)G_GetEntity(0));
}
if (!PathExists())
if (PathExists())
{
Anim_Idle();
IdleTurn();
PostThink(true);
Anim_WalkTo(2);
if (PathDist() <= 128.0)
IdleTurn();
else
FaceMotion();
}
else
{
//FIXME: macros
Anim_WalkTo(2);
if (PathDist() <= 128.0)
{
IdleTurn();
PostThink(true);
}
else
{
FaceMotion();
}
Anim_Idle();
IdleTurn();
}
PostThink(true);
}
@ -116,12 +111,9 @@ bool Actor::PassesTransitionConditions_Idle
)
{
glbs.Printf("PassesTransitionConditions_Idle\n");
if (m_bEnableEnemy)
{
if (level.inttime > m_iEnemyCheckTime + 500)
UpdateEnemyInternal();
}
UpdateEnemy(500);
if (m_bLockThinkState)
return false;

View file

@ -58,7 +58,7 @@ void Actor::Begin_Killed
PostEvent(
e1,
0.05);
0.05f);
m_State = 700;
m_iStateTime = level.inttime;
}

View file

@ -170,7 +170,7 @@ void Actor::Think_MachineGunner
ThinkHoldGun();
return;
}
if (m_ThinkStates[0] != THINKSTATE_IDLE)
if (m_ThinkStates[THINKLEVEL_NORMAL] != THINKSTATE_IDLE)
{
BecomeTurretGuy();
return;
@ -208,10 +208,10 @@ void Actor::ThinkHoldGun
float machine_gunner_hands_up_stand;
float heightDiff;
float right;
vec3_t newOrigin;
//vec3_t newOrigin;
Vector offset;
Vector start;
vec3_t new_angles;
//vec3_t new_angles;
Vector vForward;
UpdateEyeOrigin();
@ -249,11 +249,11 @@ void Actor::ThinkHoldGun
if (m_State == 1201)
{
heightDiff = 71.6;
heightDiff = 71.6f;
}
else
{
heightDiff = 71.8;
heightDiff = 71.8f;
}
machine_gunner_hands_up_stand = origin[2] - (m_pTurret->origin[2] - heightDiff);

View file

@ -55,7 +55,7 @@ void Actor::Think_NoClip
Vector total_offset;
Vector total_offset_unit;
float total_dist;
vec3_t frame_offset;
//vec3_t frame_offset;
float frame_dist;
m_pszDebugState = "";

View file

@ -180,7 +180,7 @@ void Actor::Think_Turret
if (m_State != 109)
{
if (m_State != 104
|| (origin - m_vHome).lengthXY(true) <= 0.64f * m_fLeashSquared + 64.0f
|| (origin - m_vHome).lengthXYSquared() <= 0.64f * m_fLeashSquared + 64.0f
|| !State_Turret_RunHome(false) )
{
m_pszDebugState = "Idle";
@ -784,13 +784,13 @@ void Actor::State_Turret_Reacquire
)
{
Sentient *v1; // ecx
/*Sentient *v1; // ecx
float v2; // ST08_4
float v3; // ST0C_4
Sentient *v4; // ecx
float v5; // ST08_4
float v6; // ST0C_4
*/
if (PathExists() && !PathComplete())
{
if (CanMovePathWithLeash())

View file

@ -90,7 +90,7 @@ int ActorEnemy::UpdateThreat
Vector vDelta;
m_iThreat = 0;
m_fCurrentRangeSquared = 1e38;
m_fCurrentRangeSquared = 1e38f;
if (m_pEnemy->m_bIsDisguised || m_fTotalVisibility < 1)
return m_iThreat;
@ -278,13 +278,13 @@ float ActorEnemy::UpdateLMRF
{
//FIXME: variable names, I did my best
Vector vDelta;
float fFarPlane, fLMRF = 8, fMinSightTime, fFovScale, fForward, fNormalizedRange, fRangeScale, fRange, fMaxRange;
float fFarPlane, fLMRF, /*fMinSightTime,*/ fFovScale, fForward, /*fNormalizedRange,*/ fRangeScale, fRange/*, fMaxRange*/ ;
float fTmp1, fTmp2, fTmp3;
*pbInFovAndRange = false;
*pbVisible = false;
vDelta = pSelf->origin - GetEnemy()->origin;
vDelta = pSelf->EyePosition() - GetEnemy()->origin;
fFarPlane = world->farplane_distance;
@ -298,30 +298,30 @@ float ActorEnemy::UpdateLMRF
}
if (Square(fRange) < vDelta.lengthXY(true))
if (vDelta.lengthXYSquared() > Square(fRange))
{
return fLMRF;
return 8.0;
}
fForward = vDelta.lengthXY();
if (-DotProduct2D(vDelta, pSelf->m_vEyeDir) < 0)
{
return fLMRF;
return 8.0;
}
fTmp2 = 128.0 - DotProduct2D(vDelta, pSelf->m_vEyeDir);
if (fForward * pSelf->m_fFovDot > fTmp2)
{
return fLMRF;
return 8.0;
}
*pbInFovAndRange = true;
if (!pSelf->CanSee(m_pEnemy, 0, 0))
{
return fLMRF;
return 8.0;
}
*pbVisible = true;
@ -392,7 +392,7 @@ ActorEnemy *ActorEnemySet::AddPotentialEnemy
NewEnemy.m_pEnemy = pEnemy;
NewEnemy.m_fCurrentRangeSquared = 1e38;
NewEnemy.m_fCurrentRangeSquared = 1e38f;
NewEnemy.m_iLastSightChangeTime = 0;
NewEnemy.m_vLastKnownPos = vec_zero;
@ -451,25 +451,28 @@ void ActorEnemySet::CheckEnemies
{
float fRangeSquared;
bool bVisible;
bool bInFovAndRange = false;
int nChecked;
int iThreat;
bool bInFovAndRange;
//int nChecked;
//int iThreat;
float fVisibility;
ActorEnemy *pActorEnemy;
for (int i = 1; i < m_Enemies.NumObjects();i++)
for (int i = 1; i <= m_Enemies.NumObjects();i++)
{
pActorEnemy = &m_Enemies[i];
pActorEnemy = &m_Enemies[i-1];
if (!pActorEnemy->m_pEnemy
|| pActorEnemy->m_pEnemy->m_Team != pSelf->m_Team
|| pActorEnemy->m_pEnemy->m_Team == pSelf->m_Team
|| pActorEnemy->m_pEnemy->IsDead()
|| level.inttime > pActorEnemy->m_iAddTime + 10000
|| pActorEnemy->m_pEnemy->m_iThreatBias == THREATBIAS_IGNOREME)
{
m_Enemies.RemoveObjectAt(i);
i--;
i--;//decrease i in order to not miss next object in container.
}
}
if (!m_Enemies.NumObjects())
{
m_iCurrentThreat = 0;
@ -481,7 +484,7 @@ void ActorEnemySet::CheckEnemies
}
else
{
for (int i = 0; !bInFovAndRange && i < m_Enemies.NumObjects(); i++)
for (int i = 0; i < m_Enemies.NumObjects(); i++)
{
m_iCheckCount++;
if (m_iCheckCount > m_Enemies.NumObjects())
@ -495,11 +498,7 @@ void ActorEnemySet::CheckEnemies
if (pActorEnemy->m_pEnemy == m_pCurrentEnemy)
{
m_iCurrentThreat = 0;
if (m_pCurrentEnemy)
{
//delete m_pCurrentEnemy;
m_pCurrentEnemy = NULL;
}
m_pCurrentEnemy = NULL;
m_fCurrentVisibility = 0.0;
}
}
@ -509,18 +508,13 @@ void ActorEnemySet::CheckEnemies
{
if (pActorEnemy->m_pEnemy == m_pCurrentEnemy)
{
m_iCurrentThreat = 0;
if (m_pCurrentEnemy)
{
//delete m_pCurrentEnemy;
m_pCurrentEnemy = NULL;
}
m_fCurrentVisibility = fVisibility;
}
}
else
{
m_pCurrentEnemy = pActorEnemy->m_pEnemy;
m_fCurrentVisibility = fVisibility;
}
if (g_showawareness->integer)
@ -548,28 +542,29 @@ void ActorEnemySet::CheckEnemies
pActorEnemy->m_bVisible = false;
pActorEnemy->m_iLastSightChangeTime = level.inttime;
}
if (bInFovAndRange)
{
break;
}
}
if (m_pCurrentEnemy && m_pCurrentEnemy->IsDead())
{
if (m_pCurrentEnemy)
{
//delete m_pCurrentEnemy;
m_pCurrentEnemy = NULL;
}
m_pCurrentEnemy = NULL;
m_iCurrentThreat = 0;
m_fCurrentVisibility = 0.0;
}
m_iCurrentThreat = 0;
fRangeSquared = 1e37;
fRangeSquared = 1e37f;
if (m_fCurrentVisibility >= 1)
{
for (int i = 0;i < m_Enemies.NumObjects(); i++)
for (int i = 1;i <= m_Enemies.NumObjects(); i++)
{
pActorEnemy = &m_Enemies[i];
pActorEnemy = &m_Enemies[i-1];
pActorEnemy->UpdateThreat(pSelf);
if (m_iCurrentThreat < pActorEnemy->m_iThreat || m_iCheckCount == pActorEnemy->m_iThreat && fRangeSquared > pActorEnemy->m_fCurrentRangeSquared)
{
@ -582,11 +577,7 @@ void ActorEnemySet::CheckEnemies
if ((!m_pCurrentEnemy || !m_pCurrentEnemy->m_bIsDisguised) && m_iCurrentThreat <= 0)
{
if (m_pCurrentEnemy)
{
//delete m_pCurrentEnemy;
m_pCurrentEnemy = NULL;
}
m_pCurrentEnemy = NULL;
m_iCurrentThreat = 0;
m_fCurrentVisibility = 0.0;
}

View file

@ -503,7 +503,7 @@ void Animate::SetSyncTime( float s )
void Animate::UseSyncTime(int slot, int sync)
{
int v3; // eax
unsigned int v4; // eax
//unsigned int v4; // eax
int v5; // eax
if (sync)
@ -550,7 +550,7 @@ void Animate::PostAnimate( void )
deltaSyncTime = syncTime;
if( pauseSyncTime == 0.0f )
if( !pauseSyncTime )
{
syncTime = 1.0f / syncRate * level.frametime + deltaSyncTime;
}
@ -609,27 +609,42 @@ void Animate::PostAnimate( void )
animFlags[ i ] &= ~ANIM_NODELTA;
if( ( animFlags[ i ] & ANIM_SYNC && edict->s.frameInfo[ i ].time > animtimes[ i ] ) ||
( edict->s.frameInfo[ i ].time > animtimes[ i ] - 0.01f ) )
bool bTemp;
if (animFlags[i] & ANIM_SYNC)
{
if( animFlags[ i ] & ANIM_LOOP )
bTemp = edict->s.frameInfo[i].time < animtimes[i];
}
else
{
bTemp = edict->s.frameInfo[i].time < animtimes[i] - 0.01f;
}
if( !bTemp )
{
if (animFlags[i] & ANIM_LOOP)
{
animFlags[ i ] |= ANIM_FINISHED;
animFlags[i] |= ANIM_FINISHED;
if( edict->s.frameInfo[ i ].time > animtimes[ i ] )
do
{
edict->s.frameInfo[ i ].time = 0;
edict->s.frameInfo[i].time -= animtimes[i];
} while (edict->s.frameInfo[i].time >= animtimes[i]);
if (edict->s.frameInfo[i].time < 0)
{
edict->s.frameInfo[i].time = 0;
}
}
else
{
if( startTime != animtimes[ i ] )
if (startTime != animtimes[i])
{
animFlags[ i ] |= ANIM_FINISHED;
animFlags[i] |= ANIM_FINISHED;
}
edict->s.frameInfo[ i ].time = animtimes[ i ];
edict->s.frameInfo[i].time = animtimes[i];
}
}
}

View file

@ -1115,7 +1115,7 @@ Event EV_SetShaderData
"ff",
"data0 data1",
"sets the shader controllers for this entity.",
EV_RETURN
EV_NORMAL
);
Event EV_Entity_SetVelocity
(

View file

@ -103,10 +103,9 @@ void QDECL G_Error( int type, const char *fmt, ... )
va_end( argptr );
// need to manually crash otherwise visual studio fuck up with the stack pointer...
*( int * )0 = 0;
//*( int * )0 = 0;
assert( 0 );
SV_Error( type, text );
assert( !text );
}
void* G_Malloc( int size )
@ -251,10 +250,13 @@ G_InitGame
*/
void G_InitGame( int levelTime, int randomSeed )
{
G_Printf( "------- Game Initialization -------\n" );
G_Printf( "==== InitGame ====\n" );
G_Printf( "gamename: %s\n", GAMEVERSION );
G_Printf( "gamedate: %s\n", __DATE__ );
SV_Error = gi.Error;
gi.Error = G_Error;
srand( randomSeed );
CVAR_Init();
@ -276,6 +278,7 @@ void G_InitGame( int levelTime, int randomSeed )
PlayerBot::Init();
sv_numtraces = 0;
sv_numpmtraces = 0;
if( developer->integer && !g_gametype->integer )
{
@ -552,7 +555,7 @@ void G_RunFrame( int levelTime, int frameTime )
if( actor->IsSubclassOfActor() )
{
actor->m_bUpdateAnimDoneFlags = 0;
if( actor->m_bAnimating != 0 )
if( actor->m_bAnimating )
actor->PreAnimate();
}
}
@ -1467,9 +1470,6 @@ gameExport_t* GetGameAPI( gameImport_t *import )
gi = *import;
#ifdef _DEBUG
SV_Error = gi.Error;
gi.Error = G_Error;
//SV_Malloc = gi.Malloc;
///gi.Malloc = G_Malloc;

View file

@ -378,7 +378,7 @@ const_str PathNode::GetSpecialAttack
else
{
if( nodeflags >= 0 )
return 0;
return STRING_NULL;
iSpecialAttack = 2;
csAnimation = STRING_ANIM_OVERATTACK_SCR;
@ -398,7 +398,7 @@ const_str PathNode::GetSpecialAttack
fRangeSquared = vDelta[ 0 ] * vDelta[ 0 ] + vDelta[ 1 ] * vDelta[ 1 ];
if( fRangeSquared < g_AttackParms[ iSpecialAttack ].fMinRangeSquared || fRangeSquared > g_AttackParms[ iSpecialAttack ].fMaxRangeSquared )
return 0;
return STRING_NULL;
fMinAngle = atan2( vDelta[ 0 ], vDelta[ 1 ] ) * ( 180.0f / M_PI ) - angles[ 1 ];
@ -426,16 +426,16 @@ const_str PathNode::GetSpecialAttack
if( g_AttackParms[ iSpecialAttack ].fMinAngle <= g_AttackParms[ iSpecialAttack ].fMaxAngle )
{
if( g_AttackParms[ iSpecialAttack ].fMinAngle > fMaxAngle )
return 0;
return STRING_NULL;
}
else
{
if( g_AttackParms[ iSpecialAttack ].fMinAngle <= fMaxAngle )
return 0;
return STRING_NULL;
}
if( fMaxAngle > g_AttackParms[ iSpecialAttack ].fMaxAngle )
return 0;
return STRING_NULL;
return csAnimation;
}

View file

@ -4588,7 +4588,7 @@ void Sentient::UpdateFootsteps
iTagNum = gi.Tag_NumForName(edict->tiki, "Bip01 R Foot");
if (iTagNum >= 0)
{
m_bFootOnGround_Right = G_TIKI_IsOnGround(edict, iTagNum, 13.653847);
m_bFootOnGround_Right = G_TIKI_IsOnGround(edict, iTagNum, 13.653847f);
}
else
{
@ -4600,7 +4600,7 @@ void Sentient::UpdateFootsteps
iTagNum = gi.Tag_NumForName(edict->tiki, "Bip01 R Foot");
if (iTagNum >= 0)
{
if (G_TIKI_IsOnGround(edict, iTagNum, 13.461539))
if (G_TIKI_IsOnGround(edict, iTagNum, 13.461539f))
{
BroadcastAIEvent(10, G_AIEventRadius(10));
}
@ -4613,7 +4613,7 @@ void Sentient::UpdateFootsteps
iTagNum = gi.Tag_NumForName(edict->tiki, "Bip01 L Foot");
if (iTagNum >= 0)
{
m_bFootOnGround_Left = G_TIKI_IsOnGround(edict, iTagNum, 13.653847);
m_bFootOnGround_Left = G_TIKI_IsOnGround(edict, iTagNum, 13.653847f);
}
else
{
@ -4625,7 +4625,7 @@ void Sentient::UpdateFootsteps
iTagNum = gi.Tag_NumForName(edict->tiki, "Bip01 R Foot");
if (iTagNum >= 0)
{
if (G_TIKI_IsOnGround(edict, iTagNum, 13.461539))
if (G_TIKI_IsOnGround(edict, iTagNum, 13.461539f))
{
BroadcastAIEvent(10, G_AIEventRadius(10));
}

View file

@ -49,7 +49,7 @@ SimpleActor::SimpleActor()
m_fAimLimit_up = 60.0f;
m_fAimLimit_down = -60.0f;
m_csNextAnimString = 0;
m_csNextAnimString = STRING_NULL;
m_bNextForceStart = false;
m_fCrossblendTime = 0.5f;
m_csCurrentPosition = STRING_STAND;
@ -500,13 +500,51 @@ bool SimpleActor::PathAvoidsSquadMates
) const
{
Entity* player;
float fDelta;
float fDistSoFar;
float fDistCap;
float vDelta2[2];
float vMins[3];
float vMaxs[3];
float vPos[3];
Sentient *pOther;
Sentient *pBuddy[256];
int iNumBuddies;
int i;
float fRatio;
if (ai_pathchecktime->value <= 0.0)
return true;
if ((G_GetEntity(0)->origin - origin).lengthXY(true) > Square(ai_pathcheckdist->value))
player = G_GetEntity(0);
if (!player)
{
return true;
}
player = G_GetEntity(0);
player = G_GetEntity(0);
fDelta = (player->origin - origin).lengthXYSquared();
if (fDelta > Square(ai_pathcheckdist->value))
{
return true;
}
fDistSoFar = 0;
for (auto pNode = CurrentPathNode(); pNode >= LastPathNode(); pNode--)
{
if (fDistSoFar <= 0)
{
break;
}
//fDistCap = (ai_pathchecktime->value * 250.0) + 0.001 - fDistSoFar;
//if (pNode->point[2] > fDistCap)
{
}
}
// FIXME: stub
STUB();
return false;
@ -636,8 +674,8 @@ void SimpleActor::StopTurning
)
{
// not found in ida
STUB();
//fixme: this is an inline function.
m_YawAchieved = true;
}
void SimpleActor::SetDesiredYaw
@ -679,7 +717,7 @@ void SimpleActor::UpdateEmotion
int anim;
if (IsDead())
{
m_eEmotionMode = EMOTION_DEAD;
Anim_Emotion(EMOTION_DEAD);
}
anim = GetEmotionAnim();
@ -761,8 +799,11 @@ int SimpleActor::GetEmotionAnim
assert(!"Unknown value for m_csMood");
return -1;
}
else
{
emotionanim = "facial_idle_neutral";
}
emotionanim = "facial_idle_neutral";
}
else if (m_csMood == STRING_CURIOUS)
{
@ -773,12 +814,16 @@ int SimpleActor::GetEmotionAnim
assert(!"Unknown value for m_csMood");
return -1;
}
else
{
}
}
if (emotionanim == NULL)
{
emotionanim = "facial_idle_anger";
assert(!"Unexpected behaviour in SimpleActor::GetEmotionAnim");
//assert(!"Unexpected behaviour in SimpleActor::GetEmotionAnim");
}
anim = gi.Anim_NumForName(edict->tiki, emotionanim);
@ -1151,8 +1196,8 @@ void SimpleActor::ChangeMotionAnim
)
{
int lastMotionSlot;
int firstMotionSlot;
//int lastMotionSlot;
//int firstMotionSlot;
int iSlot;
int i;
@ -1169,7 +1214,7 @@ void SimpleActor::ChangeMotionAnim
{
StartCrossBlendAnimSlot(iSlot);
}
m_AnimDialogHigh ^= 1; // toggle
m_AnimDialogHigh = !m_AnimDialogHigh;
}
@ -1256,19 +1301,24 @@ void SimpleActor::UpdateAim
if (m_bAimAnimSet)
{
dir = -m_DesiredGunDir[0];
aimForwardSlot = GetActionSlot(0);
aimUpSlot = aimForwardSlot + 1;
aimDownSlot = aimForwardSlot + 2;
dir = -m_DesiredGunDir[0];
if (dir <= 180 && dir < -180)
if (dir <= 180)
{
dir += 360;
if (dir < -180)
{
dir += 360;
}
}
else
{
dir -= 360;
}
float factor;
if (dir < 0)
{
@ -1283,7 +1333,7 @@ void SimpleActor::UpdateAim
}
else
{
if (dir < m_fAimLimit_up)
if (dir > m_fAimLimit_up)
dir = m_fAimLimit_up;
factor = dir / m_fAimLimit_up;
@ -1574,37 +1624,37 @@ void SimpleActor::EventSetEmotion
switch (ev->GetConstString(1))
{
case STRING_EMOTION_NONE:
m_eEmotionMode = EMOTION_NONE;
Anim_Emotion(EMOTION_NONE);
break;
case STRING_EMOTION_NEUTRAL:
m_eEmotionMode = EMOTION_NEUTRAL;
Anim_Emotion(EMOTION_NEUTRAL);
break;
case STRING_EMOTION_WORRY:
m_eEmotionMode = EMOTION_WORRY;
Anim_Emotion(EMOTION_WORRY);
break;
case STRING_EMOTION_PANIC:
m_eEmotionMode = EMOTION_PANIC;
Anim_Emotion(EMOTION_PANIC);
break;
case STRING_EMOTION_FEAR:
m_eEmotionMode = EMOTION_FEAR;
Anim_Emotion(EMOTION_FEAR);
break;
case STRING_EMOTION_DISGUST:
m_eEmotionMode = EMOTION_DISGUST;
Anim_Emotion(EMOTION_DISGUST);
break;
case STRING_EMOTION_ANGER:
m_eEmotionMode = EMOTION_ANGER;
Anim_Emotion(EMOTION_ANGER);
break;
case STRING_EMOTION_AIMING:
m_eEmotionMode = EMOTION_AIMING;
Anim_Emotion(EMOTION_AIMING);
break;
case STRING_EMOTION_DETERMINED:
m_eEmotionMode = EMOTION_DETERMINED;
Anim_Emotion(EMOTION_DETERMINED);
break;
case STRING_EMOTION_DEAD:
m_eEmotionMode = EMOTION_DEAD;
Anim_Emotion(EMOTION_DEAD);
break;
case STRING_EMOTION_CURIOUS:
m_eEmotionMode = EMOTION_CURIOUS;
Anim_Emotion(EMOTION_CURIOUS);
break;
default:
assert(!"Unknown emotion mode specified in script.");
@ -1666,8 +1716,10 @@ void SimpleActor::DesiredAnimation
)
{
// not found in ida
STUB();
//fixme: this is an inline function.
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = csAnimString;
m_bNextForceStart = false;
}
void SimpleActor::StartAnimation
@ -1677,8 +1729,10 @@ void SimpleActor::StartAnimation
)
{
// not found in ida
STUB();
//fixme: this is an inline function.
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = csAnimString;
m_bNextForceStart = true;
}
void SimpleActor::DesiredAnimation
@ -1688,8 +1742,11 @@ void SimpleActor::DesiredAnimation
)
{
// not found in ida
STUB();
//fixme: this is an inline function.
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = STRING_NULL;
m_NextAnimLabel = AnimLabel;
m_bNextForceStart = false;
}
void SimpleActor::StartAnimation
@ -1699,8 +1756,11 @@ void SimpleActor::StartAnimation
)
{
// not found in ida
STUB();
//fixme: this is an inline function.
m_eNextAnimMode = eAnimMode;
m_csNextAnimString = STRING_NULL;
m_NextAnimLabel = AnimLabel;
m_bNextForceStart = true;
}
void SimpleActor::ContinueAnimationAllowNoPath
@ -1712,7 +1772,7 @@ void SimpleActor::ContinueAnimationAllowNoPath
if (m_eNextAnimMode < 0)
{
m_bNextForceStart = false;
m_csNextAnimString = NULL;
m_csNextAnimString = STRING_NULL;
m_eNextAnimMode = m_eAnimMode;
m_NextAnimLabel = m_Anim;
}
@ -1724,17 +1784,19 @@ void SimpleActor::ContinueAnimation
)
{
if (m_eNextAnimMode < 0)
int eAnimMode = m_eNextAnimMode;
if (eAnimMode < 0)
{
m_bNextForceStart = false;
m_csNextAnimString = NULL;
m_csNextAnimString = STRING_NULL;
m_eNextAnimMode = m_eAnimMode;
m_NextAnimLabel = m_Anim;
eAnimMode = m_eAnimMode;
}
if (m_eAnimMode <= 3 && !PathExists())
if (eAnimMode <= 3 && !PathExists())
{
assert(!DumpCallTrace("ContinueAnimation() called on a pathed animation, but no path exists"));
//assert(!DumpCallTrace("ContinueAnimation() called on a pathed animation, but no path exists"));
Anim_Stand();
}
}
@ -1754,19 +1816,69 @@ bool SimpleActor::UpdateSelectedAnimation
)
{
if (m_csNextAnimString == NULL)
if (m_csNextAnimString == STRING_NULL)
{
if (!m_bNextForceStart && m_pAnimThread == NULL && m_eAnimMode == m_eNextAnimMode && m_Anim == m_NextAnimLabel)
{
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return false;
}
else
if (m_bNextForceStart)
{
m_Anim = m_NextAnimLabel;
//LABEL_7:
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return true;
}
if (m_pAnimThread)
{
if (m_eAnimMode == m_eNextAnimMode)
{
if (m_Anim == m_NextAnimLabel)
{
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return false;
}
}
}
m_Anim = m_NextAnimLabel;
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return true;
}
if (m_bNextForceStart)
{
Com_Printf("UpdateSelectedAnimation\n");
m_Anim.TrySetScript(m_csNextAnimString);
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return true;
}
if (!m_pAnimThread || m_eAnimMode != m_eNextAnimMode)
{
m_Anim.TrySetScript(m_csNextAnimString);
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return true;
}
if (m_fPathGoalTime <= level.time)
{
if (!m_Anim.IsFile(m_csNextAnimString))
{
m_Anim.TrySetScript(m_csNextAnimString);
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
@ -1775,27 +1887,16 @@ bool SimpleActor::UpdateSelectedAnimation
return true;
}
}
else if (m_bNextForceStart || m_pAnimThread != NULL || m_eAnimMode != m_eNextAnimMode || (m_fPathGoalTime <= level.time && !m_Anim.IsFile(m_csNextAnimString)))
m_eNextAnimMode = -1;
if (m_bStartPathGoalEndAnim)
{
m_Anim.TrySetScript(Director.GetString(m_csNextAnimString));
m_eAnimMode = m_eNextAnimMode;
if (m_eNextAnimMode != 3)
SetPathGoalEndAnim(STRING_EMPTY);
m_bStartPathGoalEndAnim = false;
m_eNextAnimMode = -1;
return true;
}
else
{
m_eNextAnimMode = -1;
if (m_bStartPathGoalEndAnim)
if (!m_Anim.IsFile(m_csPathGoalEndAnimScript))
{
m_bStartPathGoalEndAnim = false;
if (!m_Anim.IsFile(m_csPathGoalEndAnimScript))
{
m_Anim.TrySetScript(Director.GetString(m_csPathGoalEndAnimScript));
return true;
}
m_Anim.TrySetScript(m_csPathGoalEndAnimScript);
return true;
}
}
return false;

View file

@ -4375,7 +4375,7 @@ void Weapon::MakeNoise
if( attached && ( next_noise_time <= level.time || force ) )
{
BroadcastAIEvent( 8, radius );
BroadcastAIEvent(AI_EVENT_MISC, radius );
next_noise_time = level.time + 1;
}
}

View file

@ -576,7 +576,7 @@ void ClassDef::BuildEventResponses( void )
numclasses++;
}
CLASS_DPrintf( "\n------------------\nEvent system initialized: "
glbs.DPrintf( "\n------------------\nEvent system initialized: "
"%d classes %d events %d total memory in response list\n\n", numclasses, Event::NumEventCommands(), amount );
}

View file

@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
enum
{
STRING_NULL = 0,
STRING_EMPTY = 1,
STRING_TOUCH, STRING_BLOCK, STRING_TRIGGER, STRING_USE,
STRING_DAMAGE,STRING_LOCATION,

View file

@ -198,9 +198,9 @@ bool StateScript::AddLabel( const_str label, unsigned char *pos, bool private_se
s.key = label;
s.isprivate = private_section;
if( !label_list.findKeyValue( 0 ) )
if( !label_list.findKeyValue(STRING_NULL) )
{
label_list.addKeyValue( 0 ) = s;
label_list.addKeyValue(STRING_NULL) = s;
}
reverse_label_list.AddObject( &s );
@ -258,7 +258,7 @@ const_str StateScript::NearestLabel( unsigned char *pos )
{
unsigned int offset = pos - m_Parent->m_ProgBuffer;
unsigned int bestOfs = 0;
const_str label = 0;
const_str label = STRING_NULL;
for( int i = 1; i <= reverse_label_list.NumObjects(); i++ )
{
@ -282,7 +282,7 @@ const_str StateScript::NearestLabel( unsigned char *pos )
GameScript::GameScript()
{
m_Filename = 0;
m_Filename = STRING_NULL;
successCompile = false;
m_ProgBuffer = NULL;
@ -367,7 +367,7 @@ void ArchiveOpcode( Archiver& arc, unsigned char *code )
__exec:
if( !arc.Loading() )
{
index = archivedEvents.AddUniqueObject( *reinterpret_cast< unsigned int * >( code + 2 ) );
index = archivedEvents.AddUniqueObject( *reinterpret_cast< const_str * >( code + 2 ) );
}
arc.ArchiveUnsigned( &index );
@ -411,7 +411,7 @@ __exec:
case OP_STORE_STRING:
if( !arc.Loading() )
{
index = archivedStrings.AddUniqueObject( *reinterpret_cast< unsigned int * >( code + 1 ) );
index = archivedStrings.AddUniqueObject( *reinterpret_cast< const_str * >( code + 1 ) );
}
arc.ArchiveUnsigned( &index );

View file

@ -423,6 +423,7 @@ void L_InitEvents( void )
g_eventstats = gi.Cvar_Get( "g_eventstats", "0", 0 );
#endif
gi.Printf("L_InitEvents\n");
Event::LoadEvents();
ClassDef::BuildEventResponses();
@ -2222,7 +2223,7 @@ bool Event::GetBoolean( int pos )
GetConstString
=======================
*/
int Event::GetConstString( int pos )
const_str Event::GetConstString( int pos )
{
ScriptVariable& variable = GetValue( pos );
@ -3439,13 +3440,13 @@ void Listener::CancelWaiting( const_str name )
}
}
if( !DisableListenerNotify )
for (int i = stoppedListeners.NumObjects(); i > 0; i--)
{
for( int i = stoppedListeners.NumObjects(); i > 0; i-- )
{
Listener *listener = stoppedListeners.ObjectAt( i );
Listener *listener = stoppedListeners.ObjectAt(i);
if( listener )
if (listener)
{
if (!DisableListenerNotify)
{
listener->StoppedNotify();
}
@ -3480,17 +3481,16 @@ void Listener::CancelWaitingAll()
m_WaitForList = NULL;
if( !DisableListenerNotify )
StoppedWaitFor(STRING_NULL, false );
for (int i = stoppedListeners.NumObjects(); i > 0; i--)
{
StoppedWaitFor( 0, false );
Listener *listener = stoppedListeners.ObjectAt(i);
for( int i = stoppedListeners.NumObjects(); i > 0; i-- )
if (listener)
{
Listener *listener = stoppedListeners.ObjectAt( i );
if( listener )
{
if (!DisableListenerNotify)
listener->StoppedNotify();
}
}
}
}

View file

@ -358,7 +358,7 @@ public:
bool GetBoolean( int pos );
int GetConstString( int pos );
const_str GetConstString( int pos );
Entity *GetEntity( int pos );

View file

@ -8996,6 +8996,16 @@ void ScriptThread::StoppedWaitFor( const_str name, bool bDeleting )
}
}
ScriptThread *ScriptThread::CreateThreadInternal(const ScriptVariable& label)
{
return m_ScriptVM->GetScriptClass()->CreateThreadInternal(label);
}
ScriptThread * ScriptThread::CreateScriptInternal(const ScriptVariable & label)
{
return m_ScriptVM->GetScriptClass()->CreateScriptInternal(label);
}
void ScriptThread::Pause()
{
Stop();
@ -9018,35 +9028,27 @@ void ScriptThread::Stop( void )
void ScriptThread::Wait( float time )
{
Stop();
m_ScriptVM->m_ThreadState = THREAD_WAITING;
Director.AddTiming( this, time );
StartTiming(time);
m_ScriptVM->Suspend();
}
void ScriptThread::StartTiming(float time)
{
if (m_ScriptVM->ThreadState() == THREAD_WAITING)
{
m_ScriptVM->m_ThreadState = THREAD_RUNNING;
Director.RemoveTiming(this);
}
else if (m_ScriptVM->ThreadState() == THREAD_SUSPENDED)
{
m_ScriptVM->m_ThreadState = THREAD_RUNNING;
CancelWaitingAll();
}
Stop();
m_ScriptVM->m_ThreadState = THREAD_WAITING;
if (time < 0)
{
time = 0;
}
Director.AddTiming(this, time);
}
void ScriptThread::StartTiming(void)
{
StartTiming(level.inttime);
StartTiming(0);//start timing now
}
CLASS_DECLARATION( Listener, ScriptThread, NULL )

View file

@ -199,11 +199,13 @@ public:
void operator delete( void *ptr );
#endif
virtual void Archive( Archiver &arc );
virtual void Archive( Archiver &arc ) override;
void ArchiveInternal( Archiver& arc );
virtual void StartedWaitFor( void );
virtual void StoppedNotify( void );
virtual void StoppedWaitFor( const_str name, bool bDeleting );
virtual void StartedWaitFor( void ) override;
virtual void StoppedNotify( void ) override;
virtual void StoppedWaitFor( const_str name, bool bDeleting ) override;
virtual ScriptThread *CreateThreadInternal(const ScriptVariable& label) override;
virtual ScriptThread *CreateScriptInternal(const ScriptVariable& label) override;
ScriptThread();
ScriptThread( ScriptClass *scriptClass, unsigned char *pCodePos );

View file

@ -1444,7 +1444,7 @@ void ScriptVariable::setConstArrayValue( ScriptVariable *pVar, unsigned int size
#ifndef NO_SCRIPTENGINE
int ScriptVariable::constStringValue( void ) const
const_str ScriptVariable::constStringValue( void ) const
{
if( GetType() == VARIABLE_CONSTSTRING )
{
@ -1663,9 +1663,7 @@ void ScriptVariable::operator*=( const ScriptVariable& value )
break;
case VARIABLE_VECTOR + VARIABLE_VECTOR * VARIABLE_MAX: // ( vector ) * ( vector )
m_data.vectorValue[ 0 ] = m_data.vectorValue[ 0 ] * value.m_data.vectorValue[ 0 ];
m_data.vectorValue[ 1 ] = m_data.vectorValue[ 1 ] * value.m_data.vectorValue[ 1 ];
m_data.vectorValue[ 2 ] = m_data.vectorValue[ 2 ] * value.m_data.vectorValue[ 2 ];
setFloatValue(DotProduct(m_data.vectorValue, value.m_data.vectorValue));
break;
}
}

View file

@ -205,7 +205,7 @@ public:
void setConstArrayValue( ScriptVariable *pVar, unsigned int size );
#ifndef NO_SCRIPTENGINE
int constStringValue( void ) const;
const_str constStringValue( void ) const;
void setConstStringValue( const_str s );
#endif

View file

@ -120,7 +120,8 @@ public:
float length( void ) const;
float lengthfast( void ) const;
float lengthSquared( void ) const;
float lengthXY( bool squared = false ) const;
float lengthXY() const;
float lengthXYSquared() const;
float normalize( void );
void normalizefast( void );
void EulerNormalize( void );
@ -548,9 +549,25 @@ inline float Vector::lengthfast( void ) const
//
// Returns: float - length of the vector in the xy plane
//----------------------------------------------------------------
inline float Vector::lengthXY( bool squared ) const
inline float Vector::lengthXY() const
{
return squared ? (x * x) + (y * y) : sqrt(( x * x ) + ( y * y ));
return sqrt(( x * x ) + ( y * y ));
}
//----------------------------------------------------------------
// Name: lengthXYSquared
// Class: Vector
//
// Description: Returns length of the vector squared (using only the x
// and y components
//
// Parameters: None
//
// Returns: float - squared length of the vector in the xy plane
//----------------------------------------------------------------
inline float Vector::lengthXYSquared() const
{
return ( x * x ) + ( y * y );
}
//----------------------------------------------------------------

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -3465,17 +3465,17 @@ typedef struct spawnsort_s {
} spawnsort_t;
typedef struct SafePtr2_s {
struct Class *ptr;
void *_vptr$;
struct SafePtr2_s *prev;
struct SafePtr2_s *next;
void *_vptr$;
void *ptr;
} SafePtr2_t, SafePtr;
typedef struct SentientSPtr_s {
struct Class *ptr;
void *_vptr$;
struct SafePtr2_s *prev;
struct SafePtr2_s *next;
Sentient_t *_vptr$;
Sentient_t *ptr;
} SentientSPtr_t;
typedef struct WeaponSPtr_s {
@ -3486,10 +3486,10 @@ typedef struct WeaponSPtr_s {
} WeaponSPtr_t;
typedef struct SentientSPtr2_s {
struct Sentient_t *ptr;
void *_vptr$;
struct SafePtr2_s *prev;
struct SafePtr2_s *next;
Sentient_t *_vptr$;
Sentient_t *ptr;
} SentientSPtr2_t;
@ -3595,6 +3595,11 @@ typedef struct con_map_enum_s {
con_set_enum_t m_Set_Enum;
} con_map_enum_t;
typedef struct con_timer_Element_s {
Class_t *obj;
int inttime;
} con_timer_Element_t;
typedef struct con_timer_s {
Class_t baseClass;
Container_t m_Elements;