Далее описывается пример создания u-файла "с нуля", содержащего несколько условно новых декораций для игры Clive Barkers Undying. Это будут плоские квадратные листы с натянутыми на них текстурами листьев водяных лилий с цветами и без. В файле присутствуют 2 новых класса и некоторое количество картинок. Как сделать картинки здесь не рассматривается. Для примера я использовал картинку из Unreal.

 

1. В корне диска С:\ создаём папку с именем UndyingScripts.

2. Внутри создаём папку DecoSheets, а внутри неё – папки Classes и Textures.
ПРИМЕЧАНИЕ: Если вы хотите использовать в скрипте существующий текстурный пакадж, то вы должны положить его в папку DecoSheets.
Синтаксис будет такой #exec OBJ LOAD FILE=[имя нужного пакаджа].utx PACKAGE=[имя нужного пакаджа]

3. Внутрь папки Classes кладём (или создаём с нуля) файлы скриптов с расширением .uc (в нашем примере два файла DecoSheets.uc и LilySheet.uc). Внутрь папки Textures кладём файлы картинок в формате pcx (или bmp). Картинки должны иметь палитру 256 цветов и размер не более 512х512 пикселей.

4. Текст скрипта DecoSheets.uc приведён ниже:

//======================================================================

// DecoSheets. Root class to all sheet decorations.
//======================================================================

class DecoSheets expands Decoration

            abstract;

 

#exec TEXTURE IMPORT NAME=lilys FILE=Textures\lilys.pcx PACKAGE=DecoSheets FLAGS=2

#exec TEXTURE IMPORT NAME=lilys2 FILE=Textures\lilys2.pcx PACKAGE=DecoSheets FLAGS=2

 

defaultproperties

{

            DrawType=DT_MESH

            Style=STY_Masked

            bMRM=False

            ShadowImportance=0

            ShadowRange=0

}

 

По аналогии с Unreal мы описываем корневой класс для всех новых декораций, чтобы группа смотрелась обособленно среди «родных» декораций Undying. Комментарии определяются двойным прямым слэшем //

С помощью команд #exec TEXTURE IMPORT импортируем две новые текстуры из папки UndyingScripts\Textures.

STY_Masked задаёт декорациям прозрачность для чёрного и белого цветов.

bMRM=False отключает поддержку Multi-resolution Mesh. Эта фича «движка» игры нужна для поддержки теней. Мне тени не нужны, поэтому ниже также указывается ShadowImportance=0 (тень для актора не важна).

Подразумевается, что внутри корневого класса будет целая пачка новых декораций. Для примера хватит и одной. Текст её скрипта приведён ниже:

 

//======================================================================

// LilypadSheet.
//======================================================================

class LilySheet expands DecoSheets;

 

var() texture NewSkin; // Текстура новой «шкурки»

 

function PreBeginPlay()

{

            Super.PreBeginPlay();

 

            // Изменим «шкурку»

            if (NewSkin != none)

            {

                        SetTexture( 1, NewSkin );

            }

}

 

defaultproperties

{

            MESH=SkelMesh'Aeons.Meshes.BloodScryePrints_m'

            Drawscale=0.500000

            NewSkin=Texture'Decosheets.lilys'

}

 

Что мы видим?

Переменная var() texture NewSkin позволит в редакторе назначить актору произвольную текстуру, которая станет новой «шкуркой». Но вы её в редакторе не увидите! Далее – пояснение почему так.

            Функция PreBeginPlay() позволит применить эту произвольную текстуру перед тем, как игрок возникнет на карте. SetTexture( 1, NewSkin ) указывает конкретный слот (из трёх возможных), в котором будет размещена эта текстура.

            В качестве скелетной модели используется существующая в игре BloodScryePrints_m.

            Почему всё так сложно? В отличие от Unreal модернизированный «движок» Undying работает с моделями в формате NGF, на которые «шкурки» уже натянуты прямо при сборке моделей. Другого пути поменять «шкурки» не существует! По этой же причине невозможно внедрение моделей других форматов (PSK, 3D).

 

5. Нужно открыть в Блокноте файл System.ini и внести правки в две секции (добавленные нужные строки выделены жирным шрифтом):

 

[URL]

Protocol=unreal

ProtocolDescription=Unreal Protocol

Name=Player

 

{cut}

Class=Aeons.Patrick

SourceDir=\DWIUnreal

SourceDir=C:\UndyingScripts

 

Чтобы во время последующей компиляции всё было правильно, создаваемый класс должен быть определён и должен идти последним.

 

{cut}

C_ZoneWire=(R=0,G=0,B=0,A=0)
EditPackages=Core
EditPackages=Engine
EditPackages=Editor
EditPackages=UWindow
EditPackages=Fire
EditPackages=IpDrv
EditPackages=UWeb
EditPackages=UBrowser
EditPackages=UMenu
EditPackages=IpServer
EditPackages=Aeons
EditPackages=Cutscenes
EditPackages=UndyingShellPC
EditPackages=DecoSheets

 

[Engine.GameInfo]
bLowGore=False

{cut}

 

6. Затем, находясь в папке \System, выполняем в командной строке Windows (но лучше пользоваться файловым менеджером с поддержкой командной строки - нагляднее):

 

ucc make

 

Запускается Unreal Code Compiler и последовательно проверяет существующие в директории \System u-файлы, при этом имея в виду дополнительный путь C:\UndyingScripts. Т.е. он по порядку, указанному в файле System.ini, пропустит существующие u-файлы, а дойдя до строки,

 

EditPackages=DecoSheets

 

начнёт компиляцию.

Если всё завершится удачно, вы увидите такую картинку (рис.1), а в папке \System появится файл DecoSheets.u.

 

7. Открыв редактор UndED (в моём примере это версия 2), вы получите доступ к новому классу декораций в Actor Class Browser (рис.2).

           

Ещё раз подчеркну, что разместив на карте новую декорацию LilySheet и назначив ей новую текстуру, вы не увидите изменений в редакторе. Изменения будут видны только при нормальном старте карты. Более того, нельзя создать ДВЕ декорации LilySheet с РАЗНЫМИ новыми текстурами! На каждой карте можно разместить сколько угодно LilySheet с ОДНОЙ и ТОЙ ЖЕ текстурой, и никак иначе. Именно поэтому задуман целый пак однотипных декораций, использующих разные NGF-модели, чтобы применять РАЗНЫЕ текстуры. К сожалению, в ресурсах игры я нашёл только две однотипные NGF-модели.

Может быть, вы сможете больше, чем я?

 

 

Рис. 1

 

 

Рис. 2