Всем привет. Как заставить монстра проходить сквозь "портал" (line_setportal)? Если монстр находится в секторе рядом с порталом, то должен срабатывать некий триггер, указывающий монстру на проход через портал (портал интерактивный). Порт gzdoom 3.8
В общем сам отвечу на свой вопрос, надо пихать wad в pk3 архив, и шейдер тоже в pk3 архив, но не в wad, тогда всё работает, можно ли обойтись без pk3 архива я так и не понял.
Кто работал с цветовыми картами -- как свои FIXEDCOLORMAP создавать? По умолчанию их около тридцати двух штук (чёрно-белая инвертированность для неуязвимости из Doom, в Strife экран вроде как в жёлто-чёрную палитру перекрашивался, и подобное), но я так и не понял, где же находится их объявление: в (g-/q-/l-)zdoom.pk3 и в zd_extra.pk3 их будто нет.
* * *
На вопрос Юрия ответ уже был, но не на форуме. Чтобы кто-либо не запаривался с ответом ещё раз, приведу его под спойлером:
Скрытый текст:
"bNOCLIP" устанавливается игроку принудительно каждый такт:
virtual void CheckCheats() {
let player = self.player;
// No-clip cheat
if ((player.cheats & (CF_NOCLIP | CF_NOCLIP2)) == CF_NOCLIP2)
{ // No noclip2 without noclip
player.cheats &= ~CF_NOCLIP2;
}
// Here:
bNoClip = (player.cheats & (CF_NOCLIP | CF_NOCLIP2) || Default.bNoClip);
if (player.cheats & CF_NOCLIP2)
{
bNoGravity = true;
}
else if (!bFly && !Default.bNoGravity)
{
bNoGravity = false;
}
}
Переменная читов игрока сама по себе ни на что не влияет, но её состояние проверяется/может проверяться в других местах. В данном случае она и только она является источником информации для принудительного изменения (именно изменения, не сохранения) "bNOCLIP" актора игрока. Та самая строчка, исполняемая каждый такт, в переводе на русский звучит так:
"ЕСЛИ у игрока в переменной читов установлен один из двух флагов "Cheat_NOCLIP[2]" ИЛИ ЕСЛИ у игрока ещё с default-блока (со свойств актора) установлен флаг "bNOCLIP", ТО устанавливаем ему фактический флаг прохождения сквозь плотные объекты "bNOCLIP", ИНАЧЕ -- снимаем последний".
Из этого следует, что каждую 1/35 секунды флаг НЕпривязки актора к твёрдому миру либо остаётся взведённым, если изначально он таким был, либо форсированно и по-любому будет изменён в зависимости от читов, но не от предыдущего состояния фактического "bNOCLIP".
Для решения этого можно либо менять флаг внутри "player.cheats", либо переписать виртуальную функцию.
Если первое -- следует дописать в код ZScript-игрока следующее:
action void A_ChangePlayerNoclip( bool set = false ) {
if ( set )
player.cheats |= CF_NOCLIP;
else
player.cheats &= ~CF_NOCLIP;
}
После этого функцию можно будет использовать в наследованном Decorate-классе игрока, например. Если то же нужно для оружия/инвентаря -- добавляешь ещё проверку на владельца ("if ( PlayerPawn( owner ) ) { <…> }").
Второй вариант мне как-то меньше нравится.
(P. S.: есть ещё третий, через морф в игрока с уже предустановленным флагом "+NOCLIP", но с ним есть проблема -- оставить то же количество жизней, что было у предыдущей формы).
Добавлено спустя 1 день 1 час 57 минут 50 секунд:
* * *
Дополню свой вопрос.
Не один раз наблюдал, что в старых *.WAD существуют колормапы определённого цвета а-ля "GRAYMAP", "REDMAP", "GREENMAP", "BLUEMAP", "YELLOMAP" и другие, однако же я ни разу не видел, чтобы они хоть как-то использовались -- вижу, что всё-таки они полезны в каком-то случае, но на картах такого не замечал. И, в любом случае, это немного не то, что требуется -- мне нужна именно перекраска экрана, а не текстуры/сектора, под иную палитру/под иной COLORMAP.
NB ADD: на LZDoom, GL-рендерер, изменение значения "int16 player.fixedcolormap" показывает следующие результаты:
-1) Стандартный COLORMAP;
0) Инверсия (== бессмертие в Doom);
1) Жёлто-чёрный;
2) Красно-чёрный;
3) Зелёно-чёрный;
4) Сине-чёрный (== WATERMAP?);
Любой другой в диапазоне [-32768; -2] ∪ [5; 32767]) Обычный COLORMAP без затемнения, то есть отсутствие такой "постобработки".
Этот список соответствует предсозданным значениям из "Powerup.Color", и, собственно, его-то я и хочу расширить, добавив в него дополнительные blend-карты (вернее, поставить свои COLORMAP или их ZDoom-аналоги в доступ для "player.fixedcolormap").
P. S.: команды "testcolor", "testblend" и "testfade" отчего-то не действует в OpenGL-рендерере. Надеюсь, это не зависит от того, что OpenGL в целом не способен поддерживать подобное -- цветные сектора-то отрисовывает.
Ещё один дурацкий вопрос. Скачал с realm667 evil eyes различных цветов, закинул в pk3-архив рядом с wad-ом, проставил в DECORATE Actor-ам номера. Всё вроде-бы нормально... в редакторе:
Но вот в игре (gzdoom) всё выглядит так:
WTF?
Я скачал эффект дождя с сайта Realm667.com, и у меня вопрос как добавить его в вад?
Ставишь на карту RainSpawner с четырьмя аргументами: размер в маппикселях, период, звук (0 есть, 1 нет), форма (0 квадрат, 1 круг). Чтобы поставить - в декорейте прописываешь ему editor number сразу после объявления актора. Пофиг какой, лишь бы с имеющимися не конфликтовал.
Вопрос, "он" -- это кто и в каком контексте. Из общих рекомендаций могу предложить проверить путь до файла, название класса актора, формат уровня (в формате старого Doom не уверен, отображается ли Decorate-совместимое объявление) и объявление через "// $Category" (по умолчанию в [U/GZ]Doom Builder [2] -- ищи в бежевой вкладке с названием "Decorate").
всем привет, подскажите пожалуйста, как сделать монстра в gzdoom, создал наскоряк примитивную модель в блэндере (труба с отверстием ) создал анимацию покоя и атаки, экспортнул в md3... и тут начался тупёж, decorate и modeldef. (как статичную модель добавить нет проблем без анимации) нигде не могу найти инфу, что качается кадров, из готовых моделей вообще ничё не пойму, взять например какодемона:
decorate:
Скрытый текст:
States
{
Spawn:
HEAD A 10 A_Look
Loop
See:
HEAD A 3 A_Chase
Loop
Missile:
HEAD BC 5 A_FaceTarget
HEAD D 5 Bright A_HeadAttack
Goto See
Pain:
HEAD E 3
HEAD E 3 A_Pain
HEAD F 6
Goto See
Death:
HEAD G 8
HEAD H 8 A_Scream
HEAD IJ 8
HEAD K 8 A_NoBlocking
HEAD L -1 A_SetFloorClip
Stop
Raise:
HEAD L 8 A_UnSetFloorClip
HEAD KJIHG 8
Goto See
}
}
как сообразить что за что отвечает:
HEAD A 3
HEAD BC 5
HEAD D 5
и т.д.
и modeldef:
Скрытый текст:
FrameIndex HEAD A 0 0 FrameIndex HEAD A 1 0 FrameIndex HEAD A 2 0
FrameIndex HEAD E 0 5 FrameIndex HEAD E 1 5 FrameIndex HEAD E 2 5
FrameIndex HEAD F 0 6 FrameIndex HEAD F 1 6 FrameIndex HEAD F 2 6
}
может где видосик есть как это делается... спасибо.
FrameIndex <XXXX> <X> <номер модели> <номер фрейма из блендера>
номер модели важен для составных моделей, если юзается больше одного md3
короче, на выходе будет чёт вроде того
Скрытый текст:
Model butthead
{
Path "md3/butthead"
Model 0 "butthead.md3"
Skin 0 "butthead.png"
Model 1 "ass.md3"
Skin 1 "ass.png"
FrameIndex HEAD A 0 1 FrameIndex HEAD A 1 1
FrameIndex HEAD B 0 2 FrameIndex HEAD B 1 1
FrameIndex HEAD C 0 3 FrameIndex HEAD C 1 1
FrameIndex HEAD D 0 4 FrameIndex HEAD D 1 2
FrameIndex HEAD E 0 5 FrameIndex HEAD E 1 2
FrameIndex HEAD F 0 6 FrameIndex HEAD F 1 2
FrameIndex HEAD G 0 7 FrameIndex HEAD G 1 2
}
ну собсна суть в том, что каждому фрейму декорейта ABCDEFG ты прописываешь свой кадр из блендера
как сообразить что за что отвечает:
HEAD A 3
HEAD BC 5
HEAD D 5
В слейде открываешь ивадник, находишь там эти спрайты (например спрайт HEADA0 будет означать HEAD A) и смотришь, какие кадры анимации какодемона какой букве соответствуют
Йоптыть.... у меня допустим состояние покоя 40 кадров, как мне прописать? букв в анг язе 26
и это, на будущее, как модель заставить не смотреть на игрока, т.е. статичная, как в UDB поставил, чтобы так и стояла. (для примера пушку хочу сделать из марио )
и это, на будущее, как модель заставить не смотреть на игрока, т.е. статичная, как в UDB поставил, чтобы так и стояла.
А с чего ей вращаться, если это не монстр? Угол поворота модели зависит от параметра Angle, у монстра он меняется из-за логики нападения на игрока (A_Chase())