Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Точный расчёт столкновений с моделями и спрайтами (GZDoom)
   Список разделов - Местечко мапперов и моддеров - Точный расчёт столкновений с моделями и спрайтами (GZDoom)Ответить
АвторСообщение
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №1 Отправлено: 01.03.23 13:19:19
Приветствую всех участников форума!

Когда-то ZZYZX сделал парсер MD3-модели и с его помощью автоматическую обработку столкновений акторов с моделью. Я дополнил парсер (он считывал из файла только одну группу треугольников/поверхность) и реализовал на его основе систему расчёта "приведённой толщины брони" у модели при обстреле специальным хитсканом, имитирующим снаряд с конечной скоростью. Данные о броне записаны в названии группы.
За производительность сего кода ручаться не могу, так как по треугольникам модели идёт полный перебор. Её можно попробовать улучшить, как-то отсекая треугольники, но пока она не в приоритете (займусь ей, если/когда она будет мне мешать).
Планирую развивать этот код самостоятельно. На видео чуть более ранняя версия, которая при промахе не пропускала хитсканы дальше.

Демоверсии обработки столкновения хитскановой имитации FastProjectile с 3D-моделью. Тестировались только на GZDoom 4.10.0 и выше.
1 марта 2023
17 марта 2023 (сообщение)

Демоверсия обработки столкновения FastProjectile-пули со спрайтом (для Blade of Agony v3). Тестировалось только на последнем девбилде GZDoom.
4 апреля 2023 (сообщение)

Демоверсия обработки нажатия на спрайт. Тестировалось на последнем девбилде GZDoom и на QZDoom 4.5.0.
5 апреля 2023: GZDoom, QZDoom (сообщение)

Рейтинг сообщения: +9, отметил(и): klerk, marat]ASTS[, theleo_ua, Артём, RastaManGames, alekv, Mud, JSO x, Dron12261
1 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №2 Отправлено: 01.03.23 15:01:23
(тут должна быть шутка про "а попробуйте такое на декорейте") офигенно, респект за труды, интересно будет увидеть к чему придете в итоге

Рейтинг сообщения: +1, отметил(и): klerk
3 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №3 Отправлено: 13.03.23 23:59:26
Отличный креатив или рецензия на ресурс (+40)
Удалось совместить результаты прошлого видео с кодом для танков из Blade of Agony и добавить правильное движение/вращение хитбоксам, прикреплённым к модели. Гусеница немного проваливается в пол на 0:32--0:40, но это я, видимо, неправильно задал один из параметров в коде движения модели из Blade of Agony.

На видео также не показано следующее:
1а) если снаряд не попал в модель, то теперь он летит дальше и может попасть в другую модель, и 1б) теперь можно стрелять по танку вплотную, снаряд не исчезает;
2) попадания по частям модели под Doom-овским хитбоксом теперь нормально учитываются (проблема решена с помощью втыкания костыля BlockThingsIterator вместе с хитсканом, теперь не нужно возиться с перемещением модели). Хотя на форуме ZDoom онлайн больше, чем у нас, по поводу хитскана мне так никто и не ответил :-) Возможно, с чистым хитсканом действительно так не получится, зато у меня теперь более стабильный код.

theleo_ua
Благодарю за проявленный интерес! Мне хотелось бы создать геймплейный "клон" одной известной онлайн-игры про танки (хотя, наверное, это и так понятно), но с приоритетом на однопользовательские миссии. Если получится сделать не улетающий в рассинхрон мультиплеер, то будет ещё лучше, но это далёкие планы.
Конечно, добавлять такое количество франкенштейнов, как там, в планах у меня нет, но некое разнообразие моделей танков планируется --- по Интернету гуляет много хороших рипнутых моделей из разных игр.

