Показать сообщение отдельно
Старый 02.02.2014, 15:52   #2
Профессор скриптологии
Посвященный
 
Аватар для НастасьСанна
 
Регистрация: 10.12.2012
Адрес: Самара
Сообщений: 360
Сказал(а) спасибо: 410
Поблагодарили 442 раз(а) в 181 сообщениях
По умолчанию Re: IKARUS: скрипт-пакет

Я не совсем поняла формулировку вопроса, поэтому просто опишу, как я компилирую скрипты, содержащие Икарус (и ЛеГо).

Во-первых, получить GOTHIC.DAT и OU.BIN с помощью GothicSourcer (GS) больше не получится. Декомпилировать скрипты с Икарусом тоже не получится. Там используется много конструкций, которые GS не понимает и считает ошибками, хотя они реально работают. Компилировать будем Спейсером или самой игрой. Я предпочитаю последнее, т.к. написанный скрипт сразу можно протестировать. GS будем использовать для отлавливания хотя бы части ошибок и просто из-за удобства.

Добавляем Икарус в проект
Итак, предположим, что у нас уже есть какие-то скрипты, в которые мы хотим добавить Икарус. Уже есть проект в GS и он не содержит ошибок, нормально компилируется. Назовем этот проект MyProject. Уже есть INI-файл для запуска мода. В общем, есть заготовка, которая без Икаруса работает.

1. GS должен быть закрыт. По крайней мере, должен быть закрыт MyProject.
2. Находим папку, в которой лежат скрипты нашего проекта:
%путь_к_GS%/GothicProjects/SolMyProject/PrjGothic
3. Создаем в PrjGothic папку Ikarus и копируем туда скрипты Икаруса (Ikarus_Const_G2_Rus.d, Ikarus_Rus.d, float_Rus.d, папку EngineClasses_G2_Rus (если не русифицированные, то без _Rus)).
4. Из PrjGothic открываем Gothic.src Блокнотом. Дописываем выделенные строчки, сохраняем и закрываем:
Spoiler:
_Intern\Constants.d
_Intern\Classes.d
Ikarus\EngineClasses_G2_Rus\Misk_Rus.d
Ikarus\EngineClasses_G2_Rus\oCAiHuman_Rus.d
Ikarus\EngineClasses_G2_Rus\oCGame_Rus.d
Ikarus\EngineClasses_G2_Rus\oCInfoManager_Rus.d
Ikarus\EngineClasses_G2_Rus\oCItem_Rus.d
Ikarus\EngineClasses_G2_Rus\oCMob_Rus.d
Ikarus\EngineClasses_G2_Rus\oCNpc_Rus.d
Ikarus\EngineClasses_G2_Rus\oCZoneMusic_Rus.d
Ikarus\EngineClasses_G2_Rus\zCCamera_Rus.d
Ikarus\EngineClasses_G2_Rus\zCConsole_Rus.d
Ikarus\EngineClasses_G2_Rus\zCMenu_Rus.d
Ikarus\EngineClasses_G2_Rus\zCMesh_Rus.d
Ikarus\EngineClasses_G2_Rus\zCOption_Rus.d
Ikarus\EngineClasses_G2_Rus\zCParser_Rus.d
Ikarus\EngineClasses_G2_Rus\zCSkyController_Rus.d
Ikarus\EngineClasses_G2_Rus\zCTexture_Rus.d
Ikarus\EngineClasses_G2_Rus\zCTrigger_Rus.d
Ikarus\EngineClasses_G2_Rus\zCWaynet_Rus.d
Ikarus\EngineClasses_G2_Rus\zCWorld_Rus.d
Ikarus\EngineClasses_G2_Rus\zCZoneZFog_Rus.d
Ikarus\Ikarus_Const_G2_Rus.d
Ikarus\Ikarus_Rus.d
Ikarus\float_Rus.d

...

5. Открываем проект в GS. В него уже добавится все, что мы дописали в Gothic.src.
6. Чтобы Икарус работал, его необходимо инициализировать при каждом запуске игры. Для этого в начало файла Startup.d в функции startup_global и init_global необходимо добавить строчку:
MEM_InitAll();

Все, дальше можно делать, что нам нужно.
Но, если попытаться скомпилировать проект, GS этого сделать не сможет. Он выдаст много (у меня 108) ошибок, но процесс компиляции не прервется, он пройдет все скрипты до конца. При использовании функций Икаруса будут появляться и другие "ошибки", но это правило остается. Это позволяет отлавливать критические ошибки до того, как мы запихнем скрипты в игру. Также помогает пункт "Проверка скрипта на ошибки" во всплывающем меню - как только изменили какой-то файл, сразу проверяем его.

Дальнейшие действия можно разбить на 2 части - копирование скриптов из GS в папку Готики и саму компиляцию.

