Вот что я накопал:
1. В
game/server/ai_basenpc.cppСтрока 83-85:
#if defined( HL2_EP3 ) || defined( INFESTED_DLL )
#include "physics_prop_statue.h"
#endif
Однако ниже, в строке 112:
#include "physics_prop_statue.h"
Это значит, что заголовочный файл включается независимо от того, компилируется ли HL2 EP3 или Alien Swarm (INFESTED_DLL), или нет
Содержимое этих заголовочных файлов используется в следующих функциях:
Строка 11445-11494:
Они реализуют заморозку и разморозку NPC.
2. В
game/server/ai_hint.hСтроки 114-127:
// Ep3 hints
#ifdef HL2_EP3
HINT_EP3_BLOB_SHAKE_POSITION = 1200,
HINT_EP3_BLOB_FIRE_COVER_POSITION = 1201,
HINT_EP3_BLOB_BRAIN_COVER_POSITION = 1202,
HINT_EP3_BLOB_BRAIN_REGENERATE_POSITION = 1203,
HINT_EP3_BLOB_SPIT_POSITION = 1204,
HINT_EP3_BLOB_SPAWN_REGENERATOR_POSITION = 1205,
#endif
#ifdef PORTAL2
// Aperture hints
HINT_PORTAL2_NEST = 1200, // FIXME: Stomping on EP3
#endif // PORTAL2
Однако, в game/server/ai_hint.cpp отсуствует описание для hint-ов HINT_EP3_..., но присутсвует - для HINT_PORTAL2_NEST
Строки 1668-1670:
#ifdef PORTAL2
{ HINT_PORTAL2_NEST, "Portal 2: Nest" },
#endif // PORTAL2
3. В
game/server/ai_trackpather.cppCAI_TrackPather - отдельный класс, реализующий (судя по коду) NPC, двужущегося не по info_node'ам, а по path_track'ам.
В Source 2013 на его основе реализуются Combine Dropship, Combine Gunship и Hunter-Chopper
Участки кода находятся в реализации функции void CAI_TrackPather::SelectNewDestTarget()
Строки 940-944:
#ifdef HL2_EP3
Vector targetPos;
bool bTargetPosValid = GetTrackPatherTarget( &targetPos );
float flAvoidSq = m_flAvoidDistance * m_flAvoidDistance;
#endif
Строки 993-1006:
#ifdef HL2_EP3
if ( bTargetPosValid && ShouldUseAvoidanceWhenTracking() )
{
Vector posTrackPt = pNextTrack->GetAbsOrigin();
if ( ( posTrackPt - targetPos ).Length2DSqr() < flAvoidSq )
{
// can't go there
break;
}
}
m_pDestPathTarget = pNextTrack;
#else
m_pDestPathTarget = pNextTrack;
#endif
Функция ShouldUseAvoidanceWhenTracking определена как
virtual bool ShouldUseAvoidanceWhenTracking() { return false; }
и отсуствует в версии Source 2013.
Судя по всему, данный код реализует предотвращение "залетания" NPC внутрь цели или приближения к цели на слишком малое расстояние.
4.
game/server/baseanimating.cppУчастки кода слишком длинные, поэтому они не преведены (ищите по HL2_EP3).
Если макрос HL2_EP3 определён, то отключаются инпуты IgniteNumHitboxFires и IgniteHitboxFireScale
(остаётся Ignite, который делает то же самое).
Если определён макрос HL2_EP3 или INFESTED_DLL, включается реализация функций
void CBaseAnimating::Thaw( float flThawAmount )
и
void CBaseAnimating::Freeze( float flFreezeAmount, CBaseEntity *pFreezer, Ray_t *pFreezeRay ),
отвечающие за заморозку и оттаивание игровых объектов.
Обратите внимание, что функция заморозки использует луч для определения частей объекта, которые будут заморожены.
5.
game/server/EntityFlame.cppВ данном файле реализуется игровой объект пламени.
Строки 127-130:
#ifdef HL2_EP3
m_iDangerSound = CSoundEnt::InsertSound( SOUND_DANGER | SOUND_CONTEXT_FROM_FIRE | SOUND_CONTEXT_FOLLOW_OWNER,
GetAbsOrigin(), m_flSize * 2.0f, FLT_MAX, this );
#endif
Создаётся источник "звука" для ИИ (запахи в Source реализуются тоже "звуками"), описывающий пламя как опасность, исходящую от огня.
Строки 134-171:
Данный код отключен даже при если макрос HL2_EP3 определён.
Данный код отмечает сферу, в которой находится пламя, как опасность для NPC,
и собирает связи между info_node'ами, которые попадают в пламя, в список.
Список не используется данным классом.
6. game/server/player.cpp
Строки 6298-6360 (реализация impulse 101):
Согласно данному коду, в отличии от HL2, В HL2 Ep3:
должен был отсуствовать феропод муравьиных львов (weapon_bugbait)
должно было пристутсвовать такое оружие, как
- weapon_icegun (некая замораживающая пушка, код с заморозкой NPC вероятно относится к ней)
- weapon_weaponizer (неизвестно что)
- weapon_teleport (некий ручной телепортатор или аналог телепортирующей пушки из Half-Life: Opposing Force)
- weapon_pipebomblauncher (какой-то ручной гранатомёт?)
- weapon_flechettegun (возможно, должно стрелять дротикам Охотника)
- weapon_flamethrower (огнемёт, вероятно, использует боеприпасы Fuel)
- weapon_egon (глюонная пушка)
- weapon_gauss (гаусс-пушка из HL1)
Обратите также внимание на код для Portal 2, который выдавал игроку weapon_camera и weapon_placement (наверное, остатки от F-STOP)
7.
game/server/triggers.cppСтроки 2581-2607 (реализация trigger_push):
Valve Developer Community про SF_TRIGGER_PUSH_USE_MASS пишет:
[4096] : Correctly account for object mass (trigger_push used to assume 100Kg) and multiple component physics objects (car, blob...) (in all games since <Alien Swarm>)
8.
game/shared/gamemovement.cppСтроки 20-22:
#if defined(HL2_EP3) && !defined(CLIENT_DLL)
#include "ep3/weapon_icegun.h"
#endif
Строки 4228-4236 (void CGameMovement::CategorizePosition( void )):
// Was on ground, but now suddenly am not. If we hit a steep plane, we are not on ground
float flStandableZ = 0.7;
#if defined(HL2_EP3) && !defined(CLIENT_DLL)
if ( Icegun_IsPlayerIceSurfing() )
{
flStandableZ = 0;
}
#endif
Данный код делает так, чтобы игрок скользил даже на плоской поверхности (как он скользит по склонам), если Icegun_IsPlayerIceSurfing() возвращает true.
9.
particles/builtin_particle_render_ops.cppИмеется комментарий к рендереру частиц render_blobs:
// Enable blobulator for EP3
Это - всё, связанное с Half-Life 3, что я нашёл в исходниках.