Текущие планы:
1) Привязать модель танка к игроку (это тоже уже было сделано в Blade of Agony).
2) Добавить несколько моделей танков (в Blade of Agony были ещё 3--4 штуки).
3) Нарисовать несколько прототипов карт, реализовать частично разрушаемые декорации.
4) Переделать интерфейс.
5) Добавить механики обнаружения противников, вывода из строя оборудования/вооружения (это будет легче всего), тарана.
6) Оптимизация. Не пересчитывать при регистрации каждого нового столкновения положение треугольников в мире (для сложных моделей производительность будет кошмарная), а переводить координаты снаряда в фиксированное пространство модели (и в далёком будущем написать что-то типа октодерева, как справедливо заметил JSO x). Считывать MD3 один раз за игровую сессию (в StaticEventHandler), а не при каждом спауне танка.

Новую версию, наверное, выложу потом, или сразу доработанную.

Рейтинг сообщения: +4, отметил(и): theleo_ua, RastaManGames, alekv, JSO x
1 2
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №4 Отправлено: 17.03.23 18:28:26
Как и обещал, выкладываю новую демоверсию (извините за двойной пост, но иначе из потенциально заинтересованных людей её никто не увидит). Я исправил несколько багов и выполнил пункт 1) из списка. В архиве лежит два файла, один .ipk3, а второй .pk3, запускать нужно только второй (отдельный ipk3 сделан для того, чтобы не сбивать привязки клавиш в других играх, его нужно потом выбрать в окошке запуска GZDoom). Файл doom2.wad всё равно нужен, он подгрузится сам. Дальше нужно просто начать новую игру. Ссылка (1.5 Мб)

Пока тестировалось только на GZDoom 4.10.0.

Немного о том, что там есть на данный момент:
Танк, в который можно забраться (класс T34Treads). Как и в BoA, в него можно забраться по нажатию "use" (по умолчанию E в GZDoom), WASD управляет корпусом (A, D его разворачивают), мышь управляет башней и орудием. Колесом мыши можно переходить в снайперский режим, крестик (он всегда примерно в центре экрана) показывает, куда направлено орудие. Это не значит, что снаряд полетит туда же, т. к. в соответствии с ньютоновской физикой при выстреле к вектору скорости снаряда прибавляется скорость танка (правда, я не реализовывал вращательные эффекты, приоритеты сейчас другие). В этой версии базовая скорость снаряда равна 80 (чтобы от летящего снаряда можно было увернуться), но вроде бы мой код пока нормально работает и с более реалистичными скоростями. Красное число над танком --- это его текущий запас прочности. На свой танк можно посмотреть через зеркало (есть в конце тестовой карты).
Танк противника (класс T34Tank). "Искусственный интеллект" пока напрямую взят из Blade of Agony. Поскольку там броня не учитывалась, ИИ для танка подходит плохо и будет переделываться (знать бы ещё, как...). Лупит он всегда по центру актора игрока, то есть в данном случае примерно под башню, разве что мы там тогда в BoA этим танкам добавили стрельбу на упреждение. Можно на открытой местности проехать по прямой к нему бортом, он всегда попадает.

Два типа танков можно спаунить кнопками T и Y, но на тестовой карте это не нужно. На зазор между корпусом и башней после спауна T34Treads по T внимания можно не обращать, во время управления танком его нет (он появляется из-за того, что команда summon спаунит актора не на самой земле, а чуть выше, а у башни +NOGRAVITY).
Схема бронирования у танков игрока и противника абсолютно одинаковая. Снаряды тоже одинаковые, средние показатели пробития 80, а урона 100, но противникам нужно несколько секунд перезаряжаться, а у игрока каждое нажатие мыши даёт выстрел. Точность/кучность орудий идеальные. В лоб противник иногда будет пробивать игрока, но если выставить танк под углом, то это уже станет проблематично (если он не будет попадать по уязвимым местам).

Если у кого-то из форумчан найдётся 5 минут это протестировать, прошу писать здесь (или мне в ЛС, но лучше в теме) отзывы/пожелания/предложения и багрепорты (несколько багов, пока собирал эту версию, я уже нашёл :-) ), а также своё мнение по следующим вопросам:
1. Чтобы сделать более или менее точный крестик вне снайперского режима, придётся каждый тик проверять пересечение линии прицеливания игрока с моделями. Очень ли он нужен, или его реализацию можно отложить?
2. Нужна ли остановка вращения башни при переходе в снайперский режим, или лучше оставить как есть? Сейчас если от третьего лица быстро повернуть камеру почти на 180 градусов и переключить в снайперский режим, то башня будет довольно долго доворачиваться за камерой, мешает ли это?
Буду очень благодарен за любые идеи для этого проекта (особенно вместе с кодом, уже написанным за меня... Раскатал губу).

