mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2024-12-27 23:25:41 +03:00
Cleanup code
Fixed a bug after killing czbot by headshot, angles turn at 180 degrees. Fixed some bugs with mp_nadedrops
This commit is contained in:
parent
9dcab4bd49
commit
0eed08c133
@ -1,6 +1,6 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
// BModelOrigin - calculates origin of a bmodel from absmin/size because all bmodel origins are 0 0 0
|
||||
// Calculates origin of a bmodel from absmin/size because all bmodel origins are 0 0 0
|
||||
Vector VecBModelOrigin(entvars_t *pevBModel)
|
||||
{
|
||||
return pevBModel->absmin + (pevBModel->size * 0.5f);
|
||||
@ -477,7 +477,7 @@ void CFuncRotating::Precache()
|
||||
}
|
||||
}
|
||||
|
||||
// Touch - will hurt others based on how fast the brush is spinning
|
||||
// Will hurt others based on how fast the brush is spinning
|
||||
void CFuncRotating::HurtTouch(CBaseEntity *pOther)
|
||||
{
|
||||
entvars_t *pevOther = pOther->pev;
|
||||
@ -494,7 +494,7 @@ void CFuncRotating::HurtTouch(CBaseEntity *pOther)
|
||||
pevOther->velocity = (pevOther->origin - VecBModelOrigin(pev)).Normalize() * pev->dmg;
|
||||
}
|
||||
|
||||
// RampPitchVol - ramp pitch and volume up to final values, based on difference
|
||||
// Ramp pitch and volume up to final values, based on difference
|
||||
// between how fast we're going vs how fast we plan to go
|
||||
void CFuncRotating::RampPitchVol(BOOL fUp)
|
||||
{
|
||||
@ -540,7 +540,7 @@ void CFuncRotating::RampPitchVol(BOOL fUp)
|
||||
EMIT_SOUND_DYN(ENT(pev), CHAN_STATIC, (char *)STRING(pev->noiseRunning), fvol, m_flAttenuation, (SND_CHANGE_PITCH | SND_CHANGE_VOL), pitch);
|
||||
}
|
||||
|
||||
// SpinUp - accelerates a non-moving func_rotating up to it's speed
|
||||
// Accelerates a non-moving func_rotating up to it's speed
|
||||
void CFuncRotating::SpinUp()
|
||||
{
|
||||
// rotational velocity
|
||||
@ -616,7 +616,7 @@ void CFuncRotating::Rotate()
|
||||
pev->nextthink = pev->ltime + 10;
|
||||
}
|
||||
|
||||
// Rotating Use - when a rotating brush is triggered
|
||||
// When a rotating brush is triggered
|
||||
void CFuncRotating::RotatingUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
|
||||
{
|
||||
// is this a brush that should accelerate and decelerate when turned on/off (fan)?
|
||||
@ -662,7 +662,7 @@ void CFuncRotating::RotatingUse(CBaseEntity *pActivator, CBaseEntity *pCaller, U
|
||||
}
|
||||
}
|
||||
|
||||
// RotatingBlocked - An entity has blocked the brush
|
||||
// An entity has blocked the brush
|
||||
void CFuncRotating::Blocked(CBaseEntity *pOther)
|
||||
{
|
||||
pOther->TakeDamage(pev, pev, pev->dmg, DMG_CRUSH);
|
||||
|
@ -1643,6 +1643,15 @@ public:
|
||||
cost += crouchPenalty * dist;
|
||||
}
|
||||
|
||||
// if this is a "walk" area, add penalty
|
||||
if (area->GetAttributes() & NAV_WALK)
|
||||
{
|
||||
// these areas are kinda slow to move through
|
||||
float_precision walkPenalty = (m_route == FASTEST_ROUTE) ? 2.5f : 1.5f;
|
||||
|
||||
cost += walkPenalty * dist;
|
||||
}
|
||||
|
||||
// if this is a "jump" area, add penalty
|
||||
if (area->GetAttributes() & NAV_JUMP)
|
||||
{
|
||||
|
@ -270,6 +270,7 @@ void CCSBotManager::AddServerCommands()
|
||||
AddServerCommand("bot_nav_crouch");
|
||||
AddServerCommand("bot_nav_jump");
|
||||
AddServerCommand("bot_nav_precise");
|
||||
AddServerCommand("bot_nav_walk");
|
||||
AddServerCommand("bot_nav_no_jump");
|
||||
AddServerCommand("bot_nav_analyze");
|
||||
AddServerCommand("bot_nav_strip");
|
||||
@ -525,6 +526,10 @@ void CCSBotManager::ServerCommand(const char *pcmd)
|
||||
{
|
||||
m_editCmd = EDIT_ATTRIB_PRECISE;
|
||||
}
|
||||
else if (FStrEq(pcmd, "bot_nav_walk"))
|
||||
{
|
||||
m_editCmd = EDIT_ATTRIB_WALK;
|
||||
}
|
||||
else if (FStrEq(pcmd, "bot_nav_no_jump"))
|
||||
{
|
||||
m_editCmd = EDIT_ATTRIB_NO_JUMP;
|
||||
|
@ -1352,9 +1352,10 @@ CCSBot::PathResult CCSBot::UpdatePathMovement(bool allowSpeedChange)
|
||||
SetPathIndex(newIndex);
|
||||
}
|
||||
|
||||
// Crouching
|
||||
if (!IsUsingLadder())
|
||||
{
|
||||
// Crouching
|
||||
|
||||
// if we are approaching a crouch area, crouch
|
||||
// if there are no crouch areas coming up, stand
|
||||
const float crouchRange = 50.0f;
|
||||
@ -1388,6 +1389,29 @@ CCSBot::PathResult CCSBot::UpdatePathMovement(bool allowSpeedChange)
|
||||
StandUp();
|
||||
}
|
||||
// end crouching logic
|
||||
|
||||
// Walking
|
||||
bool didWalk = false;
|
||||
for (int i = prevIndex; i < m_pathLength; ++i)
|
||||
{
|
||||
const CNavArea *to = m_path[i].area;
|
||||
|
||||
Vector close;
|
||||
to->GetClosestPointOnArea(&pev->origin, &close);
|
||||
|
||||
if ((close - pev->origin).Make2D().IsLengthGreaterThan(crouchRange))
|
||||
break;
|
||||
|
||||
if (to->GetAttributes() & NAV_WALK)
|
||||
{
|
||||
Walk();
|
||||
didWalk = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!didWalk)
|
||||
Run();
|
||||
}
|
||||
|
||||
// compute our forward facing angle
|
||||
|
@ -146,7 +146,6 @@ void MoveToState::OnUpdate(CCSBot *me)
|
||||
me->Idle();
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -555,7 +555,6 @@ void CBreakable::TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecD
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case matUnbreakableGlass:
|
||||
{
|
||||
UTIL_Ricochet(ptr->vecEndPos, RANDOM_FLOAT(0.5, 1.5));
|
||||
|
@ -1328,9 +1328,15 @@ BOOL CFuncTrackTrain::OnControls(entvars_t *pevTest)
|
||||
local.y = -DotProduct(offset, gpGlobals->v_right);
|
||||
local.z = DotProduct(offset, gpGlobals->v_up);
|
||||
|
||||
if (local.x >= m_controlMins.x && local.y >= m_controlMins.y && local.z >= m_controlMins.z &&
|
||||
local.x <= m_controlMaxs.x && local.y <= m_controlMaxs.y && local.z <= m_controlMaxs.z)
|
||||
if (local.x >= m_controlMins.x
|
||||
&& local.y >= m_controlMins.y
|
||||
&& local.z >= m_controlMins.z
|
||||
&& local.x <= m_controlMaxs.x
|
||||
&& local.y <= m_controlMaxs.y
|
||||
&& local.z <= m_controlMaxs.z)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -1718,8 +1724,9 @@ TRAIN_CODE CFuncTrackChange::EvaluateTrain(CPathTrack *pcurrent)
|
||||
if (!pcurrent || !m_train)
|
||||
return TRAIN_SAFE;
|
||||
|
||||
if (m_train->m_ppath == pcurrent || (pcurrent->m_pprevious && m_train->m_ppath == pcurrent->m_pprevious) ||
|
||||
(pcurrent->m_pnext && m_train->m_ppath == pcurrent->m_pnext))
|
||||
if (m_train->m_ppath == pcurrent
|
||||
|| (pcurrent->m_pprevious && m_train->m_ppath == pcurrent->m_pprevious)
|
||||
|| (pcurrent->m_pnext && m_train->m_ppath == pcurrent->m_pnext))
|
||||
{
|
||||
if (m_train->pev->speed != 0)
|
||||
return TRAIN_BLOCKING;
|
||||
|
@ -1228,7 +1228,7 @@ BOOL EXT_FUNC CBasePlayer::__API_HOOK(TakeDamage)(entvars_t *pevInflictor, entva
|
||||
return bTookDamage;
|
||||
}
|
||||
|
||||
void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
void PackPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
{
|
||||
if (!pItem)
|
||||
return;
|
||||
@ -1260,7 +1260,7 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
}
|
||||
|
||||
#ifdef REGAMEDLL_ADD
|
||||
void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
void PackPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
{
|
||||
if (!pItem)
|
||||
return;
|
||||
@ -1282,16 +1282,9 @@ void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo)
|
||||
break;
|
||||
}
|
||||
|
||||
auto& ammoNades = pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()];
|
||||
if (pItem->m_flStartThrow != 0)
|
||||
{
|
||||
if (ammoNades < 2)
|
||||
if ((pPlayer->pev->button & IN_ATTACK) && pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()] <= 0) {
|
||||
return;
|
||||
|
||||
ammoNades--;
|
||||
}
|
||||
else if (pItem->m_flReleaseThrow > 0 && ammoNades < 1)
|
||||
return;
|
||||
|
||||
Vector vecAngles = pPlayer->pev->angles;
|
||||
Vector dir(Q_cos(vecAngles.y) * flOffset, Q_sin(vecAngles.y) * flOffset, 0.0f);
|
||||
@ -1367,19 +1360,19 @@ void CBasePlayer::PackDeadPlayerItems()
|
||||
else if (pPlayerItem->iItemSlot() == GRENADE_SLOT)
|
||||
{
|
||||
if (AreRunningCZero())
|
||||
packPlayerItem(this, pPlayerItem, true);
|
||||
PackPlayerItem(this, pPlayerItem, true);
|
||||
#ifdef REGAMEDLL_ADD
|
||||
else
|
||||
{
|
||||
switch ((int)nadedrops.value)
|
||||
{
|
||||
case 1:
|
||||
packPlayerNade(this, pPlayerItem, true);
|
||||
PackPlayerNade(this, pPlayerItem, true);
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
CBasePlayerItem *pNext = pPlayerItem->m_pNext;
|
||||
packPlayerNade(this, pPlayerItem, true);
|
||||
PackPlayerNade(this, pPlayerItem, true);
|
||||
pPlayerItem = pNext;
|
||||
continue;
|
||||
}
|
||||
@ -1392,7 +1385,7 @@ void CBasePlayer::PackDeadPlayerItems()
|
||||
}
|
||||
}
|
||||
|
||||
packPlayerItem(this, pBestItem, bPackAmmo);
|
||||
PackPlayerItem(this, pBestItem, bPackAmmo);
|
||||
}
|
||||
|
||||
RemoveAllItems(TRUE);
|
||||
@ -1950,6 +1943,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
if ((pev->button & IN_ATTACK) && m_rgAmmo[pHEGrenade->m_iPrimaryAmmoType])
|
||||
{
|
||||
CGrenade::ShootTimed2(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, m_iTeam, pHEGrenade->m_usCreateExplosion);
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
m_rgAmmo[m_pActiveItem->PrimaryAmmoIndex()]--;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1958,6 +1955,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
if ((pev->button & IN_ATTACK) && m_rgAmmo[((CBasePlayerWeapon *)m_pActiveItem)->m_iPrimaryAmmoType])
|
||||
{
|
||||
CGrenade::ShootTimed(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5);
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
m_rgAmmo[m_pActiveItem->PrimaryAmmoIndex()]--;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1967,6 +1968,10 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
if ((pev->button & IN_ATTACK) && m_rgAmmo[pSmoke->m_iPrimaryAmmoType])
|
||||
{
|
||||
CGrenade::ShootSmokeGrenade(pev, (pev->origin + pev->view_ofs), pev->angles, 1.5, pSmoke->m_usCreateSmoke);
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
m_rgAmmo[m_pActiveItem->PrimaryAmmoIndex()]--;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1997,7 +2002,9 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
MESSAGE_END();
|
||||
}
|
||||
else
|
||||
{
|
||||
UTIL_ScreenFade(this, Vector(0, 0, 0), 3, 3, 255, (FFADE_OUT | FFADE_STAYOUT));
|
||||
}
|
||||
|
||||
SetScoreboardAttributes();
|
||||
|
||||
@ -2056,7 +2063,12 @@ void EXT_FUNC CBasePlayer::__API_HOOK(Killed)(entvars_t *pevAttacker, int iGib)
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
pev->angles.y = UTIL_VecToAngles(pev->velocity).y;
|
||||
#else
|
||||
pev->angles.y = UTIL_VecToAngles(-pev->velocity).y;
|
||||
#endif
|
||||
|
||||
pev->v_angle.y = pev->angles.y;
|
||||
|
||||
m_iThrowDirection = THROW_NONE;
|
||||
@ -4728,6 +4740,7 @@ void EXT_FUNC CBasePlayer::__API_HOOK(PostThink)()
|
||||
// NOTE: play on item channel because we play footstep landing on body channel
|
||||
EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/bodysplat.wav", VOL_NORM, ATTN_NORM);
|
||||
}
|
||||
|
||||
#ifdef REGAMEDLL_FIXES
|
||||
if (flFallDamage >= 1.0f)
|
||||
#else
|
||||
|
@ -939,7 +939,6 @@ Vector VecVelocityForDamage(float flDamage);
|
||||
int TrainSpeed(int iSpeed, int iMax);
|
||||
const char *GetWeaponName(entvars_t *pevInflictor, entvars_t *pKiller);
|
||||
void LogAttack(CBasePlayer *pAttacker, CBasePlayer *pVictim, int teamAttack, int healthHit, int armorHit, int newHealth, int newArmor, const char *killer_weapon_name);
|
||||
void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo);
|
||||
bool CanSeeUseable(CBasePlayer *me, CBaseEntity *entity);
|
||||
void FixPlayerCrouchStuck(edict_t *pPlayer);
|
||||
BOOL IsSpawnPointValid(CBaseEntity *pPlayer, CBaseEntity *pSpot);
|
||||
|
@ -1127,8 +1127,8 @@ public:
|
||||
void EXPORT Smack();
|
||||
|
||||
void WeaponAnimation(int iAnimation);
|
||||
int Stab(int fFirst);
|
||||
int Swing(int fFirst);
|
||||
BOOL Stab(BOOL fFirst);
|
||||
BOOL Swing(BOOL fFirst);
|
||||
|
||||
public:
|
||||
bool ShieldSecondaryFire(int iUpAnim, int iDownAnim);
|
||||
|
@ -248,9 +248,9 @@ void CKnife::WeaponIdle()
|
||||
SendWeaponAnim(KNIFE_IDLE, UseDecrement() != FALSE);
|
||||
}
|
||||
|
||||
int CKnife::Swing(int fFirst)
|
||||
BOOL CKnife::Swing(BOOL fFirst)
|
||||
{
|
||||
int fDidHit = FALSE;
|
||||
BOOL fDidHit = FALSE;
|
||||
TraceResult tr;
|
||||
Vector vecSrc, vecEnd;
|
||||
|
||||
@ -422,9 +422,9 @@ int CKnife::Swing(int fFirst)
|
||||
return fDidHit;
|
||||
}
|
||||
|
||||
int CKnife::Stab(int fFirst)
|
||||
BOOL CKnife::Stab(BOOL fFirst)
|
||||
{
|
||||
int fDidHit = FALSE;
|
||||
BOOL fDidHit = FALSE;
|
||||
TraceResult tr;
|
||||
Vector vecSrc, vecEnd;
|
||||
|
||||
|
@ -69,6 +69,7 @@ enum NavAttributeType
|
||||
NAV_JUMP = 0x02, // must jump to traverse this area
|
||||
NAV_PRECISE = 0x04, // do not adjust for obstacles, just move along area
|
||||
NAV_NO_JUMP = 0x08, // inhibit discontinuity jumping
|
||||
NAV_WALK = 0x10, // must not run through this area
|
||||
};
|
||||
|
||||
enum NavDirType
|
||||
|
@ -2338,6 +2338,7 @@ void CNavArea::Draw(byte red, byte green, byte blue, int duration)
|
||||
UTIL_DrawBeamPoints(nw, se, duration, red, green, blue);
|
||||
UTIL_DrawBeamPoints(ne, sw, duration, red, green, blue);
|
||||
}
|
||||
|
||||
if (GetAttributes() & NAV_PRECISE)
|
||||
{
|
||||
float size = 8.0f;
|
||||
@ -2349,6 +2350,7 @@ void CNavArea::Draw(byte red, byte green, byte blue, int duration)
|
||||
Vector right(m_center.x + size, m_center.y, m_center.z + cv_bot_nav_zdraw.value);
|
||||
UTIL_DrawBeamPoints(left, right, duration, red, green, blue);
|
||||
}
|
||||
|
||||
if (GetAttributes() & NAV_NO_JUMP)
|
||||
{
|
||||
float size = 8.0f;
|
||||
@ -2361,6 +2363,19 @@ void CNavArea::Draw(byte red, byte green, byte blue, int duration)
|
||||
UTIL_DrawBeamPoints(down, left, duration, red, green, blue);
|
||||
UTIL_DrawBeamPoints(left, up, duration, red, green, blue);
|
||||
}
|
||||
|
||||
if (GetAttributes() & NAV_WALK)
|
||||
{
|
||||
float size = 8.0f;
|
||||
Vector up(m_center.x - size, m_center.y - size, m_center.z + cv_bot_nav_zdraw.value);
|
||||
Vector down(m_center.x + size, m_center.y + size, m_center.z + cv_bot_nav_zdraw.value);
|
||||
Vector left(m_center.x - size, m_center.y + size, m_center.z + cv_bot_nav_zdraw.value);
|
||||
Vector right(m_center.x + size, m_center.y - size, m_center.z + cv_bot_nav_zdraw.value);
|
||||
UTIL_DrawBeamPoints(up, right, duration, red, green, blue);
|
||||
UTIL_DrawBeamPoints(right, down, duration, red, green, blue);
|
||||
UTIL_DrawBeamPoints(down, left, duration, red, green, blue);
|
||||
UTIL_DrawBeamPoints(left, up, duration, red, green, blue);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw selected corner for debugging
|
||||
@ -3826,11 +3841,12 @@ void EditNavAreas(NavEditCmdType cmd)
|
||||
}
|
||||
else
|
||||
{
|
||||
Q_sprintf(attrib, "%s%s%s%s",
|
||||
Q_sprintf(attrib, "%s%s%s%s%s",
|
||||
(area->GetAttributes() & NAV_CROUCH) ? "CROUCH " : "",
|
||||
(area->GetAttributes() & NAV_JUMP) ? "JUMP " : "",
|
||||
(area->GetAttributes() & NAV_PRECISE) ? "PRECISE " : "",
|
||||
(area->GetAttributes() & NAV_NO_JUMP) ? "NO_JUMP " : "");
|
||||
(area->GetAttributes() & NAV_NO_JUMP) ? "NO_JUMP " : "",
|
||||
(area->GetAttributes() & NAV_WALK) ? "WALK " : "");
|
||||
}
|
||||
|
||||
Q_sprintf(buffer, "Area #%d %s %s\n", area->GetID(), locName, attrib);
|
||||
@ -3974,6 +3990,10 @@ void EditNavAreas(NavEditCmdType cmd)
|
||||
EMIT_SOUND_DYN(ENT(pLocalPlayer->pev), CHAN_ITEM, "buttons/bell1.wav", 1, ATTN_NORM, 0, 100);
|
||||
area->SetAttributes(area->GetAttributes() ^ NAV_PRECISE);
|
||||
break;
|
||||
case EDIT_ATTRIB_WALK:
|
||||
EMIT_SOUND_DYN(ENT(UTIL_GetLocalPlayer()->pev), CHAN_ITEM, "buttons/bell1.wav", 1, ATTN_NORM, 0, 100);
|
||||
area->SetAttributes(area->GetAttributes() ^ NAV_WALK);
|
||||
break;
|
||||
case EDIT_ATTRIB_NO_JUMP:
|
||||
EMIT_SOUND_DYN(ENT(pLocalPlayer->pev), CHAN_ITEM, "buttons/bell1.wav", 1, ATTN_NORM, 0, 100);
|
||||
area->SetAttributes(area->GetAttributes() ^ NAV_NO_JUMP);
|
||||
|
@ -50,6 +50,7 @@ enum NavEditCmdType
|
||||
EDIT_ATTRIB_CROUCH, // toggle crouch attribute on current area
|
||||
EDIT_ATTRIB_JUMP, // toggle jump attribute on current area
|
||||
EDIT_ATTRIB_PRECISE, // toggle precise attribute on current area
|
||||
EDIT_ATTRIB_WALK, // toggle walk attribute on current area
|
||||
EDIT_ATTRIB_NO_JUMP, // toggle inhibiting discontinuity jumping in current area
|
||||
EDIT_BEGIN_AREA, // begin creating a new nav area
|
||||
EDIT_END_AREA, // end creation of the new nav area
|
||||
|
@ -130,12 +130,13 @@ void CNavArea::Save(FILE *fp) const
|
||||
fprintf(fp, "v %f %f %f\n", m_extent.lo.x, m_extent.hi.y, m_swZ);
|
||||
|
||||
static int base = 1;
|
||||
fprintf(fp, "\n\ng %04dArea%s%s%s%s\n", m_id,
|
||||
fprintf(fp, "\n\ng %04dArea%s%s%s%s%s\n", m_id,
|
||||
(GetAttributes() & NAV_CROUCH) ? "CROUCH" : "", (GetAttributes() & NAV_JUMP) ? "JUMP" : "",
|
||||
(GetAttributes() & NAV_PRECISE) ? "PRECISE" : "", (GetAttributes() & NAV_NO_JUMP) ? "NO_JUMP" : "");
|
||||
(GetAttributes() & NAV_PRECISE) ? "PRECISE" : "", (GetAttributes() & NAV_NO_JUMP) ? "NO_JUMP" : "",
|
||||
(GetAttributes() & NAV_WALK) ? "NAV_WALK" : "");
|
||||
|
||||
fprintf(fp, "f %d %d %d %d\n\n", base, base + 1, base + 2, base + 3);
|
||||
base += 4;
|
||||
fprintf(fp, "f %d %d %d %d %d\n\n", base, base + 1, base + 2, base + 3, base + 4);
|
||||
base += 5;
|
||||
}
|
||||
|
||||
void CNavArea::Save(int fd, unsigned int version)
|
||||
|
Loading…
Reference in New Issue
Block a user