Digs - Персональная территория

Авторский проект Артема Глазкова
? 
        Версия для печати (цвет)  





Проблемы при разработке

Проблемы, которые могут возникнуть при разработке и о которых надо знать.

Глюки 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. Примечательно то, что если добавить еще одно свойство с таким же именем, то туда уже можно записать нецелое число.

Глюки *Radiant

1. Иногда при удалении сущности (например, func_door) происходит удаление браша сущности, а сама сущность остается. В итоге к некоторых движках при пересечении, скорее всего, точки (0,0,0) происходит фатальная ошибка и игра закрывается. В этом случае нужно открыть map-файл в каком-нибудь текстовом редакторе, найти все такие сущности и удалить.

© 2005-16, Powered By Digs (Написать письмо, vk)