Рейтинг сообщения: +4, отметил(и): theleo_ua, RastaManGames, alekv, JSO x
1 2
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 106 points
1334

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №5 Отправлено: 17.03.23 20:07:24
Посмотрел на используемую версию ZScript ("verison 4.0"). Доступные мне LZDoom 3.87c (~= GZDoom 4.5.0) его понимает, QZDoom g4.5.0 (~= GZDoom 4.8.0, нет, в версии не ошибся) -- тоже. Соответственно, попытался запустить.

Сначала вылезла ошибка переопределения стандартного файла gzdoom.pk3 "zscript/base.zs". Переименовал в моде в "ZScript/base.zsc".

После этого не удалось запустить из-за того, что компилятор не мог найти относительные пути "./t3485.zs" и подобные, подключаемые внутри "zscript/tanks/tanklist.zs". Переделал пути на абсолютные.

Затем... Ну, в общем, поиграть я не смог -- в таком количестве ошибок в чужом проекте разбираться просто не желаю. Вижу, что в подавляющем большинстве мест там не в твоём коде проблема, а в коде Бенджамина Мойра, но факта невозможности запуска это не отменяет.
Скрытый текст:

Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 12:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 13:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 20:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 21:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 32:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 33:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 40:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 41:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 52:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 53:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 60:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 61:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 72:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 73:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 80:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 81:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 92:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 93:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 100:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 101:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 120:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 121:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 132:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 133:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 140:
Return type mismatch
Return type SInt4 mismatch with UInt4
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:binreader/array.txt" line 141:
Return type mismatch
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 16:
Cannot initialize non-scalar variable p here
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 16:
Unknown identifier 'p'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 16:
Unknown identifier 'p'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 16:
Unknown identifier 'p'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 17:
Unknown identifier 's'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 17:
Unknown identifier 'p'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 17:
Unknown identifier 'p'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 17:
Unknown identifier 'tank'
Script error, "C:/Appls/Games/JSOGames/ZDoom/Other/_Temp/3DModelArmor_N00b2015/tanks_1/:zscript/slowbullet.zs" line 18:
Unknown identifier 'p'


ADD 2023.03.17 20:26: "Cannot initialize non-scalar variable p here" всё-таки решается простым изменением типа, с автоматического "let" на нормальный "PlayerInfo". В остальном не разбирался.

Рейтинг сообщения: +3, отметил(и): theleo_ua, alekv, N00b
2 7 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №6 Отправлено: 17.03.23 20:30:57
JSO x
Попробуй в SLADE заменить строки
int Find
int Push
int Reserve
int Max

(4 типа) в этом файле array.txt на "uint Find" и так далее. Кажется, между версиями ZScript тип возвращаемых значений у стандартных вызовов поменяли. Вроде бы по первым 28 ошибкам должно помочь.
Да, я тестировал только на 4.10.0, надо было посмотреть версии постарше.

Рейтинг сообщения: +3, отметил(и): theleo_ua, alekv, JSO x
1 2
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 106 points
1334

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №7 Отправлено: 17.03.23 23:51:38
Удалось запустить на QZDoom g4.5.0, правда, он у меня купированный немного (изменение pitch игрока никак на угол зрения не влияет), так что полностью оценить не смог.

* * *

Первое, что напрягло лично меня -- это управление. Пришлось инвертировать движение мыши по Y и переназначить все клавиши поворота на стрейф (я использую WERSDF, где S/F -- поворот, W/R -- стрейф). Стало удобнее.


Мне кажется, или здесь попадание не учитывается? Оранжевая точка на вражеской броне. С этого места простреливал почти все видимые части врага, снарядов пятьдесят выпустил -- ни один не засчитался, ни один не отобразился в консоли. Качество изображений ужасное, так как пришлось уменьшить скейлинг, чтобы выдавало пятнадцать FPS, а не шесть. Также здесь изменил FOV на 20, чтобы взрыв был различим.
Скрытый текст:


