Анимация в Thief

Автор Chuzhoi, 23 мая 2011 05:24:53

« назад - далее »

0 Пользователи и 3 гостей просматривают эту тему.

Chuzhoi

Вопрос.
Нужно отключить или уменьшить физ. модель до начала проигрывания смертельной анимации.
Вообще она отключается, но только уже после того, как эта анимация проиграна. А нужно до.
Причина - слизняк при умирании "расплывается" в нечто вроде плоской лепешки, а физ. модель не дает этой лепешке полностью опуститься на землю. А повисший в воздухе на высоте 20-30 сантиметров труп - это не очень эстетично.
Что делать?

Zontik

У меня была внешне похожая проблема с лошадью-оборотнем: из-за огромных размеров она при падении не долетала до земли и повисала в воздухе.
Вылечилось исправлением финальной Z-координаты в анимации смертельного падения. Я сместил ее ниже нуля.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Именно так у меня и сделано. Причем пробовал задавать смещение заведомо большее, чем нужно - никакого эффекта. Когда физическая модель достигает земли, движение по вертикали прекращается.
Кстати, если поставить снеговик, то перед смертельной анимацией размер модели уменьшается (как раз, видимо, чтобы не мешать падению). Но я использовал Sphere hat, т. к. снеговик не захотел менять размер.

Zontik

Тогда я не знаю простого способа.
Можно попробовать принудительное изменение свойств через скрипт TrigSlain (он вроде бы срабатывает сразу, а не после завершения анимации), но это громоздкий способ, ктому же требующий знания S&R. И я совершенно не уверен, что физический размер модели можно изменить динамически.
Я не пробовал экспериментировать с моделью Sphere Hat... там нет такого понятия, как смещение? У OBB есть по всем трем координатам (Physical > Dimensions), и это очень удобно - можно поставить физическую модель вообще в противоположном углу комнаты от объекта.
Я просто не понял: а что, в нормальном положении физическая модель находится выше земли? Если да и это не критично, может, просто приподнять ее еще?
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Как я понял, у AI физическая модель жестко привязана к суставу таза (JBUTT). Все попытки ее сдвинуть путем ввода координат были безрезультатны (хотя у неживых объектов физ. модель вроде бы нормально смещается).
В нормальном положении слизняка физ. модель находится чуть выше земли, что позволяет при анимациях сместить ее вниз на 0,1 единицы, но не более. Для смерти требуется смещение примерно 0,4-0,5 единиц. Можно уменьшить физ. модель, но тогда будет очень трудно попадать по слизняку (мечом или стрелой).
Можно еще чуть-чуть приподнять сустав таза ценой небольшого искажения анимации, но уже практически некуда.

Zontik

Я думаю, проблема в несовершенстве выбранной физической модели.
Снеговик в этом плане работает несколько четче. Возможно, сферическая шляпка просто не предназначалась для AI.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

#96
В том-то и дело, что со снеговиком было еще хуже - он жестко настроен на людей (две сферы, нижняя в тазе радиусом 1,0 ед, верхняя - в районе шеи, радиус 1,2 ед.) И все. Ничего не смещается и не изменяется. В Sphere Hat удалось по крайней мере радиус поменять.

Вчера я довольно робко смотрел на LGScript. Сегодня смотрю уже гораздо смелее. Попробовать, что ли?

LongShad

ЦитироватьLGScript
Здорово!  :yay:
Неужели весь предыдущий хлам теперь можно выбросить на помойку и писать собственные свитки с заклинаниями, а не пользоваться чужими?

Chuzhoi

Попробовал.
Все прекрасно работает.
Вот скрипт:

function Slain(msg)
lgs.PhysSrv.DeregisterModel(msg.to)
return true
end


Правда, возникла одна проблемка. Когда физическая модель убирается, стрела пролетает прямо сквозь слизняка, втыкаясь в ближайшую стену, что нехорошо. Death Stage установлен в 0 - если выстрел не смертельный, то стрела исчезает.
Не знаю теперь, что с этой стрелой делать.

Chuzhoi

Итак, проблема решена.


function Slain(msg)
lgs.PropertySrv.Set(msg.to, "PhysDims", "Radius 1", 1)
return true
end


Перед проигрыванием смертельной анимации физическая модель не убирается, а уменьшается в размерах. Последний параметр (единица) - это новый радиус модели (у живого слизняка он равен 1.35).
Специально пострелял по краям сферы - все нормально, стрела не пролетает.

Chuzhoi

Никак не могу добиться проигрывания звука при попадании стрелой/мечом. Не болевого вопля (с ним все в порядке), а именно звука попадания.

Вроде все делаю по образу и подобию.

1. В ENVSOUND.SPC добавил CreatureType:
tag CreatureType Ape Apparition ...... Zombie Slug

2. В HITS.SCH вписал Slug везде, где описаны попадания, например:

//Hitting unarmored person
schema arrow_body
archetype HIT_PROJECTILE
ar_body1 ar_body2
env_tag (Event Collision) (CreatureType Ape Apparition Burrick Frog Rat Servant Spider Zombie Slug) (ArrowType Broadhead Rope Vine)

3. Звук шагов (FEET.SCH) пока не делал за неимением такового

4. Назначил архетипу слизняка Class Tags: CreatureType Slug

5. Сделал reload_schemas и сохранил Gamesys

При попадании мечом/стрелой никакого звука не слышно. Если же убрать CreatureType Slug, то звуки появляются - но это звуки с металлическим оттенком, унаследованные от родительского архетипа creature (CreatureType Guard). А мне нужна обычная плоть.

Можно, конечно, задать любой подходящий CreatureType (например, Servant), и тогда звук ударов появляется, но все равно для звуков шагов придется делать отдельный CreatureType.

Zontik

Думаю, ты просто где-то в какой-то строчке что-то пропустил. Нужно еще раз внимательно просмотреть все схемы. Должно работать.
Если вдруг ничего не выйдет - как вариант могу предложить пойти на обман: привязать звуки ударов к воплям боли (загнать их прямо в WAVы). Сделать побольше разных вариантов, чтобы чаще чередовались.
Еще как маловероятная версия: в некоторых строках возможно превышение максимальной длины. Какая она - никто толком не знает, но даже сами LGS разбили некоторые особо длинные строки на две. Возможно, когда ты дописываешь Slug в какую-нибудь длинную строку, она как раз вылезает за предел, а при интерпретации движок отбрасывает все лишнее. Slug последний, он и оказывается лишним.
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

ЦитироватьЕще как маловероятная версия: в некоторых строках возможно превышение максимальной длины.
Именно эта версия и оказалась правильной! Когда описывается env_tag, то существ в одной строке должно быть не больше восьми.
Причем это превышение было именно в строках, где удар мечом и попадание стрелой. Все остальные удары, вероятно, работали нормально - но ударить его дубинкой или пострелять из обезьяней трубки я как-то не догадался...

Zontik

Ох, я чувствую, Zoro так и не получит своего слизня. Придется ему выковыривать его из твоей FM, и еще разрешения спрашивать...
(просто намекаю на setup, который уже на два порядка сложнее самой модели)
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

Ничего, пусть подождет, немного осталось. Самое сложное из оставшегося - звук "шагов", который я пока еще смутно представляю, как он должен звучать и как его получить.

Что касается собственной ФМ, то я пока не готов ее делать в DromEd - мне по-прежнему многое кажется в нем крайне неудобным. Хотя бы это маленькое окошко, сильно ограничивающее обзор... Хотя субтрактивная геометрия (почти как в Unreal Engine) - это, безусловно, огромный плюс по сравнению с тем же Doom 3.