Содержание

Руководство по программе GothicSourcer

Руководство основано на версии 3.11.

Эта версия программы поддерживает три языка – русский, немецкий и английский.

Работа с решением и проектами

Решение – набор проектов для одного мода. Имя решения это имя создаваемого мода.

Проект – набор скриптов для создания *.dat файла. Имя проекта создается программой и соответствует имени *.src файла. Вы можете создать любой проект из следующих: Gothic, Fight, Camera, Menu, Music, ParticleFX, SFX и VisualFX. В одном решении могут быть только эти 8 проектов.

Создание нового решения или проекта. File → New Solution.

При выборе этой команды выводится окно диалога New project. В строке ввода Solution name задается имя нового решения или уже существующего. С существующим решением есть ещё один метод работы, он удобнее и будет рассмотрен ниже. В строке Location выбирается существующая папка для размещения решения, по умолчанию это Gothic Projects, но можно выбрать и любую другую папку. В списке Platforms выбирается версия игры (Gothic или Gothic 2), для которой предназначено это решение. Далее в окне нового проекта присутствуют три опции: Empty project – при выборе этой опции создается пустой проект с именем выбранным из предлагаемого списка, всё остальное в проекте вы должны сделать сами в окне Solution Explorer.

First compile action – при выборе этой опции будет создан полный проект, готовый для компиляции. В строке Choice src file выбирается нужный *.src файл скриптов. Все файлы скриптов, зарегистрированные в этом файле будут скопированы в рабочую папку, там же будет создан новый *.src файл, который не рекомендуется редактировать руками, всю работу с ним будет выполнять сама программа.

First decompile action – при выборе этой опции будет создан полный проект, готовый для декомпиляции. В строке Choice dat file выбирается нужный *.dat файл. Он будет скопирован в рабочую папку. Если вами выбран файл gothic.dat, то программа сама попробует найти любой соответствующий ему Output Units файл (ou.bin или ou.csl, при отсутствии бинарного файла) и скопировать его в рабочую директорию. Если программе не удастся найти этот файл, то вам будет предложено указать его месторасположение самостоятельно.

Если все выборы в окне вами сделаны правильно, то будет доступна кнопка OK. При нажатии на неё начнется процесс создания нового проекта. Если в указанном решении заданный вами проект уже существует, то будет выведено на экран предупреждение. В этом случае необходимо сделать одно из следующего:

После создания нового проекта в окне Solution Explorer будет построено дерево содержимого проекта. В окне Class View будет построено дерево всех данных присутствующих в проекте.

Открытие существующего решения. File → Open Solution.

При выборе этой команды вам будет предложено выбрать ранее созданное решение.

Закрытие существующего решения. File → Close Solution.

При выборе этой команды, при условии, что проект загружен в окно Solution Explorer, решение и активный проект будут закрыты. При необходимости будут записаны все изменения, сделанные в нем, или вам будет выдан запрос на запись изменений, если они существенны для решения или проекта.

Обзор других команд меню для работы с решением (проектом).

Быструю загрузку решения можно выполнить, выбрав решение командой File → Recent Solutions из списка ранее созданных решений.

Команда File → Save All выполняет запись всех измененных данных решения (проекта), включая содержимое измененных файлов скриптов.

Команда Edit → Find and Replace → Find in Files выполняет поиск выбранного фрагмента текста во всех файлах скриптов, зарегистрированных в проекте. В окне Find and Files вам будет предложено заполнить поле Find what. По умолчанию это поле будет заполнено одним из следующих значений в порядке приоритета:

Все найденные включения искомого фрагмента в файлы будут выведены в окно Message Window. По поиску фрагментов и выводу сообщений в окно работает отдельный процесс, во время его работы можно выполнять любую другую работу со скриптами. Прервать процесс поиска можно нажав клавишу Esc. В окне Message Window перейти на любой найденный фрагмент текста можно двойным щелчком мыши, указатель в окне редактора скриптов покажет на строку с искомым фрагментом. Этот метод так же используется для перехода к ошибкам из процессов компиляции, декомпиляции скриптов или моделей.

Команда Edit → Find and Replace → Replace in Files выполняет поиск выбранного фрагмента текста во всех файлах скриптов, зарегистрированных в проекте и заменяет его другим фрагментом. Остальные условия аналогичны предыдущей команде.

