Проблемы, которые могут возникнуть при разработке и о которых надо знать.
Глюки Qoole
Непонятно почему, но глюки очень видимые и от версии к версии их не исправляли.
1. Свойства мира (World). В файле свойства сохраняются все, а вот загружается только свойство
wad (а может оно вообще просто генерится?). В итоге жутко напрягает вспоминать при перекомпиляции карты, что нужно заново внести имя карты, освещение по умолчанию и т.д.
2. Все аптечки, патроны развернуты изначально на
90 градусов. Видимо это как-то связано с отображением в самом
Qoole. Движок
Quake написан таким образом, что если один из этих элементов повернут на ненулевой угол, то при попадании его в кадр начинаются страшные глюки с текстурами. Скорее всего, это как-то связано с тем, что аптечки и прочие в
Quake представлены в виде
bsp-файлов и здесь возникает конфликт с параметрами отрисовки уровня, который также представлен в виде
bsp. Чтобы сделать угол нулевой, приходится каждый ящик поворачивать на
90 градусов по часовой стрелке. Если лень, то можно укомплектовать уровень всеми ящиками, а потом открыть
qle-файл в текстовом редакторе и сделать аккуратную замену.
3.
Qoole плохо умеет разворачивать и растягивать текстуры на поверхностях браша не параллельных осям. Проявится это может не всегда. Бывает, при разработке добавил всяких смещений и разворотов, вроде все правильно. Запустив в
Quake, получилось криво. Как с этим бороться, не знаю... Единственный вариант делать в слепую: подвинул, повернул и запустил
Quake, чтобы посмотреть, что получилось.
4. Фатальная ошибка
Got signal SIGSEGV. Наверное, самый неприятный глюк. При появлении его
Qoole падает, при этом пытается быстро бакапить, и это у него не всегда получается. Причем упасть может на ровном месте. То ли с памятью у него какие проблемы, то ли еще чего. Как я заметил, чаще всего падения бывают после операции
CSG Subtract. Я ее даже боюсь. Причем при попытке бакапа, иногда умудряется убить и оригинал. Чтобы справиться с этой проблемой я после каждого значительного изменения на уровне (и особенно перед операцией
CSG Subtract), делаю копию
qle-файла в другое место.
5. Проблема, которую уже описывал в
FAQ. При создании
wad-файла для карты,
Qoole забывает положить туда последний кадр анимированной текстуры. Это я про кнопки говорю. В итоге, если базовая кнопка имеет два кадра, то при старте игры она просто горит, а не мигает. Я предлагаю просто сделать префабы для каждой такой текстуры. Просто браш, одна из сторон которого последний кадр. Ну и до кучи можно еще на одну сторону установить текстуру погасшей кнопки. А когда понадобиться кнопка, то бросить соответствующий префаб за пределы уровня.
Qbsp его все равно отрежет, а текстуры останутся.
6.
Qoole хранит уровень в своем формате. В этом формате все координаты хранятся в виде дробных чисел. За счет этого при перемещениях и прочих операциях накапливаются погрешности, которые затем всплывают в игре. Причем одно только перемещение уже может внести погрешность.
7. Уже упоминал при описании функций, но еще раз (в
Qoole99 не проверял). У двери (
door) есть путаница с двумя первыми свойствами параметра
spawnflags. Свойство
"door waits in both open and closed states for trigger" имеет код не
1, а
32. Свойство
"door starts open; when triggered, closes" имеет код
2, а не
1. Это можно посмотреть по исходным
текстам (константы
DOOR_). Выхода два. Либо всегда помнить про это и вбивать при необходимости коды руками, либо сделать изменения в файле
winqoole.dat с помощью
HEX-редактора, найдя описание
func_door.
8. Неправильно записано название звука
ambient_flouro_buzz. В
Qoole вот так:
ambient_fluoro_buzz. За счет этого звук не проигрывается, выдается ошибка. Первый вариант исправления: если карта принадлежит паку, в котором переписывается
progs.dat, то можно добавить еще одну функцию:
void() ambient_fluoro_buzz = {
ambient_flouro_buzz();
};
Вариант второй, открыть
qle или
map файл и сделать замену.
9. Не во все свойства удается записать вещественное число. У него просто отбрасывается дробная часть. Например, в свойство
delay. Примечательно то, что если добавить еще одно свойство с таким же именем, то туда уже можно записать нецелое число.