Создание аддонов — различия между версиями

Материал из WOG Wiki
Перейти к: навигация, поиск
Строка 1: Строка 1:
"И после смерти мне не обрести покой - я душу дьяволу продал за ночь с армой..." Crabe
+
''"И после смерти мне не обрести покой - я душу дьяволу продал за ночь с армой..." (с) Crabe''
  
  
  
Игры серии Operation Flashpoint/ARMA симулируют реальность и объекты в ней. Каждый объект - острова, транспортные средства, вооружения - имеет свойства и функции, прописанные в конфигурационных файлах, загружаемых игрой на старте. Перечень свойств зависит от класса объекта. Конфиг представляет собой файл C++, который может существовать и в бинарном виде. Физически аддон - это архив *.pbo, содержащий конфигурационный файл config.cpp или config.bin и дополнительный контент - звуки, текстуры, 3д-модель, скрипты, вынесенные в отдельные файлы через команду `#include` разделы конфига. Конфигурационные файлы загружаются только на старте и, в отличии от скриптов, не поддерживают изменение переменных на лету. Если присутствуют и файл *.cpp, и *.bin, игра отдает предпочтение первому. Совокупность всех загружаемых аддонов представляет собой единый мастер-конфиг. Принято разделять ванильный контент - объекты, заданные разработчиком при релизе игры, и аддоны - контент, добавляемый после релиза разработчиком или сторонними лицами. Аддоны могут добавлять новый контент и изменять свойства существующего. Весь контент игры размещается в папке `addons` и, кроме ванильного контента, для удобства разделяется на папки. Конфигурационные файлы поддерживают наследование - если объекту (классу) задан родительский класс, он наследует все свойства родителя, присущие данному классу. Это упрощает разработку различных модификаций объектов. К примеру, бронеавтомобиль тигр может существовать в нескольких версиях, отличающихся только камуфляжем-окраской (текстурой) и/или вооружением. Эти отличия укладываются в несколько строк и нет потребности переписывать несколько страниц базовых свойств. При изменении существующего класса требуется прописать его родительский класс без переназначения свойств и затем сам редактируемый класс с указанием родителя. Внимание - переписывать все дерево классов не нужно, достаточно одного родителя. Для того, чтобы изменения вступили в силу, в параметре `required addons` раздела `CfgPatches`нужно прописать префикс изменяемого аддона. Префикс - это указанный в каждом архиве *.pbo логический путь, который может отличаться от физического пути и названия файла. Объекты могут быть модифицированы бесконечное количество раз и нужно, чтобы наши изменения были последними - чтобы именно они были зафиксированы в мастер-конфиге и не были перезаписаны другими конфигами, затрагивающими этот же класс.
+
Игры серии '''Operation Flashpoint'''/'''ARMA''' симулируют реальность и объекты в ней. Каждый объект - острова, транспортные средства, вооружения - имеет свойства и функции, прописанные в конфигурационных файлах, загружаемых игрой на старте. Перечень свойств зависит от класса объекта. Конфиг представляет собой файл C++, который может существовать и в бинарном виде.  
  
Подклассы, в которых содержатся параметры объекта, заводятся внутрь фигурных скобок {}, а строки заканчиваются точкой с запятой ; . На старте игра проверяет синтаксис конфигов и при обнаружении ошибки запуск отменяет. При ошибке в теле класса, внутри фигурных скобок, он игнорируется и актуальными остаются заданные ранее значения параметров. Другие классы в этом же конфиге, не связанные с содержащим ошибку, принимаются к изменению мастер-конфига. Не допускается повторное задание класса в пределах одного конфига.
+
 
 +
Физически аддон - это архив *.pbo, содержащий конфигурационный файл '''config.cpp''' или '''config.bin''' и дополнительный контент - звуки, текстуры, 3д-модель, скрипты, вынесенные в отдельные файлы через команду `'''#include'''` разделы конфига.
 +
 
 +
 
 +
Конфигурационные файлы загружаются только на старте и, в отличии от скриптов, не поддерживают изменение переменных на лету. Если присутствуют и файл *.cpp, и *.bin, игра отдает предпочтение первому.
 +
 
 +
 
 +
Совокупность всех загружаемых аддонов представляет собой единый мастер-конфиг. Во время работы игры он располагается в оперативной памяти, доступен через внутриигровой config viewer и может быть сохранен на жеский диск для просмотра.
 +
 
 +
 
 +
Принято разделять '''ванильный контент (vanila)''' - объекты, заданные разработчиком при релизе игры, и '''аддоны''' - контент, добавляемый после релиза разработчиком или сторонними лицами. Аддоны могут добавлять новый контент и изменять свойства существующего. Весь контент игры размещается в папке `addons` и, кроме ванильного контента, для удобства разделяется на папки.
 +
 
 +
 
 +
Конфигурационные файлы поддерживают наследование - если объекту (классу) задан родительский класс, он наследует все свойства родителя, присущие данному классу. Это упрощает разработку различных модификаций объектов. К примеру, бронеавтомобиль "Тигр" может существовать в нескольких версиях, отличающихся только камуфляжем-окраской (текстурой) и/или вооружением. Эти отличия укладываются в несколько строк и нет потребности переписывать несколько страниц базовых свойств. При изменении существующего класса требуется прописать его родительский класс без переназначения свойств и затем сам редактируемый класс с указанием родителя.
 +
 
 +
 
 +
