Перейти к контенту

Редактирование движка X-Ray


Rolan

Рекомендуемые сообщения

Эффект Жоплера разгадан.

 

 

 

Не буду таить. Расскажу всем как эта физика работает. Вдруг помру скоро.

 

Эффект работает только на классе авто.  Прыгающая модель, не есть что, а отдельный элемент с шейпом общей модели. Кость на отрыв Брик Форс и Брик Торг = 99, обязательно Джоинт по осям XY -1, 1 градус поворота. Материал не важен. Важна масса 1-10 кг и круглое сечение цилиндрического шейпа = 0.02. 

 

Заметьте, что на разных поверхностях эффект различен.  Больше всего на земле и камне, меньше на воде.

 

Физика такова, что при ударе о поверхность происходит отторжение шейпа. Но если увеличить массу до 50 например кг, то колебания будут затухать. Это не является багом (типа трупа латающего), нет, просто движок так понимает этот процесс.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

Решил проблему в ЗП, вылет в авто, после смерти ГГ.  Просто ГГ не умирает, и его не выкидывает из авто - наступает гамеовер как только, так сразу.

Кстати, в ЗП, авто может переезжать на другую локу с ГГ через левелченджер, это так к слову.

 

Осталось решить проблему со сменой векторов после сохранения (в управлении меняются  координаты на 180 градусов)


https://yadi.sk/d/GqZCPJwQia8kq1.6 Мб. xrGame.dll для Зова Припяти

 

Исправления касаются только ГГ в авто:

 

1. Посадка в авто.

2. Анимация в авто.

3. Визуал ГГ от первого вида, вместо худа, в авто.

4. Вылет, при смерти в авто, исправлен.

 

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

 

Автор правок: Дизель.

Изменено пользователем Дизель
  • Нравится 2
  • Полезно 2

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

 

 

хорошо бы еще и исходники правки выкладывать или ссылку на репозиторий

 

Не могу этого сделать. С репо - черепахами не работаю. А исходники боюсь кидать. Я принимаю, иногда, не стандартное мышление и подход к правкам, не хочу показаться идиотом.

  • Не нравится 1

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

Пожалуйста, можете сами сделать. Раз просите.

 

Вылет в ЗП при смерти в авто

 

 

001B:09CC7A3A xrGame.dll, CCharacterPhysicsSupport::EndActivateFreeShell(), x:\stalker_cop\project\engine.vc2008\xrgame\characterphysicssupport.cpp, 1191
001B:09CC9A7D xrGame.dll, CCharacterPhysicsSupport::KillHit(), x:\stalker_cop\project\engine.vc2008\xrgame\characterphysicssupport.cpp, 516
001B:09CC9C48 xrGame.dll, CCharacterPhysicsSupport::in_Hit(), x:\stalker_cop\project\engine.vc2008\xrgame\characterphysicssupport.cpp, 545
001B:09CCA0C0 xrGame.dll, CCharacterPhysicsSupport::in_Die(), x:\stalker_cop\project\engine.vc2008\xrgame\characterphysicssupport.cpp, 1436
001B:09A620A3 xrGame.dll, CEntityAlive::Die(), x:\stalker_cop\project\engine.vc2008\xrgame\entity_alive.cpp, 328
001B:09A46DFE xrGame.dll, CActor::Die(), x:\stalker_cop\project\engine.vc2008\xrgame\actor.cpp, 730
001B:09A5EFF8 xrGame.dll, CEntity::OnEvent(), x:\stalker_cop\project\engine.vc2008\xrgame\entity.cpp, 67
001B:09A4C275 xrGame.dll, CActor::OnEvent(), x:\stalker_cop\project\engine.vc2008\xrgame\actor_events.cpp, 28
001B:09A4C25A xrGame.dll, CActor::OnEvent(), x:\stalker_cop\project\engine.vc2008\xrgame\actor_events.cpp, 26
001B:09A18907 xrGame.dll, CLevel::cl_Process_Event(), x:\stalker_cop\project\engine.vc2008\xrgame\level.cpp, 429
001B:09A19BD6 xrGame.dll, CLevel::ProcessGameEvents(), x:\stalker_cop\project\engine.vc2008\xrgame\level.cpp, 491
001B:09A19F89 xrGame.dll, CLevel::OnFrame(), x:\stalker_cop\project\engine.vc2008\xrgame\level.cpp, 625

 

 

