Как на объект поцепить динамический свет? Смотрел в zdoom wiki, но блин так и не понял, как правильно ее реализовать. Примера внятного нет.
(если, что. Это будет Флаер)
Как на объект поцепить динамический свет? Смотрел в zdoom wiki, но блин так и не понял, как правильно ее реализовать. Примера внятного нет.
(если, что. Это будет Флаер)
Со спрайтами и звуками, думаю, разберешься уже сам)
Это я взял код из Зомби Хорда, который использовал для небольшого коммьюнити конкурса на Здум. ОЧЕНЬ ХОРОШАЯ демонстрация приложенного мною кода в этом видео:
В видео можно заметить, как вылетела "черная" флара, из кода я ее уже удалил.
Научитесь уже убирать объёмные фрагменты текста под спойлер. BeeWen
BETEPAH[iddqd] С помощью GLDEFS.
Нужно создать ламп GLDEFS и прописать в нём:
1) определения динлайтов, которые планируется использовать;
2) привязку этих динлайтов к фреймам отрисовки актора.
Пример.
PointLight Light1
{
color 0.7 0.2 0.2 //цвет, какой-то красный (в формате RGB)
size 64 //размер
offset 0 32 0 //смещение центра динлайта (32 вверх)
}
Object DoomPlayer {
Frame PLAYF {Light Light1} //привязать динлайт Light1 к фрейму PLAYF объекта DoomPlayer
}
Доброго времени суток! у врага есть стейт кидания гранаты. если его добавить в стейт марина, будет работать ли?
и еще вопрос: как сделать так: 2 шмотки у врага. чтобы они обе не падали, падала бы одна из них, (например ссг 256 шанс, коммандер бластер 117) когда падает бластер, ссг не дропалось.
Но, было бы лучше, если бы свет мерцал. Как это сделать?
Я читал на zdoom wiki про PointLightFlicker, но как он правильно работает, так и не понял
В том коде что у тебя (в GLDEFS), посмотри на pointlight (под //ФЛАЕР) и замени его на flickerlight, либо flickerlight2. Первый от второго, насколько я понял, отличается тем, что задаётся шанс, с которым будет произведена смена яркости при каждом кадре с заданной яркости на минимальную. Во втором же устанавливается конкретный интервал времени, после которого будет каждый раз выбираться рандомная яркость в указанном далее интервале яркостей. Остальные настройки похожи на обычный поинтлайт, но с некоторыми отличиями:
Сolor - цвет (в палитре RGB - красный, зелёный, синий). Как и у света пишутся через точку в интервале 0.0 - 1.0 (три через пробел)
Size - минимальный размер света (для flickerlight2 - это начальная точка промежутка значений, из которых будет выбрана рандомная яркость).
SecondarySize - максимальный размер света (для flickerlight2 - это конечная точка промежутка значений, из которых будет выбрана рандомная яркость).
Chance (только в первом случае) - шанс, с которым будет смена яркости с максимального на минимальный. То есть чем больше шанс, тем большая вероятность, что свет мергнёт. Значения в интервале от 0.0 - до 1.0. Причём забавный факт, если поставить 0.9, например, то будет минимальный свет, который изредка будет мерцать сильнее, а если 0.1, то наоборот, будет угасать.
Interval (только во втором) - временной промежуток, через который будет смена яркости (0.1 - это одна секунда).
Можно так же настроить
Offset X Z Y - то есть сместить свет от центра его размещения по осям координат
Subtractive 1 или 0 - создать эффект тени, то есть свет будет как бы наоборот затемнять участок
Attenuate 1 или 0 - убавлять яркость в зависимости от угла падения. Честно говоря я не понимаю как вообще такое возможно, но у меня при использование просто крашится GZDoom. Работает лишь в новых, так понимаю.
Dontlightself 1 или 0 - излучаемый свет не подсвечивает его источник (то есть объект)
Крэш для летающих монстров. Когда есть этот стейт, то они при смерти в воздухе войдут именно в Crash состояние, и только когда столкнутся с землёй перейдут в Death.
Но вообще:
MyNameIs:
только есть еще с этим проблема, стрела при столкновении со стеной исчезает. а при столкновении с монстром - нет. с полом все в порядке.
Унаследуйся обратно от FastProjectile. У тебя сквозь стену стрела проходит, потому что скорость слишком большая.
Если у тебя проджектайл двигается со скоростью больше собственного радиуса, от FastProjectile наследоваться ОБЯЗАТЕЛЬНО!
Это раз, а два — сделай радиус хотя бы 1, а лучше 8 или около того. Радиус 0 весьма неадекватно будет обрабатываться движком по вышеописанной причине.
С полом у тебя сейчас всё хорошо потому, что сквозь пол пройти нельзя физически (ограничение движка). С монстрами всё хорошо потому, что там проверка что центр твоего актора находится внутри монстра (а монстр всё же побольше радиуса 0 будет).
А со стенами у тебя жопа и будет жопа, потому что чтобы сработала коллизия со стеной, у тебя радиус объекта должен наложиться на стену, а с нулевым радиусом там накладываться нечему. Как-то так.
+Ku6EPyXOBEPTKA+ Спасибо, за подробное описание и дополнительные опции! Получилось, работает!
+Ku6EPyXOBEPTKA+:
Subtractive 1 или 0 - создать эффект тени, то есть свет будет как бы наоборот затемнять участок
А это может пригодится!
Вчера вот мучался с одной штукой, так пока и не решил, сегодня продолжу, хотя идеи иссякают, но все же это я думаю должно быть возможно... итак ситуация:
Горит огонь (в определенном радиусе наносит урон игроку), есть огнетушитель, который стреляет проджектайлами (то бишь порошком) при попадании которым, должен тушить огонь. У меня он напрочь отказывается тушить огонь.
Огнетушитель
Скрытый текст:
// Огнетушитель
actor Ognet : CustomInventory
{
inventory.amount 10
inventory.maxamount 10
Inventory.Icon "OGN1B0"
Inventory.PickupSound "pickup-1"
-AUTOACTIVATE
+INVBAR
-ALWAYSPICKUP
+INVENTORY.PERSISTENTPOWER // перенос на другой уровень
states
{
Spawn:
OGN1 A -1
loop
Use: //управляет поведением предмета во время использования
TNT1 A 1
TNT1 A 1 A_FireCustomMissile("OgnPar", 0, 0, 10, -20)
TNT1 A 1 A_PlaySound("OgnPar", 1)
TNT1 A 0 ACS_Execute(806, 0, 0)
stop
}
}
// Пар с огнетушителя
ACTOR OgnPar
{
Radius 20
Height 20
Speed 10
Damage 100
Projectile
Damagetype "Og"
+NOGRAVITY
States
{
Spawn:
PAR1 A 5
PAR1 B 5
PAR1 C 5
PAR1 D 5
PAR1 C 5
PAR1 B 5
PAR1 A 5
// Goto Death
stop
//Death:
TNT1 A 1
stop
}
}
Разные виды огня (от малого к большому)
Скрытый текст:
// Пожар
ACTOR FireL
{
Health 20
Radius 50
Height 50
// Mass 9999
+NOBLOOD
-ACTIVATEMCROSS
+NOICEDEATH
+OLDRADIUSDMG
damagefactor "basic", 0
damagefactor "Og", 100
Scale 0.3
States
{
Spawn:
TNT1 A 0 A_PlaySound("Flame", 7, 1.0, True)
FIR1 A 2 Bright A_Explode(1, 20, XF_HURTSOURCE)
FIR1 B 2 Bright
FIR1 C 2 Bright
FIR1 D 2 Bright
FIR1 E 2 Bright A_Explode(1, 20, XF_HURTSOURCE)
FIR1 F 2 Bright
FIR1 I 2 Bright
Loop
}
}
// Пожар
ACTOR FireM
{
Health 20
Radius 50
Height 50
// Mass 9999
+NOBLOOD
-ACTIVATEMCROSS
+NOICEDEATH
+OLDRADIUSDMG
damagefactor "basic", 0
damagefactor "Og", 100
Scale 0.5
States
{
Spawn:
TNT1 A 0 A_PlaySound("Flame", 7, 1.0, True)
FIR1 A 2 Bright A_Explode(5, 30)
FIR1 B 2 Bright
FIR1 C 2 Bright
FIR1 D 2 Bright
FIR1 E 2 Bright A_Explode(5, 30)
FIR1 F 2 Bright
FIR1 I 2 Bright
Loop
}
}
// Пожар
ACTOR FireH
{
Health 20000
Radius 50
Height 50
// Mass 9999
+NOBLOOD
-ACTIVATEMCROSS
+NOICEDEATH
+OLDRADIUSDMG
Monster
damagefactor 0
damagefactor "Og", 100
DeathSound "world/barrelx"
Obituary "$OB_BARREL"
Scale 1.0
States
{
Spawn:
TNT1 A 0 A_PlaySound("Flame", 7, 1.0, True)
FIR1 A 2 Bright //A_Explode(10, 40)
FIR1 B 2 Bright
FIR1 C 2 Bright
FIR1 D 2 Bright
FIR1 E 2 Bright //A_Explode(10, 40)
FIR1 F 2 Bright
FIR1 I 2 Bright
Loop
}
}
Код огня выглядит немного разным, потому, что я там экспериментирую над ним.