Предисловие
С помощью GLDEFS, можно привязать к спрайтам — освещение, сделать 6ти сторонний skybox, а также анимировать эту освещенность, по аналогии с DECORATE.
Есть 3 типа освещения:
- pointlight — статичное освещение
- pulselight — освещение, которое меняет свой размер циклично, например размер увеличится с 50 до 100, за 0.5 секунды и обратно, и так повторяется по кругу.
- flickerlight — освещение, которое в случайные промежутки времени, меняет свой размер.
PointLight (статичное освещение).
Для привязки освещения к актору (в нашем случае снаряду), нужно сначала создать освещение pointlight
Создайте текстовый файл GLDEFS через SLADE, как это делается я разбирал в уроке GameInfo — меняем окно загрузки. И в него добавьте следующий код:
pointlight myBullet1
{
color 0.9 0.1 1.0
size 140
}
Синтаксис у pointLight следующий:
pointlight название_переменной
{
color красный зеленый синий
size размер
}
- название_переменной — указывает название нашего освещения, используя это название, можно привязать освещение к спрайту.
- красный — значение от 0.0 до 1.0 указывает насколько ярко будет светится красный суб-пиксель.
- зеленый — значение от 0.0 до 1.0 указывает насколько ярко будет светится зеленый суб-пиксель.
- синий — значение от 0.0 до 1.0 указывает насколько ярко будет светится синий суб-пиксель.
- размер — размер нашего освещения
Добавьте еще 1 pointLight (для разнообразия)
pointlight myBullet2
{
color 0.1 0.9 1.0
size 140
}
Должно получится так:
pointlight myBullet1
{
color 0.9 0.1 1.0
size 140
}
pointlight myBullet2
{
color 0.1 0.9 1.0
size 140
}
Освещение создано, осталось привязать его к актору. Добавьте следующий код к себе в GLDEFS.
object blueProj
{
frame CBULA0 {light myBullet1}
frame CBULB0 {light myBullet2}
}
Здесь в качестве снаряда, я использовал blueProj, его я делал в уроке DECORATE. Создаем проджектайлы(снаряды).
Синтаксис здесь довольно простой:
object название_актора
{
frame название_кадра {light название_освещения}
frame название_кадра {light название_освещения}
}
- название_актора — здесь мы указываем к какому актору, привязано освещение.
- название_кадра — указываем название кадра
- название_освещения — указывает название объекта освещения (pointLight, pulseLight, flickerLight)
В данном случае, мы привязали к 1му кадру нашего снаряда — одно освещение, а ко второму кадру — другое.
Запускаем и смотрим.

Получился довольно классный эффект.
PulseLight
Добавьте еще 2 освещения, к своему коду:
pulselight myBullet3
{
color 0.9 0.1 1.0
size 140
secondarySize 50
interval 0.5
}
pulselight myBullet4
{
color 0.1 0.9 1.0
size 140
secondarySize 50
interval 0.5
}
А теперь, разберем синтаксис pulseLight:
pulselight название_переменной
{
color 0.1 0.9 1.0
size 140
secondarySize 50
interval 0.5
}
Появились новые строки, secondarySize и interval, разберем их.
- secondarySize — указывает второй размер освещения
- interval — время, за которое освещение поменяет свой размер на secondarySize, указывается в секундах.
В object, не забудьте привязать к спрайтам новое освещение (myBullet3 и myBullet4)
object blueProj
{
frame CBULA0 {light myBullet3}
frame CBULB0 {light myBullet4}
}
Рассмотрели, теперь запускаем.

Получился приятный пульсирующий эффект. Круто, идем дальше.
Flickerlight
Добавить еще 1 освещение, к себе в GLDEFS:
flickerlight myBullet5
{
color 0.1 0.9 1.0
size 140
secondarySize 10
chance 0.5
}
- chance — здесь указывает шанс того что освещение изменит свой размер на secondarySize, 1.0 шанс 100%, 0.0 шанс 0%.
Измените object, под новое освещение.
object blueProj
{
frame CBULA0 {light myBullet5}
frame CBULB0 {light myBullet5}
}
И можете запускать.

Получился, мигающий свет.
Светящийся пол/потолок
Также можно осветить пол, это делается в блоке glow. Добавьте следующий код:
Glow
{
Flats
{
flat "FLOOR4_8"
}
Texture "FLOOR4_8", red, 32
}
Синтаксис тут следующий:
Glow
{
Flats
{
flat "название_плоскости"
}
Texture "название_плоскости", цвет, высота
}
- название_плоскости — название текстуры (пола/потолка), которая будет испускать свет.
- цвет — цвет освещения
- высота — указывает до какой высоты будет испускаться свет.
Проверяем.

Получилось неплохо.
Конечно, я не рассказал про 6ти сторонний skybox, про шейдеры, про Colorization, про SectorLight. Но, думаю для начала, этого будет достаточно.