Some optimisations

This commit is contained in:
iamthesenate1 2021-12-26 13:17:09 +02:00
parent 0ab04baf9a
commit 3609bf4df8
23 changed files with 4610 additions and 4664 deletions

View File

@ -29,12 +29,7 @@ void AdjustFilePath_t(CTFileName &fnm)
}
// class constructor
CDependInfo::CDependInfo(CTFileName fnFileName, CTFileName fnParent)
{
// copy file name
di_fnFileName = fnFileName;
di_fnParent = fnParent;
}
CDependInfo::CDependInfo(CTFileName fnFileName, CTFileName fnParent): /*copy file name*/ di_fnFileName(fnFileName), di_fnParent(fnParent){}
BOOL CDependInfo::IsFileOnDiskUpdated(void)
{

View File

@ -37,7 +37,7 @@ const char *CTFileName::convertFromWin32(const char *src)
static const char *dirsep = NULL;
static size_t seplen = 0;
static char buf[MAX_PATH]; // This is NOT thread safe, fyi.
char *dest = buf;
char *dest;
if (src == NULL)
{
@ -78,7 +78,7 @@ const char *CTFileName::convertToWin32(const char *src)
static const char *dirsep = NULL;
static size_t seplen = 0;
static char buf[MAX_PATH]; // This is NOT thread safe, fyi.
char *dest = buf;
char *dest;
if (src == NULL)
{

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2002-2012 Croteam Ltd.
/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
@ -182,6 +182,7 @@ CTString ScriptEsc(const CTString &str)
#pragma inline_depth(0)
void MakeAccessViolation(void* pArgs)
{
INDEX bDont = NEXTARGUMENT(INDEX);
if( bDont) return;
@ -674,7 +675,7 @@ FLOAT CShell::GetFLOAT(const CTString &strName)
// error
ASSERT(FALSE);
return -666.0f;
}
}
// get it
return *(FLOAT*)pss->ss_pvValue;
}
@ -688,7 +689,7 @@ void CShell::SetFLOAT(const CTString &strName, FLOAT fValue)
// error
ASSERT(FALSE);
return;
}
}
// set it
*(FLOAT*)pss->ss_pvValue = fValue;
}
@ -703,7 +704,7 @@ INDEX CShell::GetINDEX(const CTString &strName)
// error
ASSERT(FALSE);
return -666;
}
}
// get it
return *(INDEX*)pss->ss_pvValue;
}
@ -717,7 +718,7 @@ void CShell::SetINDEX(const CTString &strName, INDEX iValue)
// error
ASSERT(FALSE);
return;
}
}
// set it
*(INDEX*)pss->ss_pvValue = iValue;
}
@ -732,7 +733,7 @@ CTString CShell::GetString(const CTString &strName)
// error
ASSERT(FALSE);
return "<invalid>";
}
}
// get it
return *(CTString*)pss->ss_pvValue;
}
@ -746,7 +747,7 @@ void CShell::SetString(const CTString &strName, const CTString &strValue)
// error
ASSERT(FALSE);
return;
}
}
// set it
*(CTString*)pss->ss_pvValue = strValue;
}
@ -762,7 +763,7 @@ CTString CShell::GetValue(const CTString &strName)
// error
ASSERT(FALSE);
return "<invalid>";
}
}
// get it
ShellTypeType stt = _shell_ast[pss->ss_istType].st_sttType;
@ -795,7 +796,7 @@ void CShell::SetValue(const CTString &strName, const CTString &strValue)
// error
ASSERT(FALSE);
return;
}
}
// get it
ShellTypeType stt = _shell_ast[pss->ss_istType].st_sttType;
switch(stt) {

View File

@ -166,11 +166,8 @@ CTString GetZlibError(int ierr)
}
}
CZipHandle::CZipHandle(void)
CZipHandle::CZipHandle(void): zh_bOpen(FALSE), zh_fFile(NULL), zh_pubBufIn(NULL)
{
zh_bOpen = FALSE;
zh_fFile = NULL;
zh_pubBufIn = NULL;
memset(&zh_zstream, 0, sizeof(zh_zstream));
}
void CZipHandle::Clear(void)

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2002-2012 Croteam Ltd.
/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
@ -593,7 +593,7 @@ extern void GameAgent_EnumTrigger(BOOL bInternet)
if ( _pNetwork->ga_bEnumerationChange ) {
return;
}
if ( !bInternet && ga_bMSLegacy) {
// make sure that there are no requests still stuck in buffer
ga_asrRequests.Clear();
@ -866,7 +866,7 @@ extern void GameAgent_EnumTrigger(BOOL bInternet)
_bActivated = TRUE;
_bInitialized = TRUE;
_initializeWinsock();
}
}
}
@ -1051,7 +1051,7 @@ extern void GameAgent_EnumUpdate(void)
pthread_detach(_hThread);
}
_bActivatedLocal = FALSE;
}
}
#else
/* MSLegacy */
if(_bActivated) {
@ -1152,7 +1152,7 @@ void* _MS_Thread(void *arg) {
/** do recvfrom stuff **/
iRet = recvfrom(_sockudp, _szBuffer, 2048, 0, (sockaddr*)&_sinClient, &_iClientLength);
FD_CLR(_sockudp, &readfds_udp);
if(iRet != -1 && iRet > 100 && iRet != SOCKET_ERROR) {
if(iRet > 100 && iRet != SOCKET_ERROR) {
// null terminate the buffer
_szBuffer[iRet] = 0;
char *sPch = NULL;
@ -1360,7 +1360,7 @@ void* _LocalNet_Thread(void *arg) {
/** do recvfrom stuff **/
iRet = recvfrom(_sockudp, _szBuffer, 2048, 0, (sockaddr*)&_sinClient, &_iClientLength);
FD_CLR(_sockudp, &readfds_udp);
if(iRet != -1 && iRet > 100 && iRet != SOCKET_ERROR) {
if(iRet > 100 && iRet != SOCKET_ERROR) {
// null terminate the buffer
_szBuffer[iRet] = 0;
char *sPch = NULL;
@ -1370,7 +1370,7 @@ void* _LocalNet_Thread(void *arg) {
if(_szIPPortBufferLocal != NULL) {
delete[] _szIPPortBufferLocal;
}
_szIPPortBufferLocal = NULL;
_szIPPortBufferLocal = NULL;
WSACleanup();
return 0;
} else {

View File

@ -2002,9 +2002,8 @@ void CLayerMixer::MixOneMipmapDynamic( CBrushShadowMap *pbsm, INDEX iMipmap)
// constructor
CLayerMixer::CLayerMixer( CBrushShadowMap *pbsm, INDEX iFirstMip, INDEX iLastMip, BOOL bDynamic)
CLayerMixer::CLayerMixer( CBrushShadowMap *pbsm, INDEX iFirstMip, INDEX iLastMip, BOOL bDynamic): lm_bDynamic(bDynamic)
{
lm_bDynamic = bDynamic;
if( bDynamic) {
// check dynamic layers for complete blackness
BOOL bAllBlack = TRUE;

View File

@ -195,9 +195,7 @@ public:
// array for holding edges that proceed with testing
CDynamicArray<DOUBLEbspedge3D> oc_abedProceeding;
CObjectCSG(void) {
oc_bCSGIngoringEnabled = FALSE;
oc_bSkipObjectB = FALSE;
CObjectCSG(void): oc_bCSGIngoringEnabled(FALSE), oc_bSkipObjectB(FALSE){
}
/* Add an entire array of BSP edges to some polygon according to action code. */

View File

@ -480,9 +480,6 @@ BOOL CClientInterface::UpdateInputBuffers(void)
// take this packet out of the input buffer
ci_pbInputBuffer.RemovePacket(ppaPacket->pa_ulSequence,FALSE);
if (ppaPacket->pa_ulSequence == 8) {
ppaPacket->pa_ulSequence = 8;
}
// a packet can be accepted from the broadcast ID only if it is an acknowledge packet or
// if it is a connection confirmation response packet and the client isn't already connected
if (ppaPacket->pa_adrAddress.adr_uwID == SLASHSLASH || ppaPacket->pa_adrAddress.adr_uwID == 0) {

View File

@ -81,12 +81,7 @@ struct TickMarker {
UBYTE tm_ubAcknowledgesExpected;
UWORD tm_uwNumMessages;
TickMarker() {
tm_fTickTime = -1;
tm_slTickOffset = -1;
tm_ubAcknowledgesExpected = 0;
tm_uwNumMessages = 0;
}
TickMarker(): tm_fTickTime(-1), tm_fTickTime(-1), tm_ubAcknowledgesExpected(0), tm_uwNumMessages (0){}
};

View File

@ -47,7 +47,7 @@ public:
CEntityPointer ehi_epEntityPointer;
CClientEntry ehi_ceClientEntries[SERVER_CLIENTS];
CEntityHashItem() {ehi_ulEntityID = -1;} // entity pointer will initialize itself to NULL
CEntityHashItem(): ehi_ulEntityID(-1){} // entity pointer will initialize itself to NULL
~CEntityItem() {}; // entity poiner will destroy itself and remove the reference

View File

@ -185,9 +185,7 @@ public:
~CGatherCRC();
};
CGatherCRC::CGatherCRC() {
bOld = CRCT_bGatherCRCs;
}
CGatherCRC::CGatherCRC(): bOld(CRCT_bGatherCRCs){}
CGatherCRC::~CGatherCRC() {
CRCT_bGatherCRCs = bOld;
}

View File

@ -165,8 +165,7 @@ void SelectVertexOnRender(CBrushVertex &bvx, const PIX2D &vpix)
// if selecting with lasso
} else {
// if the vertex is set in lasso buffer
if (_pubLassoBuffer!=NULL
&&_pubLassoBuffer[vpix(2)*_pixSizeI+vpix(1)]) {
if (_pubLassoBuffer[vpix(2)*_pixSizeI+vpix(1)]) {
// if alternative
if (_bSelectAlternative) {

View File

@ -186,11 +186,9 @@ static FLOAT HitCheckQuad(const PIX ix, const PIX iz)
// if the polygon is intersected by the ray, and it is the closest intersection so far
if (isIntersector.IsIntersecting() && (fHitDistance < fDistance)) {
// remember hit coordinates
if(fHitDistance<fDistance) {
fDistance = fHitDistance;
_vHitExact = vHitPoint;
_plHitPlane = plTriPlane;
}
_plHitPlane = plTriPlane;
}
}
}

View File

@ -154,7 +154,7 @@ CTFileName CEngineGUI::CreateTexture(CTFileName fnTexFileToRecreate/*=CTString("
CDlgChooseTextureType dlgChooseTextureType;
int iDlgResult = dlgChooseTextureType.DoModal();
// if user choosed a texture type
if( (iDlgResult != -1) && (iDlgResult >= 0) && (iDlgResult <= 2) )
if( (iDlgResult >= 0) && (iDlgResult <= 2) )
{
// if result is 2 we want to create effect texture
if( iDlgResult == 2)

View File

@ -1,215 +1,208 @@
// common headers for flesh entity classes
#include <Entities/Debris.h> /* rcg10062001 need enum definition... */
#include <Entities/KeyItem.h> /* rcg10062001 need enum definition... */
#define SURFACE_SAND 9
#define SURFACE_WATER 12
#define SURFACE_RED_SAND 13
// Max ammo
#define MAX_BULLETS INDEX(500)
#define MAX_SHELLS INDEX(100)
#define MAX_ROCKETS INDEX(50)
#define MAX_GRENADES INDEX(50)
//#define MAX_NAPALM INDEX(250)
#define MAX_ELECTRICITY INDEX(400)
#define MAX_IRONBALLS INDEX(30)
//#define MAX_NUKEBALLS INDEX(3)
// Bit shifters for ammo
#define AMMO_BULLETS 0
#define AMMO_SHELLS 1
#define AMMO_ROCKETS 2
#define AMMO_GRENADES 3
//#define AMMO_NAPALM 4
#define AMMO_ELECTRICITY 5
//#define AMMO_NUKEBALLS 6
#define AMMO_IRONBALLS 7
// Ammo mana Value
#define AV_SHELLS INDEX(70)
#define AV_BULLETS INDEX(10)
#define AV_ROCKETS INDEX(150)
#define AV_GRENADES INDEX(150)
#define AV_ELECTRICITY INDEX(250)
#define AV_IRONBALLS INDEX(700)
//#define AV_NUKEBALLS INDEX(1800)
//#define AV_NAPALM INDEX(200)
enum EmptyShellType {
ESL_BULLET = 0,
ESL_SHOTGUN = 1,
ESL_BUBBLE = 2,
ESL_BULLET_SMOKE = 3,
ESL_SHOTGUN_SMOKE = 4,
ESL_COLT_SMOKE = 5,
};
// empty shell launch info
#define MAX_FLYING_SHELLS 32
struct ShellLaunchData {
FLOAT sld_fSize; // size multiplier
FLOAT3D sld_vPos; // launch position
FLOAT3D sld_vSpeed; // launch speed
FLOAT3D sld_vUp; // up vector in moment of launch
FLOAT sld_tmLaunch; // time of launch
EmptyShellType sld_estType; // shell type
};
#define ShellLaunchData_array m_asldData[MAX_FLYING_SHELLS]
// world change
struct WorldChange {
CTString strGroup; // group name
CPlacement3D plLink; // link placement for relative change
INDEX iType; // change type
};
extern struct WorldChange _SwcWorldChange;
// entity info
struct EntityInfo {
EntityInfoBodyType Eeibt; // body type
FLOAT fMass; // mass (in kg)
FLOAT vSourceCenter[3]; // body point (offset from handle) when entity look another entity
FLOAT vTargetCenter[3]; // body point (offset from handle) when entity is target of look
};
// entity info
struct EntityStats {
CTString es_strName;
INDEX es_ctCount;
INDEX es_ctAmmount;
FLOAT es_fValue;
INDEX es_iScore;
inline void Clear() { es_strName.Clear(); }
};
// statistics data for player stats management
struct DECL_DLL PlayerStats {
INDEX ps_iScore;
INDEX ps_iKills;
INDEX ps_iDeaths;
INDEX ps_iSecrets;
TIME ps_tmTime;
PlayerStats(void)
{
ps_iScore = 0;
ps_iKills = 0;
ps_iDeaths = 0;
ps_iSecrets = 0;
ps_tmTime = 0.0f;
}
};
// get info position for entity
DECL_DLL void GetEntityInfoPosition(CEntity *pen, FLOAT *pf, FLOAT3D &vPos);
// get source and target positions for ray cast
DECL_DLL void GetPositionCastRay(CEntity *penSource, CEntity *penTarget, FLOAT3D &vSource, FLOAT3D &vTarget);
// set bool from bool enum type
DECL_DLL void SetBoolFromBoolEType(BOOL &bSet, BoolEType bet);
// send event to target
DECL_DLL void SendToTarget(CEntity *penSendEvent, EventEType eetEventType, CEntity *penCaused = NULL);
// send event in range
DECL_DLL void SendInRange(CEntity *penSource, EventEType eetEventType, const FLOATaabbox3D &boxRange);
// spawn reminder
DECL_DLL CEntityPointer SpawnReminder(CEntity *penOwner, FLOAT fWaitTime, INDEX iValue);
// spawn flame
//CEntityPointer SpawnFlame(CEntity *penOwner, CEntity *penAttach, const FLOAT3D &vSource);
// Set components
DECL_DLL void SetComponents(CEntity *pen, CModelObject &mo, ULONG ulIDModel, ULONG ulIDTexture,
ULONG ulIDReflectionTexture, ULONG ulIDSpecularTexture, ULONG ulIDBumpTexture);
// Add attachment to model
DECL_DLL void AddAttachmentToModel(CEntity *pen, CModelObject &mo, INDEX iAttachment, ULONG ulIDModel, ULONG ulIDTexture,
ULONG ulIDReflectionTexture, ULONG ulIDSpecularTexture, ULONG ulIDBumpTexture);
// Remove attachment from model
DECL_DLL void RemoveAttachmentFromModel(CModelObject &mo, INDEX iAttachment);
// Kick entity
DECL_DLL void KickEntity(CEntity *penTarget, FLOAT3D vSpeed);
// lens flare variables
extern CLensFlareType _lftStandard;
extern CLensFlareType _lftStandardReflections;
extern CLensFlareType _lftYellowStarRedRing;
extern CLensFlareType _lftYellowStarRedRingFar;
extern CLensFlareType _lftWhiteGlowStarRedRing;
extern CLensFlareType _lftWhiteGlowStar;
extern CLensFlareType _lftWhiteGlowStarNG;
extern CLensFlareType _lftWhiteStarRedRingStreaks;
extern CLensFlareType _lftWhiteStarRedReflections;
extern CLensFlareType _lftBlueStarBlueReflections;
extern CLensFlareType _lftProjectileStarGlow;
extern CLensFlareType _lftProjectileWhiteBubbleGlow;
extern CLensFlareType _lftProjectileYellowBubbleGlow;
extern CLensFlareType _lftPVSpaceShipWindowFlare;
extern CLensFlareType _lftCatmanFireGlow;
extern CLensFlareType _lftWhiteGlowFar;
// init lens flare effects
void InitLensFlares(void);
// close lens flares effects
void CloseLensFlares(void);
DECL_DLL BOOL SetPlayerAppearance(CModelObject *mo, CPlayerCharacter *ppc, CTString &strName, BOOL bPreview);
// debugging functions
DECL_DLL const char *PrintConsole(void);
DECL_DLL const char *PrintStack(CEntity *pen);
// debris spawning
DECL_DLL void Debris_Begin(
EntityInfoBodyType Eeibt,
enum DebrisParticlesType dptParticles,
enum BasicEffectType betStain,
FLOAT fEntitySize, // entity size in meters
const FLOAT3D &vSpeed,
const FLOAT3D &vSpawnerSpeed, // how fast was the entity moving
const FLOAT fConeSize, // size multiplier for debris cone
const FLOAT fSpeedUp, // size multiplier for debris catapulting up (0-no multiply)
const COLOR colDebris=C_WHITE // multiply color
);
DECL_DLL CEntityPointer Debris_Spawn(
CEntity *penSpawner,
CEntity *penComponents,
SLONG idModelComponent,
SLONG idTextureComponent,
SLONG idReflectionTextureComponent,
SLONG idSpecularTextureComponent,
SLONG idBumpTextureComponent,
INDEX iModelAnim,
FLOAT fSize, // size relative to entity size (or 0 for absolute stretch of 1)
const FLOAT3D &vPosRatio);
// get default entity info for given body type
DECL_DLL EntityInfo *GetStdEntityInfo(EntityInfoBodyType eibt);
// damage control functions
DECL_DLL FLOAT DamageStrength(EntityInfoBodyType eibtBody, enum DamageType dtDamage);
// Print center screen message
DECL_DLL void PrintCenterMessage(CEntity *penThis, CEntity *penTarget,
const CTString &strMessage, TIME tmLength, enum MessageSound mssSound);
// get name of a key item
DECL_DLL const char *GetKeyName(enum KeyItemType kit);
// get session properties
DECL_DLL inline const CSessionProperties *GetSP(void)
{
return ((const CSessionProperties *)_pNetwork->GetSessionProperties());
}
// i.e. weapon sound when fireing or exploding
DECL_DLL void SpawnRangeSound( CEntity *penPlayer, CEntity *penPos, enum SoundType st, FLOAT fRange);
// get some player for trigger source if any is existing
DECL_DLL CEntity *FixupCausedToPlayer(CEntity *penThis, CEntity *penCaused, BOOL bWarning=TRUE);
// precisely lerp between two placement using quaternions
DECL_DLL CPlacement3D LerpPlacementsPrecise(const CPlacement3D &pl0, const CPlacement3D &pl1, FLOAT fRatio);
// obtain game extra damage per enemy and per player
DECL_DLL FLOAT GetGameDamageMultiplier(void);
// common headers for flesh entity classes
#include <Entities/Debris.h> /* rcg10062001 need enum definition... */
#include <Entities/KeyItem.h> /* rcg10062001 need enum definition... */
#define SURFACE_SAND 9
#define SURFACE_WATER 12
#define SURFACE_RED_SAND 13
// Max ammo
#define MAX_BULLETS INDEX(500)
#define MAX_SHELLS INDEX(100)
#define MAX_ROCKETS INDEX(50)
#define MAX_GRENADES INDEX(50)
//#define MAX_NAPALM INDEX(250)
#define MAX_ELECTRICITY INDEX(400)
#define MAX_IRONBALLS INDEX(30)
//#define MAX_NUKEBALLS INDEX(3)
// Bit shifters for ammo
#define AMMO_BULLETS 0
#define AMMO_SHELLS 1
#define AMMO_ROCKETS 2
#define AMMO_GRENADES 3
//#define AMMO_NAPALM 4
#define AMMO_ELECTRICITY 5
//#define AMMO_NUKEBALLS 6
#define AMMO_IRONBALLS 7
// Ammo mana Value
#define AV_SHELLS INDEX(70)
#define AV_BULLETS INDEX(10)
#define AV_ROCKETS INDEX(150)
#define AV_GRENADES INDEX(150)
#define AV_ELECTRICITY INDEX(250)
#define AV_IRONBALLS INDEX(700)
//#define AV_NUKEBALLS INDEX(1800)
//#define AV_NAPALM INDEX(200)
enum EmptyShellType {
ESL_BULLET = 0,
ESL_SHOTGUN = 1,
ESL_BUBBLE = 2,
ESL_BULLET_SMOKE = 3,
ESL_SHOTGUN_SMOKE = 4,
ESL_COLT_SMOKE = 5,
};
// empty shell launch info
#define MAX_FLYING_SHELLS 32
struct ShellLaunchData {
FLOAT sld_fSize; // size multiplier
FLOAT3D sld_vPos; // launch position
FLOAT3D sld_vSpeed; // launch speed
FLOAT3D sld_vUp; // up vector in moment of launch
FLOAT sld_tmLaunch; // time of launch
EmptyShellType sld_estType; // shell type
};
#define ShellLaunchData_array m_asldData[MAX_FLYING_SHELLS]
// world change
struct WorldChange {
CTString strGroup; // group name
CPlacement3D plLink; // link placement for relative change
INDEX iType; // change type
};
extern struct WorldChange _SwcWorldChange;
// entity info
struct EntityInfo {
EntityInfoBodyType Eeibt; // body type
FLOAT fMass; // mass (in kg)
FLOAT vSourceCenter[3]; // body point (offset from handle) when entity look another entity
FLOAT vTargetCenter[3]; // body point (offset from handle) when entity is target of look
};
// entity info
struct EntityStats {
CTString es_strName;
INDEX es_ctCount;
INDEX es_ctAmmount;
FLOAT es_fValue;
INDEX es_iScore;
inline void Clear() { es_strName.Clear(); }
};
// statistics data for player stats management
struct DECL_DLL PlayerStats {
INDEX ps_iScore;
INDEX ps_iKills;
INDEX ps_iDeaths;
INDEX ps_iSecrets;
TIME ps_tmTime;
PlayerStats(void): ps_iScore(0), ps_iKills(0), ps_iDeaths(0), ps_iSecrets(0), ps_tmTime(0.0f){}
};
// get info position for entity
DECL_DLL void GetEntityInfoPosition(CEntity *pen, FLOAT *pf, FLOAT3D &vPos);
// get source and target positions for ray cast
DECL_DLL void GetPositionCastRay(CEntity *penSource, CEntity *penTarget, FLOAT3D &vSource, FLOAT3D &vTarget);
// set bool from bool enum type
DECL_DLL void SetBoolFromBoolEType(BOOL &bSet, BoolEType bet);
// send event to target
DECL_DLL void SendToTarget(CEntity *penSendEvent, EventEType eetEventType, CEntity *penCaused = NULL);
// send event in range
DECL_DLL void SendInRange(CEntity *penSource, EventEType eetEventType, const FLOATaabbox3D &boxRange);
// spawn reminder
DECL_DLL CEntityPointer SpawnReminder(CEntity *penOwner, FLOAT fWaitTime, INDEX iValue);
// spawn flame
//CEntityPointer SpawnFlame(CEntity *penOwner, CEntity *penAttach, const FLOAT3D &vSource);
// Set components
DECL_DLL void SetComponents(CEntity *pen, CModelObject &mo, ULONG ulIDModel, ULONG ulIDTexture,
ULONG ulIDReflectionTexture, ULONG ulIDSpecularTexture, ULONG ulIDBumpTexture);
// Add attachment to model
DECL_DLL void AddAttachmentToModel(CEntity *pen, CModelObject &mo, INDEX iAttachment, ULONG ulIDModel, ULONG ulIDTexture,
ULONG ulIDReflectionTexture, ULONG ulIDSpecularTexture, ULONG ulIDBumpTexture);
// Remove attachment from model
DECL_DLL void RemoveAttachmentFromModel(CModelObject &mo, INDEX iAttachment);
// Kick entity
DECL_DLL void KickEntity(CEntity *penTarget, FLOAT3D vSpeed);
// lens flare variables
extern CLensFlareType _lftStandard;
extern CLensFlareType _lftStandardReflections;
extern CLensFlareType _lftYellowStarRedRing;
extern CLensFlareType _lftYellowStarRedRingFar;
extern CLensFlareType _lftWhiteGlowStarRedRing;
extern CLensFlareType _lftWhiteGlowStar;
extern CLensFlareType _lftWhiteGlowStarNG;
extern CLensFlareType _lftWhiteStarRedRingStreaks;
extern CLensFlareType _lftWhiteStarRedReflections;
extern CLensFlareType _lftBlueStarBlueReflections;
extern CLensFlareType _lftProjectileStarGlow;
extern CLensFlareType _lftProjectileWhiteBubbleGlow;
extern CLensFlareType _lftProjectileYellowBubbleGlow;
extern CLensFlareType _lftPVSpaceShipWindowFlare;
extern CLensFlareType _lftCatmanFireGlow;
extern CLensFlareType _lftWhiteGlowFar;
// init lens flare effects
void InitLensFlares(void);
// close lens flares effects
void CloseLensFlares(void);
DECL_DLL BOOL SetPlayerAppearance(CModelObject *mo, CPlayerCharacter *ppc, CTString &strName, BOOL bPreview);
// debugging functions
DECL_DLL const char *PrintConsole(void);
DECL_DLL const char *PrintStack(CEntity *pen);
// debris spawning
DECL_DLL void Debris_Begin(
EntityInfoBodyType Eeibt,
enum DebrisParticlesType dptParticles,
enum BasicEffectType betStain,
FLOAT fEntitySize, // entity size in meters
const FLOAT3D &vSpeed,
const FLOAT3D &vSpawnerSpeed, // how fast was the entity moving
const FLOAT fConeSize, // size multiplier for debris cone
const FLOAT fSpeedUp, // size multiplier for debris catapulting up (0-no multiply)
const COLOR colDebris=C_WHITE // multiply color
);
DECL_DLL CEntityPointer Debris_Spawn(
CEntity *penSpawner,
CEntity *penComponents,
SLONG idModelComponent,
SLONG idTextureComponent,
SLONG idReflectionTextureComponent,
SLONG idSpecularTextureComponent,
SLONG idBumpTextureComponent,
INDEX iModelAnim,
FLOAT fSize, // size relative to entity size (or 0 for absolute stretch of 1)
const FLOAT3D &vPosRatio);
// get default entity info for given body type
DECL_DLL EntityInfo *GetStdEntityInfo(EntityInfoBodyType eibt);
// damage control functions
DECL_DLL FLOAT DamageStrength(EntityInfoBodyType eibtBody, enum DamageType dtDamage);
// Print center screen message
DECL_DLL void PrintCenterMessage(CEntity *penThis, CEntity *penTarget,
const CTString &strMessage, TIME tmLength, enum MessageSound mssSound);
// get name of a key item
DECL_DLL const char *GetKeyName(enum KeyItemType kit);
// get session properties
DECL_DLL inline const CSessionProperties *GetSP(void)
{
return ((const CSessionProperties *)_pNetwork->GetSessionProperties());
}
// i.e. weapon sound when fireing or exploding
DECL_DLL void SpawnRangeSound( CEntity *penPlayer, CEntity *penPos, enum SoundType st, FLOAT fRange);
// get some player for trigger source if any is existing
DECL_DLL CEntity *FixupCausedToPlayer(CEntity *penThis, CEntity *penCaused, BOOL bWarning=TRUE);
// precisely lerp between two placement using quaternions
DECL_DLL CPlacement3D LerpPlacementsPrecise(const CPlacement3D &pl0, const CPlacement3D &pl1, FLOAT fRatio);
// obtain game extra damage per enemy and per player
DECL_DLL FLOAT GetGameDamageMultiplier(void);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,282 +1,275 @@
#include "../StdH/StdH.h"
#include "Entities/Common/PathFinding.h"
#include "Entities/NavigationMarker.h"
#define PRINTOUT(_dummy)
//#define PRINTOUT(something) something
// open and closed lists of nodes
static CListHead _lhOpen;
static CListHead _lhClosed;
FLOAT NodeDistance(CPathNode *ppn0, CPathNode *ppn1)
{
return (
ppn0->pn_pnmMarker->GetPlacement().pl_PositionVector -
ppn1->pn_pnmMarker->GetPlacement().pl_PositionVector).Length();
}
CPathNode::CPathNode(class CNavigationMarker *penMarker)
{
pn_pnmMarker = penMarker;
pn_ppnParent = NULL;
pn_fG = 0.0f;
pn_fH = 0.0f;
pn_fF = 0.0f;
}
CPathNode::~CPathNode(void)
{
// detach from marker when deleting
ASSERT(pn_pnmMarker!=NULL);
pn_pnmMarker->m_ppnNode = NULL;
}
// get name of this node
const CTString &CPathNode::GetName(void)
{
#include "../StdH/StdH.h"
#include "Entities/Common/PathFinding.h"
#include "Entities/NavigationMarker.h"
#define PRINTOUT(_dummy)
//#define PRINTOUT(something) something
// open and closed lists of nodes
static CListHead _lhOpen;
static CListHead _lhClosed;
FLOAT NodeDistance(CPathNode *ppn0, CPathNode *ppn1)
{
return (
ppn0->pn_pnmMarker->GetPlacement().pl_PositionVector -
ppn1->pn_pnmMarker->GetPlacement().pl_PositionVector).Length();
}
CPathNode::CPathNode(class CNavigationMarker *penMarker): pn_pnmMarker(penMarker), pn_ppnParent(NULL), pn_fG(0.0f), pn_fH(0.0f), pn_fF(0.0f){}
CPathNode::~CPathNode(void)
{
// detach from marker when deleting
ASSERT(pn_pnmMarker!=NULL);
pn_pnmMarker->m_ppnNode = NULL;
}
// get name of this node
const CTString &CPathNode::GetName(void)
{
ASSERT(this!=NULL);
static CTString strNone="<none>";
if (pn_pnmMarker==NULL) {
return strNone;
} else {
return pn_pnmMarker->GetName();
}
}
// get link with given index or null if no more (for iteration along the graph)
CPathNode *CPathNode::GetLink(INDEX i)
{
ASSERT(this!=NULL);
if (pn_pnmMarker==NULL) {
ASSERT(FALSE);
return NULL;
}
CNavigationMarker *pnm = pn_pnmMarker->GetLink(i);
if (pnm==NULL) {
return NULL;
}
return pnm->GetPathNode();
}
// add given node to open list, sorting best first
static void SortIntoOpenList(CPathNode *ppnLink)
{
// start at head of the open list
LISTITER(CPathNode, pn_lnInOpen) itpn(_lhOpen);
// while the given node is further than the one in list
while(ppnLink->pn_fF>itpn->pn_fF && !itpn.IsPastEnd()) {
// move to next node
itpn.MoveToNext();
}
// if past the end of list
if (itpn.IsPastEnd()) {
// add to the end of list
_lhOpen.AddTail(ppnLink->pn_lnInOpen);
// if not past end of list
} else {
// add before current node
itpn.InsertBeforeCurrent(ppnLink->pn_lnInOpen);
}
}
// find shortest path from one marker to another
static BOOL FindPath(CNavigationMarker *pnmSrc, CNavigationMarker *pnmDst)
{
ASSERT(pnmSrc!=pnmDst);
CPathNode *ppnSrc = pnmSrc->GetPathNode();
CPathNode *ppnDst = pnmDst->GetPathNode();
PRINTOUT(CPrintF("--------------------\n"));
PRINTOUT(CPrintF("FindPath(%s, %s)\n", ppnSrc->GetName(), ppnDst->GetName()));
// start with empty open and closed lists
ASSERT(_lhOpen.IsEmpty());
ASSERT(_lhClosed.IsEmpty());
// add the start node to open list
ppnSrc->pn_fG = 0.0f;
ppnSrc->pn_fH = NodeDistance(ppnSrc, ppnDst);
ppnSrc->pn_fF = ppnSrc->pn_fG +ppnSrc->pn_fH;
_lhOpen.AddTail(ppnSrc->pn_lnInOpen);
PRINTOUT(CPrintF("StartState: %s\n", ppnSrc->GetName()));
// while the open list is not empty
while (!_lhOpen.IsEmpty()) {
// get the first node from open list (that is, the one with lowest F)
CPathNode *ppnNode = LIST_HEAD(_lhOpen, CPathNode, pn_lnInOpen);
ppnNode->pn_lnInOpen.Remove();
_lhClosed.AddTail(ppnNode->pn_lnInClosed);
PRINTOUT(CPrintF("Node: %s - moved from OPEN to CLOSED\n", ppnNode->GetName()));
// if this is the goal
if (ppnNode==ppnDst) {
PRINTOUT(CPrintF("PATH FOUND!\n"));
// the path is found
return TRUE;
}
// for each link of current node
CPathNode *ppnLink = NULL;
for(INDEX i=0; (ppnLink=ppnNode->GetLink(i))!=NULL; i++) {
PRINTOUT(CPrintF(" Link %d: %s\n", i, ppnLink->GetName()));
// get cost to get to this node if coming from current node
FLOAT fNewG = ppnLink->pn_fG+NodeDistance(ppnNode, ppnLink);
// if a shorter path already exists
if ((ppnLink->pn_lnInOpen.IsLinked() || ppnLink->pn_lnInClosed.IsLinked()) && fNewG>=ppnLink->pn_fG) {
PRINTOUT(CPrintF(" shorter path exists through: %s\n", ppnLink->pn_ppnParent->GetName()));
// skip this link
continue;
}
// remember this path
ppnLink->pn_ppnParent = ppnNode;
ppnLink->pn_fG = fNewG;
ppnLink->pn_fH = NodeDistance(ppnLink, ppnDst);
ppnLink->pn_fF = ppnLink->pn_fG + ppnLink->pn_fH;
// remove from closed list, if in it
if (ppnLink->pn_lnInClosed.IsLinked()) {
ppnLink->pn_lnInClosed.Remove();
PRINTOUT(CPrintF(" %s removed from CLOSED\n", ppnLink->GetName()));
}
// add to open if not in it
if (!ppnLink->pn_lnInOpen.IsLinked()) {
SortIntoOpenList(ppnLink);
PRINTOUT(CPrintF(" %s added to OPEN\n", ppnLink->GetName()));
}
}
}
// if we get here, there is no path
PRINTOUT(CPrintF("PATH NOT FOUND!\n"));
return FALSE;
}
// clear all temporary structures used for path finding
static void ClearPath(CEntity *penThis)
{
{FORDELETELIST(CPathNode, pn_lnInOpen, _lhOpen, itpn) {
delete &itpn.Current();
}}
{FORDELETELIST(CPathNode, pn_lnInClosed, _lhClosed, itpn) {
delete &itpn.Current();
}}
#ifndef NDEBUG
// for each navigation marker in the world
{FOREACHINDYNAMICCONTAINER(penThis->en_pwoWorld->wo_cenEntities, CEntity, iten) {
if (!IsOfClass(iten, "NavigationMarker")) {
continue;
}
CNavigationMarker &nm = (CNavigationMarker&)*iten;
ASSERT(nm.m_ppnNode==NULL);
}}
#endif
}
// find marker closest to a given position
static void FindClosestMarker(
CEntity *penThis, const FLOAT3D &vSrc, CEntity *&penMarker, FLOAT3D &vPath)
{
CNavigationMarker *pnmMin = NULL;
FLOAT fMinDist = UpperLimit(0.0f);
// for each sector this entity is in
{FOREACHSRCOFDST(penThis->en_rdSectors, CBrushSector, bsc_rsEntities, pbsc)
// for each navigation marker in that sector
{FOREACHDSTOFSRC(pbsc->bsc_rsEntities, CEntity, en_rdSectors, pen)
if (!IsOfClass(pen, "NavigationMarker")) {
continue;
}
CNavigationMarker &nm = (CNavigationMarker&)*pen;
// get distance from source
FLOAT fDist = (vSrc-nm.GetPlacement().pl_PositionVector).Length();
// if closer than best found
if(fDist<fMinDist) {
// remember it
fMinDist = fDist;
pnmMin = &nm;
}
ENDFOR}
ENDFOR}
// if none found
if (pnmMin==NULL) {
// fail
vPath = vSrc;
penMarker = NULL;
return;
}
// return position
vPath = pnmMin->GetPlacement().pl_PositionVector;
penMarker = pnmMin;
}
// find first marker for path navigation
void PATH_FindFirstMarker(CEntity *penThis, const FLOAT3D &vSrc, const FLOAT3D &vDst, CEntity *&penMarker, FLOAT3D &vPath)
{
// find closest markers to source and destination positions
CNavigationMarker *pnmSrc;
FLOAT3D vSrcPath;
FindClosestMarker(penThis, vSrc, (CEntity*&)pnmSrc, vSrcPath);
CNavigationMarker *pnmDst;
FLOAT3D vDstPath;
FindClosestMarker(penThis, vDst, (CEntity*&)pnmDst, vDstPath);
// if at least one is not found, or if they are same
if (pnmSrc==NULL || pnmDst==NULL || pnmSrc==pnmDst) {
// fail
penMarker = NULL;
vPath = vSrc;
return;
}
// go to the source marker position
vPath = vSrcPath;
penMarker = pnmSrc;
}
// find next marker for path navigation
void PATH_FindNextMarker(CEntity *penThis, const FLOAT3D &vSrc, const FLOAT3D &vDst, CEntity *&penMarker, FLOAT3D &vPath)
{
// find closest marker to destination position
CNavigationMarker *pnmDst;
FLOAT3D vDstPath;
FindClosestMarker(penThis, vDst, (CEntity*&)pnmDst, vDstPath);
// if at not found, or if same as current
if (pnmDst==NULL || penMarker==pnmDst) {
// fail
penMarker = NULL;
vPath = vSrc;
return;
}
// try to find shortest path to the destination
BOOL bFound = FindPath((CNavigationMarker*)penMarker, pnmDst);
// if not found
if (!bFound) {
// just clean up and fail
delete pnmDst->GetPathNode();
ClearPath(penThis);
penMarker = NULL;
vPath = vSrc;
return;
}
// find the first marker position after current
CPathNode *ppn = pnmDst->GetPathNode();
while (ppn->pn_ppnParent!=NULL && ppn->pn_ppnParent->pn_pnmMarker!=penMarker) {
ppn = ppn->pn_ppnParent;
}
penMarker = ppn->pn_pnmMarker;
// go there
vPath = penMarker->GetPlacement().pl_PositionVector;
// clean up
ClearPath(penThis);
}
static CTString strNone="<none>";
if (pn_pnmMarker==NULL) {
return strNone;
} else {
return pn_pnmMarker->GetName();
}
}
// get link with given index or null if no more (for iteration along the graph)
CPathNode *CPathNode::GetLink(INDEX i)
{
ASSERT(this!=NULL);
if (pn_pnmMarker==NULL) {
ASSERT(FALSE);
return NULL;
}
CNavigationMarker *pnm = pn_pnmMarker->GetLink(i);
if (pnm==NULL) {
return NULL;
}
return pnm->GetPathNode();
}
// add given node to open list, sorting best first
static void SortIntoOpenList(CPathNode *ppnLink)
{
// start at head of the open list
LISTITER(CPathNode, pn_lnInOpen) itpn(_lhOpen);
// while the given node is further than the one in list
while(ppnLink->pn_fF>itpn->pn_fF && !itpn.IsPastEnd()) {
// move to next node
itpn.MoveToNext();
}
// if past the end of list
if (itpn.IsPastEnd()) {
// add to the end of list
_lhOpen.AddTail(ppnLink->pn_lnInOpen);
// if not past end of list
} else {
// add before current node
itpn.InsertBeforeCurrent(ppnLink->pn_lnInOpen);
}
}
// find shortest path from one marker to another
static BOOL FindPath(CNavigationMarker *pnmSrc, CNavigationMarker *pnmDst)
{
ASSERT(pnmSrc!=pnmDst);
CPathNode *ppnSrc = pnmSrc->GetPathNode();
CPathNode *ppnDst = pnmDst->GetPathNode();
PRINTOUT(CPrintF("--------------------\n"));
PRINTOUT(CPrintF("FindPath(%s, %s)\n", ppnSrc->GetName(), ppnDst->GetName()));
// start with empty open and closed lists
ASSERT(_lhOpen.IsEmpty());
ASSERT(_lhClosed.IsEmpty());
// add the start node to open list
ppnSrc->pn_fG = 0.0f;
ppnSrc->pn_fH = NodeDistance(ppnSrc, ppnDst);
ppnSrc->pn_fF = ppnSrc->pn_fG +ppnSrc->pn_fH;
_lhOpen.AddTail(ppnSrc->pn_lnInOpen);
PRINTOUT(CPrintF("StartState: %s\n", ppnSrc->GetName()));
// while the open list is not empty
while (!_lhOpen.IsEmpty()) {
// get the first node from open list (that is, the one with lowest F)
CPathNode *ppnNode = LIST_HEAD(_lhOpen, CPathNode, pn_lnInOpen);
ppnNode->pn_lnInOpen.Remove();
_lhClosed.AddTail(ppnNode->pn_lnInClosed);
PRINTOUT(CPrintF("Node: %s - moved from OPEN to CLOSED\n", ppnNode->GetName()));
// if this is the goal
if (ppnNode==ppnDst) {
PRINTOUT(CPrintF("PATH FOUND!\n"));
// the path is found
return TRUE;
}
// for each link of current node
CPathNode *ppnLink = NULL;
for(INDEX i=0; (ppnLink=ppnNode->GetLink(i))!=NULL; i++) {
PRINTOUT(CPrintF(" Link %d: %s\n", i, ppnLink->GetName()));
// get cost to get to this node if coming from current node
FLOAT fNewG = ppnLink->pn_fG+NodeDistance(ppnNode, ppnLink);
// if a shorter path already exists
if ((ppnLink->pn_lnInOpen.IsLinked() || ppnLink->pn_lnInClosed.IsLinked()) && fNewG>=ppnLink->pn_fG) {
PRINTOUT(CPrintF(" shorter path exists through: %s\n", ppnLink->pn_ppnParent->GetName()));
// skip this link
continue;
}
// remember this path
ppnLink->pn_ppnParent = ppnNode;
ppnLink->pn_fG = fNewG;
ppnLink->pn_fH = NodeDistance(ppnLink, ppnDst);
ppnLink->pn_fF = ppnLink->pn_fG + ppnLink->pn_fH;
// remove from closed list, if in it
if (ppnLink->pn_lnInClosed.IsLinked()) {
ppnLink->pn_lnInClosed.Remove();
PRINTOUT(CPrintF(" %s removed from CLOSED\n", ppnLink->GetName()));
}
// add to open if not in it
if (!ppnLink->pn_lnInOpen.IsLinked()) {
SortIntoOpenList(ppnLink);
PRINTOUT(CPrintF(" %s added to OPEN\n", ppnLink->GetName()));
}
}
}
// if we get here, there is no path
PRINTOUT(CPrintF("PATH NOT FOUND!\n"));
return FALSE;
}
// clear all temporary structures used for path finding
static void ClearPath(CEntity *penThis)
{
{FORDELETELIST(CPathNode, pn_lnInOpen, _lhOpen, itpn) {
delete &itpn.Current();
}}
{FORDELETELIST(CPathNode, pn_lnInClosed, _lhClosed, itpn) {
delete &itpn.Current();
}}
#ifndef NDEBUG
// for each navigation marker in the world
{FOREACHINDYNAMICCONTAINER(penThis->en_pwoWorld->wo_cenEntities, CEntity, iten) {
if (!IsOfClass(iten, "NavigationMarker")) {
continue;
}
CNavigationMarker &nm = (CNavigationMarker&)*iten;
ASSERT(nm.m_ppnNode==NULL);
}}
#endif
}
// find marker closest to a given position
static void FindClosestMarker(
CEntity *penThis, const FLOAT3D &vSrc, CEntity *&penMarker, FLOAT3D &vPath)
{
CNavigationMarker *pnmMin = NULL;
FLOAT fMinDist = UpperLimit(0.0f);
// for each sector this entity is in
{FOREACHSRCOFDST(penThis->en_rdSectors, CBrushSector, bsc_rsEntities, pbsc)
// for each navigation marker in that sector
{FOREACHDSTOFSRC(pbsc->bsc_rsEntities, CEntity, en_rdSectors, pen)
if (!IsOfClass(pen, "NavigationMarker")) {
continue;
}
CNavigationMarker &nm = (CNavigationMarker&)*pen;
// get distance from source
FLOAT fDist = (vSrc-nm.GetPlacement().pl_PositionVector).Length();
// if closer than best found
if(fDist<fMinDist) {
// remember it
fMinDist = fDist;
pnmMin = &nm;
}
ENDFOR}
ENDFOR}
// if none found
if (pnmMin==NULL) {
// fail
vPath = vSrc;
penMarker = NULL;
return;
}
// return position
vPath = pnmMin->GetPlacement().pl_PositionVector;
penMarker = pnmMin;
}
// find first marker for path navigation
void PATH_FindFirstMarker(CEntity *penThis, const FLOAT3D &vSrc, const FLOAT3D &vDst, CEntity *&penMarker, FLOAT3D &vPath)
{
// find closest markers to source and destination positions
CNavigationMarker *pnmSrc;
FLOAT3D vSrcPath;
FindClosestMarker(penThis, vSrc, (CEntity*&)pnmSrc, vSrcPath);
CNavigationMarker *pnmDst;
FLOAT3D vDstPath;
FindClosestMarker(penThis, vDst, (CEntity*&)pnmDst, vDstPath);
// if at least one is not found, or if they are same
if (pnmSrc==NULL || pnmDst==NULL || pnmSrc==pnmDst) {
// fail
penMarker = NULL;
vPath = vSrc;
return;
}
// go to the source marker position
vPath = vSrcPath;
penMarker = pnmSrc;
}
// find next marker for path navigation
void PATH_FindNextMarker(CEntity *penThis, const FLOAT3D &vSrc, const FLOAT3D &vDst, CEntity *&penMarker, FLOAT3D &vPath)
{
// find closest marker to destination position
CNavigationMarker *pnmDst;
FLOAT3D vDstPath;
FindClosestMarker(penThis, vDst, (CEntity*&)pnmDst, vDstPath);
// if at not found, or if same as current
if (pnmDst==NULL || penMarker==pnmDst) {
// fail
penMarker = NULL;
vPath = vSrc;
return;
}
// try to find shortest path to the destination
BOOL bFound = FindPath((CNavigationMarker*)penMarker, pnmDst);
// if not found
if (!bFound) {
// just clean up and fail
delete pnmDst->GetPathNode();
ClearPath(penThis);
penMarker = NULL;
vPath = vSrc;
return;
}
// find the first marker position after current
CPathNode *ppn = pnmDst->GetPathNode();
while (ppn->pn_ppnParent!=NULL && ppn->pn_ppnParent->pn_pnmMarker!=penMarker) {
ppn = ppn->pn_ppnParent;
}
penMarker = ppn->pn_pnmMarker;
// go there
vPath = penMarker->GetPlacement().pl_PositionVector;
// clean up
ClearPath(penThis);
}

View File

@ -156,14 +156,7 @@ struct DECL_DLL PlayerStats {
INDEX ps_iSecrets;
TIME ps_tmTime;
PlayerStats(void)
{
ps_iScore = 0;
ps_iKills = 0;
ps_iDeaths = 0;
ps_iSecrets = 0;
ps_tmTime = 0.0f;
}
PlayerStats(void): ps_iScore(0), ps_iKills(0), ps_iDeaths(0), ps_iSecrets(0), ps_tmTime(0.0f){}
};
static inline CTStream &operator>>(CTStream &strm, PlayerStats &ps)

View File

@ -1180,7 +1180,7 @@ extern void DrawHUD( const CPlayer *penPlayerCurrent, CDrawPort *pdpCurrent, BOO
if( iHealth>25) colHealth = _colHUD;
if( iArmor >25) colArmor = _colHUD;
// eventually print it out
if( hud_iShowPlayers==1 || (hud_iShowPlayers==-1 && !bSinglePlay)) {
if( hud_iShowPlayers==1 || hud_iShowPlayers==-1) {
// printout location and info aren't the same for deathmatch and coop play
const FLOAT fCharWidth = (PIX)((_pfdDisplayFont->GetWidth()-2) *fTextScale);
if( bCooperative) {

View File

@ -2284,9 +2284,8 @@ void Particles_MetalParts( CEntity *pen, FLOAT tmStarted, FLOATaabbox3D boxOwner
UBYTE ubRndH = UBYTE( 180+afStarsPositions[ int(iPart+tmStarted*10)%CT_MAX_PARTICLES_TABLE][0]*16);
UBYTE ubRndS = UBYTE( 12+(afStarsPositions[ int(iPart+tmStarted*10)%CT_MAX_PARTICLES_TABLE][1])*8);
UBYTE ubRndV = UBYTE( 192+(afStarsPositions[ int(iPart+tmStarted*10)%CT_MAX_PARTICLES_TABLE][2])*64);
//ubRndS = 0;
ubRndV = 255;
UBYTE ubRndV = 255;
COLOR col = HSVToColor(ubRndH, ubRndS, ubRndV)|UBYTE(255.0f*fRatio);
FLOAT fRotation = fT*400.0f*afStarsPositions[iRnd][0];
FLOAT fSize = fBoxSize*0.005f+0.125f+afStarsPositions[iRnd][1]*0.025f;
@ -4502,10 +4501,8 @@ void Particles_BloodSpray(enum SprayParticlesType sptType, FLOAT3D vSource, FLOA
case SPT_ELECTRICITY_SPARKS:
{
UBYTE ubRndH = UBYTE( 180+afStarsPositions[ int(iSpray+tmStarted*10)%CT_MAX_PARTICLES_TABLE][0]*16);
UBYTE ubRndS = UBYTE( 32+(afStarsPositions[ int(iSpray+tmStarted*10)%CT_MAX_PARTICLES_TABLE][1]+0.5)*16);
UBYTE ubRndV = UBYTE( 192+(afStarsPositions[ int(iSpray+tmStarted*10)%CT_MAX_PARTICLES_TABLE][2])*64);
ubRndS = 0;
ubRndV = 255;
UBYTE ubRndS = 0;
UBYTE ubRndV = 255;
col = HSVToColor(ubRndH, ubRndS, ubRndV)|ubAlpha;
fSize/=32.0f;
fRotation = fT*200.0f;

View File

@ -188,8 +188,7 @@ public:
~CEnableUserBreak();
};
CEnableUserBreak::CEnableUserBreak() {
bOld = _bUserBreakEnabled;
CEnableUserBreak::CEnableUserBreak(): bOld(_bUserBreakEnabled){
_bUserBreakEnabled = TRUE;
}
CEnableUserBreak::~CEnableUserBreak() {

View File

@ -139,10 +139,8 @@ public:
CPlayerSource *lp_pplsPlayerSource;
UBYTE lp_ubPlayerControlsState[2048]; // current state of player controls that are local to the player
// Construction
CLocalPlayer( void)
CLocalPlayer(void): lp_pplsPlayerSource(NULL), lp_bActive(FALSE)
{
lp_pplsPlayerSource = NULL;
lp_bActive = FALSE;
memset(lp_ubPlayerControlsState, 0, sizeof(lp_ubPlayerControlsState)) ;
};
};