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:
 Подскажите пожалуйста как сделать эффект падения экрана как в ку2
 Подскажите пожалуйста как сделать эффект падения экрана как в ку2
Искал имеющиеся в pm_shared.c нечего не нашёл кроме звука падения со средней высоты.
Отправлено XaeroX 08-08-2013 в 20:12:
 
В ку2 эффект падения экрана такой же, как и везде: экран падает на пол и разбивается. После чего ты везёшь его в сервис или покупаешь новый экран.
__________________
Отправлено Cybermax 08-08-2013 в 20:41:
 
Видео с ютуба с примером для наглядности в студию.
[off]Что неужели ещё кто то делает мод ля q2 
  [/off]
[/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 | 
| // apply all the damage taken this frame | 
 
p_view.c:
C++ Source Code:
| 5 | Handles color blends and view kicks | 
| 8 | void P_DamageFeedback (edict_t *player) | 
 
Отправлено 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) | 
| 4 |   if (pmove->onground != -1 && !pmove->dead && pmove->flFallVelocity >= PLAYER_FALL_PUNCH_THRESHHOLD) { | 
| 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); | 
| 11 |     } else if (pmove->flFallVelocity < PLAYER_MIN_BOUNCE_SPEED) { | 
| 17 |       // Play landing step right away | 
| 18 |       pmove->flTimeStepSound = 0; | 
| 22 |       // play step sound for current texture | 
| 23 |       PM_PlayStepSound(PM_MapTextureTypeStepType(pmove->chtexturetype), fvol); | 
| 25 |       // Knock the screen around a little bit, temporary effect | 
| 26 |       punchX = pmove->flFallVelocity * 0.013; | 
| 29 |   if(pmove->onground != -1) | 
| 30 |     pmove->flFallVelocity = 0; | 
 
В функции PM_CheckParamters():
pm_shared.c: PM_CheckParamters():C++ Source Code:
| 1 | // Take angles from command. | 
| 5 |     pmove->punchangle[0] = punchX; | 
| 6 |   VectorCopy ( pmove->cmd.viewangles, v_angle ); | 
| 7 |   VectorAdd( v_angle, pmove->punchangle, v_angle ); | 
| 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:
| 2 |   // Play landing step right away | 
| 3 |   pmove->flTimeStepSound = 0; | 
| 7 |   // play step sound for current texture | 
| 8 |   PM_PlayStepSound(PM_MapTextureTypeStepType(pmove->chtexturetype), fvol); | 
| 10 |   // Knock the screen around a little bit, temporary effect | 
| 11 |   [color=blue]pmove->punchangle[0] = pmove->flFallVelocity * 0.013;[/color]// теперь будет только для одного игрока | 
 
И будет тебе счастье.
Я вам щас покажу, как я у себя сделал.
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 | 
| 7 | if ( (FBitSet(pev->flags, FL_ONGROUND)) && (pev->health > 0) && m_flFallVelocity >= PLAYER_FALL_PUNCH_THRESHHOLD ) | 
| 9 |   // ALERT ( at_console, "%f\n", m_flFallVelocity ); | 
| 10 |   [color=blue]float punch = (m_flFallVelocity > 700 ? 700 : m_flFallVelocity) * 0.02;[/color] | 
| 12 |   if (pev->watertype == CONTENT_WATER) | 
| 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); | 
| 20 |   else if ( m_flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED ) | 
| 21 |   {// after this point, we start doing damage | 
| 23 |   float flFallDamage = g_pGameRules->FlPlayerFallDamage( this ); | 
| 25 |   if ( flFallDamage > pev->health ) | 
| 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); | 
| 31 | if ( flFallDamage > 0 ) | 
| 33 |   TakeDamage(VARS(eoNullEntity), VARS(eoNullEntity), flFallDamage, DMG_FALL ); | 
| 34 |   //				pev->punchangle.x = 0; здесь я закомментировал | 
| 36 |   UTIL_ScreenShake(pev->origin, flFallDamage, flFallDamage * 0.5, flFallDamage * 0.03, 8.0); | 
| 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] | 
| 44 | else if (m_flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED / 2) | 
| 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] | 
| 54 |   SetAnimation( PLAYER_WALK ); | 
 
Добавлено 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:
Что огород городить? Было ведь понятно что обнуляется только по оси x.
Добавлено 24-10-2014 в 21:39:
Ku2zoff Но твоя версия тоже сделана неплохо.