ссылается на CharacterPhysicsSupport.cpp на функцию void    CCharacterPhysicsSupport::    CreateShell  

Что я сделал?

Закомментировал всю функцию после начала вылета:

 

void CCharacterPhysicsSupport:: CreateShell ( CObject* who, Fvector& dp, Fvector & velocity )
{
xr_delete( m_collision_activating_delay );
xr_delete( m_interactive_animation );
destroy_animation_collision( );
//DestroyIKController( );
IKinematics* K=smart_cast( m_EntityAlife.Visual( ) );
//animation movement controller issues
bool anim_mov_ctrl =m_EntityAlife.animation_movement_controlled( );
CBoneInstance &BR = K->LL_GetBoneInstance( K->LL_GetBoneRoot( ) );
Fmatrix start_xform; start_xform.identity( );
CBlend *anim_mov_blend = 0;
if( anim_mov_ctrl )
{
m_EntityAlife.animation_movement( )->ObjStartXform( start_xform );
anim_mov_blend = m_EntityAlife.animation_movement( )->ControlBlend( );

m_EntityAlife.destroy_anim_mov_ctrl( );
BR.set_callback_overwrite (TRUE);
}
//
u16 anim_root = K->LL_GetBoneRoot();
u16 physics_root = anim_root;

if( m_eType != etBitting )
{
physics_root = K->LL_BoneID( "bip01_pelvis" );
K->LL_SetBoneRoot( physics_root );

}
//
if( !m_physics_skeleton )
CreateSkeleton( m_physics_skeleton );

if( m_eType == etActor )
{
CActor* A=smart_cast( &m_EntityAlife );
R_ASSERT2( A, "not an actor has actor type" );
if( A->Holder( ) ) return;
if( m_eState==esRemoved )return;
}


//////////////////////this needs to evaluate object box//////////////////////////////////////////////////////
if( m_eType != etBitting )
K->LL_SetBoneRoot( anim_root );

for( u16 I = K->LL_BoneCount( )-1; I!=u16(-1); --I )
K->LL_GetBoneInstance( I ).reset_callback( );
//
if( anim_mov_ctrl ) //we do not whant to move by long animation in root
BR.set_callback_overwrite (TRUE);
//
K->CalculateBones_Invalidate();
K->CalculateBones (TRUE);
if( m_eType != etBitting )
K->LL_SetBoneRoot( physics_root );
////////////////////////////////////////////////////////////////////////////

if( m_pPhysicsShell )
return;

m_PhysicMovementControl->GetCharacterVelocity ( velocity );


if( !m_PhysicMovementControl->CharacterExist( ) )
dp.set( m_EntityAlife.Position( ) );
else m_PhysicMovementControl->GetDeathPosition( dp );
m_PhysicMovementControl->DestroyCharacter( );

//shell create
R_ASSERT2(m_physics_skeleton,"No skeleton created!!");
m_pPhysicsShell=m_physics_skeleton;
m_physics_skeleton=NULL;
m_pPhysicsShell->set_Kinematics(K);
m_pPhysicsShell->RunSimulation();
m_pPhysicsShell->mXFORM.set(mXFORM);
m_pPhysicsShell->SetCallbacks( );
//

if(anim_mov_ctrl) //we do not whant to move by long animation in root
BR.set_callback_overwrite (TRUE);


if(!DoCharacterShellCollide())
m_pPhysicsShell->DisableCharacterCollision();

if( m_eType != etBitting )
K->LL_SetBoneRoot( anim_root );


K->CalculateBones_Invalidate();
K->CalculateBones (TRUE);


if( m_eType != etBitting )
K->LL_SetBoneRoot( physics_root );
//reset_root_bone_start_pose( *m_pPhysicsShell );

m_flags.set(fl_death_anim_on,FALSE);
m_eState=esDead;
m_flags.set(fl_skeleton_in_shell,TRUE);

if(IsGameTypeSingle())
{
m_pPhysicsShell->SetPrefereExactIntegration ();//use exact integration for ragdolls in single
m_pPhysicsShell->SetRemoveCharacterCollLADisable();
}
else
m_pPhysicsShell->SetIgnoreDynamic();
m_pPhysicsShell->SetIgnoreSmall();
AddActiveWeaponCollision();
}
void CCharacterPhysicsSupport:: EndActivateFreeShell ( CObject* who, const Fvector& inital_entity_position, const Fvector& dp, const Fvector & velocity )
{
VERIFY ( m_pPhysicsShell );
VERIFY( m_eState==esDead );
#ifdef DEBUG
if( dbg_draw_ragdoll_spawn )
{
DBG_OpenCashedDraw();
m_pPhysicsShell->dbg_draw_geometry( 0.2f, D3DCOLOR_XRGB( 255, 100, 0 ) );
DBG_ClosedCashedDraw( 50000 );
}
#endif

CollisionCorrectObjPos( dp );
// m_pPhysicsShell->SetGlTransformDynamic(mXFORM);

#ifdef DEBUG
if( dbg_draw_ragdoll_spawn )
{
DBG_OpenCashedDraw();
m_pPhysicsShell->dbg_draw_geometry( 0.2f, D3DCOLOR_XRGB( 255, 0, 100 ) );
DBG_ClosedCashedDraw( 50000 );
}
#endif
//fly back after correction
//FlyTo(Fvector().sub(inital_entity_position,m_EntityAlife.Position()));


#ifdef DEBUG
if( dbg_draw_ragdoll_spawn )
{
DBG_OpenCashedDraw();
m_pPhysicsShell->dbg_draw_geometry( 0.2f, D3DCOLOR_XRGB( 100, 255, 100 ) );
DBG_ClosedCashedDraw( 50000 );
}
#endif
Fvector v = velocity;
m_character_shell_control.apply_start_velocity_factor( who, v );

#ifdef DEBUG
if( death_anim_debug )
{
Msg( "death anim: ragdoll velocity picked from char controller =(%f,%f,%f), velocity applied to ragdoll =(%f,%f,%f) ", velocity.x, velocity.y, velocity.z, v.x, v.y, v.z );
}
#endif

//m_pPhysicsShell->set_LinearVel( v );
//actualize
//m_pPhysicsShell->GetGlobalTransformDynamic(&mXFORM);
//m_pPhysicsShell->mXFORM.set(mXFORM);



//if( false && anim_mov_ctrl && anim_mov_blend && anim_mov_blend->blend != CBlend::eFREE_SLOT && anim_mov_blend->timeCurrent + Device.fTimeDelta*anim_mov_blend->speed < anim_mov_blend->timeTotal-SAMPLE_SPF-EPS)//.
//{
// const Fmatrix sv_xform = mXFORM;
// mXFORM.set( start_xform );
// //anim_mov_blend->blendPower = 1;
// anim_mov_blend->timeCurrent += Device.fTimeDelta * anim_mov_blend->speed;
// m_pPhysicsShell->AnimToVelocityState( Device.fTimeDelta, 2 * default_l_limit, 10.f * default_w_limit );
// mXFORM.set( sv_xform );
//}
//IKinematics* K=smart_cast( m_EntityAlife.Visual( ) );
//u16 root =K->LL_GetBoneRoot();
//if( root!=0 )
//{
// K->LL_GetTransform( 0 ).set( Fidentity );
//
// K->LL_SetBoneVisible( 0, FALSE, FALSE );
//}

//K->CalculateBones_Invalidate();
//K->CalculateBones (TRUE);

}