Вот для сравнения точка чуть левее и ближе:
Скрытый текст:




Обнаружил воспроизводимый вылет, просто выстрелив перед собой сразу после старта. Насколько вижу, происходит оттого, что и игрок, и хитбокс стоят под одним и тем же углом в 135 градусов -- соответственно, их дельта, использующаяся где-то далее в знаменателе, равна нулю.
VM execution aborted: division by zero.
Called from ModelHitbox.TryCollideWithHitscan at .../tanks_1/:zscript/collision.zs, line 77
Called from SlowBullet.Tick at .../tanks_1/:zscript/slowbullet.zs, line 63



Ну и селфи через зеркало:
Скрытый текст:



* * *

Кстати, с приложенным *.ipk3 у меня не запустилось, говорит, "GetNumForName: PLAYPAL not found!".

Рейтинг сообщения: +3, отметил(и): theleo_ua, alekv, N00b
2 7 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №8 Отправлено: 18.03.23 13:32:46
JSO x
JSO x пишет:
Также здесь изменил FOV на 20, чтобы взрыв был различим.

А переход в снайперский режим (там от 2x до 25x) на QZDoom не работает? Он и так сам по себе меняет FOV. Из стандартного режима (без зума) пока можно стрелять только наугад, почему я и спрашивал про крестик.
JSO x пишет:
Мне кажется, или здесь попадание не учитывается?

Не могу, к сожалению, разобрать точнее, куда именно на скринах попали снаряды, но по положению красной точки где-то близко к нижним границам модели корпуса. Я когда-то видел эту проблему у себя при тестировании, но мне казалось, что я её исправил. Спасибо! Урон должен засчитываться только по корпусу и башне; гусеницы, топливные баки, орудие пока чисто декоративные. Снаряд должен либо пролетать мимо, либо при попадании печатать "пробил/не пробил".
JSO x пишет:
Обнаружил воспроизводимый вылет, просто выстрелив перед собой сразу после старта.

За указание на вылет тоже благодарю! Надо будет отдельно обрабатывать эти случаи.
JSO x пишет:
Кстати, с приложенным *.ipk3 у меня не запустилось

Если на GZDoom перетаскивать (или задавать параметры в батнике/лончере) файл ipk3, то действительно вылезет ошибка. Нужно запускать именно pk3, а ipk3 выбирать в окошке GZDoom.
---
Насчёт производительности --- когда, по ощущениям, FPS проседали больше всего? Было ли слайдшоу при попадании снаряда во вражеский/в собственный танк и особенно при пролёте снаряда над танком?

Рейтинг сообщения: +2, отметил(и): theleo_ua, JSO x
1 2
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 106 points
1334

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №9 Отправлено: 18.03.23 19:39:14
N00b2015 пишет:
Если на GZDoom перетаскивать (или задавать параметры в батнике/лончере) файл ipk3, то действительно вылезет ошибка. Нужно запускать именно pk3, а ipk3 выбирать в окошке GZDoom.


Всё равно нет, даже при попытке выбора из меню (может, QZDoom инструкцию "LOAD = ..." в GAMEINFO не понимает?). У меня такой запуск -- убрал все ветви и проверки, оставив только фактическую трассировку:
Скрытый текст:

@echo off
setlocal

set MAP=MAP01

rem Так IWAD берётся из меню при запуске.
set IWAD=

rem Флаги игнорируются из-за намеренно неправильного названия -- так мне их проще переключать.
set FLAGS=+notargetX -nomonstersX

rem Сторонних файлов не подгружаю (кроме тех, которые в autoload, но они на игру не влияют).
set EXTRAFILES=


rem === Core side ===

set EXTRAFILES=. %EXTRAFILES%

set GENERALPARAMS=-iwad %IWAD% +map %MAP% -file %EXTRAFILES% %FLAGS% -stdout

