Да, получилось, только Думгуй становится на ноги, а не приземляется до вида с пятки, поэтому в этом режиме смысла нет. Нужен свободный полёт камеры, в любую точку, в пределах уровня.
1) Что-то не могу заставить заменяться спрайт-на модель CandleStick - свечку. В Decorate всё как и для всех прописывается как я понял, а вот в Modeldef - уже что-то видно не то пишу, или чего-то не хватает...
B DECORATE:
Скрытый текст:
ACTOR Candlestick_Model : Candlestick replaces Candlestick { States { Spawn: CAND A 35 Bright CAND B 35 Loop } }
B Modeldef:
Скрытый текст:
Model Candlestick { Path "Models\Decoration\Lights\Flaming" model 0 "Candlestick.md2" model 1 "Candleflame.md3" skin 0 "candlestik.png" skin 1 "candleflame.png" scale 0.5 0.5 0.5
FrameIndex CAND A 0 0 FrameIndex CAND A 1 0
Интересует простой режим мигания между моделями. Дело тут как я понял в многомодельности одной записи, в которой несколько моделей, потому что раньше я заполнял по одной модели - проблем не было, а где больше одной - там модель не появляется - всё время спрайт на экране.
2) И вообще, если не трудно - можешь мне объяснить принцип работы строчки: FrameIndex ? Я не совсем понимаю логику работы 4-ёх последних параметров CAND A 0 0. C первым CAND - вроде как понятно, это Lump - имя спрайта в WAD'e, а вот дальше начинается тёмный лес. Вроде как и просто, но логика работы не ясна. A - Sprite Frame, вроде понятно, что - кадр спрайта, дальше - 0 - Index Model, индекс модели в столбике, и последняя цифра 0 - Index Skin, индекс скина (текстуры). Да, но вот работу между этими параметрами мне понять не удалось.
Странное дело, что когда с моделями идут 2 текстуры, являясь фрагментами анимации, то надо дважды создавать столбик в которых эти текстуры - в каждом своя. Только тогда будет работать. Я так подумал - почему бы не указать просто (например) в FrameIndex CAND A 0 0, а сдедующая строка - FrameIndex CAND A 0 1 - то есть вторую цифру указать как второй Скин и всё, по моему это должно работать - но не работает. Работает, с пропиской в 2 столбца, в которых разные скины, да ещё и указанием разных люмпов (CAND) и в добавок, иногда разных Frame Sprite и Model Index, - короче каша в голове, не могу въехать как это всё разложить по полкам.
1) Что-то не могу заставить заменяться спрайт-на модель CandleStick - свечку. В Decorate всё как и для всех прописывается как я понял, а вот в Modeldef - уже что-то видно не то пишу, или чего-то не хватает...
Скрытый текст:
На будущее: если возникает проблема "спрайт не переключается на модель", попробуй убедиться, что "модель работает даже без переключалок". Т.е. в твоем случае с Candlestick, отключи весь декорейт код для нее, а моделдеф приаттачь к фрейму А (фрейм В не трогай). Тогда будет 2 варианта:
1) если модель заработает - значит проблема в коде переключалки спрайта на модель 2) а если модель не заработает даже в таком случае - значит надо искать проблему в самой модели: ее дефиниции, ее файлах или совместимости гоззы с ее форматом, а про "переключалку спрайта на модель" забыть
Помни эти 2 пункта постоянно. Рекомендую вообще так делать:
1) допустим ты захотел добавить себе в мод новую модель 2) берешь, и добавляешь ее себе БЕЗ модификации декорейта 3) только если пункт 2 работает нормально, тогда начинаешь ковырять декорейт и активировать переключалку модели на спрайт
тогда проблем станет меньше
aivar242:
Интересует простой режим мигания между моделями. Дело тут как я понял в многомодельности одной записи, в которой несколько моделей, потому что раньше я заполнял по одной модели - проблем не было, а где больше одной - там модель не появляется - всё время спрайт на экране.
вот в чем проблема может быть:
Скрытый текст:
aivar242:
B DECORATE: Скрытый текст:
ACTOR Candlestick_Model : Candlestick replaces Candlestick
aivar242:
B Modeldef: Скрытый текст:
Model Candlestick
в моделдеф сделай так:
Model Candlestick_Model
если не поможет, то возможно проблема в том, что:
aivar242:
model 1 "Candleflame.md3"
гозза не хочет формат md3 отображать. Тогда попробуй сконвертировать его в md2 например программой quark http://quark.sourceforge.net/
Если не поможет, попробуй каждую текстуру (которые у тебя в png) пересохранить в редакторе (возможно png-шки кривые)
aivar242:
И вообще, если не трудно - можешь мне объяснить принцип работы строчки: FrameIndex ?
Могу:
Скрытый текст:
представь, что ты моделлишь барана ада в 3д редакторе. Вот ты берешь, двигаешь ему руку вверх, потом вниз, и хочешь, чтобы в самой игре он умел двигать руку вверх и вниз. Для этого, тебе надо в модельке создать фрейм под именем "рука снизу", и в рамках этого фрейма сохранить позицию модели так, чтобы рука была снизу. Точно также ты создаешь фрейм "рука сверху". После этого ты сохраняешь модель например в формате md2, в котором сохранены все полигоны твоей модельки, и указано 2 фрейма: рука снизу (где уточнено, что полигоны руки находятся снизу на таком-то смещении) и рука сверху (где уточнено, что полигоны руки находятся сверху на таком-то смещении)
Теперь представь, что спрайт барона (точнее его анимация атаки) выглядит так:
BARN A 15 //это фрейм спрайта где рука сверху BARN B 15 //это фрейм спрайта где рука снизу
Ты хочешь заменить эти спрайтовые фреймы своими модельными. Логично, что спрайт-фрейм "рука сверху" ты хочешь заменить модельным фреймом где тоже рука сверху, а спрайт-фрейм "рука снизу" ты хочешь заменить модельным фреймом где рука снизу
В таком случае код modeldef будет примерно такой:
Frame BARN A "рука сверху" Frame BARN B "рука снизу"
в md2 формате можно указывать фреймы как именами так и числами, например в нашем случае есть 2 варианта записи моделдефа:
именами:
Frame BARN A "рука сверху" Frame BARN B "рука снизу"
или числами:
FrameIndex BARN A 0 FrameIndex BARN B 1
Имена фреймов можно узнать либо открыв модель в любом редакторе (например том же quark) либо посмотрев в DED дефиниции думсдей. Если же имен фреймов мы не знаем (либо их вообще нет, что тоже может быть), тогда мы вместо имен указываем числа, т.е. индексы:
FrameIndex BARN A 0 FrameIndex BARN B 1
формат md3 вообще не поддерживает имена, только индексы (не знаю зачем они так сделали, но не суть)
Итак, с фреймами разобрались, но остался нюанс комбинации моделей. Ведь в моделдефе там по 2 числа, верно?
Представь, что:
Скрытый текст:
Представь, что нашему барону (у которого рука сверху-снизу) ты захотел присобачить вторую модель - модель зеленого шарика (не того, который в тебя летит, а того, который окружает его кулак при его анимации атаки). У модели шарика будут те же 2 фрейма: "шарик сверху" и "шарик снизу". Код моделдеф будет такой:
Model Baran_Ada { Path "путь к файлам модели"
Model 0 "имя файла модели руки.md2" Skin 0 "имя файла текстуры руки.png"
Model 1 "имя файла модели шарика.md2" Skin 1 "имя файла текстуры шарика.png"
//ДАЛЕЕ ИДУТ ПАРАМЕТРЫ МОДЕЛИ (scale, offset и прочее)
Frame BARN A 0 "рука сверху" Frame BARN B 0 "рука снизу"
Frame BARN A 1 "шарик сверху" Frame BARN B 1 "шарик снизу" }
обрати внимание: у нас 2 модели: модель ноль (это модель руки) и модель один (это модель шарика). Соответственно, когда после BARN A у нас написана цифра ноль, значит гозза понимает, что речь идет о модельке руки, а когда после BARN A у нас написана цифра один, значит гозза понимает, что речь идет о модельке шарика
Иными словами, раз мы хотим спрайтовому фрейму А дать в соответствие 2 фрейма: фрейм "рука сверху" модельки руки и фрейм "шарик сверху" модельки шарика, то мы пишем вот так:
Frame BARN A 0 "рука сверху" Frame BARN A 1 "шарик сверху"
и гозза сообразит, что на спрайтовый фрейм BARN A надо отобразить 2 модели с соответствующими фреймами этих моделей
Напомню, что фреймы в моделдефе можно указывать не только именами, но и числами. Тогда наш код modeldef будет такой:
Model Baran_Ada { Path "путь к файлам модели"
Model 0 "имя файла модели руки.md2" Skin 0 "имя файла текстуры руки.png"
Model 1 "имя файла модели шарика.md2" Skin 1 "имя файла текстуры шарика.png"
//ДАЛЕЕ ИДУТ ПАРАМЕТРЫ МОДЕЛИ (scale, offset и прочее)
FrameIndex BARN A 0 0 FrameIndex BARN B 0 1
FrameIndex BARN A 1 0 FrameIndex BARN B 1 1 }
Т.е. первое число это номер модели, второе число это номер фрейма
1) А, я думал что вторая цифра - это индекс текстуры. Ведь логично, что первая - это индекс модели, которая пронумерована выше, так и у текстуры эта нумерация должна быть... А получается, что вторая значит не индекс текстуры а фрейм? Так ведь есть уже фрейм, указанный буквами А и В?
2) В случае, если в файлах модели, используются 2 текстуры, создающие анимацию из 2 текстур, то надо писать 2 столбца, с одной текстурой в каждом, чтобы они читаясь Гоззой и изображали анимацию. Вопрос: - Нельзя ли как-то это одним столбиком изобразить?
Скрытый текст:
Model HealthBonus { Path "MD3\Pickup\Health\Potion" Model 0 "HealthPotion.md2" Skin 0 "HealthPotion.png" Scale 2.0 2.0 2.0
FrameIndex BON1 A 0 0 FrameIndex BON1 C 0 0 }
Model HealthBonus { Path "MD3\Pickup\Health\Potion" Model 0 "HealthPotion.md2" Skin 0 "HealthPotion2.png" Scale 2.0 2.0 2.0
Вопрос: - Нельзя ли как-то это одним столбиком изобразить?
Ты вообще MODELDEF читал? А еще есть вот такая вещь
SurfaceSkin model-index surface-index skin-file (development version only)
Defines skin to use for the specified MD3 surface index on model-index model. This can only be used on MD3 files, otherwise it gets ignored.
Возможно с ее помощью можно как-то анимировать 1 столбцом, это уже надо тестить
aivar242:
Так ведь есть уже фрейм, указанный буквами А и В?
A и B это фреймы в декорейт коде, а последние цифры это фреймы у самой модели.
1) А, я думал что вторая цифра - это индекс текстуры. Ведь логично, что первая - это индекс модели, которая пронумерована выше, так и у текстуры эта нумерация должна быть... А получается, что вторая значит не индекс текстуры а фрейм? Так ведь есть уже фрейм, указанный буквами А и В?
Ты внимательно читал что я писал выше? Я ж там специально подробно расписал, что есть 2 разных типа фреймов - спрайтовые (которые зашиты в декорейт/гоззу) и модельные (которые зашиты в твою md2-модельку, которую ты подрубаешь в свой мод), и чтобы гозза понимала, каким спрайтовым фреймам (в данном случае A и B) какие надо поставить в соответствие модельные фреймы (в данном случае 0 и 1), эти frameindex-ы и пишутся
И да - чтобы не путаться, рекомендую использовать способ с именами фреймов а не числами:
Frame BARN A 0 "рука сверху" Frame BARN B 0 "рука снизу"
Frame BARN A 1 "шарик сверху" Frame BARN B 1 "шарик снизу"
Тогда вопросы типа "рука сверху - это текстура? Я думал рука сверху это текстура" отпадут
Тем более что я уже писал об этом выше
aivar242:
В случае, если в файлах модели, используются 2 текстуры, создающие анимацию из 2 текстур, то надо писать 2 столбца, с одной текстурой в каждом, чтобы они читаясь Гоззой и изображали анимацию. Вопрос: - Нельзя ли как-то это одним столбиком изобразить?
В принципе вкурил - вроде.) Простые примеры понятны, а посложней - там видно будет. Да, не доделано это, - для моделей кадры фреймов присутствуют, а для текстур - нет. Они довольствуются тем, что имеют такой же индекс как и у ведущей их модели и на этом весь приоритет текстур заканчивается.
Вроде это мелочь, но повторяющийся код, где больщая часть текста повторяется из-за меньшей части - никогда не понимал этого. Ради пары скинов, слегка видоизменённой текстуры, надо переписывать много букоф - это не рационально.
В любом случае, всё можно подсмотреть в уже прописанных Modeldef, которые у меня есть, аж 2 штуки. Только вот если модели переносятся из других портов, там у них может и анимация быть побогаче и эфекты пободрее, поэтому многое уже может не подходить из готовых Modeldef. Или не так?
Есть вопросы: Как мне определить, на что способна 3D модель из другого порта? Какие у неё фреймы модельной анимации и сколько их? Думаю что всё подсматривается в файле .ded. Вот например, я тебе кину в личку модель бочки, созданной для порта Doomsday. Мне её надо перевести в GzDoom. Можешь мне объяснить как составить Modeldef, чтобы по возможности все фреймы модели были переведены и работали.
Как мне определить, на что способна 3D модель из другого порта?
1) В файле дефиниций (например DED файл думсдей) 2) Открыть модель в любом редакторе моделей, который поддерживает этот формат (например quark или quake model editor)
aivar242:
Вот например, я тебе кину в личку модель бочки, созданной для порта Doomsday. Мне её надо перевести в GzDoom. Можешь мне объяснить как составить Modeldef, чтобы по возможности все фреймы модели были переведены и работали.
на будущее:
1) файлы кидай здесь, а не в ЛС 2) скинь под спойлер весь DED код бочки из думсдей 3) скинь под другой спойлер имена файлов из думсдей (как ded-дефиницию так и модели/текстуры)
вот на будущее всегда делай так, как я написал в пунктах 2 и 3 (и для теста сделай это и сейчас)
Если сложно, могу чего-то попроще кинуть. Там с бочкой как... Стоит бочка, анимация может только в прозрачно-зелёной жиже, которая в ней, снизу вверх поднимаются мелкие пузырьки воздуха. При взрыве разлетается на куски с зелёной дымкой-хлопком.