HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Подскажите пожалуйста как сделать эффект падения экрана как в ку2
Там есть такой эффект когда падаешь с большой высоты
Страницы (2): « 1 [2]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 26

Рейтинг



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

Сообщить модератору | | IP: Записан
Сообщение: 123905

Старое сообщение 09-08-2013 13:34
- За что?
Decay
Житель форума

Дата регистрации: Mar 2010
Проживает: N/A
Сообщений: 231

Рейтинг



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

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.

Сообщить модератору | | IP: Записан
Сообщение: 123925

Старое сообщение 11-08-2013 04:39
- За что?
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 26

Рейтинг



DedoK Спасибо!

Сообщить модератору | | IP: Записан
Сообщение: 123955

Старое сообщение 12-08-2013 17:12
- За что?
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 26

Рейтинг



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

Сообщить модератору | | IP: Записан
Сообщение: 141321

Старое сообщение 22-10-2014 17:56
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
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

Отредактировано Ku2zoff 22-10-2014 в 20:06

Сообщить модератору | | IP: Записан
Сообщение: 141323

Старое сообщение 22-10-2014 20:10
- За что?
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 26

Рейтинг



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

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

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

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

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

Сообщить модератору | | IP: Записан
Сообщение: 141363

Старое сообщение 24-10-2014 14:39
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 13:41. Новая тема    Ответить
Страницы (2): « 1 [2]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Подскажите пожалуйста как сделать эффект падения экрана как в ку2
Там есть такой эффект когда падаешь с большой высоты
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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