HLFX.Ru Forum
Показать все 12 сообщений этой темы на одной странице

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:

Question Каждому монстру свои джибсы

В общем вопрос такой,как сделать монстру свои джибсы? искал не нашел.


Отправлено Ак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 )
5
{
6
  Vector	vecGunPos;
7
  Vector	vecGunAngles;
8
 
9
  if ( GetBodygroup( 2 ) != 2 )
10
  {// throw a gun if the grunt has one
11
  GetAttachment( 0, vecGunPos, vecGunAngles );
12
 
13
  CBaseEntity *pGun;
14
  if (FBitSet( pev->weapons, HGRUNT_SHOTGUN ))
15
  {
16
    pGun = DropItem( "weapon_shotgun", vecGunPos, vecGunAngles );
17
  }
18
  else
19
  {
20
    pGun = DropItem( "weapon_9mmAR", vecGunPos, vecGunAngles );
21
  }
22
  if ( pGun )
23
  {
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 );
26
  }
27
 
28
  if (FBitSet( pev->weapons, HGRUNT_GRENADELAUNCHER ))
29
  {
30
    pGun = DropItem( "ammo_ARgrenades", vecGunPos, vecGunAngles );
31
    if ( pGun )
32
    {
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 );
35
    }
36
  }
37
}
38
 
39
CBaseMonster :: GibMonster();
40
}

Так выглядит функция кускования десантника.

Удали из неё строку CBaseMonster :: GibMonster(); вставь вместо неё:
C++ Source Code:
1
TraceResult	tr;
2
BOOL		gibbed = FALSE;
3
 
4
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM);
5
 
6
// only humans throw skulls !!!UNDONE - eventually monsters will have their own sets of gibs
7
if ( HasHumanGibs() )
8
{
9
  if ( CVAR_GET_FLOAT("violence_hgibs") != 0 )	// Only the player will ever get here
10
  {
11
    CGib::SpawnHeadGib( pev );
12
    CGib::SpawnRandomGibs( pev, 4, 1 );	// throw some human gibs.
13
  }
14
  gibbed = TRUE;
15
}
16
 
17
if ( gibbed )
18
{
19
  // don't remove players!
20
  SetThink ( SUB_Remove );
21
  pev->nextthink = gpGlobals->time;
22
}
23
else
24
{
25
  FadeMonster();
26
}

Теперь у тебя своя функция кускования для морпеха. Но он по-прежнему кускуется на стандартные человеческие останки. Есть два способа сделать для него индивидуальные куски.

Первый:
заменить строчки

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;
2
 
3
vecSpot = pev->origin + (pev->mins + pev->maxs) * 0.5;
4
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSpot );
5
WRITE_BYTE( TE_BREAKMODEL);
6
 
7
// position
8
WRITE_COORD( vecSpot.x );
9
WRITE_COORD( vecSpot.y );
10
WRITE_COORD( vecSpot.z );
11
 
12
// size
13
WRITE_COORD( 100 );
14
WRITE_COORD( 100 );
15
WRITE_COORD( 32 );
16
 
17
// velocity
18
WRITE_COORD( 0 );
19
WRITE_COORD( 0 );
20
WRITE_COORD( 200 );
21
 
22
// randomization
23
WRITE_BYTE( 8 );
24
 
25
// Model
26
WRITE_SHORT( m_iVgib );	//model id#
27
 
28
// # of shards
29
WRITE_BYTE( 8 );
30
 
31
// duration
32
WRITE_BYTE( 200 );// 10.0 seconds
33
 
34
// flags
35
 
36
WRITE_BYTE( BREAK_FLESH );
37
MESSAGE_END();

не забудь прекешировать m_iVgib. Это должна быть модель нужных тебе кусков. Поиграйся с параметрами скорости, количества и прочими.

Первый способ предпочтительнее, т.к. там можно сделать декали крови и кровавые шлейфы за кусками. Но он сложнее, там нужно переписывать не только код монстра, но и кусков.

Копай в combat.cpp, там всё это есть.


Отправлено Jimmy C. 22-09-2010 в 07:45:

спасибо. буду пробовать

Добавлено 22-09-2010 в 11:45:

Ku2zoff, а ты случаем не знаеш как отключить кускование от монтировки,а то както не реально


Временная зона GMT. Текущее время 20:40.
Показать все 12 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024