Статья: Два цвета крови у зомби Автор: X-8973 Дата: 06.11.2011 |
|
Наверняка все, кто когда-либо играл в Half-Life 2, замечали, что у тамошних зомби два типа крови — при попадании пули в голову (т.е. хедкраба) брызгала зеленая/желтая кровь, а при попадании в тело, то есть в труп человека — красная. По-моему, это гораздо реалистичнее и логичнее, нежели в Half-Life 1, где кровь у зомби одного цвета — желтая (как и у любого другого монстра). Разумеется, хотелось бы, чтоб в нашей модификации (или хотя бы в оригинальной игре) все было так же красиво и логично.
Сегодня мы попытаемся это реализовать.
Для осуществления задуманного нам вновь понадобится Half-Life SDK и Microsoft Visual Studio 6. Все изменения снова будут проходить только в файле zombie.cpp.
Итак, начнем. Откроем в Visual Studio файл проекта hl.dsp, который находится в <Папка SDK>\Single-Player Source\dlls\. В окне со списком файлов проекта, в разделе Source Files находим файл zombie.cpp и кликаем по нему два раза.
Открылось окно с кодом монстра. Ищем раздел подключения заголовочных файлов (он в самом начале), и добавляем туда строку
#include "weapons.h" |
Поясняю: с оружием в когтистых руках наш зомби бегать не будет. Просто в файле weapons.h описана функция, отвечающая за отрисовку крови.
Теперь спускаемся чуть ниже и в конце описания класса class CZombie : public CBaseMonster добавляем
void TraceAttack (entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType); |
Именно здесь и будет отрисовываться кровь.
Теперь ищем функцию void CZombie :: HandleAnimEvent (MonsterEvent_t *pEvent) и после нее вставляем в код следующее:
void CZombie::TraceAttack (entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { switch(ptr->iHitgroup) { case HITGROUP_CHEST://Попадание в грудь case HITGROUP_STOMACH://Живот case HITGROUP_LEFTLEG://Левая нога case HITGROUP_RIGHTLEG://Правая нога case HITGROUP_LEFTARM://Левая рука case HITGROUP_RIGHTARM://Правая рука case HITGROUP_GENERIC://Прочие группы SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_RED, flDamage * 5.0); //Брызгает красная кровь break; case HITGROUP_HEAD://Голова SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_YELLOW, flDamage * 5.0); //Брызгает желтая кровь break; } CBaseMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); } |
И наконец идем в функцию void CZombie::Spawn() и меняем там значение параметра m_bloodColor с BLOOD_COLOR_GREEN на DONT_BLEED, чтобы желтая кровь не создавалась по умолчанию.
Все! Можно компилировать проект, копировать полученную клентскую DLL в Ваш мод или в оригинальную Half-Life, запускать и наслаждаться двумя видами крови у зомби :)
Хочу поблагодарить сайт hl-lab.ru и товарища Ku2zoff'а в частности за оригинал статьи, который можно посмотреть здесь.