:QZDoom450Launch
echo QZDoom 4.5.0 > _lastrun.txt
C:\Appls\Games\JSOGames\qzdoom-x64-g4.5pre-1306-ga434d8149\qzdoom.exe %GENERALPARAMS% >> _lastrun.txt



N00b2015 пишет:

А переход в снайперский режим (там от 2x до 25x) на QZDoom не работает? Он и так сам по себе меняет FOV. Из стандартного режима (без зума) пока можно стрелять только наугад, почему я и спрашивал про крестик.

Не знал про него... Да, с ним гораздо, гораздо приятнее идти. Вместо почти тридцати минут прошёл за семь.

N00b2015 пишет:
Урон должен засчитываться только по корпусу и башне; гусеницы, топливные баки, орудие пока чисто декоративные.

Тогда, возможно, я тебя дезинформировал. Впрочем, это не факт -- насколько помню, стрелял по всем видимым частям; в частности, в башню попадал, по воспоминаниям.

Добавлено спустя 21 час 14 минут 16 секунд:

N00b2015 пишет:
Насчёт производительности --- когда, по ощущениям, FPS проседали больше всего? Было ли слайдшоу при попадании снаряда во вражеский/в собственный танк и особенно при пролёте снаряда над танком?

Да вроде критических проседаний вообще не было... Но на меня ориентироваться не стоит, на QZDoom у меня практически всё отрисовка съедает, за ней тормоза кода становятся малозаметны. Лучше кого-нибудь ещё дождаться.

N00b2015 пишет:
1. Чтобы сделать более или менее точный крестик вне снайперского режима, придётся каждый тик проверять пересечение линии прицеливания игрока с моделями. Очень ли он нужен, или его реализацию можно отложить?

Нужен. А зачем пересечение проверять? Если только чтобы увеличивать crosshair в зависимости от дальности до -- то я не уверен, насколько необходим такая функциональность. Хотя, если в оригинале такое было, то да, придётся...

N00b2015 пишет:
Лупит он всегда по центру актора игрока, то есть в данном случае примерно под башню, <...>

Что позволяет залечь в окопе, высунув только башню -- тогда никто не попадёт, только если случайно.

N00b2015 пишет:
2. Нужна ли остановка вращения башни при переходе в снайперский режим, или лучше оставить как есть? Сейчас если от третьего лица быстро повернуть камеру почти на 180 градусов и переключить в снайперский режим, то башня будет довольно долго доворачиваться за камерой, мешает ли это?

Мне кажется, нынешний вариант довольно честен.

* * *

Хитбоксы подбитых танков сейчас являются просто коробками? На скриншоте мой снаряд разрывается об воздух, если что. Проверял на этом месте под разными angle/pitch. В целом снаряд может пролететь мимо, если, к примеру, ствол будет задран достаточно высоко.
Скрытый текст:


Рейтинг сообщения: +2, отметил(и): theleo_ua, N00b
2 7 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №10 Отправлено: 19.03.23 18:12:01
JSO x пишет:
практически всё отрисовка съедает, за ней тормоза кода становятся малозаметны

Да, понятно, спасибо! В ещё не выложенной версии я выкинул пересчёт треугольников модели при каждом попадании (там был такой метод Update() в collision.zs) и заменил его на перевод точки из пространства мира в пространство модели (собственно, это часть пункта 6) из моего раннего сообщения), должно раза в два сократить нагрузку. Это промежуточный шаг к реализации октодерева, но в ближайшие дни я за написание октодерева браться не планирую.
JSO x пишет:
А зачем пересечение проверять?


Чтобы крестик рисовался именно там, куда полетит снаряд. В режиме от третьего лица камера расположена выше (и, по-моему, дальше), чем в снайперском режиме. Камера снайперского режима у меня привязана непосредственно к дульной части орудия, откуда вылетает 16-кг птичка. Поэтому в снайперском режиме по существу безразлично, с чем искать пересечение, --- с Doom-хитбоксом (A), моделью (B) или куском геометрии уровня (C), --- они все лежат на луче прицеливания и будут спроецированы в одну и ту же точку на экране. Сейчас у меня это C. От третьего лица, как видно по картинке, разница есть, и в ближнем бою она может быть очень существенная. Если крестик рисовать по направлению на A, то будет казаться, что снаряд попадёт в землю, если на C, то в башню, тогда как в реальности он попадёт в борт корпуса B.

Кстати, если кто не знает, в GZDoom 4.8.0 добавили флаг MASTERNOSEE. С его помощью можно убирать отображение моделей, master которых --- текущая камера. В зеркале модель отображается. Бывает полезно для режимов, похожих на этот снайперский.

JSO x пишет:
Хотя, если в оригинале такое было, то да, придётся...

У меня нет цели делать копию (или порт :cool3:) той игры. Я планирую многие механики взять оттуда, но с изменениями (какие-то в сторону реализма, какие-то для упрощения/усложнения частей игрового процесса). Какие-то механики я буду брать и из других игр. Например, я точно буду пробовать реализовать постепенное разрушение участков брони при повторных непробитиях от крупнокалиберных снарядов примерно в одну и ту же точку. Кроме того, буду добавлять и свои собственные задумки.

JSO x пишет:
Мне кажется, нынешний вариант довольно честен.

В снайперский режим игрок будет переходить, если он собрался стрелять, а если у него при этом камера непонятно куда крутится, это может вывести из себя. Ну командир танка может дать приказ остановить вращение. Ещё подумаю, как лучше сделать, и подожду, вдруг у нас на форуме ещё пара человек заинтересуется. Может быть, настройку сделаю.

JSO x пишет:
Хитбоксы подбитых танков сейчас являются просто коробками?

Да, эту часть из Blade of Agony я пока особенно не трогал, эту коробку надо сделать прозрачной для снарядов. Позабыл об этом, спасибо! Надо тоже подумать, как именно подбитые/сгоревшие танки должны взаимодействовать со снарядами. Тем более я на будущее планирую механику сквозного пробития, будет неправильно, если они просто будут их блокировать.

Рейтинг сообщения: +2, отметил(и): theleo_ua, JSO x
1 2
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №11 Отправлено: 04.04.23 01:13:10
Всем доброй ночи, в общем, я сделал примерно то же самое, только для спрайтов.

Под Doom переделывать для себя не планирую, но могу сделать по просьбам трудящихся. Оказалось, что идея в первый раз выдвигалась не мной, но реализации я нигде не нашёл. Возможно, кто-то из форумчан такое встречал? Знаю, что в многих модах к акторам привязывается по несколько хитбоксов, так вот, это "не наш метод", у меня способ принципиально более точный.
При стрельбе проверяется не сам спрайт, а нарисованная по его лекалам "карта" областей для попаданий. Например, при попадании в каску пуля как бы рикошетит и наносит только половинный урон, а при попадании в лицо актор сразу умирает. Здесь уже пуля --- почти стандартный в Blade of Agony FastProjectile, но это всё легко переделывается под его хитскановую имитацию.
Я пока нарисовал карту пока только для одной ротации одного спрайта (нацист анфас), что видно в конце ролика, когда я стреляю по нацисту в профиль (там всё считается стандартным образом, как видно, урон проходит по воздуху). Для карты областей удобнее всего оказался как раз классический Doom-овский формат картинок, но с другой палитрой, в которой легко различать соседние цвета.
Не тестировалась и не гарантируется правильная работа с порталами. Также где-то в середине пуля прошла через каску, пока не тестил, возможно, это произошло из-за недостаточной высоты актора-нациста. Ещё сейчас не учитывается floorclip (а scale учитывается, у этого актора она 0.65).

Демоверсия обработки столкновения пули со спрайтом (работает на Blade of Agony v3)
Ссылка (7 Кб)

Рейтинг сообщения: +4, отметил(и): theleo_ua, MyNameIs, JSO x, Doomstalker
1 2
MyNameIs
= 1st Lieutenant =
Next rank: - Captain - after 36 points
2054

Doom Rate: 2.04

