HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Каждому монстру свои джибсы (https://hlfx.ru/forum/showthread.php?threadid=2331)
Отправлено Jimmy C. 20-09-2010 в 14:41:
Каждому монстру свои джибсы
В общем вопрос такой,как сделать монстру свои джибсы? искал не нашел.
Отправлено Ак47 21-09-2010 в 16:26:
вроде они и так у каждого вида монстра есть.
Отправлено Jimmy C. 21-09-2010 в 16:27:
нет. я в том смысле для каждого монстра отдельные модели джибсов. а не у каждого вида
Отправлено PoD-Stas 21-09-2010 в 16:34:
(epeFk@ ковыряй код, там ничего сложного
Отправлено Jimmy C. 21-09-2010 в 16:35:
а в каком файле ковырять то?
Отправлено Ku2zoff 21-09-2010 в 16:45:
За "кускование" (кстати замечательный термин
) отвечает функция
СИмяМонстра::GibMonster
Перепиши её для нужного монстра на основе базовой функции (CBaseMonster::GibMonster), укажи свои модели кусков, свои звуки, если хочешь и т.д.
Я в своё время очень увлёкся кускованием, после того, как поиграл в мод Invasion, там почти у каждого монстра были свои куски. Взял и накодил для каждого из монстров индивидуальные куски, сортов 10 получилось =) Заколебался потом их в милке моделить.
Отправлено Jimmy C. 21-09-2010 в 16:50:
Спасибо большое. Очень благодарен
Добавлено 21-09-2010 в 20:50:
а в каком cpp лежит эта функция?
Отправлено qpAHToMAS 21-09-2010 в 17:03:
Цитата:
(epeFk@ писал:
а в каком cpp лежит эта функция?
Скачай ты какой-нибудь Notepad++, натравь его поиск на директорию с исходниками и произведи поиск по *.* (всем) файлам.
Отправлено Ku2zoff 21-09-2010 в 17:07:
(epeFk@ у тебя студии нету? Если так, то юзай Notepad++. А если студия есть, юзай Find In Files.
Отправлено Jimmy C. 22-09-2010 в 07:10:
а нашел но что с ними делать не знаю,так ка я в кодинге 0. не можете подробно рассказать как и что.
Отправлено Ku2zoff 22-09-2010 в 07:35:
(epeFk@ экспериментируй. Разжёвывать никто не будет. Я например, первое что в кодинге сделал - написал клон барни.
Выглядеть должно примерно так:
C++ Source Code:
1 | //========================================================= |
2 | // GibMonster - make gun fly through the air. |
3 | //========================================================= |
4 | void CHGrunt :: GibMonster ( void ) |
9 | if ( GetBodygroup( 2 ) != 2 ) |
10 | {// throw a gun if the grunt has one |
11 | GetAttachment( 0, vecGunPos, vecGunAngles ); |
14 | if (FBitSet( pev->weapons, HGRUNT_SHOTGUN )) |
16 | pGun = DropItem( "weapon_shotgun", vecGunPos, vecGunAngles ); |
20 | pGun = DropItem( "weapon_9mmAR", vecGunPos, vecGunAngles ); |
24 | pGun->pev->velocity = Vector (RANDOM_FLOAT(-100,100), RANDOM_FLOAT(-100,100), RANDOM_FLOAT(200,300)); |
25 | pGun->pev->avelocity = Vector ( 0, RANDOM_FLOAT( 200, 400 ), 0 ); |
28 | if (FBitSet( pev->weapons, HGRUNT_GRENADELAUNCHER )) |
30 | pGun = DropItem( "ammo_ARgrenades", vecGunPos, vecGunAngles ); |
33 | pGun->pev->velocity = Vector (RANDOM_FLOAT(-100,100), RANDOM_FLOAT(-100,100), RANDOM_FLOAT(200,300)); |
34 | pGun->pev->avelocity = Vector ( 0, RANDOM_FLOAT( 200, 400 ), 0 ); |
39 | CBaseMonster :: GibMonster(); |
Так выглядит функция кускования десантника.
Удали из неё строку CBaseMonster :: GibMonster(); вставь вместо неё:
C++ Source Code:
4 | EMIT_SOUND(ENT(pev), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM); |
6 | // only humans throw skulls !!!UNDONE - eventually monsters will have their own sets of gibs |
9 | if ( CVAR_GET_FLOAT("violence_hgibs") != 0 ) // Only the player will ever get here |
11 | CGib::SpawnHeadGib( pev ); |
12 | CGib::SpawnRandomGibs( pev, 4, 1 ); // throw some human gibs. |
19 | // don't remove players! |
20 | SetThink ( SUB_Remove ); |
21 | pev->nextthink = gpGlobals->time; |
Теперь у тебя своя функция кускования для морпеха. Но он по-прежнему кускуется на стандартные человеческие останки. Есть два способа сделать для него индивидуальные куски.
Первый:
заменить строчки
CGib::SpawnHeadGib( pev );
CGib::SpawnRandomGibs( pev, 4, 1 );
На что-нибудь вроде
CGib::HgruntHeadGib( pev );
CGib::HgruntRandomGibs( pev, 4, 1 );
и написать эти новые функции на основе старых, заменив в них модели кусков.
Второй способ (по принципу создания обломков для Апача):
воткнуть вместо
CGib::SpawnHeadGib( pev );
CGib::SpawnRandomGibs( pev, 4, 1 );
вот это:
C++ Source Code:
1 | Vector vecSpot = pev->origin + (pev->mins + pev->maxs) * 0.5; |
3 | vecSpot = pev->origin + (pev->mins + pev->maxs) * 0.5; |
4 | MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSpot ); |
5 | WRITE_BYTE( TE_BREAKMODEL); |
8 | WRITE_COORD( vecSpot.x ); |
9 | WRITE_COORD( vecSpot.y ); |
10 | WRITE_COORD( vecSpot.z ); |
26 | WRITE_SHORT( m_iVgib ); //model id# |
32 | WRITE_BYTE( 200 );// 10.0 seconds |
36 | WRITE_BYTE( BREAK_FLESH ); |
не забудь прекешировать m_iVgib. Это должна быть модель нужных тебе кусков. Поиграйся с параметрами скорости, количества и прочими.
Первый способ предпочтительнее, т.к. там можно сделать декали крови и кровавые шлейфы за кусками. Но он сложнее, там нужно переписывать не только код монстра, но и кусков.
Копай в combat.cpp, там всё это есть.
Отправлено Jimmy C. 22-09-2010 в 07:45:
спасибо. буду пробовать
Добавлено 22-09-2010 в 11:45:
Ku2zoff, а ты случаем не знаеш как отключить кускование от монтировки,а то както не реально