*>*>*>

 

и еще я раскоментировал #include "../xrphysics/Physics.h" на всякий случай.

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@-StalkMen-, атач - детач кроме авто, где еще есть? Я не знаю примеров, где эта функция применяется. Я и говорю, что мой метод не верный. Моё желание поправить движок для авто, а остальное, я и в скриптах и конфигах доработаю.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@-StalkMen-, надо тестировать. Возможно, баг даже на авто будет, при взрыве транспорта, а ГГ жив. Надо проверить.

 

Из двух зол, надо выбирать меньшее. Решите проблему другим путём. А мне для авторадео и так сойдёт.

 

----------

 

Проверил на взрыв техники: ГГ нормально вылетает из авто, без вылета.


Я нечаянно скинул (сменил) ссылку на делку для авто на ЗП. Вот новая ссылка:

https://yadi.sk/d/BUZns3YRiaatN1.6 мб. xrGame.dll

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

У кого нибудь из соображающих, есть исходники сталкера любого?  Гляньте пожалуйста туда.

Возможно ли в колёсах авто, как то уменьшить влияние дифференциала или подключить блокировку, или АBS? Просто 4х осник Маз не хочет ехать, он сильно длинный и колёса обязательно какие нибудь висят и крутятся свободно, не давая другим толкать.

 

612bed076231e606353ae99a8149405d1fadf222

Изменено пользователем Дизель
  • Нравится 1

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@Сталкер Лом, стандартный бтр не буксует, потому как деревянный, он ничего не весит. Это пародия на физику транспорта. Я делаю тяжелые, почти в реальную массу авто, потому и динамика реальная (почти). Ладно, забудем про тему костей колёс. Это очень непростая тема. Это глубже, однако, копать надо, чем я предполагал.

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@HESH, а где исходники 1603? Я видел патч, но, а толку.

 

Вот, db распаковал. А наверно к этому и binы надо?

https://cloud.mail.ru/public/2cB2/6it2o8Bhi

 

Про 03 патч, поясните, а то я уже движков других накачал, и собирался валить из сталкера?

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

HESH, есть Фрапс, кому надо качественно щелкнуть и видео самое крутое ( просто, видео - супер вес). Конечно это полезно новый формат, но не стоит так сильно, прям заморачиваться.

Изменено пользователем Дизель
  • Не согласен 2

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@Forser, человек когда хочет сделать качественный скрин - всегда готовится к этому заранее. Невозможно в игре сделать спонтанно, тем более без хорошего освещения, хороший кадр. Сьёмка скрина сродни фотографированию.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@Forser, кому интересно, можете посмотреть на эксперимент скриншота и фрапса https://yadi.sk/d/4NARlQXKj3dsB5 мб.

Фрапс более-менее не прихотлив к освещению.

Кстати, по форматам, самый лучший на мой взгляд ТГА (см. эксперимент), а остальные примерно того же качества, худший JPEG.

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@SkyLoader, в ЗП подключил к авто у колёс с соприкосновением материалов велмарки - появился квадратик размером примерно сантиметров 20х20 под колесом и то появление только при ударе колёс о поверхность.

Эта запись повлияет на 95% появление велмарков? Охота, что бы велмарки появлялись, да же не от удара.

Да и вообще меня не устраивает квадратный велмарк. Можно ли сделать постоянный шлейф велмарков, для следов колёс? И как то изменить пропорции квадрата на прямоугольник с заданными размерами?

 

Вообще, я опять ударился во флуд, можете удалить комментарий. Я наверно попутал тему.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@SkyLoader, я не силён в понятиях - для меня всё велмарки. :D Хотя я знаю, чем они отличаются. Бледмарки значит? Движок править? Досадно.

 

Опять "Тень" умничает: я оговорился. Я знаю, что такое bloodmark\wallmark.

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

@Forser, а зачем его отключать? Это же для логов вылетов предназначено, и использовалось ранее не только в Сталкере.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

 

 

BugTrap для дампов вроде бы нужен
Я не знаю конкретно для чего, но для меня слово Дамп ассоциируется с памятью. То бишь BugTrap чистит память? Короче, я молчу, так как не силён в движке. Пусть Тень нам разъяснит, что и как.

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение

Есть ли правки движка ЗП для сетевухи? В частности интересует подключение класса авто. Или движок тут не причём?

andreyholkin.gif

rod_cccp.gif

 

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...