Упоминания Half-Life 3 в утекших исходниках Counter-Strike: Global Offensive
 

0 Пользователей и 1 Гость просматривают эту тему.

  • Citizen
  • *
  • Сообщений: 31
    • Просмотр профиля
Вот что я накопал:

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:

Spoiler
[свернуть]

Они реализуют заморозку и разморозку 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.cpp

CAI_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:

Spoiler
[свернуть]

Данный код отключен даже при если макрос HL2_EP3 определён.
Данный код отмечает сферу, в которой находится пламя, как опасность для NPC,
и собирает связи между info_node'ами, которые попадают в пламя, в список.
Список не используется данным классом.

6. game/server/player.cpp

Строки 6298-6360 (реализация impulse 101):

Spoiler
[свернуть]
      
Согласно данному коду, в отличии от 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):

Spoiler
[свернуть]
      
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, что я нашёл в исходниках.

Cvoxalury

  • *
  • Сообщений: 314
    • Просмотр профиля
Понимаю что отвечаю поздно, но спасибо за тему и за подробную документацию.

Cvoxalury

  • *
  • Сообщений: 314
    • Просмотр профиля
В server\player.cpp есть ещё один фрагмент.
Строки 8620-8640, функция ModifyOrAppendPlayerCriteria( AI_CriteriaSet& set ).

Spoiler
[свернуть]

Это тот участок кода, который подцепляет к энтити игрока респонз-контексты, чтобы персонажи могли динамически реагировать на уровень здоровья игрока (что делает Аликс в Эп1 и 2), на используемое оружие и др.

С процитированным кодом для Эп3, видимо, респонз был нужен для реакций на что-либо, что в данный момент держит руками/гравипушкой, причем респонз мог бы быть разным в зависимости от имени энтити, класса и от конкретной модели.