Герр Смертоносец Пришла такая вот идея насчет того, как помочь танку определить какая цель мелкая, а какая нет. А что если взять и прописать в коде обозначения допустим: 1. Имп , зомби , пинки - мелочь и на них тратить только пулеметные пули. И делать все в расчете на оригинал. 2 . все остальные классы это твари покрупнее и на них тупо.
И да хотелось увидеть примеры кода с объяснением какой блок и какая команда за что отвечает
Апдейт изрядно затянулся, ибо во-первых надо было долго вилкой чистить много говна из старого кода (там до сих пор сплошной хаос и наполовину колхоз, всё ешё будет перекапываться), во-вторых я обраружил некий новый аэродинамический эффект и периодически убиваю кучу времени на его изучение.
- Добавлен полностью функциональный элефант, первый объект, закладывающий программную базу под гигантские танки с длинным collision box. Огромная тяжелобронированная машина с чудовищной пушкой, которая может пробить несколько слабых противников в ряд и уничтожить кибердемона с 2х-3х выстрелов. На мелочь снаряды старается не тратить. Очень эффективен против боссов и крупных медленных врагов, малополезен против толпы мелких и быстрых и практически бесполезен против лостсоулов. Что в принципе логически соответствует свойствам реальной сау. - Исправлена старая вонючая проблема с неспаунящимися в неподходящем пространстве юнитами. Солдаты теперь спаунятся всегда, танки же делают проверку на размеры пространства. Если пространства недостаточно - танк спауниться не будет, и потраченная стоимость/инвентор.итем вернётся к игроку. - Юниты чувствуют падающую мину и упинкивают от места предполагаемого падения. Игрок тоже чувствует и орёт. Предполагается расширить эту систему и на авиаудары. - Монстры атакуют солдат куда злее, чем раньше. - Танки стали лучше взаимодействовать с z-мостами. Они временами тупят на них, но в принципе преодолеть могут. - Если артиллерийский удар вызван игроком, и рядом с точкой попадания есть недобитые монстры - миномёты делают один либо несколько повторных выстрелов. - Танки давят противников гусеницами, труп противника при этом расплющивается. Эффективность этого зависит от танка и размера цели. PzII может задавить ревенанта, но хеллбарон или манкубус для него слишком велик. Элефант давит в том числе и манкубусов. (Если противник попал под гусеницы в момент смерти от иных причин - его труп также расплющивается.) - Добавлен индикатор гранат в кармане. - Добавлены инвентор.итемы для специальных юнитов. Пока что их рандомспаун не настроен, и их невозможно нигде найти. Вместо этого игроку с самого начала даётся 20 зениток и 8 элефантов. (Иконки слишком огромные для стандартного дум-интерфейса, используйте расширенный.)
- Обнаружена омерзительная проблема на рендере Gzdoom, который некорректно отображает полупрозрачные воксельмодели, из-за чего хотя бы раз телепортированные танки превращаются в сетку из треугольников. Неизящное решение есть, но я пока взял время на подумать. - Найден способ сделать иконки юнитов на карте. Нужны ли они? Этот вопрос занимает меня. - Элефант поставил меня перед философской проблемой. Вот есть два танка, лухс и элефант, являющие собой полную противоположность друг друга. Лухс быстр и квадратен, он может развернуться на любом пятачке. Элефант медленный и длинный, в узких проходах он не развернётся. (Хуже того - у него нет башни, поэтому он вынужден поворачиваться на противника всем корпусом, и толпа подступивших вплотную импов может его заблокировать и меееедленно разбирать на гайки.) Зато в силу своего составного коллижена он способен проехать через стандартную 128х128-дверь. Проблемы начинаются с машинами типа PzIV. По какой парадигме реализовывать их? Если по квадратной, то придётся делать радиус ~70, и такой танк не сможет преодолеть эту дверь несмотря на визуально проезжабельную ширину. Если по длинной, то он получит элефантовые проблемы с маневренностью в узких пространствах. Решения я пока не принял.
Управление: slot1: Mp-40 / grenades slot2: Автоматичик / Взвод солдат slot3: Снайпер / Пулемётчик slot4: Гранатомётчик / Огнемётчик slot5: Мотоцикл / Миномётчик (Иконка миномётчика пока отсутствует.) slot6: Танки (пока только лухс) slot7: Авиаудар (пока старая версия) slot8: Перст указывающий (fire: приказ стоять, altfire: приказ идти) slot9: Телепортер (fire: выбрать юнита, altfire: телепортировать) (Можно до 10 солдат за раз, танки только штучно.) slot0: Флаг Третьего Рейха (fire: задать глобальный вейпоинт, altfire: отменить вейпоинт) G - Сигнальная ракетница (fire: дать цель артиллерии, altfire: отмена) H - attack mode (Солдаты агрессивны, по-дефолту.) J - defence mode (Солдаты осторожны и держат дистанцию с противником.) K - fall back mode (Солдаты убегают, минимально постреливая по противнику.) T - Спаунить юнитов стоящими на месте (on/off) Y - Настройка взвода (on/off) U - Экран статистики (пока недоделанный) Спец юниты выбираются и спаунятся по принципу инвентаря.
Zveraboy Всё сделано универсальнее. В декорейте стоит джампер вида:
4ERD A 0 A_Jumpif(CallACS("CheckTargetImportance",300) == 1,"ShootingMG") //300 - это заданный предел срабатывания
Если результат скрипта = 1, он переходит на пулемётную атаку. Скрипт представляет собой следующий механизм:
script "CheckTargetImportance" (int H) // Входящая переменная: предел срабатывания.
{
int A = 0; //По умолчанию результат равен 0
SetActivator(0,AAPTR_TARGET); //Теперь скрипт исполняется от имени цели.
if(GetActorProperty(0,APROP_SpawnHealth) < H) A = Random(0,1); //Если максимальное здоровье монстра < заданного предела, то с 50% шансами результат = 1.
SetResultValue(A); //выдать результат
}
Итого, если такой танк видит цель, чьё максимальное здоровье меньше 300, он с 50% шансами атакует её пулемётом. У элефанта две градации + обычный рандомджампер + проверка на наличие заряженного снаряда в пушке.
Герр Смертоносец Здорово! Только теперь бы кто-нибудь карт с большими пространствами подкинул бы, ибо на типичных думовских (где локации рассчитаны на маневрирование одного игрока) совершенно не подходят. Newworld.wad уже пробовал, но там монстров мало
cybermind Надо наверное ориентироваться на мясные вады, изначально заточенные больше под мультиплеер. Что-то типа Scythe2, Resurgence, Vanguard или Hellbound. Вообще надо целый список рекомендуемых мегавадов собрать. Алсо, существует некое количество особо эпичных мегавадов (идеальный случай - NeoDoom / FinalNeoDoom), которые так и просятся фашистов погонять, но содержат свои собственные итемы и оружие, которые не будут автоматически заменяться на немецкие медальки. Под них я планирую какие-нибудь патчфайлы делать.
А хрен его знает. Мясо из Beautiful Doom скорее всего да, а вот у брутала очень запутанный код, заточенный под сцены добивания со сложным скриптовым взаимодействием игрока и добиваемого. И я не берусь судить, насколько стабильно всё будет работать, если одну мегаконструкцию с запутанным кодом наложить другую мегаконструкцию с запутанным кодом.
upd: Хотя пробный запуск показал, что в принципе оно работает и даже худо-бедно играбельно. Сколько в результате образуется потенциальных багов я не знаю. Пока замечены лишь спонтанные ранения игрока в некоторых точках. Видимо, какой-то кастомный damage type.
Апдейт. - Исправлен баг с полупрозрачными вокселями в GzDoom. - Исправлен баг с гранатомётчиками, теперь они стреляют по помеченной сигнальной ракетницей цели куда охотнее. - Исправлен баг с задним ходом фердинанда, проявлявшийся в некоторых случаях. - Приведены к общему стандарту руки на спрайтах оружия. - Исправлена анимация миномётчика. - Трупы танков теперь разрушаемые, так что если огромный танк будет уничтожен в критически важном проходе - можно попросить гранатомётчиков раздолбать его труп. Хватает 4-8 ракет. - Добавлена перезарядка Mp-40 по кнопке. (Лучше всего забиндить reload на среднюю кнопку мыши.) - Добавлены индивидуальные вейпоинты, что существенно дополняет геймплей. Теперь при помощи флага можно не только направить всех юнитов в одну общую для всех точку, но и выделить отдельный юнит (или несколько юнитов) и направить их в отдельном направлении. Например, можно отправить отдельно взятый танк на другой фланг или послать пару быстрых мотоциклов в разведку, не отвлекая остальную армию. Также, например, если на вас случайно выскочила пара кибердемонов, можно приказать армии отступать, дабы избежать лишних жертв, а тяжелую самоходку направить прямо на киберов. Юниты выделяются по кнопке reload. (Поэтому лучше всего её биндить на среднюю кнопку мыши.) - Изменены имена спрайтов, конфликтующие с BFGball. - Переработана механика бронебойных снарядов, теперь их скорость не ограничена. - Добавлен существенно улучшенный баллистический калькулятор, учитывающий высоты и ограничения по углам вертикальной наводки. Тестируется на гранатомётчиках, которые теперь стреляют по настильной траектории и неплохо попадают, особенно во врагов на возвышении. Выглядит это красиво, но оставлять ли гранатомётчиков такими - большой вопрос. Во-первых, у них существенно уменьшилась дальнобойность, во-вторых в секторах с низким потолком ракеты иногда попадают в небо и там исчезают. - Всем юнитам добавлены иконки на карте. Теперь всегда видно, кто и где потерялся. - Тестируется 37мм противотанковая пушка Pak36 с ограниченным углом наведения по горизонтали. Юнит, требующий вдумчивой установки и способный отлично контрить коридоры и улицы, но беспомощный, если противники подойдут вне сектора обстрела. Ссылка
Апд1. Новая механика для баллистических снарядов. Высота сектора больше не является препятствием, снаряды двигаются по параболической траектории за пределами сектора, оставаясь видимыми с земли. Такие снаряды могут перелететь из сектора в сектор через стену.
Апд2. Маразм крепчает. Экспериментирую с РСЗО Nebelwerfer41. Ощущения противоречивые. Это не миномёт, угол возвышения здесь ограничен 45°, и достать цели за укрытием для него гораздо труднее. Ему трудно работать на картах с большим перепадом высот. У него очень долгая перезарядка. При этом залп может завалить кибердемона, а грамотно расположенная батарея таких орудий способна контролировать пол-карты.
cybermind И получится ЗДум Варс. И останется только Красную армию запилить, и все - да ну его нахрен. По поводу мода - работа впечатляющая, если бы танки не тупили так сильно. Или это еще не сильно?
Вот кстати неплохо было бы это переделать для Zandronum TeamGame и сделать некое подобие варгейма для 2 игроков, аудитория расширилась бы намного.
Мейби, но в очень дальних планах. Мод всей своей сутью заточен под сингл. Командование юнитами на таком уровне подразумевает целую кучу фиксированных диапазонов TID у разных сигнальных акторов. В случае с мультиплеером всё это надо многократно дублировать и обмазывать костылями, чтобы своего командира юниты отличали от чужого, да и самих юнитов надо делать по крайней мере визуально отличимыми. Это охрененный объём работы. Единственное, что можно реализовать относительно лёгкой кровью - расширение для нескольких классов игроков в Coop/invasion, чтобы все были обычными игроками, и только один (выбираемый случайно) был бы Гитлером. Получилось бы что-то типа режима VIP Assassination в контре, только в данном случае хилый VIP командовал бы танковыми клиньями и артиллерией, а остальные игроки выполняли бы роль телохранителей.
Энивей, сейчас вопрос стоит не об этом. Большой стратегический вопрос стоит о том, продолжать ли использовать воксели, или надо срочно переводить всю имеющуюся технику в MD2 модели, и все дальнейшие модели делать только в MD2/MD3. Суть проблемы: воксели - единственный вид моделей, доступный для software-рендера, поэтому я использовал их для большей универсальности. Воксели работают в GZdoom, но там они дико грузят систему, ибо каждый кубик, насколько я понял, отображается отдельной моделью. (20 танков дают 12fps.) Полигональные модели вроде бы грузят систему значительно меньше. Так вот, пока Zdoom жил отдельной жизнью, меня это не особо волновало. Но Рэнди накрылся тазиком, Граф возглавил разработку, и теперь может сложиться такая ситуация, что абсолютно все Zdoom-подобные порты будут оснащаться OpenGL по дефолту. Оно с одной стороны хорошо, с другой - в вокселях при таком раскладе нет никакого смысла. Поэтому я сейчас в замешательстве, и стою перед выбором: херить ли сейчас совместимость с Zdoom или обрекать мод на необоснованные тормоза в будущем. Этот вопрос трахает мне мозг, и вместо того, чтобы спокойно делать Tiger, я вынужден собирать фидбэк по этому поводу.
Герр Смертоносец Насчет invasion карты: я ваще имел ввиду для сингла что б карта была. В мп такая вещь бессмысленна, ибо будет лишена баланса, да и толку от других игроков не будет. Хотя баланс под такое дело можно и подправить. Насчет вокселей или моделек: насколько я вообще знаю, можно же сделать, что бы рендерилась или полигональная или вокмельная модель, в зависимости от квара (или включенного/выключенного рендера 3д моделек). В крайнем случае - есть qzdoom
Воксели работают в GZdoom, но там они дико грузят систему
Герр Смертоносец:
(20 танков дают 12fps.)
Это треш, не надо так делать вообще, и в принципе. Мне кажется, что очевидно - да, ибо будущее за хардварным движком (на дворе 2017 год как никак), ЗДемон практически мертв (как и Одамекс, который вообще не стремится к инновациям изначально), в Зандронуме 99% играют в железе. Ультимейт-вариант - делать 2 версии .
Герр Смертоносец:
Zdoom-подобные порты будут оснащаться OpenGL по дефолту
учитывая что из точно живых и развивающихся их теперь три, и в двух из них точно можно отключать и включать железо, то кто мешает включить или выключить?
По поводу мода - работа впечатляющая, если бы танки не тупили так сильно. Или это еще не сильно?
При всём уважении к разрабам, ИИ в думе вообще отсутствует. Вменяемый ИИ для техники, не привязанный к вейпоинтам, в текущих условиях невозможен от слова совсем. За все годы развития есть только старая добрая функция A_Chase, больше похожая на броуновское движение, чем на что-то осознанное. Причём у friendly-монстров она ещё и изрядно кастрирована. То, что удалось научить танки ездить как робот-пылесос и не застревать в углах - уже аццкое достижение. А ещё танки тупят на лестницах, потому что дум никогда не планировался к тому, чтобы в нём свободно бегали столь большие объекты. Когда танк наезжает на лестницу - он своим гигантским радиусом актора заполняет несколько маленьких ступенек и воспринимает их как большую высоту, с которой он прыгать вниз отказывается. Если же ему дать +DROPOFF, то танк будет стремиться упасть с обрыва при каждом удобном случае. Я сделал громоздкий скрипт, позволяющий танку худо-бедно отличать пропасть от лестницы, но по сути это костыль, который работает через пень-колоду.
cybermind:
А ты собираешься переводить свой мод на ZScript? По мне, это значительно бы расширило возможности по улучшению ИИ солдат и тогда выбор очевиден.
ZScript не предоставляет ровным счётом никаких принципиально новых фич для расширения ИИ, которые нельзя было бы реализовать в нынешних ACS/Decorate. Не понимаю, чего все с ним так носятся. Это по сути тот же самый декорейт, в который впилены динамические переменные и Си-подобные лупы из ACS. Он позволяет сэкономить несколько строчек кода и написать красиво, но ничего принципиально нового не привносит. Будь я профессиональным программистом, я бы сказал, что ZScript всего лишь модный фреймворк. Возможно, начну его использовать, когда его доведут до юзабельного состояния и задокументируют по-человечески. Сейчас он задокументирован отвратительно.
NighMare:
Насчет invasion карты: я ваще имел ввиду для сингла что б карта была. В мп такая вещь бессмысленна, ибо будет лишена баланса, да и толку от других игроков не будет. Хотя баланс под такое дело можно и подправить.
По идее уже существующие мультиплеерные invasion-вады должны нормально запускаться с модом. Так-то я маппер не ахти какой, хотя определённые задумки в стиле совка тридцатых у меня были. Но в какие сроки я мог бы потянуть такой проект - пока ничего даже приблизительно сказать не могу, а халтуру делать не хочется.
NighMare:
Насчет вокселей или моделек: насколько я вообще знаю, можно же сделать, что бы рендерилась или полигональная или вокмельная модель, в зависимости от квара (или включенного/выключенного рендера 3д моделек).
[D2D]_Revenant:
учитывая что из точно живых и развивающихся их теперь три, и в двух из них точно можно отключать и включать железо, то кто мешает включить или выключить?
Ну это вообще хардкор. Определить квар можно, но как лёгкой кровью заставить актора использовать другой набор фреймов для тех же стейтов? По сути, придётся прописывать каждого актора по два раза или даже использовать двух дублирующих акторов, которые бы переключались между друг другом, и чтобы всё это не глючило. Это адская дичь, учитывая текущую сложность декорейта, которая по громоздкости даст просраться этому вашему бруталдуму.) Можно, конечно, сделать проще, и тупо вручную запускать/незапускать отдельный файл с моделями поверх мода. Правда, это не отменяет целой кучи проблем. Во-первых, придётся моделить одно и то же в двух вариантах, во-вторых весить всё это будет не один десяток мегабайт, а в-третьих нет никаких гарантий, что полигональные модели правильно встанут на то же место в том же масштабе, что и их воксельные аналоги.
Есть ещё такой момент, что воксели в GDWP устроены довольно хитро. Software-рендерер воспринимает их за плоские спрайты, и не способен адекватно распознать, что и поверх чего нужно отрисовывать. Поэтому башня у танков сдвигается то чуть-чуть назад, то чуть-чуть вперёд в зависимости от положения камеры игрока, а лафет у Pak36 и Nebelwerfer вообще состоит из пяти разных воксельных акторов, ибо колесо, орудие, опоры и сидящий между ними солдат с разных ракурсов создают овердохрена вариантов наложения. На OpenGL с вокселями такой проблемы нет, и во всех этих фокусах нет необходимости. Как там будет с MD2 - хз. Сложносоставные модельные конструкции в вадах под гоззу мне пока не встречались.
Попробую на досуге понасиловать MilkShape3d и сделать тестовый подключаемый комплект моделей для одного танка. Чёрт его знает, что из этого выйдет.
Герр Смертоносец Я бы не сказал - в ZScript перенесли много новых функций, которые раньше были игровым хардкодом. Вот весь список: https://zdoom.org/wiki/ZScript_actor_functions. Не гарантировано, что все работают, как надо, но там есть функции по управлению думовским ИИ (TryMove, NewChaseDir и прочие). По крайней мере, код лост соулов и херетиковского минотавра переписан на ZScript
cybermind Про это я и говорю задокументированы отвратительно. Тупо список функций, как конкретная работает, в каких версиях и работает ли вообще - одному аллаху ведомо. Пока что с этим можно игратьcя, но планировать что-то сложное и серьёзное, где каждая маленькая неопределённость вызывает целую цепочку косвенных багов - сомнительная затея.