Команда Build → Compile или Build → Decompile выполняет соответственно компиляцию или декомпиляцию скриптов проекта. При этом создаются все нужные файлы, в том числе и файл ou.bin при компиляции проекта gothic. После успешной компиляции при включенной опции Automatic safe insert of the compiled files in game созданный *.dat файл и ou.bin (если проект gothic) будет скопирован в папку с игрой. При декомпиляции *.dat файла вам будет выдано предупреждение, что вся папка проекта будет очищена, в ней будут созданы новые файлы скриптов из *.dat файла. Поэтому, если у вас находятся в этой папке нужные файлы, их нужно скопировать куда-нибудь вручную.

Команда Build → Stop Build останавливает процессы компиляции или декомпиляции.

Команда Build → Options задает параметры процессов компиляции и (или) декомпиляции. В окне Build options вы можете задать уровень вывода сообщений на экран – Level of messages (рекомендуется уровень 0). Поле Insert spaces разрешает вставку дополнительных пробелов при декомпиляции скриптов между оператором if и условием оператора, а так же между именем функции и её аргументами. В поле Disable warning message вы можете запретить вывод на экран вниманий из процессов компиляции или декомпиляции. Function should return value и Argument should be uppercase – блокируют вывод соответствующих вниманий. При включенной опции Autocorrect uppercase argument производится автоматический перевод нужных аргументов функций в верхний регистр. Все эти и другие опции программы сохраняются в реестре или конфигурационных файлах.

Окно Solution Explorer и работа с ним

Все операции по изменению проекта или решения рекомендуется выполнять в этом окне. Доступны следующие команды локального меню:

Окно Solution Explorer поддерживает ещё одну функцию по отслеживанию изменений на активном проекте, сделанных не из этой программы. Если файл скриптов был изменен или удален снаружи, то появляется окно предлагающее принять или отвергнуть эти изменения.

Окно Class View и работа с ним

В этом окне можно увидеть список всех данных, присутствующих в активном проекте. Выводится имя данных и тип. Данные отсортированы по следующим разделам:

В этом окне доступна только одна команда локального меню – Go to Declaration. При выполнении этой команды выполняется переход на декларацию выбранной переменной, т.е. в активном окне редактора скриптов открывается нужный файл с указанием места декларации переменной. Другой способ вызова этой команды – двойной щелчок левой кнопкой мыши на переменной.

Содержимое данного окна участвует в автоматизации некоторых функций в редакторе скриптов. Оно создается только при загрузке проекта, при работе с проектом (добавление новых переменных, добавление файлов, удаление файлов или переменных и т.д.) содержимое этого окна не меняется. Поэтому, если вы хотите в этом окне видеть все изменения, сделанные в проекте, вам необходимо записать проект, затем его закрыть и снова открыть.

Окно Message Window и работа с ним

Это окно состоит из двух независимых окон – Build и Find in Files. В окно Build выводятся сообщения процессами компиляции и декомпиляции скриптов, а так же процессами обработки файлов моделей. В окно Find in Files выводятся сообщения процессом поиска фрагментов текста в файлах проекта.

Функции, реализованные при работе с этими окнами идентичны. Рассмотрим их:

Окно Message Window –> Build имеет локальное меню, через которое происходит навигация по ошибкам и вниманиям. Если локальное меню вызвать на последней строке окна, сообщающей количество ошибок и вниманий, и если они присутствуют, то появятся два пункта меню – Find Error и (или) Find Warning. При выборе этих пунктов выполняется переход на первую ошибку или внимание. Если локальное меню вызвать на ошибке или внимании, то появятся соответствующие пункты меню Goto next Error или Goto next Warning. При их выборе выполняется переход на следующую ошибку или внимание. Дополнительно изменяется цвет выбранной ошибки или внимания. Цветовая палитра такова: ошибка – красный цвет, внимание – синий цвет, текущая ошибка или внимание – зеленый цвет.

Редактор скриптов и работа с ним

Редактор скриптов состоит из двух элементов – Tab панели выбора файлов и собственно редактора файла.

Tab панель выбора файлов предназначена для быстрого перемещения по нужным файлам как проекта, так и любым другим файлам. Панель имеет локальное меню со следующими командами:

Редактор скриптов поддерживает все функции профессионального текстового редактора. Это следующие команды:

