Updated Zandronum's (G)ZDoom base to ZDoom 2.8pre-441-g458e1b1 / GZDoom 1.8.6
Мне кажется, или у разрабов Zandronum реально какая-то фобия, ибо как ещё назвать тот факт, что после 2-ух с чёртом лет они всё страдают вот этим! Updated, да? Апдейтед?
Скрытый текст:
Для тех кто не понял, поясню ещё разок. От обновления к обновлению я вижу, что Znadra подтягивается по GZDoom (причём именно использует как основу), но использует настолько дряхлые версии, что немного недоумеваю, почему до сих пор нельзя было бы просто сразу взять те же 2-ые (последние).
Znadra подтягивается по GZDoom (причём именно использует как основу), но использует настолько дряхлые версии, что немного недоумеваю, почему до сих пор нельзя было бы просто сразу взять те же 2-ые (последние).
Потому что, тогда бы отпал смысл в порте GZDoom как таковом, а этого разрабы GZDoom'a, как бы не хотят.)
Поставил себе, побегал - отлично. Можно сказать что сейчас Зандр, слился с Гозой, что уже давно пора сделать. Единственное, это - при поворотах камеры, картинка слегка идёт рывочками, при fullHD и 60fps, что было и в ранних билдах Зандра.
Говорю что слился, потому что новых версий нам по сути особо и не надо, так как они банально тяжелеют в отжоре RAM и добавляются какие-то никчёмные плюшки. Так что с 3-кой, Зандр реально вырос. Теперь и картинка хорошая и мультик отличный. Осталось только точить что есть.
Хм. К Декорейту столь же придирчив порт, как и раньше. Пол своего 3D пака пришлось порезать, прежде чем запустить.
Может кто может пояснить причину?
Ссылка на порт - вот: СКАЧАТЬ Ссылка на мой 3D пак - вот: СКАЧАТЬ
Зандра докапывается до первой открытой скобки. Не знаю, как это решить. В Гозе всё без ошибок. Хотелось бы видеть пламя из пака, в Зандре.
Потому что, тогда бы отпал смысл в порте GZDoom как таковом, а этого разрабы GZDoom'a, как бы не
Ой... вот только не надо вот этих благих намерений, пожалуйста. Насколько я помню, ещё где-то с выхода аж 2-ой версии разработчики зареклись вообще не использовать GZDoom как основу и развивать существующие наработки. А тот опять же тот самый толстый троллинг выходит. Да и потом, разве это не плохо превзойти порт основателя, а не как стервятник на останках сидеть? Кроме того, я ещё давным давно говорил, что нет смысла держать 300-портов, когда можно было бы сделать один нормальный и, таким образом зандре и гозе слиться (вот на этот раз в правильном понимании) уже давно было пора.
aivar242:
Поставил себе, побегал - отлично. Можно сказать что сейчас Зандр, слился с Гозой, что уже давно пора сделать.
Он и был основан на гозе, но версия даже ниже 1.8 была, поэтому просто огромное количество фитч не работала вообще. Например, в декорейте зандра не распознавала отрицательные значения параметров в команде. Теперь версия 1.8, которая тоже не ахти, ибо всёж устарела.
aivar242:
Говорю что слился, потому что новых версий нам по сути особо и не надо, так как они банально тяжелеют в отжоре RAM и добавляются какие-то никчёмные плюшки.
Ну если такой консерватор, так и не обновляй его. А вот то, что теперь не возможно делать вады, чтобы они совмещались с GZDoom и Zandronum одновременно (не то чтобы невозможно прям, но приходится реально костылями писать) уже раздражает. Да и потом, эти ваши "отжоры" памяти которые лично у меня если и есть (чего на самом деле даже не происходит), то в конечном итоге фпс, то это где-то с 300 до 296 - это смешно, а при больших нагрузках (с тем же решейдом) всё равно идёт к 30 и без разницы на каком порте. Как говориться, ведро с платами - это проблемы не разрабов. Оптимизация дело хорошее, но извините сидеть на одном месте или кастрировать порт, ради одного фпс. Нет уж.
А ещё ZSCript привет. Я хоть не его любитель, но извините, сейчас уже все на него переходят и пора бы и заднепроходиуму задуматься.
aivar242:
Зандра докапывается до первой открытой скобки. Не знаю, как это решить. В Гозе всё без ошибок. Хотелось бы видеть пламя из пака, в Зандре.
Вот вам и не надо новых версий... Походу в циклах действительно беда. То есть он их тупо не умеет читать.
Говорю что слился, потому что новых версий нам по сути особо и не надо, так как они банально тяжелеют в отжоре RAM и добавляются какие-то никчёмные плюшки.
Если ты их не можешь осознать, это не значит, что они никчемные.
Только предметы и декор. Всё в этом паке. Идея была и монстряков "лучших" найти и подогнать, но глядя на них - передумал. Слишком коряво в Гоззе "Зандре" они выглядят. Надеюсь видели их в Doomsday - вот, а в Зандре будет намного хуже. Пропуски кадров анимации, и.т.п. В Doomsday, возможностей больше для анимации.
Раздумываю над тем, чтобы с нуля делать своих монстряков, но движок не позволяет реализовать полноценные и красивые модели, только уровня Quake 2 можно сделать, так как движок GZDoom "Зандронум" где-то на этом уровне. Так что пока, нечего рыпаться, ну, если только спрайтовых делать...
ZZYZX Речь шла о новых версиях порта GzDoom.
Переползаю на Zandronum 3.0 уже точно. Хвосты только надо подтянуть в Зандре и всё тогда. Хвосты, это не желание некоторых функций, работать в декорейте. Перед каждой скобкой, просит Ламп актора, что не понятно - зачем? Надо опять в ноги TheLEO падать, чтобы помог.
Хорошо, - назови хоть одну полезную фишку, которую привнёс этот ZScript? Кроме утяжеления порта, я ничего не заметил. Может плохо смотрел?
Для Зандронума, этот ZScript пока точно не нужен. Нужно отладить его работу, чтобы он хотя бы так же работал, как версии GzDoom, перед внедрением этого пресловутого ZScript.
Погоняв версию 3.0, могу сказать, что она уже вполне играбельна, как Сингл-плеер. Мелкие недочёты с fps, это я так понимаю - трудность интеграции порта GZDoom с портом Skulltag, который и распологает всеми мультиплеерными корнями.
Значит пока вижу только 3 недочёта: 1) Не читает все функции, как GZDoom, в Декорейте. 2) Лёгкая не стабильность движка при поворотах камеры. 3) Проблема со шрифтами. Это и мелкий фрифт в консоли и завалившийся столбик меню настроек, в право.
Хорошо, - назови хоть одну полезную фишку, которую привнёс этот ZScript?
Ну например, сейчас можно сделать текстовый ввод с клавиатуры
Ещё можно менять intermission на абсолютно произвольный, а также прогать собственные менюшки (от слова вообще собственные, без MENUDEF).
А ещё можно напрямую обращаться к карте (секторам/линиям/вертексам) и в разумных пределах менять. Опять же менять напрямую, а не "если автор порта предусмотрел спешиал".
Это или это можешь попытаться повторить на ацс, мне очень интересно, что получится
Да, кстати, помимо зскрипта, в новом гздуме таки освещение на модельках есть, ага.
Вообще мне кажется что я на этот троллинг уже второй раз ведусь, в том смысле что уже кому-то здесь объяснял, что он дятел, а зскрипт рулит.
Это или это можешь попытаться повторить на ацс, мне очень интересно, что получится
Ну если это будет грамотно реализовано, то есть тени будут соответсвовать движениям своих хозяев - тогда беру свои слова обратно. Вообще надо посмотреть - как это выглядит.
В Зандре 3.0, я так понял, этих теней нет.
Зандра докапывается до первой открытой скобки. Не знаю, как это решить. В Гозе всё без ошибок. Хотелось бы видеть пламя из пака, в Зандре.
aivar242:
Привет. Тут решил плотно переползти на порт Zandronum 3.0, который вышел недавно. Очень не плохо выглядит как Сингл, ввиду чего, надобность в GZDoom порте, автоматически отпадает. Всё бы хорошо, но вот Декорейт Зандра, почему-то не хочет читать функции "скобки", без лампа актёра, где в Гоззе, он не требуется... В моём 3D паке, ступор происходит на пламени, где Зандр просит указать лумп актёра, перед скобкой с параметрами второго подпламени. Гозза, этого не требует.
Может ты мог бы глянуть, что там можно сделать? Это очень важно, так как от этого зависит нормальная работа Зандра с ресурсами. Тут всё что нужно: http://i.iddqd.ru/viewtopic.php?p=92756#92756
aivar242:
Надо опять в ноги TheLEO падать, чтобы помог.
Ставить порт и качать вадник лень, кинь скриншот ошибки и полный код той строки, на которую ругается (а также 20 строк кода, которые рядом, сверху и снизу)
aivar242:
Хорошо, - назови хоть одну полезную фишку, которую привнёс этот ZScript?
На самом деле ZZYZX назвал только часть, поэтому назову одну из основных причин перехода на зскрипт: представь, что ты хочешь сделать, чтобы минотавр чаще и агрессивнее (дальше по расстоянию / дольше по времени) чарджился. Теперь усложним задачу: надо чтобы точно так же чарджился НЕ минотавр, причем монстр по задумке не должен быть унаследован с минотавра. В декорейте/ацс у тебя либо не получится так сделать, либо придется это делать через адские костыли и велосипеды. И все потому, что декорейт/acs не умеют редактировать action functions (чардж минотавра в нашем примере), а зскрипт умеет
Т.е. в декорейте у нас будет как минимум 2 проблемы:
1) action function "чардж минотавра" можно использовать только если монстр унаследован с минотавра (представь что я хочу одну фнкцию с минотавра, вторую с кибердемона, третью с дспарила - как я унаследуюсь сразу от всех троих?)
2) action function "чардж минотавра" никак нельзя отредактировать и изменить, можно только использовать готовую, как она есть
А зскрипт позволяет редактировать такие функции, в том числе и отвязывать их от необходимости наследования твоего актора от какого-то конкретного (минотавра в нашем примере). Более того, зскрипт вообще позволяет такое с нуля написать
Так вот, aivar242, уже одна эта фича зскрипта как бы намекает, что декорейт "говно" и пора переходить на зскрипт (и держит людей на декорейте только сложность/слабодокументированность зскрипта а также тот факт, что старые моды (которые люди редактируют патчами) написаны на декорейте и их геморно зскриптить (ну или текущие моды у людей написаны на декорейте и чтобы полностью их переделать на зскрипт, надо тонны времени и сил) )
А теперь представь, что то что я написал - всего лишь 1% от возможностей зскрипта (молчу о том, что его постоянно обновляют и дорабатывают новыми возможностями)
З.Ы. Еще один пример приведу: представь что вот этот:
монстр должен стрелять следующим образом: по рандому выбирает фаерболл из сетки, стреляет им в тебя, теперь на сетке дырка в том месте, дальше он по рандому выбирает следующий фаерболл и так далее.
На декорейте и ACS будут тонны строк кода (хотя там действия примитивнейшие), а на зскрипте мало строк кода и все читабельно
Основная претензия к декорейту и ACS в том, что там примитивные действия реализуются через кучу строк нечитабельного кода и адские костыли (а более сложные действия вообще могут быть нереализуемы), в зскрипте с этим в разы лучше
theleo_ua В Zanronum 3.0, при запуске с моим 3D паком. Порту не нравится код пламени, его параметры. В данном случае, не нравится открытая скобка. Просит ламп актора...
монстр должен стрелять следующим образом: по рандому выбирает фаерболл из сетки, стреляет им в тебя, теперь на сетке дырка в том месте, дальше он по рандому выбирает следующий фаерболл и так далее.
Это вопрос организации кода. Можно нормально написать. У меня есть босс который так стреляет https://www.youtube.com/watch?v=F2P-le_aSWY Принципиальной разницы нет, просто тут все направления активируются одновременно.
Если бы нужно было активировать какое-то одно, тогда каждый шар в цикле рандомом проверяет например if (Random(0,255)<8) и стреляет если true, после чего ставит какую-нибудь переменную опять же в true чтобы другие шары не стреляли до следующей атаки.
Поржал с разрабов Zandronum. Изначально, в порте не предусмотрено освещение. Его нет. Только вот, у меня параллельно имеется папка с полностью настроеным GzDoom портом, из которой я тупо перенёс освещение в новоиспечённый Zandronum 3.0 - появился свет.) Им просто лень было перекинуть пару папок из GZDoom в свой порт.) Сейчас, у меня Zandronum ничем не отличается от GzDoom. Погонял на разных вадниках, потестил свет, 3D модели, Hi-Res спрайты, Патчи, Музыку, Звуки - всё работает хорошо, как и в GzDoom.
Кинь скрин на itmages.ru ибо твой скрин у меня не отображается
Рядом со скрином обязательно кинь прямую ссылку на него, без тегов (IMG) (/IMG)
ZZYZX:
Это вопрос организации кода. Можно нормально написать. У меня есть босс который так стреляет https://www.youtube.com/watch?v=F2P-le_aSWY Принципиальной разницы нет, просто тут все направления активируются одновременно.
Если бы нужно было активировать какое-то одно, тогда каждый шар в цикле рандомом проверяет например if (Random(0,255)<8) и стреляет если true, после чего ставит какую-нибудь переменную опять же в true чтобы другие шары не стреляли до следующей атаки.
Все очень просто: то что я описал выше, на ACS реализуется в разы проще и читабельнее, чем в декорейте, так как в ACS циклы c++ подобные (и легко работается с двумерными массивами). Но в ACS нет функции выстрелить проджектайтом от лица монстра
Уточню, что в моем случае фаерболлы, которые висят на месте возле монстра (но если монстр поворачивается влево-вправо, то они поворачиваются вместе с ним), и фаерболлы, которыми монстр выстреливает, это 2 разных фаерболла, и если например монстр успел в тебя кинуть 3 (а остальные 22 еще висят), и ты вводишь монстра в pain state, то все 22 должны исчезнуть.
Т.е. получается, нужен двухмерный массив и постоянный рескан этого массива циклом (напомню, код в самом монстре, не в проджектайлах). В ACS это легко и читабельно делается, но там нет функции "выстрелить от лица монстра". Кинешь мне пример такого адекватного цикла (который решает вышеописанную задачу) в декорейте, читабельность которого сравнится например с тем же ACS кодом?
Т.е. получается, нужен двухмерный массив и постоянный рескан этого массива циклом (напомню, код в самом монстре, не в проджектайлах).
Зачем??? Если можно сунуть код в проджектайлы и заякорить на монстра как Master?
Единственная сложность тут это пейнстейт, который нельзя определить из ацс, поэтому нужно будет монстряку себе ставить какую-то переменную или флаг или итем.
Зачем??? Если можно сунуть код в проджектайлы и заякорить на монстра как Master?
Я не совсем понял, как перенос кода в проджектайлы уберет необходимость двумерного массива. У меня происходит так:
1) Сначала показываются 25 проджектайлов, которые стоят на месте 2 секунды (эти проджектайлы фейковые, они не дамажат игрока при соприкосновении и не взрываются если касаются стенки или прочего "взрывателя")
2) Потом какой-то один исчезает, а из его места выстреливается (уже другой) проджектайл в игрока (который при соприкосновении взрывается и дамажит игрока, а также который seekermissile)
3) Потом (через 2 секунды) другой случайный фейковый проджектайл исчезает (и с его места выстреливается обычный) и так пока все 25 не проработаются
4) Если в процессе монстр поворачивается влево или вправо, то фейковые проджектайлы должны поворачиваться за ним (в идеале не мучаться с косинусами, но если код с косинусами окажется читабельнее каши в декорейте, то здесь я соглашусь с тобой)
5) Тот же пункт 4, только если монстр переместится в другую точку (например на старте этого дела он был с какими-то velx vely velz), проджектайлы должны аккуратно переместиться за ним
6) Про пейн стейт пока забываем, будем считать что его нет
Объясни плз, как все 5 пунктов реализовать без 2мерного массива и без каши в декорейте
Добавлено спустя 2 минуты 4 секунды:
aivar242:
В Zanronum 3.0, при запуске с моим 3D паком. Порту не нравится код пламени, его параметры. В данном случае, не нравится открытая скобка. Просит ламп актора...
ЛОЛ, так напиши без скобочек:
вместо
Скрытый текст:
FX09 A 1 Bright
{
A_AccTeleGlitter;
A_SetScale(1.2);
}
пиши
Скрытый текст:
FX09 A 0 Bright A_AccTeleGlitter
FX09 A 1 Bright A_SetScale(1.2)
Все дело в том, что старая версия гоззы 1.8.6 (ну которая сейчас в зандронуме) еще не умела в такие конструкции, так что единственный выход в твоем случае, это писать так, как я указал под вторым спойлером
Объясни плз, как все 5 пунктов реализовать без 2мерного массива и без каши в декорейте
Примерно так
int ProjectileWait = 35; // ожидание следующей атаки
int ProjectileCount = 25*25;
script "IndividualProjectile" (int x, int y) // x/y в данном случае смещение на сетке 25х25
{
int ntid = UniqueTID();
Thing_ChangeTID(0, ntid);
SetActivator(0, AAPTR_MASTER); // меняем активатора на монстра
int masterX = GetActorX(0);
int masterY = GetActorY(0);
int masterZ = GetActorZ(0);
int masterAngle = GetActorAngle(0);
// запоминаем таргет монстра
SetActivator(0, AAPTR_TARGET); // тут надо по хорошему ещё проверять есть ли таргет вообще
int targettid = UniqueTID();
int originalTargettid = ActivatorTID();
Thing_ChangeTID(0, targettid);
// я не помню в каком порядке тут sin/cos используется. экспериментируй.
//
//
// далее считаю что int newX = новая координата по X вычисленная из masterX и masterAngle, newY, newZ аналогично по Y/Z
SetActivator(ntid); // возвращаемся к запомненному проджектайлу
Thing_ChangeTID(0, 0); // чтобы не захламлять пространство тидов
SetActorPosition(0, newX, newY, newZ, false); // опа. проджектайл повёрнут в нужную сторону
// смотрим рандом и отсчёт
if ((ProjectileWait <= 0) && // можно стрелять — таймер дошёл
(Random(0, ProjectileCount) < 2)) // и рандом сработал
{
ProjectileWait = 35; // до следующего выстрела 35 тиков
// стреляем в сторону targettid. это мне писать тоже лень
}
// обязательно вернуть targettid обратно
Thing_ChangeTID(targettid, originalTargettid);
// если нужно чтобы при пейнстейте проджектайл исчезал, нужно в декоре давать в начале pain какой-нибудь итем, а в конце убирать, и здесь делать CheckInventory чуть выше (в том месте где активатор=монстр)
// ставить переменную isPain=true и при возвращении активатора обратно проджектайлу (там где SetActorPosition) сделать Thing_Remove(0).
Delay(1);
restart;
}
script "MonsterAttack" (void)
{
ProjectileCount = 25*25;
ProjectileWait = 35;
int monsterTid = UniqueTID();
int originalMonsterTid = ActivatorTID();
Thing_ChangeTID(0, monsterTid);
for (int x = 0; x < 25; x++)
{
for (int y = 0; y < 25; y++)
{
int actorTid = UniqueTID();
Spawn(/* тут тоже сам пиши. спавним проджектайл. TID должен быть выставлен в actorTid */);
SetActivator(actorTid);
SetPointer(AAPTR_MASTER, monsterTid); // назначаем монстра мастером этого проджектайла
ACS_NamedExecuteWithResult("IndividualProjectile", x, y, 0, 0);
}
}
// обязательно возвращаем монстру его нормальный тид чтобы не сломать другие скрипты и не захламлять пространство тидов
Thing_ChangeTID(monsterTid, originalMonsterTid);
}
Имеем в виду что мой код для удобства считает что монстр на карте один. Если не один, то надо будет добавить одномерный массив со счётчиком
ООП в действии, так-то!