Наверняка каждый, кто поиграл в Half-Life2 хотел, чтобы хедкрабы спрыгивали с зомбяков и в первом Half-Life. Этот тутор призван изменить эту несправедливость. Теперь и в ваших модах Хедкрабы будут свободно спрыгивать с тела носителя. Для этого нада MS VC++, и минимальное знание синтаксиса языка и структуры исходников HL. Если все это присутствует, начнем. Собственно все изменения будут происходить только в файле zombie.cpp. Откроем его. В самом начале после: Quote ========================================================= // Monster's Anim Events Go Here //========================================================= #define ZOMBIE_AE_ATTACK_RIGHT 0x01 #define ZOMBIE_AE_ATTACK_LEFT 0x02 #define ZOMBIE_AE_ATTACK_BOTH 0x03 Напишем: Quote #define ZOMBIE_AE_CRAB1 0x04 #define ZOMBIE_AE_CRAB2 0x05 #define ZOMBIE_AE_CRAB3 0x06 Это мы объявили специальные эвенты движка. После объявим еще один эвент, его будет использовать функция spawn, чтобы хедкраб мог спрыгивать с зомбика: Quote #define ZOMBIE_CRAB "monster_headcrab" Далее в районе 56 строки, сразу после int IgnoreConditions ( void ) объявим процедуру: Quote Void SpawnCrab( void ); Далее в районе 396 строки, после функции Precache вставляем: Quote ========================================================= // Spawn Headcrab - headcrab jumps from zombie //========================================================= void CZombie :: SpawnCrab( void ) { CBaseEntity *pCrab = CBaseEntity::Create( ZOMBIE_CRAB, pev->origin, pev->angles, edict() ); pCrab->pev->spawnflags |= SF_MONSTER_FALL_TO_GROUND; } Эта функция нужна, чтобы хедкраб спрыгивал. Далее в функции HandleAnimEvents добавим (297 строка): Quote // headcrab jumps from zombie case ZOMBIE_AE_CRAB1: { ALERT( at_console, "Crab1 spawned!\n" ); pev->body = 1; // set the head to a skull SpawnCrab(); // spawn a headcrab } break; case ZOMBIE_AE_CRAB2: { ALERT( at_console, "Crab2 spawned!\n" ); pev->body = 1; // set the head to a skull SpawnCrab(); // spawn a headcrab } break; case ZOMBIE_AE_CRAB3: { ALERT( at_console, "Crab3 spawned!\n" ); pev->body = 1; // set the head to a skull SpawnCrab(); // spawn a headcrab } break; И последний штрих. В функции Precache, это 387 строка, вставим следующее: Quote UTIL_PrecacheOther( ZOMBIE_CRAB ); Теперь компилируем и наслаждаемся. Хедкраб спрыгивает, после смерти носителя. P.S. Ой, одну минуточку, вам же еще нужна специальная модель зомби, со всеми эвентами и головой без хедкраба. Ее можно скачать здесь: http://confession.ucoz.ru/zombie.rar Оригинальный код взят с http://collective.valve-erc.com/
Источник: http://confession.ucoz.ru/forum/14-23-1 |