[HL1] Два звука для дверей
Всем привет. Что ж, это мой первый тутор и в нём я расскажу, как сделать так, чтобы дверь имела два разных звука движения. Один для открытия, другой для закрытия. Начнём.
Откроем doors.cpp
Добавим это к остальным дефайнам:
Затем спустимся ниже и в описании класса CBaseDoor после
добавим:
Далее чуть ниже в TYPEDESCRIPTION CBaseDoor::m_SaveData[] после
добавим:
Найдём функцию KeyValue и в ней по аналогии с другими ifами вставим:
Идём в функцию Precache и после:
вставим это:
Думаю, тут всё понятно. Теперь найдём функцию DoorGoDown и в ней в самом начале этот кусок
Заменим на этот:
Ниже в функции DoorHitBottom после
добавим:
Теперь закрываем doors.cpp и открываем doors.h. Добавим с остальными дефайнами этот:
Сохраняем. Компилим.
Открываем ваш .fgd и ищем
В нём после
вставляем
Далее в
Добавляем флаг
Сохраняем. Готово.
Так, теперь, чтобы сделать эту самую дверь.
1) Создаем дверь
2) Отмечаем галочкой флаг "Open/Close Sounds"
3) Выбераем разные "Move Sound" и "Move Sound (Closing)"
4) Открываем карту и наслаждаемся.
Желательно не использовать стандартные халфовские звуки, а добавить в мод свои. Я, например, использовал парные звуки дверей из Дума, что выглядит неплохо.
Всем привет. Что ж, это мой первый тутор и в нём я расскажу, как сделать так, чтобы дверь имела два разных звука движения. Один для открытия, другой для закрытия. Начнём.
Откроем doors.cpp
Добавим это к остальным дефайнам:
Code:
#define noiseClosing noise3 // door tutorial
Code:
BYTE m_bMoveSnd; // sound a door makes while moving
BYTE m_bStopSnd; // sound a door makes when it stops
Code:
BYTE m_bCloseSnd; // door tutorial
Code:
DEFINE_FIELD( CBaseDoor, m_bStopSnd, FIELD_CHARACTER ),
Code:
DEFINE_FIELD( CBaseDoor, m_bCloseSnd, FIELD_CHARACTER ), // door tutorial
Code:
else if (FStrEq(pkvd->szKeyName, "closesnd")) // door tutorial
{
m_bCloseSnd = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
Code:
// set the door's "in-motion" sound
switch (m_bMoveSnd)
{
case 0:
pev->noiseMoving = ALLOC_STRING("common/null.wav");
break;
case 1:
PRECACHE_SOUND ("doors/doormove1.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove1.wav");
break;
case 2:
PRECACHE_SOUND ("doors/doormove2.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove2.wav");
break;
case 3:
PRECACHE_SOUND ("doors/doormove3.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove3.wav");
break;
case 4:
PRECACHE_SOUND ("doors/doormove4.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove4.wav");
break;
case 5:
PRECACHE_SOUND ("doors/doormove5.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove5.wav");
break;
case 6:
PRECACHE_SOUND ("doors/doormove6.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove6.wav");
break;
case 7:
PRECACHE_SOUND ("doors/doormove7.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove7.wav");
break;
case 8:
PRECACHE_SOUND ("doors/doormove8.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove8.wav");
break;
case 9:
PRECACHE_SOUND ("doors/doormove9.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove9.wav");
break;
case 10:
PRECACHE_SOUND ("doors/doormove10.wav");
pev->noiseMoving = ALLOC_STRING("doors/doormove10.wav");
break;
default:
pev->noiseMoving = ALLOC_STRING("common/null.wav");
break;
}
Code:
switch (m_bCloseSnd) // door tutorial
{
case 0:
pev->noiseClosing = ALLOC_STRING("common/null.wav");
break;
case 1:
PRECACHE_SOUND ("doors/doormove1.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove1.wav");
break;
case 2:
PRECACHE_SOUND ("doors/doormove2.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove2.wav");
break;
case 3:
PRECACHE_SOUND ("doors/doormove3.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove3.wav");
break;
case 4:
PRECACHE_SOUND ("doors/doormove4.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove4.wav");
break;
case 5:
PRECACHE_SOUND ("doors/doormove5.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove5.wav");
break;
case 6:
PRECACHE_SOUND ("doors/doormove6.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove6.wav");
break;
case 7:
PRECACHE_SOUND ("doors/doormove7.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove7.wav");
break;
case 8:
PRECACHE_SOUND ("doors/doormove8.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove8.wav");
break;
case 9:
PRECACHE_SOUND ("doors/doormove9.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove9.wav");
break;
case 10:
PRECACHE_SOUND ("doors/doormove10.wav");
pev->noiseClosing = ALLOC_STRING("doors/doormove10.wav");
break;
default:
pev->noiseClosing = ALLOC_STRING("common/null.wav");
break;
}
Code:
if ( !FBitSet( pev->spawnflags, SF_DOOR_SILENT ) )
EMIT_SOUND(ENT(pev), CHAN_STATIC, (char*)STRING(pev->noiseMoving), 1, ATTN_NORM);
Code:
if ( !FBitSet( pev->spawnflags, SF_DOOR_SILENT ) )
{
if( FBitSet( pev->spawnflags, SF_DOOR_OPENCLOSE ) ) // door tutorial
EMIT_SOUND(ENT(pev), CHAN_STATIC, (char*)STRING(pev->noiseClosing), 1, ATTN_NORM);
else
EMIT_SOUND(ENT(pev), CHAN_STATIC, (char*)STRING(pev->noiseMoving), 1, ATTN_NORM);
}
Code:
STOP_SOUND(ENT(pev), CHAN_STATIC, (char*)STRING(pev->noiseMoving) );
Code:
STOP_SOUND(ENT(pev), CHAN_STATIC, (char*)STRING(pev->noiseClosing) ); // door tutorial
Code:
#define SF_DOOR_OPENCLOSE 1024 // door tutorial
Открываем ваш .fgd и ищем
Code:
@BaseClass base(Appearflags, Targetname, RenderFields, Global, Angles) = Door
Code:
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
1: "Servo (Sliding)"
2: "Pneumatic (Sliding)"
3: "Pneumatic (Rolling)"
4: "Vacuum"
5: "Power Hydraulic"
6: "Large Rollers"
7: "Track Door"
8: "Snappy Metal Door"
9: "Squeaky 1"
10: "Squeaky 2"
]
Code:
closesnd(choices) : "Move Sound (Closing)" : 0 =
[
0: "No Sound"
1: "Servo (Sliding)"
2: "Pneumatic (Sliding)"
3: "Pneumatic (Rolling)"
4: "Vacuum"
5: "Power Hydraulic"
6: "Large Rollers"
7: "Track Door"
8: "Snappy Metal Door"
9: "Squeaky 1"
10: "Squeaky 2"
]
Code:
spawnflags(flags) =
[
1 : "Starts Open" : 0
4 : "Don't link" : 0
8: "Passable" : 0
32: "Toggle" : 0
256:"Use Only" : 0
512: "Monsters Can't" : 0
]
Code:
1024: "Open/Close Sounds" : 0
Так, теперь, чтобы сделать эту самую дверь.
1) Создаем дверь
2) Отмечаем галочкой флаг "Open/Close Sounds"
3) Выбераем разные "Move Sound" и "Move Sound (Closing)"
4) Открываем карту и наслаждаемся.
Желательно не использовать стандартные халфовские звуки, а добавить в мод свои. Я, например, использовал парные звуки дверей из Дума, что выглядит неплохо.