В дополнение к этим командам реализовано выделение слова в тексте двойным щелчком левой кнопкой мыши и выделение всей строки текста одиночным щелчком левой кнопкой мыши на левой панели окна редактора. Любая строка представлена в окне статуса номером строки и номером столбца, на которых находится курсор.

Все эти функции общеизвестны, поэтому в этом описании я их рассматривать не буду.

Специальные функции редактора файлов скриптов рассмотрим подробно:

1. Подсветка синтаксиса файлов скриптов

Весь синтаксис скриптов Daedalus разделён на девять тем. Для каждой темы можно выбрать свой стиль, который включает размер и параметры шрифта, цвет шрифта и фона, а так же регистр вывода символов, т.к. скрипты являются регистронезависимыми. Параметры тем по умолчанию и заданные пользователем сохраняются в реестре и всегда доступны. Имя темы выводится на экран в окне статуса в поле Style, когда курсор располагается на элементе этой темы. Рассмотрим эти темы более подробно:

Управление параметрами стиля конкретной темы производится из локального меню редактора. Первоначально выбирается нужная тема, т.е. курсор ставится на слово (символ) относящееся к теме (в строке статуса выводится имя темы). Далее в локальном меню редактора выбирается команда Set Style. На экран выводится окно Set Style – имя темы, в котором выбираются необходимые параметры стиля, это:

В окне Sample Style в процессе выбора параметров можно видеть как будет выглядеть эта тема в редакторе.

2. Панели окна редактора

Реализовано три дополнительные панели в окне редактора, это:

3. Функция автозавершения текста

Эта функция работает в двух режимах - List Members (Ctrl + Space) и Auto Complete.

Первый режим доступен из локального меню на любом слове скриптов. При её вызове на экран выводится отсортированный список всех переменных проекта, с выделенным в нем наиболее близким словом, если такое существует. Поиск в списке осуществляется по количеству введенных символов. В списке можно выбрать нужное слово, нажать Enter и слово будет вставлено в текст скрипта.

Второй режим работает автоматически и предназначен для автозавершения ввода имени переменной класса. Этот режим активируется при вводе точки в редакторе после имени класса или имени его производной. На экран выводится отсортированный список имен переменных класса, где можно выбрать нужное имя. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Auto Complete.

4. Показ параметров функций скриптов

Эта функция работает в двух режимах – Parameter Info (Ctrl + Shift + Space) и Auto Parameter Info.

Первый режим доступен из локального меню при нахождении курсора на имени функции. При её вызове на экран выводится окно с полной декларацией функции. Перемещаясь курсором по функции можно видеть в окне соответствующий элемент функции.

Второй режим работает автоматически и предназначен для помощи при вводе аргумента функции. Этот режим активируется при вводе открывающей скобки в редакторе после имени функции. На экран выводится подсказка, какого типа должен быть аргумент. Допускается вложенность имен функций, когда в качестве аргумента используется другая функция. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Parameter Info.

5. Показ информации о переменной скриптов

Эта функция работает в двух режимах – Type Info (Ctrl + T) и Auto Type Info.

Первый режим доступен из локального меню при нахождении курсора на имени переменной, класса и его производных или функции. При её вызове на экран выводится окно с полной декларацией типа.

Второй режим работает автоматически и предназначен для быстрой помощи. Этот режим активируется при нахождении курсора мыши на нужном имени более Dwell Time миллисекунд. На экран выводится подсказка, какого типа эта переменная. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Type Info, там же можно изменить время реакции Dwell Time.

6. Автоотступ

Эта функция работает автоматически. При вводе открывающей скобки блока { и последующего Enter выполняется отступ вправо на величину Indent Size. При вводе закрывающей скобки блока } и последующего Enter выполняется отступ влево на величину Indent Size. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Auto Indent, там же можно изменить размер отступа в пробелах Indent Size. В редакторе можно видеть условные линии отступа, управляет этой опцией параметр Indent Guides в окне параметров редактора.

7. Автоматическая запись измененных файлов

Эта функция работает автоматически. По истечении заданного времени производится запись всех измененных файлов. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Autosave modified files, там же можно задать время между сохранением файлов в минутах.

8. Заворот длинных строк