Posts quality: +893
Ссылка на пост №12 Отправлено: 05.04.23 04:28:17
офигеть.
а оно будет работать с плоскими спрайтами? а то я так подумал, ведь с помощью этого можно сделать интерактивные экраны, а-ля дум3

Рейтинг сообщения: +2, отметил(и): theleo_ua, N00b
1 1 1
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 106 points
1334

Doom Rate: 2.26

Posts quality: +726
Ссылка на пост №13 Отправлено: 05.04.23 13:22:23
N00b2015 пишет:
Ещё сейчас не учитывается floorclip

То есть это не для мультиплеера? Вроде бы floorclip независим между клиентами (если не блокировать его намеренно, но тогда зачем он нужен?). Разное отображение ротаций, скорее всего, даже сейчас проблемы не представляет, но этим одним фактором такие эксперименты над теоретико-практическими границами ZScript не ограничиваются. Собственно, вполне обычный факт -- чем задача менее тривиальна, тем больше нужно учитывать.

MyNameIs пишет:
а то я так подумал, ведь с помощью этого можно сделать интерактивные экраны, а-ля дум3

Ага, и RTDraw сверху, чтобы на них работать можно было. Или разбивать.

MyNameIs пишет:
а оно будет работать с плоскими спрайтами?

Насколько понимаю, из коробки -- нет, нужно писать стереометрию искажений перспективы.

Рейтинг сообщения: +2, отметил(и): theleo_ua, N00b
2 7 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №14 Отправлено: 05.04.23 22:23:58
MyNameIs пишет:
а оно будет работать с плоскими спрайтами?

JSO x пишет:
Насколько понимаю, из коробки -- нет

Да, совершенно верно, не будет, поэтому выкладываю отдельную версию для FLATSPRITE: GZDoom, QZDoom. На тестовой карте четыре спрайта импов, чтобы открыть дверь, кому-нибудь из них нужно пожать руку кнопкой "use". Если промахнуться и дать пощёчину, имп рассердится. Если заморочиться, то экраны в стиле Doom 3 так вполне можно сделать.

JSO x пишет:
Ага, и RTDraw сверху, чтобы на них работать можно было. Или разбивать.

Вот этих слов я, признаюсь, вообще не понял... Что такое RTDraw и что разбивать?

JSO x пишет:
Вроде бы floorclip независим между клиентами

В классе Actor есть переменная floorclip, вроде бы это его внутренняя характеристика. Там есть ещё какая-то настройка Advanced Sprite Clipping, она, наверное, может зависеть от клиента. В любом случае, я все данные беру из самой игры (положение акторов, их размеры, углы, название спрайта), а из рендерера ZScript-ом ничего не достать. Максимум, что тут может пойти не так, --- это изображение, не совпадающее с "хитбоксом", у самого пользователя, у которого такая настройка. Ну, тогда он сам себе злобный Буратино. Рассинхрона из-за неё быть не может.
Проблема тут, как Граф говорил в прикреплённой теме, в том, что у разных клиентов могут быть разные текстуры, и тогда читеры теоретически могли бы подключать вместо hitmap-а квадрат, раскрашенный под цвет головы (если он считается текстурой). Тут уже будут и рассинхроны. Я пока не знаю, какие в GZDoom лампы хешируются, а какие нет. Если файлы в неопознанных папках хешируются, то проблемы вообще нет (несмотря на содержание hitmap-ов, формально для GZDoom это должны быть просто бинарники, а не текстуры, они же лежат в отдельной папке), а вот если они могут быть заменяемы, то это проблема.
Возможно, для моих целей имеет смысл отрубить floorclip вообще, я подумаю, спасибо.

Напоминаю, что hitmap-ы (в папке /sprhb) должны быть строго Doom-овскими изображениями без расширений в именах файлов, PNG этот код читать не будет.
P. S. Обратите внимание, что в UDB и в игре FLATSPRITE-ы отображаются по-разному.

Рейтинг сообщения: +3, отметил(и): theleo_ua, MyNameIs, JSO x
1 2
Страница 1 из 1Перейти наверх
   Список разделов - Местечко мапперов и моддеров - Точный расчёт столкновений с моделями и спрайтами (GZDoom)