Автор | Сообщение |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 17.06.19 17:28:35 | | | JSO x пишет: | В помещение с бронёй в секретке дверь односторонняя | Зыс ван.
То что она односторонняя я в курсе, но сути это менять не должно (ну по логике вещей) - с "открывабельной" стороны дверь-то монстрами всё равно не открывается. :\
Алярмим монстров=>клипаемся на другую сторону двери=>наблюдаем... мобы будут просто толпиться у двери но открыть её не смогут. В чём нюанс, как можно обойти?
JSO x пишет: | Ещё условие (насчёт обычных не уверен, но для ключевых -- обязательно): дверь должна быть тоньше то ли восьми, то ли шестнадцати маппикселей. | А как это можно оценить\проверить не будучи маппером?
JSO x пишет: | С помощью Decorate -- никак. | Эва как, ну ок. Тогда вопрос снимается. | |
|
1 |
9 |
1 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 18.06.19 00:06:33 | | | JSO x пишет: | Ещё условие (насчёт обычных не уверен, но для ключевых -- обязательно): дверь должна быть тоньше то ли восьми, то ли шестнадцати маппикселей |
Это баг, который точно был в ванили (вики), но насчёт его присутствия в gzdoom я бы не был так уверен
На ДВ когда-то задавали вопрос про классику: "Какие двери могут открывать монстры?", так вот, там из нажимаемых special'ов только special 1 (то есть, самое обычное открытие/закрытие двери).
Void Weaver
Посмотри код gzdoom в месте p_spec.cpp, функция P_TestActivateLine (строчки от 302 до 363). Там разбор случая монстра, активирующего линию, на которую не повесили флаг "monsters can activate". Мне кажется, судя по коду, там монстры будут открывать только тип 12, DoorRaise (+линии, преобразованные к нему через xlat), а дверь на MAP01 приведётся точно к другому типу (она же "одноразовая"). Поэтому, скорее всего, придется править исходники...
---
Edit. И тут, изучая логику P_TestActivateLine, я понял, что не придётся.
actor SuperImp: DoomImp replaces DoomImp {
+MISSILE
}
Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий
Тестить так:
kill zombieman; iddqd; noclip
Первый имп в игре действительно открывает дверь. |
|
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 18.06.19 02:28:56 | | | В сорцах почти нифига не понял но, ОМГ, это то что мне нужно, такие монстры юзают почти всё! Грэйт Сэнкс. ^_^
Странно как я раньше этого не замечал...
N00b2015 пишет: | Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий | Да, есть такое. Импы дохнут имея хп больше 0 поскольку при получении урона на них начинает действовать кинетика урона, которая в свою очередь толкает монстра, а при столкновении со стеной последний дохнет с оставшимися хп, ибо MISSILE.
Изи лечится добавлением +DONTTHRUST.
ИЛИ же комплексным хаком через добавление всех BOUNCE-флагов, Bounce-стэйта с остановкой внешнего ускорения и джампами в соответствующие стэйты - те, из которых произошёл переход в Баунс стэйт.
Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах...
ЭДИТ:
Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0 | |
|
1 |
9 |
1 |
|
|
| |
JSO x - 2nd Lieutenant -
| 1336 |
Doom Rate: 2.26 Posts quality: +726 |
Отправлено: 18.06.19 11:01:33 | | | Void Weaver пишет: | Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0 |
Как раз на это я могу ответить. Здесь, скорее, нужно использовать не понятие кинетической энергии, а понятие силы (у акторов есть атрибут "Mass"). Акторы могут изменять свою скорость, но не ускорение -- оно задаётся либо внешними силами (отбрасыванием хитсканов/проджектайлов), либо ThrustThing и им подобными, но последний вариант всё-таки не может считаться полноправно подчинённым актору: это не самый обычный тип движения для Doom.
Другой тип -- летающие монстры, например, какодемоны. У них, насколько я понимаю, ускорение мгновенно переходит в модификатор к их собственной скорости, который не сбрасывается до нового внешнего воздействия.
Void Weaver пишет: | Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах... |
При прижимании монстра закрывающейся дверью, например.
N00b2015 пишет: | Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий |
О, ужас. Бедный Decorate... |
|
|
2 |
7 |
1 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 18.06.19 12:32:19 | | | Void Weaver пишет: | Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0 |
Потому что естественное движение актора это тупо микротелепортации. И они никак не связаны с физическими параметрами. Добро пожаловать в говнокод кармака.
Именно поэтому какодемоны на открытых картах имеют свойство улетать в далёкие дали. Они не умеют тормозить velx/vely/velz, пока оно само не сбросится или пока какос во что-то не вдуплится с разбегу.
Поэтому я своим летающим монстрам всегда прописываю что во время A_Chase одновременно происходит сбрасывание velx/vely/velz на некоторое значение. |
|
|
2 |
2 |
1 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 18.06.19 13:11:35 | | | Я попробовал этот MISSILE впихнуть так (zscript):
class SuperDoomImp: DoomImp replaces DoomImp {
states {
See:
TROO AABBCCDD 3 {
bMISSILE = true;
A_Chase();
bMISSILE = false;
}
Loop;
}
}
И, как ни странно, сработало! Имп открывает двери, не улетает от каждого выстрела, не дёргается и выглядит здоровым
А потом перевёл на decorate, и почему-то работать перестало (вернее, иногда двери он всё же открывает, но редко):
actor SuperDoomImp: DoomImp replaces DoomImp {
states {
See:
TROO AABBCCDD 3 {
A_ChangeFlag("MISSILE", 1);
A_Chase;
A_ChangeFlag("MISSILE", 0);
}
Loop
}
}
Есть подозрение, что в A_ChangeFlag (в частности, ModActorFlag) включена защита от дурака, но я не могу её обнаружить, видимо, она сама от меня хорошо защищена.
Ой, нет, и то, и другое работает через раз. Впрочем, так и положено хакам.
edit: Совсем забыл, что наследовать нельзя. Если создать нового актора, всё работает нормально и через decorate.
Код:
|
|
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 18.06.19 14:06:57 | | | ZZYZX пишет: | Потому что естественное движение актора это тупо микротелепортации. И они никак не связаны с физическими параметрами. Добро пожаловать в говнокод кармака.
Именно поэтому какодемоны на открытых картах имеют свойство улетать в далёкие дали. Они не умеют тормозить velx/vely/velz, пока оно само не сбросится или пока какос во что-то не вдуплится с разбегу. | Про микротеле суть А_Чейса я в курсе (но всё время забываю); но тогда почему НЕ-како\соулы сами вполне себе спокойно тормозят без необходимости вмазаться во что-то ещё?
JSO x пишет: | Void Weaver пишет: | Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах... |
При прижимании монстра закрывающейся дверью, например. | На удивление даже перед простым MISSILE-мобом двери галантно отъезжают вместо размазывания в кашу.
А вот что действительно гробит таких мобов так это свободное "падение" при наличии +DROPOFF\JUMPDOWN, и никакой DONTTHRUST тут уже не спасает. Походу таки придётся пилить БАУНС-хак или ограничивать миссиль-моба текущей плоскостью. ((
N00b2015
Да, такой вариант тоже работает но абсолютно ненадёжен: при высоком уроне или трасте, И\ИЛИ нахождении на очень близком расстоянии от плоскостей мапы или соседних акторов такой монстр может тупо не успеть отключить миссиль-флаг. Причём если против столкновения с актороми поможет RIPPER, то против стен этот флаг уже не спасёт.
Бтв, ещё можно записывать A_ChangeFlag("MISSILE",random(0,1)), но разумеется такой вариант менее надёжен чем цикличное переключение. | |
|
1 |
9 |
1 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 18.06.19 14:29:49 | | | Void Weaver пишет: | но тогда почему НЕ-како\соулы сами вполне себе спокойно тормозят без необходимости вмазаться во что-то ещё? |
Соулы это вообще ракеты, и они не тормозят. Они резко меняют направление. А вот если в них выстрелить то они будут дрейфовать в указанном направлении пока на что-нибудь не наткнутся или не начнут атаку.
А вот те же пейны имеют такое же поведение как и у каков. | |
|
2 |
2 |
1 |
|
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 18.06.19 14:37:43 | | | ZZYZX пишет: | Соулы это вообще ракеты | С хера ли? В коде соулов вроде нет никаких намёков на их миссиль-природу, да и вообще там из примечательного разве что определение самой _СкуллАттак:
И вообще вопрос был совершенно другой: почему одни мобы могут и сами погасить ДМГТРАСТ (эту самую "кинетику"), тогда как другим для этого необходимо во что-то влететь.
ЭДИТ1:
С дилетантской точки зрения складывается впечатление что неспособность ванильных мобов противостоять дмгтрасту как-то связана с наличием у них ФЛОАТ и\или НОГРАВИТИ.
ЭДИТ1.1:
ДА, так и есть! ЕЯПП, то соприкосновение с полом считается за "столкновение" и автоматически гасит кинетику дмгтраста, тогда как летуны не соприкасаются ни с чем и соотв. не могут погасить импульс без внешнего вмешательства.
ЭДИТ2:
Добавление FLOORHUGGER позволяет не убиваться монстр-миссилям аппол и свободно спрыгивать с отвесов, правда в Спаун стэйт надо ещё добавить принудительное гашение ускорения: TROO A 0 NoDelay A_Stop
Добавлено спустя 46 минут 25 секунд:
Ну вот как-то так:Actor SuperImp replaces DoomImp
{
+DROPOFF //issue
+JUMPDOWN //issue
+MISSILE //key
+FLOORHUGGER //key
+DONTTHRUST //key
+RIPPER //key vs impact with actors
+BLOODLESSIMPACT
+THRUSPECIES //key vs stuck
MaxDropoffHeight 100
Health 600
Radius 20
Height 56
Mass 100
Speed 8
PainChance 200
Monster
+FLOORCLIP
SeeSound "imp/sight"
PainSound "imp/pain"
DeathSound "imp/death"
ActiveSound "imp/active"
HitObituary "$OB_IMPHIT"
Obituary "$OB_IMP"
states {
Spawn:
TROO A 0 NoDelay A_Stop Остальной код ванильный. | |
|
1 |
9 |
1 |
|
|
| |
ZZYZX - UAC Commissar -
| | 6284 |
Doom Rate: 1.65 Posts quality: +1630 |
Отправлено: 18.06.19 15:36:31 | | | Void Weaver пишет: | С хера ли? В коде соулов вроде нет никаких намёков на их миссиль-природу, да и вообще там из примечательного разве что определение самой _СкуллАттак: |
Вот и я про это. Соул это единственный монстр, использующий для своего движения velx/y/z. Так же как и у ракет velx/y/z.
Как раз при помощи VelFromAngle и Vel.z. | |
|
2 |
2 |
1 |
|
|
| |
N00b Chief Petty Officer
| 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 18.06.19 15:47:54 | | | Void Weaver
Void Weaver пишет: | такой вариант тоже работает но абсолютно ненадёжен: при высоком уроне или трасте, И\ИЛИ нахождении на очень близком расстоянии от плоскостей мапы или соседних акторов такой монстр может тупо не успеть отключить миссиль-флаг. |
Пруфы в студию, как говорится!
У меня всё прекрасно работает: и если из BFG жахнуть по импу на выступе (предварительно подняв ему здоровье), и если он в другого импа попадёт. Даже если в стенке импа заспавнить, сам он не сдохнет.
Я же включаю флаг, микро-телепортирую импа, затем выключаю, и это всё на протяжении одного тика. Столкновениям с акторами и стенами обрабатываться тупо некогда.
Лостсоулы не совсем снаряды, но функционально флаги MISSILE и SKULLFLY схожи. |
|
|
| |
Void Weaver = Captain =
| 2496 |
Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 18.06.19 17:42:47 | | | ZZYZX
Ты очень некорректно выразился. ) Тем более что SKULLFLY это временный флаг, а не постоянный атрибут движения актора.
N00b2015
Да, дичайше извиняюсь, - всё работает ИДЕАЛЬНО! Надо было сразу проверять а не теоретизировать.
Ещё раз спасибо. | |
|
1 |
9 |
1 |
|
|
| |