Эта функция заворачивает длинные строки (выходящие за пределы экрана) в несколько полновидимых строк. В меню Tools → Script Edit Options можно запретить этот режим, сняв опцию Wrap Lines. В локальном меню конкретного файла есть одноименная функция, действие которой распространяется только на этот файл, внезависимости от глобальной функции.

9. Переход на строку текста

Эта функция вызывается через локальное меню Go to line и выполняет переход на строку текста, номер которой введен в окне запроса.

10. Навигация по декларациям переменных

Эта функция состоит из двух команд локального меню: Go to Declaration - при выполнении этой команды выполняется переход на декларацию выбранной переменной, т.е. в активном окне редактора скриптов открывается нужный файл с указанием места декларации переменной. Return back – возврат обратно, т.е. в то место, откуда был выполнен переход на декларацию.

11. Проверка скобок

Эта функция проверяет соответствие скобок в тексте скрипта, т.е. если есть открывающая или закрывающая скобка, то функция ищет соответствующую ей противоположную скобку. Пара соответствующих скобок подсвечивается голубым цветом. Если соответствующая скобка не найдена, то исходная скобка подсвечивается желтым цветом. Функция работает со следующими скобками: (), {}, []. Данную функцию можно отключить в меню Tools → Script Edit Options сняв опцию Check Brackets.

12. Проверка текста скрипта на ошибки

Эта функция полностью проверяет активный файл скрипта на ошибки и внимания. Вызов функции Test of script on errors выполняется из локального меню редактора.

Обработчики моделей

С моделями Готики можно выполнять следующие операции – конвертация, компиляция и декомпиляция. Все обработчики доступны из меню Tools при закрытом проекте скриптов. Работа с моделями была подробно описана в версии программы 2.4, поэтому здесь остановлюсь только на изменениях, реализованных в этой версии.

При вызове любого из обработчиков будет выведено на экран окно, в котором необходимо выбрать файл модели и указать рабочую папку, по умолчанию Gothic Projects.

Так же необходимо указать исходную версию модели (Gothic или Gothic 2). В рабочей папке будут созданы все необходимые файлы для модели, ничего дополнительно вручную копировать в неё не нужно. Так же в ней будет воссоздана требуемая структура папок модели. Файлы из рабочей папки могут автоматически копироваться в игру (включена опция Automatic save insert of the compiled files in game) или использоваться для дальнейшей обработки. Обрабатываемые файлы моделей должны всегда находиться в следующей структуре папок, поддерживаемых игрой. Это папки _work\data\anims, включая подпапки и _work\data\textures, включая подпапки. Поэтому, если вы хотите обработать созданные в рабочей папке программой файлы, то их необходимо сначала вручную скопировать в эту структуру, поместив в неё же необходимые текстуры и запустить нужный процесс.

Компилятор динамических моделей имеет опцию Partial Compilation, при включении которой выполняется компиляция только тех файлов, которые отсутствуют в модели. Эта компиляция полностью соответствует компиляции, которая выполняется экзешником.

Вставка созданных файлов в игру

В процессах компиляции скриптов и моделей, конвертации моделей реализована автоматическая безопасная вставка созданных бинарных файлов в игру. Все файлы копируются в нужные папки игры, при наличии в них одноименных файлов выдается запрос на их перезапись. Эта функция управляется из меню Tools → Insert Files Options. Она активируется, когда опция Automatic save insert of the compiled files in game включена и указаны папки игр Готика и Готика 2 (Path to Gothic, Path to Gothic 2).

Модифицированный компилятор скриптов

В компилятор скриптов добавлено несколько новых функций:

1. Проверка строковых аргументов функций на верхний регистр.

В некоторых функциях строковые аргументы, определяющие названия WP, фазы анимации, имена MOBов и т.д. должны писаться заглавными буквами, иначе в движке Готики возникает ошибка и функция выполняется неправильно. Компилятор выявляет большинство таких ошибок в следующих функциях:

