В виде эксперимента сделал простенького кибердемона, пуляющего на упреждение. Не как D64, а все три выстрела. По собственному опыту подходить вплотную стало куда опаснее Исходник скрипта приложен в ваде.
ZZYZX, а в чем сложность сделать механизм, чтобы скорость проджектайлов была известна скрипту и просчитывалась/учитывалась на лету?
А так, норм скрипт, спасибо, возможно заюзаю для боссов и полубоссов в своем моде для еретика (почему только для боссов/полубоссов, потому что если дать и обычным монстрам, мод скорее всего станет непроходимым)
ZZYZX Недурно. Так-то в ACS есть готовая фича "Thing_ProjectileIntercept". Но её за каким-то чёртом привязали к spawn numbers и, как обычно, забыли прикрутить spawnheight, на корню убив смысл использования.
может быть, оффсеты спрайтов не настроены, из-за этого они целиком в пол уходят?
Вот, кстати, на тему оффсета спрайтов задачка. Существуют ли в decorate/acs/лампдефах способы изменить оффсет спрайта, отображаемого актором, НЕ МЕНЯЯ непосредственно спрайт? Я вроде всё перерыл, но ничего такого не нашёл.
Возможно можно задать спрайт как текстуру и поменять оффсет патчу. Не проверял.
Добавлено спустя 4 минуты 13 секунд:
Герр Смертоносец:
Недурно. Так-то в ACS есть готовая фича "Thing_ProjectileIntercept". Но её за каким-то чёртом привязали к spawn numbers и, как обычно, забыли прикрутить spawnheight, на корню убив смысл использования.
"When using this special on a linedef or a thing in UDMF, you can use the arg1str property to define a class name instead of the arg1 property to define a spawn number. (New from 2.7.1)" Я так понимаю что в ACS теперь тоже можно строку указать в этом месте.
Возможно можно задать спрайт как текстуру и поменять оффсет патчу. Не проверял.
Пробовал, не понимает он этого. Человеческие оффсеты есть только в modeldef, только для гоззы. В zdoom нет ничего подобного даже в voxeldef.
Единственная гипотетическая зацепка: FLOATBOB+FloatBobPhase, но для FloatBob не существует настроек по амплитуде, поэтому особо с этим не развернёшься.
ZZYZX:
"When using this special on a linedef or a thing in UDMF, you can use the arg1str property to define a class name instead of the arg1 property to define a spawn number. (New from 2.7.1)" Я так понимаю что в ACS теперь тоже можно строку указать в этом месте.
Видимо, только на UDMF-картах. В классике такое не работает.
а можно ли надписи при выборе уровня сложности как-нибудь сдвинуть левее? фраза длинная (установлена изображением), вылезает за экран, если сдвинуть оффсет изображения, черепок закрывает его часть.
Как ты себе это представляешь, учитывая что на момент вызова скрипта неизвестен проджектайл?
1) Скрипту на вход дать параметр "скорость" (или через uservar у монстра) 2) Скорость знает моддер (по логике "если я пишу ракетную атаку кибердемону, значит проджектайл = ракета кибердемона") 3) Исходя из 1 и 2, моддер пишет нужную циферку в параметры скрипта (или в uservar монстру)
Если монстр не кибердемон и у него несколько разных атак (у каждой из которых своя скорость снаряда), то пускать несколько копий скрипта одновременно (для каждого типа атак), либо, как вариант, кинуть все эти скорости монстру в userarray, а скрипт их оттуда выдерет и будет делать "несколько параллельных вычислений в рамках одной копии скрипта". Количество разных атак хранить в юзерваре например.
Если же у нас одна и та же ракета кибера, но ее скорость может быть по рандому, то генерить этот рандом самому до вызова скрипта (т.е. мы переопределяем ракету кибера, и теперь она берет рандом у нас, а не с потолка). Таким макаром сделать, чтобы наш скрипт знал например скорости ближайших шести атак кибера (ну или сколько понадобится для оптимальной работы скрипта).
Если проблема в том, что на UV скорость 10, а на NM 20, то или передавать текущий скилл скрипту параметром, или в самом скрипте "if skill=5 then бла бла бла", либо для каждого монстра свой uservar/userarray и свои вычисления на стадии spawn по поводу скоростей в зависимости от скиллов. Или в декорейте/acs нет возможности чекать текущий скилл?
1) Скрипту на вход дать параметр "скорость" (или через uservar у монстра)
Вообще-то я это уже делаю. Я думал ты хочешь чтобы я выкинул параметр и пытался это определять из проджектайла.
theleo_ua:
Если проблема в том, что на UV скорость 10, а на NM 20
Понимаешь, там не просто "на ув 10, а на нм 20", а в зависимости минимум от 3-4 независимых факторов (skill (причём можно определить свой список скиллов, в котором скорость будет РАЗЛИЧАТЬСЯ), sv_fastmonsters, мапинфо, флаг ALWAYSFAST или как-то так)
Вопрос по поводу внезапного непонятного бага с ACS файлами:
Скрытый текст:
Есть у меня мод с единственным ACS файлом _ModelHack.acs и декорейт файлом DECORATE. Все было нормально и работало как надо, но скрипты разрастались и решил раздробить декорейт и ACS на разные логические части. Имена ACS файлов стали такими (естественно, все обновил как надо, и LOADACS и заголовки):
и теперь мод начал игнорить все скрипты, прописанные в _ModelHack___SHARED.acs (пускаю из GZDoom 2.0.05). Долго долбался чтобы узнать в чем причина, потом переименовал скрипты вот так:
__SHARED.acs _DECOR.acs _HUD.acs _ITEMS.acs
и все заработало. Это бок текущих версий здума/гоззы, или у ACS есть какие-то стандартные ограничения в именах файлов, о которых я не знаю? Потому что в парочке других модов у меня есть файл _HEXEN_WEAPONS___HammerAmmoCheck.acs и все работает как надо (при условии что рядом валяются другие файлы ACS скриптов).
З.Ы. Похожий случай был с SNDINFO, когда рядом были 2 звука с одинаковым началом имени и разными окончаниями, и пока я не закомментировал один из звуков, гозза зависала при запуске. Код в SNDINFO, вешающий гоззу, выглядит примерно так:
Отлично, тогда вопрос по скоростям отпадает, удачи с реализацией!
Добавлено спустя 5 минут 33 секунды:
ZZYZX:
Понимаешь, там не просто "на ув 10, а на нм 20", а в зависимости минимум от 3-4 независимых факторов (skill (причём можно определить свой список скиллов, в котором скорость будет РАЗЛИЧАТЬСЯ), sv_fastmonsters, мапинфо, флаг ALWAYSFAST или как-то так)
Да, это посложнее детектить (если вообще реально), согласен (разве что делать отдельный скрипт, который по уже выпущенной ракете считает ее скорость на лету по аналогии как твой скрипт считает куда движется игрок, но это уже танцы с бубнами и лишний геморрой)
Можно ли как-нибудь реализовать несколько типов дальней атаки у одного актора? Можно ли в этом случае их выбирать случайным образом?
Да, только удобнее делать это в Decorate.. A_Jump Т.е. то что тебе надо примерно так в стейте Missile: TNT1 A 0 A_Jump(12,"AttackType2", "AttackType3", "AttackType4") //12 шанс с которым прыгнет в 1 из стейтов, в кавычках перечисляешь типы атак. ... Goto ... AttackType2: // ну и конечно же типы атак надо реализовать TNT1 A 0 Goto ... AttackType3: TNT1 A 0 Goto ... AttackType4: TNT1 A 0 Goto ...