Копирование скриптов
Нам нужно перенести скрипты из папки GS (%путь_к_GS%/GothicProjects/SolMyProject/PrjGothic) в папку Готики (%путь _к_Готике2%\_work\Data\Scripts\Content).

Я использую для этого вот такой BAT-файл:
Spoiler:
Код:
@echo off

::путь к Готике и к GS
set pG2="E:\Gothic Mod\Gothic II Addon\_work\data\Scripts"
set pGS="E:\Gothic MOD\GothicSourcer V3.14\Gothic Projects\SolMyProject\PrjGothic"

::удаляем DMP-файлы
DEL /F /Q %p%..\..\..\..\*.DMP

::копируем скрипты, только обновившиеся и не спрашивая подтверждения на замену
xcopy %pGS%"\_Intern"	%pG2%"\Content\_Intern" 	/d /s /e /y
xcopy %pGS%"\Ikarus"	%pG2%"\Content\Ikarus" 	/d /s /e /y
xcopy %pGS%"\AI"	%pG2%"\Content\AI" 	/d /s /e /y
xcopy %pGS%"\Items"	%pG2%"\Content\Items" 	/d /s /e /y
xcopy %pGS%"\Story"	%pG2%"\Content\Story" 	/d /s /e /y
::копируем SRC
copy %pGS%"\gothic.src"	%pG2%"\Content\gothic.src" /y

pause


При запуске этого файла появится окно командной строки, в котором будут перечислены все скопированные файлы.
Если есть желание, можно, чтобы файл скриптов назывался не GOTIC.DAT (Gothic.src), а, например, MyMod.DAT (MyMod.src).
Тогда пишем
copy %pGS%"\gothic.src" %pG2%"\Content\MyMod.src" /y
А в INI-файле нашего мода указываем
Game=Content\MyMod

Компиляция скриптов
Здесь меня, возможно, поправят, но OU.BIN мне игрой скомпилить не удалось, это я делаю только Спейсером. С другой стороны, пока не меняются реплики персонажей, OU-шник можно и не трогать.

Компиляция игрой (.DAT)
Запускаем GothicStarter для модостроителей. Ставим галочку "Scripte parsen" (компилировать скрипты). Также рекомендую поставить "Festernmodus" (запуск в окне), ползунок "zSpy-Nachrichten" на normal (в серединку), а в поле "Parameter" вписать "-devmode" (включает Марвина).
Запускаем игру кнопкой "Spiel starten". До запуска Готики откроется zSpy. В процессе компиляции там отображается перечень компилируемых файлов. Если возникнет ошибка компиляции, то будем знать, где именно. Иногда в сообщении об ошибке указывается и номер строки в скрипте. Это сообщение тоже добавится в zSpy.
Еще в zSpy удобно выводить отладочную информацию с помощью функции MEM_Debug.
Если все сделали правильно, игра запустится. В начале новой игры или при загрузке сохранений, в zSpy можно найти такую строчку:
01:54 Info: 0 Q: Ikarus log functions now print in colour with prefix 'Q:'.
Это признак того, что Икарус нормально инициализовался, сработала MEM_InitAll().

Компиляция Спейсером (.DAT и OU.BIN)
Запускаем Спейсер кнопкой "Editor starten". Никакой мир открывать не нужно.
Перекомпилировать DAT можно через меню World->Reparse Script..., выбираем наш SRC-файл, который лежит в папке с Готикой. К сожалению, здесь процесс компиляции в zSpy не показывается, только ошибки.
Для компиляции OUшника используем окошко Output-Units. Если оно не отображается, нажмите на панели инструментов левую из двух активных кнопок (Toggles OutputUnits-Window).
Нажимаем кнопку Update - он прогонит OUINFO.INF, появившийся при компиляции скриптов, и выведет список всех фраз в это окошко (довольно долго, но по zSpy можно увидеть, что процесс не завис).
Дальше можно нажать Refresh для удаления дубликатов, хотя не обязательно.
Последним нажимаем Save.

Готовые файлы лежат в _work\Data\Scripts\_compiled\Gothic.DAT и _work\Data\Scripts\Content\Cutscene\OU.BIN. Их нужно будет добавить в MOD-файл. Файлы OUINFO.INF и OU.CSL промежуточные, они в готовом моде не нужны.

Кажется, все. Также рекомендую установить полный gmdk, чтобы при каждом запуске игры не монтировать виртуальную файловую систему. Дело пойдет заметно быстрее. Можно запуск Готики/Спейсера дописать в тот же BATник, тогда вся, кроме OUшника, компиляция будет выполняться запуском этого файла.

Удачи в модострое!
__________________
Сколько всего не сделано. Сколько всего предстоит не сделать!

Последний раз редактировалось НастасьСанна; 09.02.2014 в 00:28.
НастасьСанна вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
DRom (02.02.2014), Hell9999 (02.02.2014), kazus23 (02.02.2014), redleha (03.02.2014), Tarokl (02.02.2014), Tolgetmen (04.02.2014)