Тем, кто применяет TXT2GAM (использование препроцессора)
Автор: Ntropy   
07.04.2010 18:47

При написании игры без использования QGen, исходный текст не зашифрован и может редактироваться любым текстовым редактором.

Это также дает возможность обработать текстовый файл игры перед тем, как он будет превращен в QSP-файл - например, удалить отладочный код или неиспользуемые фрагменты текста, а также собрать один файл из нескольких мелких.

В мире программирования на Си эта возможность называется "препроцессинг" и выполняется утилитой cpp, которая идет в пакете с компиляторами C.

В нашем случае удобно использовать утилиту, которая не привязана к языку С и и может быть использована отдельно от компилятора — GPP для Win32.

Чтобы воспользоваться этим, нужно добавить в текст специальные инструкции и обработать текст утилитой GPP. После такой обработки текст уже не будет содержать инструкции и может быть преобразован в QSP-файл без ошибок.

Инструкции (основные)

#mode quote — отключает обработку символа "\" как служебного, рекомендуется поставить первой строчкой файла

#define <имя> — определить флажок, на который можно будет позже ссылаться

#define <имя> <значение> — определить значение, на которое можно будет позже ссылаться

#undef <имя> — удаление значения или флажка

#ifdef <имя> — если флаг или значение определены, то весь текст после этого условия до #endif или до #else будет выведен в итоговый файл

#else — окончание фрагмента, регулируемого инструкцией #ifdef - последующий текст выводится, если условие в #ifdef не выполнено

#endif — окончание фрагмента, регулируемого инструкцией #ifdef или #else

#ifndef — аналогично #ifdef, однако проверяется, что флаг или значение не определены - весь текст после этого условия до #endif или до #else будет выведен в итоговый файл

#include "<имя файла>" — в выходной файл вставляет текст из указанного файла (из той же папки) - если файл содержит инструкции, то он также будет обработан

Поскольку в txt2gam, по умолчанию, для обозначения начала локации используется символ "#", то важно, чтобы имена локаций не назывались по имени инструкции (define, ifdef, и т.п.). Также не стоит включать инструкции в комментарии и строки, лучше их записывать на отдельных строчках.

Доступны также и другие инструкции, о них можно узнать в документации или спросить на форуме.

Для запуска текста игры на обработку нужно открыть консоль и набрать команду:

gpp.exe <входной файл> -o <выходной файл>

Другие ключи запуска можно узнать, запустив как: gpp.exe --help

Пример использования

Исходный файл:

#define HTML

# Start

#ifdef HTML
USEHTML 1
#endif

- Start

После обработки в выходной файл запишется:

# Start

USEHTML 1

- Start

Если же убрать инструкцию #define - например, заменив на #undef, то после обработки в выходной файл запишется:

# Start

- Start

То есть текст, регулируемый инструкцией #ifdef, был удален из конечного результата.

Прошу задавать вопросы на форуме.

Ссылки

Скачать GPP

Документация на английском

Домашний сайт GPP