func void AI_GotoWP(var c_npc n0, var string s0);
func void AI_LookAt(var c_npc self, var string name);
func void AI_PlayAni(var c_npc n0, var string s0);
func void AI_PlayAniBS(var c_npc npc, var string aniname, var int bodystate);
func void AI_PointAt(var c_npc self, var string name);
func void AI_Teleport(var c_npc self, var string waypoint);
func void AI_TakeMob(C_NPC npc, string mobName); 
func int AI_UseMob(C_NPC npc, string mobName, int state); 
func void AI_PlayCutscene(C_NPC npc, string csName); 
func void AI_OutputSVM(C_NPC npc, C_NPC target, string nameSVM); 
func void AI_OutputSVM_Overlay(C_NPC npc, C_NPC target, string nameSVM); 
func void AI_StartState(C_NPC npc, func state, int behaviour, string waypoint); 
func void AI_Snd_Play(C_NPC npc, string snd); 
func void AI_Snd_Play3D(C_NPC npc, C_NPC other, string snd); 
func void AI_PlayFX(C_NPC npc, C_NPC other, string video); 
func void AI_StopFX(C_NPC npc, string video); 
func void Mdl_ApplyRandomFaceAni(var c_npc self, var string name, var float timemin, var      float timeminvar, var float timemax, var float timemaxvar, var float probmin);
func void Mdl_StartFaceAni(C_NPC npc, string ani, float intensity, float holdTime); 
func void Mob_CreateItems(var string mobname, var int iteminstance, var int amount);
func int Mob_HasItems(var string mobname, var int iteminstance);
func int Npc_GetDistToWP(var c_npc self, var string wpname);
func int Npc_IsOnFP(var c_npc self, var string name);
func void Npc_PlayAni(var instance n0, var string s1);
func void Npc_StopAni(var instance n0, var string s1);
func void TA(var c_npc self, var int start_h, var int stop_h, var func state, var string waypoint);
func void TA_Min(var c_npc self, var int start_h, var int start_m, var int stop_h, var int stop_m, var func state, var string waypoint);
func void Wld_InsertItem(var int iteminstance, var string spawnpoint);
func void Wld_InsertNpc(var int npcinstance, var string spawnpoint);
func void Wld_InsertNpcAndRespawn(var int instance, var string spawnpoint, var float spawndelay);
func void Wld_SendTrigger(var string vobname);
func void Wld_SendUnTrigger(var string vobname);
func int Wld_GetMobState(C_NPC npc, string mobName); 
func void Wld_InsertObject(string objName, string point); 
func void Wld_SetObjectRoutine(int hour, int min, string objName, int state); 
func void Wld_SetMobRoutine(int hour, int min, string objName, int state); 
func void Wld_ExchangeGuildAttitudes(string tableName); 
func void Wld_StopEffect(string nameVfx);

Если строка передается в функцию в константном виде, т.е. записана в кавычках – эта ошибка выявляется. Если строка передается в функцию через переменную, то такая ошибка не выявляется.

2. Добавлена возможность получения string и float переменных из массива.

3. Добавлена возможность возвращения функцией типа float.

4. Убраны все внимания типа Possible error, function should return value из функций проверки условия диалога при следующем их написании:

Все оставшиеся внимания значимы и могут приводить к потенциальным ошибкам.

Список «горячих» клавиш

Ctrl + A – выделить весь текст скрипта

Ctrl + C – копировать выделенный текст

Ctrl + V – вставить выделенный текст

Ctrl + X – удалить выделенный текст

Ctrl + N – создать новый файл

Ctrl + O – открыть файл скрипта

Ctrl + S – сохранить файл скрипта

Ctrl + F – найти в файле

F3 – найти следующий фрагмент текста

Ctrl + H – заменить в файле

Ctrl + Z – отмена изменения (undo)

Ctrl + Y – возврат изменения (redo)

Shift + F6 – конвертировать статическую модель

Ctrl + F6 – конвертировать динамическую модель

Alt + F6 – конвертировать анимированный меш

F7 – компилировать скрипты

Shift + F7 – компилировать статическую модель

Ctrl + F7 – компилировать динамическую модель

Alt + F7 – компилировать анимированный меш

F8 – декомпилировать скрипты

Shift + F8 – декомпилировать статическую модель

Ctrl + F8 – декомпилировать динамическую модель

Alt + F8 – декомпилировать анимированный меш

Ctrl + T – показать Type Info

Ctrl + Space – показать список переменных проекта

Ctrl + Shift + Space – показать параме6тры функции

Ctrl + W – заворот длинных строк

Ctrl + G – перейти на строку

Автор

Автор статьи - Vam.

Форум

Комментарии

Если у вас нет времени регистрироваться на форумах (ссылки на них выше), вы можете оставить свой комментарий прямо здесь: