-
Постов
762 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Календарь
Сообщения, опубликованные Broken von Skull
-
-
В OpenMW сейчас используется osgAnimation или пересели на что-то другое?
-
Я не программист, но разве мешает ли что-то технически уже сейчас начать готовить почву к слиянию?
Фундаментальные аспекты OpenMW, которые хоть как-то касаются мультиплеера, практически реализованы, надо только поправить приоритеты развития проекта и начать дехардкодить то, что нужно для TES3MP. В диздоке Zini по поводу мультиплеера как раз больше всего вопросов к скриптингу. Или всё не так?
Я понимаю, у Zini свое видение будущего, но тут FOSS, а не коммерческий движок: надо давать дорогу молодым и перспективным. Тем более, что из старой гвардии мало кто остался, а новоприбывшие часто не заходят далее первого поста в разделе New Developers Applications.
А тут работающий мультиплеер - фича мечты для Морровинда! Задвинуть такое на дальнюю полку будет непростительной ошибкой.
-
Ну по крайней мере: "We do intent to take in further input from the developer community, which includes multiplayer developers."
Да и scrawl отошел от дел...
Проблема в том, что развитие OpenMW происходит с крайне неравномерной скоростью (а в последнее время ближе к медленной). Активных разработчиков немного, свежей крови ещё меньше. Если релиз 1.0 можно ждать уже в обозримом будущем, то с какой скоростью всё двинется дальше - сложно предсказать.
А TES3MP за короткое время вырос в серьёзный проект с большим сообществом. Потому было бы нехорошо заставлять разработчиков TES3MP ждать полного дехардкодинга и появления нужных фичей. На это могут уйти годы...
Было бы лучше уже сейчас начать процесс подготовки к слиянию, хотя бы после 1.0. Сомневаюсь, что Zini откажется.
-
А он обсуждал это с Zini? Возможно тот просто не предполагает, что TES3MP будет развиваться быстрее, чем OpenMW.Согласен-то согласен, прикол в том, что он не рассчитывает на объединение их в ближайшем будущем (см. доку по пост-1.0 -- мультиплеер там это "возможная цель для достижения к 2.0"). Давид этим разочарован и считает, что такие предубеждения не приведут ни к чему хорошему.
-
Разве Zini не согласен? Вроде отписывался в духе "поживём - увидим".Скажу, что он находит, что неплохо было бы Zini согласиться на объединение OpenMW и TES3MP, по некоторым серьёзным причинам.
-
Спасибо за помощь! Плагин заработал, но с некоторыми нюансами, отличными от ванили. Потестил только на лодке.
1) Коллизии со статиками не работают, как и заметил akortunov. Причем с террейном всё сталкивается нормально.
2) В ручном режиме плавания при повороте на определенное кол-во градусов (540 направо от изначального положения лодки, 90 - налево) вектор движения лодки перестает реагировать на повороты. Причем если вырулить обратно - всё приходит в норму.
Со скриптом ks_sr_ini проблем не было.
-
Выглядит вполне выполнимо!
Надеюсь, что хоть в 2019 дождемся релиза 1.0.
5. Довести до ума физику.
А что с ней не так?
7. Долго и нудно ловить мелкие баги в модах, т.к. в 1.0 заявлена совместимость с ванильными модами.
Кстати о багах, спешу заявить, что плагин "Корабль 'Оседлавший Бурю'" в OpenMW не работает. Ни лодка, ни корабль не активируются для плавания.
Вот скрипт лодки:
;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Stormrider Boat Script - Copyright © Nov 2004 by Kellick Stormcrow; Based on: Boat Script - Copyright © Dec 2002 by (MAD)MAX YUE;-------------------------------------------------------------------------------------------------------------------------------------------------------------Begin KS_SR_Boat_Script;SCRIPT DEPENDENCIES;KS_SR_Boat_Create;KS_SR_Boat_Create_Detect;KS_SR_Boat_Create_Detect_R;KS_SR_Boat_Multiplier;KS_SR_Boat_Multiplier_02;KS_SR_Boat_Multiplier_03;KS_SR_Boat_FTravel_GM;KS_SR_Boat_FTravel_SN;KS_SR_Boat_FTravel_TB;KS_SR_Boat_FTravel_SM;KS_SR_Boat_FTravel_DF;KS_SR_Boat_FTravel_KH;KS_SR_Boat_FTravel_Ship;ITEM DEPENDENCIES;activator KS_SR_Boat (script attaches to);misc KS_SR_misc_ship_repair;-------------------------------------------------------------------------------------------------------------------------------------------------------------;GLOBAL PARMATERS;===============================================================================;float KS_SR_Boat_Angle ; store object Angle before it gets deleted;short KS_SR_Boat_Auto ; 0=manual turning, 1=auto turn;short KS_SR_Boat_Cellchange ; flag when player change cell;short KS_SR_Boat_Damage ; Boat hull rating;float KS_SR_Boat_Distance ;;short KS_SR_Boat_Exist ;;short KS_SR_Boat_Gear ;;short KS_SR_Boat_Hitflag ;;short KS_SR_Boat_Sailmode ; 0=dismounted, 1=sailing;short KS_SR_Boat_Speed ; Sailing speed;float KS_SR_Boat_X ; Boat x coord;float KS_SR_Boat_Xdistance ;;float KS_SR_Boat_Xmul ; pre-determined sin/cos multiplier;float KS_SR_Boat_Y ; Boat y coord;float KS_SR_Boat_Ymul ; pre-determined sin/cos multiplier;float KS_SR_Boat_Ydistance ;;float KS_SR_Ship_Angle ; Ship Angle;short KS_SR_Ship_Exist ; Ship exist and boat docking state;float KS_SR_Ship_X ; Ship x coord;float KS_SR_Ship_Y ; Ship y coord;-------------------------------------------------------------------------------------------------------------------------------------------------------------;LOCAL PARAMETERS;===============================================================================float xx ; object x coordinatesfloat yy ; object y coordinatesfloat zz ; object z coordinatesfloat oangle ; object z axis anglefloat zangle ; player z axis anglefloat xxx ; player x coordinatesfloat yyy ; player y coordinatesfloat zzz ; player z coordinatesfloat xxxx ; boat x coordinate when land on shorefloat yyyy ; boat y coordinate when land on shoreshort landed ; parameter set when player landedfloat stimer ; timer used to delay delete objectshort sscript ; parameter set when cell changeshort doOnce ; parameter used to set boat position once immediately after creationshort select ; button used for selecting optionsshort selectflag1 ; flag set when boat is activatedshort selectflag2 ; flag set when FTS or Fast Travel is selectedshort delay ; parameter used to delay Disable/Enableshort temp ; temporary parametershort flagshort pressed ; flag to chk SNEAK button pressed and releasedfloat xdist ; parameter used to calculate x distancefloat ydist ; parameter used to calculate y distancefloat distance ; parameter used to calculate avg distanceshort startflag ; parameter used to chk whether boat is dockingshort disableflag ; flag used to disable ship scriptshort repair ; parameter used to calculate repair pts;-------------------------------------------------------------------------------------------------------------------------------------------------------------; SCRIPT BEGINS;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( MenuMode == 1 )returnendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Delete object;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( disableflag == 1 )Disableif ( CellChanged == 1 )SetDelete, 1endifreturnendifif ( KS_SR_Boat_Speed > 0 )if ( CellChanged == 1 )set KS_SR_Boat_Cellchange to 1endifendifif ( KS_SR_Ship_Exist == 4 )set disableflag to 1set KS_SR_Ship_Exist to 5returnendifif ( KS_SR_Ship_Exist == 2 )set KS_SR_Boat_Speed to 0set KS_SR_Boat_Sailmode to 0Stopscript KS_SR_Boat_Multiplierset KS_SR_Ship_Exist to 3endifif ( KS_SR_Ship_Exist >= 2 )if ( KS_SR_Ship_Exist != 10 )returnendifendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Object will warp or remain in previous cell during cell change. To replace the object,; a new object is created. Requires global script "KS_SR_Boat_Create" to create new object.;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )if ( KS_SR_Boat_Cellchange == 1 )startscript, "KS_SR_Boat_Create"set KS_SR_Boat_Cellchange to 2set stimer to 0if ( sscript > 0 )SetDelete, 1returnendifset sscript to 1endifendifif ( sscript == 1 )if ( KS_SR_Boat_Cellchange == 0 )Disableset sscript to 2endifendifif ( sscript == 2 )set stimer to ( stimer + GetSecondsPassed )if ( stimer >= 1.5 )SetDelete, 1returnelsereturnendifendifif ( KS_SR_Boat_Speed > 0 )if ( delay == 0 )Disableset delay to 1endifendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set boat initial coordinates;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( doOnce == 0 )Disableif ( KS_SR_Boat_X != 0 )if ( KS_SR_Boat_Y != 0 )set xx to KS_SR_Boat_Xset yy to KS_SR_Boat_Yif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetpos, x, xxsetpos, y, yysetpos, z, 2setAngle, z, oangleendifendifEnableset doOnce to 1endif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set coordinates correct boat coordinates immediately after load game;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 0 )set xx to KS_SR_Boat_Xset yy to KS_SR_Boat_Yif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetpos, x, xxsetpos, y, yysetpos, z, 2setAngle, z, oangleendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Select Menu Routine;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( selectflag1 == 1 )set select to GetButtonPressedif ( select == 0 )stopscript KS_SR_Boat_Multiplierstartscript KS_SR_Boat_Multiplier_03set KS_SR_Boat_Sailmode to 0messagebox "БЫСТРОЕ ПУТЕШЕСТВИЕ", "Назад к кораблю", "Дагон Фел", "Гнаар Мок", "Хла Оуд", "Хуул", "Садрит Мора", "Сейда Нин", "Тель Бранора", "ВЫЙТИ"set selectflag2 to 1set selectflag1 to 0elseif ( select == 1 )startscript KS_SR_Boat_Create_Detect_Rmessagebox "Лодка: Самый малый назад!"set KS_SR_Boat_Speed to -1set selectflag1 to 0elseif ( select == 2 )messagebox "Лодка надежно стоит на якоре..."set KS_SR_Boat_Speed to 0set landed to 2set selectflag1 to 0elseif ( select == 3 )if ( KS_SR_Boat_Damage == 100 )Messagebox "Повреждений нет!"elseif ( player->GetItemCount, "KS_SR_misc_ship_repair" > 0 )playsound "Repair"player->removeitem "KS_SR_misc_ship_repair", 1set repair to Random, 100set KS_SR_Boat_Damage to ( KS_SR_Boat_Damage + repair )if ( KS_SR_Boat_Damage > 100 )set KS_SR_Boat_Damage to 100endifmessagebox "Состояние лодки = %.0f / 100", KS_SR_Boat_Damageelsemessagebox "У вас нет инструментов для ремонта лодки..."endifset selectflag1 to 0elseif ( select == 4 )if ( KS_SR_Boat_Auto == 0 )set KS_SR_Boat_Auto to 1messagebox "Автоматическое управление"elseif ( KS_SR_Boat_Auto == 1 )set KS_SR_Boat_Auto to 0messagebox "Ручное управление"endifset selectflag1 to 0set KS_SR_Boat_Speed to tempelseif ( select == 5 )set selectflag1 to 0set KS_SR_Boat_Speed to tempendifreturnendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; FAST TRAVEL ROUTINE;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( selectflag2 == 1 )set select to GetButtonPressedif ( select == 0 )if ( KS_SR_Ship_Exist == 0 )messagebox "У вас нет корабля!"set selectflag2 to 0set KS_SR_Boat_Speed to tempset KS_SR_Boat_Sailmode to 1elsefadeto 100, 0.001set KS_SR_Boat_X to ( KS_SR_Ship_X + ( 450 * KS_SR_Boat_Xmul ) )set KS_SR_Boat_Y to ( KS_SR_Ship_Y + ( 450 * KS_SR_Boat_Ymul ) )set KS_SR_Boat_Angle to KS_SR_Ship_Anglestartscript KS_SR_Boat_FTravel_Shipset selectflag2 to 2set disableflag to 1endifelseif ( select == 1 )fadeto 100, 0.001set KS_SR_Boat_X to 61554set KS_SR_Boat_Y to 186452set KS_SR_Boat_Angle to 180startscript KS_SR_Boat_FTravel_DFset selectflag2 to 2set disableflag to 1elseif ( select == 2 )fadeto 100, 0.001set KS_SR_Boat_X to -64276set KS_SR_Boat_Y to 25636set KS_SR_Boat_Angle to 60startscript KS_SR_Boat_FTravel_GMset selectflag2 to 2set disableflag to 1elseif ( select == 3 )fadeto 100, 0.001set KS_SR_Boat_X to -48854set KS_SR_Boat_Y to -38646set KS_SR_Boat_Angle to 0startscript KS_SR_Boat_FTravel_HOset selectflag2 to 2set disableflag to 1elseif ( select == 4 )fadeto 100, 0.001set KS_SR_Boat_X to -71650set KS_SR_Boat_Y to 139486set KS_SR_Boat_Angle to 90startscript KS_SR_Boat_FTravel_KHset selectflag2 to 2set disableflag to 1elseif ( select == 5 )fadeto 100, 0.001set KS_SR_Boat_X to 139792set KS_SR_Boat_Y to 40697set KS_SR_Boat_Angle to 90startscript KS_SR_Boat_FTravel_SMset selectflag2 to 2set disableflag to 1elseif ( select == 6 )fadeto 100, 0.001set KS_SR_Boat_X to -8372set KS_SR_Boat_Y to -72160set KS_SR_Boat_Angle to 270startscript KS_SR_Boat_FTravel_SNset selectflag2 to 2set disableflag to 1elseif ( select == 7 )fadeto 100, 0.001set KS_SR_Boat_X to 120319set KS_SR_Boat_Y to -100934set KS_SR_Boat_Angle to 180startscript KS_SR_Boat_FTravel_TBset selectflag2 to 2set disableflag to 1elseif ( select == 8 )set KS_SR_Boat_Speed to tempset selectflag2 to 0set KS_SR_Boat_Sailmode to 1endifif ( select >= 0 )startscript KS_SR_Boat_Multiplierendifreturnendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Activate sailing;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( OnActivate = 1 )if ( KS_SR_Boat_Sailmode == 0 )StopScript "TribunalMain"DisablePlayerJumpingplayer->DisableTeleportingplayer->DisableLevitationset xx to getPos, xset yy to getPos, yplayer->setPos, x, xxplayer->setPos, y, yyplayer->setPos, z, 0player->AddSpell "KS_SR_floatboat" ; this spell ( ability ) keeps player fm falling downset KS_SR_Boat_Speed to 0set KS_SR_Boat_Sailmode to 1messagebox "Убедитесь, что включен режим БЕГА!"startscript KS_SR_Boat_Multiplierstartscript KS_SR_Boat_Create_Detectif ( KS_SR_Ship_Exist == 10 )set KS_SR_Ship_Exist to 1endifelseif ( KS_SR_Boat_Sailmode == 1 )messagebox "НАВИГАЦИЯ"endifendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Gather object and player coordinates;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )set xx to getPos, xset yy to getPos, yif ( xx != KS_SR_Boat_X )set xx to KS_SR_Boat_Xendifif ( yy != KS_SR_Boat_Y )set yy to KS_SR_Boat_Yendifset xxx to "player"->getPos, xset yyy to "player"->getPos, yset zzz to "player"->getPos, zendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Collision Detection Check-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )set KS_SR_Boat_Xdistance to ( xxx - xx )set KS_SR_Boat_Ydistance to ( yyy - yy )set xdist to ( KS_SR_Boat_Xdistance * KS_SR_Boat_Xdistance )set ydist to ( KS_SR_Boat_Ydistance * KS_SR_Boat_Ydistance )set distance to ( xdist + ydist )set KS_SR_Boat_Distance to GetSquareRoot, distanceendifif ( KS_SR_Boat_Speed > 0 )if ( GetPCRunning == 0 )if ( KS_SR_Boat_Distance > 30 )set KS_SR_Boat_Hitflag to 3set flag to 1playsound "Pack"messagebox "По-берегитесь! Ваша лодка УДАРИЛАСЬ обо что-то твердое..."endif;messagebox "%.2f", distanceendifendifif ( KS_SR_Boat_Hitflag == 3 )if ( KS_SR_Boat_Speed > 0 )set KS_SR_Boat_Damage to ( KS_SR_Boat_Damage - KS_SR_Boat_Speed )messagebox "Повреждения = %.0f, Состояние лодки = %.0f / 100", KS_SR_Boat_Speed , KS_SR_Boat_Damageendifif ( KS_SR_Boat_Damage <= 0 )Disablemessagebox "Ваша лодка потерпела КРУШЕНИЕ!"set KS_SR_Boat_Speed to 0set KS_SR_Boat_Hitflag to 0playsound, "KS_SR_Boat_Wreck"set KS_SR_Boat_Exist to 0EnablePlayerJumpingplayer->EnableTeleportingplayer->EnableLevitationset KS_SR_Boat_Sailmode to 0player->RemoveSpell "KS_SR_floatboat"StartScript "TribunalMain"SetDelete, 1returnendifif ( flag == 0 )if ( KS_SR_Boat_Speed > 0 )set xxxx to ( xx - ( KS_SR_Boat_Xmul * 40 ) )set yyyy to ( yy - ( KS_SR_Boat_Ymul * 40 ) )elseset xxxx to ( xx + ( KS_SR_Boat_Xmul * 10 ) )set yyyy to ( yy + ( KS_SR_Boat_Ymul * 10 ) )endifelseset xxxx to ( xx - ( KS_SR_Boat_Xmul * 200 ) )set yyyy to ( yy - ( KS_SR_Boat_Ymul * 200 ) )endifset xx to xxxxset yy to yyyyset KS_SR_Boat_Speed to 0set KS_SR_Boat_Hitflag to 0set flag to 0endif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Restore all parameters after landing;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( landed > 0 )set KS_SR_Boat_Speed to 0Stopscript KS_SR_Boat_MultiplierDisableset landed to 0set KS_SR_Boat_X to getPos, xset KS_SR_Boat_Y to getPos, yEnablePlayerJumpingplayer->EnableTeleportingplayer->EnableLevitationplayer->RemoveSpell "KS_SR_floatboat"setPos, z, 2Enableset KS_SR_Boat_Sailmode to 0StartScript "TribunalMain"returnendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Speed Control;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode == 1 )if ( GetPCRunning == 1 )if ( ScriptRunning, "KS_SR_Boat_Multiplier_02" == 0 )startscript "KS_SR_Boat_Multiplier_02"endifendifendifif ( KS_SR_Boat_Sailmode == 1 )if ( GetPCRunning == 1 )if ( KS_SR_Boat_Gear == 1 )if ( KS_SR_Boat_Speed < 10 ) ; max speed can be adjusted here ( default = 10 )set KS_SR_Boat_Speed to ( KS_SR_Boat_Speed + 1 )if ( KS_SR_Boat_Speed > 10 )set KS_SR_Boat_Speed to 10endifmessagebox "Скорость лодки : %.0f", KS_SR_Boat_Speedelsemessagebox "Скорость лодки : %.0f (предельная )", KS_SR_Boat_Speedendifelseif ( KS_SR_Boat_Gear == 2 )if ( KS_SR_Boat_Auto == 0 )if ( KS_SR_Boat_Speed != 0 )rotate, z, -60set oangle to getAngle, zif ( oangle >= 0 )set KS_SR_Boat_Angle to ( oangle - 180 )elseset KS_SR_Boat_Angle to ( 180 + oangle )endifendifendifelseif ( KS_SR_Boat_Gear == 3 )if ( KS_SR_Boat_Auto == 0 )if ( KS_SR_Boat_Speed != 0 )rotate, z, 60set oangle to getAngle, zif ( oangle >= 0 )set KS_SR_Boat_Angle to ( oangle - 180 )elseset KS_SR_Boat_Angle to ( 180 + oangle )endifendifendifelseif ( KS_SR_Boat_Gear == 4 )if ( KS_SR_Boat_Speed > 0 ) ; min speed can be adjusted here ( default = 0 )set KS_SR_Boat_Speed to ( KS_SR_Boat_Speed - 1 )messagebox "Скорость лодки : %.0f", KS_SR_Boat_Speedelseset KS_SR_Boat_Speed to 0messagebox "Скорость лодки : 0 ( остановлена )"endifendifelsestopscript "KS_SR_Boat_Multiplier_02"endifendifif ( KS_SR_Boat_Sailmode == 1 )if ( pressed == 0 )if ( GetPCSneaking == 1 )set pressed to 1endifelseif ( GetPCSneaking == 0 )set pressed to 0messagebox "ОПЦИИ" "Быстрое путешествие" "Задний ход" "Бросить якорь" "Чинить лодку" "Авто/ручной режим" "ВЫЙТИ"Enableset selectflag1 to 1set temp to KS_SR_Boat_Speedset KS_SR_Boat_Speed to 0returnendifendifendif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Sail direction calculation by using player zrot angle - resolution 1 degree;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )set xx to ( xx + ( KS_SR_Boat_Xmul * KS_SR_Boat_Speed ) )set yy to ( yy + ( KS_SR_Boat_Ymul * KS_SR_Boat_Speed ) )endif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; Set the sailing motion;-------------------------------------------------------------------------------------------------------------------------------------------------------------if ( KS_SR_Boat_Sailmode > 0 )player->setPos, x, xxplayer->setPos, y, yyplayer->setPos, z, 2setPos, x, xxsetPos, y, yysetPos, z, 2set KS_SR_Boat_X to xxset KS_SR_Boat_Y to yyif ( KS_SR_Boat_Auto == 1 )if ( KS_SR_Boat_Speed > 0 )set KS_SR_Boat_Angle to "player"->getAngle, zif ( KS_SR_Boat_Angle >= 0 )set oangle to ( KS_SR_Boat_Angle - 180 )elseset oangle to ( 180 + KS_SR_Boat_Angle )endifsetAngle, z, oangleendifendifendifif ( delay == 1 )Enableset delay to 0endif;-------------------------------------------------------------------------------------------------------------------------------------------------------------; SCRIPT ENDS;-------------------------------------------------------------------------------------------------------------------------------------------------------------End KS_SR_Boat_ScriptЕсли найдется время, буду благодарен за помощь.
-
А чего вообще не хватает до релиза 1.0? Кроме багофикса и OpenMW-CS.
-
С анимациями атаки в OpenMW вообще пока довольно грустно, так что помощь знающего человека была бы кстати.
Поддержкой анимации в OpenMW занимался kcat, можно поинтересоваться у него.
-
Можно ли будет использовать MWSE2 скрипты в OpenMW, когда там добавят поддержку Lua?
-
Сейчас проверил. В 0.43 - быстрые атаки от первого лица если и дают смещение, то минимальное. В 0.44 - то же самое, но смещение отчетливо видно.
Дополню: с анимацией ног при атаке что-то не так (0.44), потому смещение значительнее, чем раньше.
В 0.43 анимация проигрывается нормально.
-
Не вижу никакой разницы. Что в 0.43 анимации атаки баговатые, что в 0.44, что в мастер-ветке. Багрепорт вон с 2016 года висит.
Сейчас проверил.
В 0.43 - быстрые атаки от первого лица если и дают смещение, то минимальное.
В 0.44 - то же самое, но смещение отчетливо видно.
-
https://gitlab.com/OpenMW/openmw/issues/3330
https://gitlab.com/OpenMW/openmw/issues/4127
С анимациями атак полно проблем. К сожалению, отлаживать их очень сложно.
Как я понял, у анимаций атаки прописано небольшое движение, причем если анимация проиграна полностью, то результирующее движение будет ноль.
Но похоже, что мы не проигрываем их правильно (так какая-то ерунда с замахом), вот смещение и остается..
В 0.43.0 сей баг был менее выражен.
-
Похоже что-то не так с анимацией.
Атаки одноручным оружием двигают персонажа, от первого лица - направо, от третьего - назад-налево. Двуручным - вперед-налево, но только от третьего лица.
-
А если усталось на нуле? Или не на нуле, но на полное натяжение не хватает?
Пока можно оставить то же поведение, как и с оружием ближнего боя. Бить\стрелять можно, но усталость на нуле.
Если развивать мысль, то тут конечно нужны штрафы, что-то типа замедления атаки, и это должно распространяться на всё оружие. Но это уже уводит к переделке всей боевой системы.
-
Пришли. Сошлись на том, что достоинства перевешивают недостатки:
1. TES3MP и MWSE2 используют Lua, так что модерам надо будет только один язык учить.
2. Lua - один из самых быстрых скриптовых языков, и специально предназначен для встраивания в другие программы (для него проще сделать песочницу)
3. Lua довольно популярен и частенько используется именно для скриптования игр, и модеру будет легче найти примеры.
Из недостатков приводят в основном то, что он не особо эстетичен, как что периодически всплывают комментарии "а сделайте лучше JavaScript/Rust/AngelScript".
Также отдельный вопрос с автоматизацией редактора - там вроде в планах Python есть (непонятно, зачем).
А момент выхода из канцелярии разве движком ловится, а не скриптами? Разве что скриптовую команду для автосейва добавить.
Круто, а то я боялся, что начнется перетягивание одеяла...
Ловится скриптами, но вызвать автосейв оттуда никак нельзя.
Ещё в копилку:
- Вкладка "Магия" в инвентаре выдает все предметы с зачарованием (доспехи, оружие, свитки) плюс зелья, напитки, ингредиенты. Хорошо бы добавить еще вкладку "Алхимия", которая будет отвечать за зелья, напитки, ингредиенты. Можно конечно поступить как в Скайриме - добавить вкладки "Зелья", "Свитки", "Ингредиенты", но возможно это избыточно.
Свитки почему-то показываются и в "Магии", и в "Разном".
-
Согласен. Это скорее вишлист пост-1.0 :)
Кстати, по поводу Lua, уже пришли к согласию по его использованию? А то помнится, что Zini хотел пилить что-то своё.
Еще пожелание:
- Автосейв при выходе из Канцелярии после генерации персонажа и получения первого квеста. А то бывает грохнут поначалу - приходится всё заново начинать, если не сохранился.
-
А попадание разве стопроцентное из лука и арбалета?
Да и вообще можно у всего оружия и ближнего тоже, чтоб силы с началом замаха тратились.
Сейчас зависит от Меткости. Но выглядит странно - стрела чётко летит вражине в лоб, но почему-то не попадает. Условности, да, но не так же грубо...
Лучше и реалистичнее было бы сделать стопроцентное попадание при "попадании" снаряда, а уровень Меткости показывать разлетом боеприпасов.
С рукопашкой то же самое - даже неумеха должен попасть дубиной по здоровому грязекрабу, но вот эффективность попадания должна зависить от навыков.
Оружие ближнего боя обычно не настолько тяжелое, чтобы устать от замаха. Вот момент удара требует усилий :)
-
Раз уж на то пошло, то и арбалетам при зарядке.
Да, верно.
Причем хорошо бы связать расход усталости с уроном лука\арбалета. Мощное оружие тяжелее натянуть.
Ещё добавлю:
- Сейчас стрела летит прямо в точку прицела, вне зависимости от Меткости, которая лишь задает шанс урона при попадании. Хорошо бы сделать радиус разлета стрел и связать его c Меткостью.
-
В копилку идей:
- Добавить расход усталости при натянутой тетиве лука. В данный момент, усталость тратится (и то минимально) лишь при отпускании тетивы.
-
Навмешы бы.
На форуме OpenMW как-то заходила речь об их поддержке, но дальше слов дело не продвинулось.
-
А вообще, сейчас основная проблема ИИ - это простецкий алгоритм обнаружения и обхода препятствий, который не умеет обнаруживать обрывы, и пытается обойти препятствие, только когда персонаж уже две секунды бежит на месте в стену.
Ага, помню, что вы спрашивали про steering behaviour на форуме OpenMW.
Есть же разные библиотеки типа OpenSteer или SteerSuite. Или не вариант?
-
akortunov, а что вообще в планах на будущее? И большое спасибо за весь ваш вклад в OpenMW.
-
Оживилась тема о поддержке Обливиона:
- сс9сii пообещал продолжить работу над своим форком (именно оттуда светились видео с ассетами из ТЕС4/5), но посетовал на нехватку времени.
- Deltaxus взялся за реверс-инжиниринг скриптового движка.
- Появился форк с поддержкой сохранения/загрузки в редакторе в формат ТЕС4.
- сс9сii пообещал продолжить работу над своим форком (именно оттуда светились видео с ассетами из ТЕС4/5), но посетовал на нехватку времени.
TES3MP
в OpenMW Engine
Опубликовано
Это всё надо вынести на обсуждение с сообществом. Но очень не хотелось бы видеть две отдельные кодовые базы...