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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Подскажите пожалуйста как сделать эффект падения экрана как в ку2 (https://hlfx.ru/forum/showthread.php?threadid=4047)


Отправлено SteamPlay43 08-08-2013 в 19:34:

Half-Life Подскажите пожалуйста как сделать эффект падения экрана как в ку2

Искал имеющиеся в pm_shared.c нечего не нашёл кроме звука падения со средней высоты.


Отправлено XaeroX 08-08-2013 в 20:12:

В ку2 эффект падения экрана такой же, как и везде: экран падает на пол и разбивается. После чего ты везёшь его в сервис или покупаешь новый экран.

__________________

xaerox on Vivino


Отправлено Cybermax 08-08-2013 в 20:41:

Видео с ютуба с примером для наглядности в студию.
[off]Что неужели ещё кто то делает мод ля q2 [/off]


Отправлено Ku2zoff 09-08-2013 в 02:43:

SteamPlay43 а поискать по словосочетанию PunchAxis не пробовал? В Паранойе это сделано, например. Да и в самой халфе тоже есть, только раскачивается камера не так как в кваке. Погляди исходники самой второкваки, там найдёшь нужное.


Отправлено SteamPlay43 09-08-2013 в 08:59:

Ku2zoff Спасибо, но я думал что PunchAxis только для v_модели применяется!

Добавлено 09-08-2013 в 15:57:

Ku2zoff В кваке на нашёл PM_Jump

Добавлено 09-08-2013 в 15:58:

Добавлено 09-08-2013 в 15:59:

Ku2zoff А в калфе это вроде функция punchangle


Отправлено Decay 09-08-2013 в 09:59:

SteamPlay43
p_view.c: ClientEndServerFrame():

C++ Source Code:
// detect hitting the floor
P_FallingDamage (ent);
 
// apply all the damage taken this frame
P_DamageFeedback (ent);


p_view.c:
C++ Source Code:
1
/*
2
====================
3
P_DamageFeedback
4
 
5
Handles color blends and view kicks
6
====================
7
*/
8
void P_DamageFeedback (edict_t *player)
9
{


Отправлено SteamPlay43 09-08-2013 в 10:02:

DedoK Мне это в pm_shared вставить?


Отправлено Decay 09-08-2013 в 10:38:

SteamPlay43, ни в коем случае. Тебе какой именно эффект нужен? Только поворот камеры при падении?


Отправлено SteamPlay43 09-08-2013 в 11:12:

DedoK Когда спрыгиваешь со средней высоты или с большой когда наносит урон экран опускается вниз, мне только это надо. В халфе какой то незначительный эффект тряски экрана!

Добавлено 09-08-2013 в 18:12:

DedoK Да поворот камеры


Отправлено Ku2zoff 09-08-2013 в 12:07:

Цитата:
SteamPlay43 писал:
но я думал что PunchAxis только для v_модели применяется!

Она применяется для взгляда игрока.


Отправлено Decay 09-08-2013 в 12:15:

Не знаю, как решить это. Меняю индекс на 0, и камера поворачивается вниз по X только при небольших падениях. С Y и Z все работает.

pm_shared.c: PM_CheckFalling()

C++ Source Code:
pmove->punchangle[ 2 ] = pmove->flFallVelocity * 0.013;	// punch z axis


Отправлено SteamPlay43 09-08-2013 в 12:31:

DedoKВот это наверное с большой высоты

C++ Source Code:
if ( pmove->punchangle[ 0 ] > 8 )
{
  pmove->punchangle[ 0 ] = 8;
}


Отправлено Decay 09-08-2013 в 12:43:

SteamPlay43, ну да. 2 — это стандартное значение, а при 1 камера поворачивается вправо (это ось Y).
Скорее всего, где-то X обнуляется, или что...

Добавлено 09-08-2013 в 19:43:

SteamPlay43, это условие я убирал — то же самое.


Отправлено SteamPlay43 09-08-2013 в 13:00:

DedoK У меня получилось! Я это тоже убрал и поменял на 0.

Добавлено 09-08-2013 в 19:47:

DedoK Может быть вот это виновато?

C++ Source Code:
if ( pmove->onground != -1 )
{
  pmove->flFallVelocity = 0;
}


Добавлено 09-08-2013 в 19:58:

DedoK Нашёл вот это надо убрать:
#define PLAYER_FALL_PUNCH_THRESHHOLD (float)350 // won't punch player's screen/make scrape noise unless player falling at least this fast.

Добавлено 09-08-2013 в 20:00:

SteamPlay43 Заменить это в функции на что нибудь другое!


Отправлено fire64 09-08-2013 в 13:25:

гм, а зачем (float)350 ?
Почему не 350.0f ?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено SteamPlay43 09-08-2013 в 13:34:

fire64 Такой уж сдк что сделать!


Отправлено Decay 11-08-2013 в 04:39:

Пока что вот так:

pm_shared.c:

C++ Source Code:
1
vec_t punchX = 0; // HACK: rotate camera by X axis
2
void PM_CheckFalling(void)
3
{
4
  if (pmove->onground != -1 && !pmove->dead && pmove->flFallVelocity >= PLAYER_FALL_PUNCH_THRESHHOLD) {
5
    float fvol = 0.5;
6
 
7
    if (pmove->waterlevel > 0) {
8
    } else if (pmove->flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED) {
9
      pmove -> PM_PlaySound(CHAN_VOICE, "player/pl_fallpain3.wav", 1, ATTN_NORM, 0, PITCH_NORM);
10
      fvol = 1.0;
11
    } else if (pmove->flFallVelocity < PLAYER_MIN_BOUNCE_SPEED) {
12
      fvol = 0;
13
      punchX = 0;
14
    }
15
 
16
    if (fvol > 0.0) {
17
      // Play landing step right away
18
      pmove->flTimeStepSound = 0;
19
 
20
      PM_UpdateStepSound();
21
 
22
      // play step sound for current texture
23
      PM_PlayStepSound(PM_MapTextureTypeStepType(pmove->chtexturetype), fvol);
24
 
25
      // Knock the screen around a little bit, temporary effect
26
      punchX = pmove->flFallVelocity * 0.013;
27
    }
28
  }
29
  if(pmove->onground != -1)
30
    pmove->flFallVelocity = 0;
31
}


В функции PM_CheckParamters():
pm_shared.c: PM_CheckParamters():
C++ Source Code:
1
// Take angles from command.
2
if ( !pmove->dead )
3
{
4
  if (punchX)
5
    pmove->punchangle[0] = punchX;
6
  VectorCopy ( pmove->cmd.viewangles, v_angle );
7
  VectorAdd( v_angle, pmove->punchangle, v_angle );
8
 
9
  punchX = 0;
10
 
11
  // Set up view angles.


Отправлено SteamPlay43 12-08-2013 в 17:12:

DedoK Спасибо!


Отправлено SteamPlay43 22-10-2014 в 17:56:

Decay Теперь этот эффект применяется на всех игроков одновременно)


Отправлено Ku2zoff 22-10-2014 в 20:10:

Цитата:
SteamPlay43 писал:
Теперь этот эффект применяется на всех игроков одновременно)

То есть, когда падает один, камера качается у всех? Decay намудрил чего-то там, завёл ненужный вектор punchX, который задекларирован не внутри функции, а вне неё (соответственно он меняется ни в одном конкретном случае, для одного игрока, а когда любой игрок падает), вот тебе и для всех игроков эффект. Сделай в PM_CheckFalling вот так:
C++ Source Code:
1
if (fvol > 0.0) {
2
  // Play landing step right away
3
  pmove->flTimeStepSound = 0;
4
 
5
  PM_UpdateStepSound();
6
 
7
  // play step sound for current texture
8
  PM_PlayStepSound(PM_MapTextureTypeStepType(pmove->chtexturetype), fvol);
9
 
10
  // Knock the screen around a little bit, temporary effect
11
  [color=blue]pmove->punchangle[0] = pmove->flFallVelocity * 0.013;[/color]// теперь будет только для одного игрока
12
}

И будет тебе счастье.
Я вам щас покажу, как я у себя сделал.
player.cpp, функция void CBasePlayer::PostThink(), там есть такой блок кода:
C++ Source Code:
1
// check to see if player landed hard enough to make a sound
2
// falling farther than half of the maximum safe distance, but not as far a max safe distance will
3
// play a bootscrape sound, and no damage will be inflicted. Fallling a distance shorter than half
4
// of maximum safe distance will make no sound. Falling farther than max safe distance will play a
5
// fallpain sound, and damage will be inflicted based on how far the player fell
6
 
7
if ( (FBitSet(pev->flags, FL_ONGROUND)) && (pev->health > 0) && m_flFallVelocity >= PLAYER_FALL_PUNCH_THRESHHOLD )
8
{
9
  // ALERT ( at_console, "%f\n", m_flFallVelocity );
10
  [color=blue]float punch = (m_flFallVelocity > 700 ? 700 : m_flFallVelocity) * 0.02;[/color]
11
 
12
  if (pev->watertype == CONTENT_WATER)
13
  {
14
    // Did he hit the world or a non-moving entity?
15
    // BUG - this happens all the time in water, especially when
16
    // BUG - water has current force
17
    // if ( !pev->groundentity || VARS(pev->groundentity)->velocity.z == 0 )
18
      // EMIT_SOUND(ENT(pev), CHAN_BODY, "player/pl_wade1.wav", 1, ATTN_NORM);
19
  }
20
  else if ( m_flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED )
21
  {// after this point, we start doing damage
22
 
23
  float flFallDamage = g_pGameRules->FlPlayerFallDamage( this );
24
 
25
  if ( flFallDamage > pev->health )
26
  {//splat
27
  // note: play on item channel because we play footstep landing on body channel
28
  EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/bodysplat.wav", 1, ATTN_NORM);
29
}
30
 
31
if ( flFallDamage > 0 )
32
{
33
  TakeDamage(VARS(eoNullEntity), VARS(eoNullEntity), flFallDamage, DMG_FALL );
34
  //				pev->punchangle.x = 0; здесь я закомментировал
35
  [color=blue]
36
  UTIL_ScreenShake(pev->origin, flFallDamage, flFallDamage * 0.5, flFallDamage * 0.03, 8.0);
37
 
38
  punch += flFallDamage / 3;
39
  pev->punchangle[0] += punch;
40
  pev->punchangle[1] += RANDOM_FLOAT(-punch, punch);
41
  pev->punchangle[2] = RANDOM_FLOAT(-punch, punch);[/color]
42
}
43
}
44
else if (m_flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED / 2)
45
{
46
  [color=blue]
47
  pev->punchangle[0] += punch;
48
  pev->punchangle[1] += RANDOM_FLOAT(punch / -10, punch / 10);
49
  pev->punchangle[2] = RANDOM_FLOAT(punch / -10, punch / 10);[/color]
50
}
51
 
52
if ( IsAlive() )
53
{
54
  SetAnimation( PLAYER_WALK );
55
}
56
}


Добавлено 23-10-2014 в 03:10:

Синим выделено новое. Если игрок не получает повреждений, то экран качается на манер ку2 или паранойи. Если получает, то экран трясёт скриншейком. Если повреждения большие, то его ещё и перекашивает будь здоров по оси Z. Кое-что подглядел в Паранойе, остальное додумал сам.
З.Ы. код перекашивания камеры по оси Z из pm_shared.c (находится после комментария // Knock the screen around a little bit, temporary effect) можно убрать, чтобы не конфликтовал с кодом в player.cpp


Отправлено SteamPlay43 24-10-2014 в 14:39:

Ku2zoff Как у тебя всё сложно) Я на днях закомментиравал одну строку, и всё заработало со стандартным параметром pmove->punchangle [ 0 ] )
Надо в функции PreThink закомментировать

C++ Source Code:
pev->punchangle.x = 0;

Что огород городить? Было ведь понятно что обнуляется только по оси x.

Добавлено 24-10-2014 в 21:39:

Ku2zoff Но твоя версия тоже сделана неплохо.


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

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