'''Пример''':
 +
 
 +
class rhsusf_m998_w_4dr; - ''ссылка на внешний класс-родитель''
 +
 
 +
class rhsusf_m998_w_4dr_halftop: rhsusf_m998_w_4dr - ''редактируемый класс с указанием родителя''
 +
 
 +
{
 +
insideSoundCoef = 0.4;
 +
}; - ''изменяемый параметр''
 +
 
 +
 
 +
Внимание - переписывать все дерево классов не нужно, достаточно одного родителя. Но наследоваться параметры могут и от классов выше по дереву.
 +
 
 +
 
 +
Для того, чтобы изменения вступили в силу, в параметре `'''required addons'''` раздела `'''CfgPatches'''`нужно прописать префикс изменяемого аддона. Префикс - это указанный в каждом архиве *.pbo логический путь, который может отличаться от физического пути и названия файла. Объекты могут быть модифицированы бесконечное количество раз и нужно, чтобы наши изменения были последними - чтобы именно они были зафиксированы в мастер-конфиге и не были перезаписаны другими конфигами, затрагивающими этот же класс.
 +
 
 +
 
 +
Подклассы, в которых содержатся параметры объекта, заводятся внутрь фигурных скобок '''{}''', а строки заканчиваются точкой с запятой ''';''' . На старте игра проверяет синтаксис конфигов и при обнаружении ошибки запуск отменяет. При ошибке в теле класса, внутри фигурных скобок, он игнорируется и актуальными остаются заданные ранее значения параметров. Другие классы в этом же конфиге, не связанные с содержащим ошибку, принимаются к изменению мастер-конфига. Не допускается повторное задание класса в пределах одного конфига.

Версия 12:18, 18 февраля 2019

"И после смерти мне не обрести покой - я душу дьяволу продал за ночь с армой..." (с) Crabe


Игры серии Operation Flashpoint/ARMA симулируют реальность и объекты в ней. Каждый объект - острова, транспортные средства, вооружения - имеет свойства и функции, прописанные в конфигурационных файлах, загружаемых игрой на старте. Перечень свойств зависит от класса объекта. Конфиг представляет собой файл C++, который может существовать и в бинарном виде.


Физически аддон - это архив *.pbo, содержащий конфигурационный файл config.cpp или config.bin и дополнительный контент - звуки, текстуры, 3д-модель, скрипты, вынесенные в отдельные файлы через команду `#include` разделы конфига.


Конфигурационные файлы загружаются только на старте и, в отличии от скриптов, не поддерживают изменение переменных на лету. Если присутствуют и файл *.cpp, и *.bin, игра отдает предпочтение первому.


Совокупность всех загружаемых аддонов представляет собой единый мастер-конфиг. Во время работы игры он располагается в оперативной памяти, доступен через внутриигровой config viewer и может быть сохранен на жеский диск для просмотра.


Принято разделять ванильный контент (vanila) - объекты, заданные разработчиком при релизе игры, и аддоны - контент, добавляемый после релиза разработчиком или сторонними лицами. Аддоны могут добавлять новый контент и изменять свойства существующего. Весь контент игры размещается в папке `addons` и, кроме ванильного контента, для удобства разделяется на папки.


Конфигурационные файлы поддерживают наследование - если объекту (классу) задан родительский класс, он наследует все свойства родителя, присущие данному классу. Это упрощает разработку различных модификаций объектов. К примеру, бронеавтомобиль "Тигр" может существовать в нескольких версиях, отличающихся только камуфляжем-окраской (текстурой) и/или вооружением. Эти отличия укладываются в несколько строк и нет потребности переписывать несколько страниц базовых свойств. При изменении существующего класса требуется прописать его родительский класс без переназначения свойств и затем сам редактируемый класс с указанием родителя.


Пример:

class rhsusf_m998_w_4dr; - ссылка на внешний класс-родитель

class rhsusf_m998_w_4dr_halftop: rhsusf_m998_w_4dr - редактируемый класс с указанием родителя

{ insideSoundCoef = 0.4; }; - изменяемый параметр


Внимание - переписывать все дерево классов не нужно, достаточно одного родителя. Но наследоваться параметры могут и от классов выше по дереву.


Для того, чтобы изменения вступили в силу, в параметре `required addons` раздела `CfgPatches`нужно прописать префикс изменяемого аддона. Префикс - это указанный в каждом архиве *.pbo логический путь, который может отличаться от физического пути и названия файла. Объекты могут быть модифицированы бесконечное количество раз и нужно, чтобы наши изменения были последними - чтобы именно они были зафиксированы в мастер-конфиге и не были перезаписаны другими конфигами, затрагивающими этот же класс.


Подклассы, в которых содержатся параметры объекта, заводятся внутрь фигурных скобок {}, а строки заканчиваются точкой с запятой ; . На старте игра проверяет синтаксис конфигов и при обнаружении ошибки запуск отменяет. При ошибке в теле класса, внутри фигурных скобок, он игнорируется и актуальными остаются заданные ранее значения параметров. Другие классы в этом же конфиге, не связанные с содержащим ошибку, принимаются к изменению мастер-конфига. Не допускается повторное задание класса в пределах одного конфига.