Создание модификаций: Difference between revisions

From Perimeter Community Wiki
Jump to navigation Jump to search
mNo edit summary
 
(6 intermediate revisions by the same user not shown)
Line 13: Line 13:
* WinVG.exe - утилита для просмотра просмотр моделей в игровом формате (m3d)
* WinVG.exe - утилита для просмотра просмотр моделей в игровом формате (m3d)


==Миссии==


Имейте в виду, что у миссий и сохранений одинаковый формат.
==Миры (карты)==
[[Создание и редактирование миров]]


'''Создание'''
==Миссии==
 
[[Редактирование миссий]]
Для создания миссий можно воспользоваться самой игрой. Запустите режим сражения, выберите цвет и фракцию. После создания сражения СРАЗУ сохраните его, после этого можете выходить из игры.
 
==Редактирование==
 
===Объекты===
 
Для расстановки объектов необходимо активировать встроенный редактор миссий.
 
[Редактор]<br />
 
'''"Каталог игры"/Perimeter.ini''' (Открыть блокнотом)<br />
 
  '''В файле:'''<br />
  В разделе '''[Game]'''
  '''StartSplash=1''' меняете на '''0'''
  '''MissionEdit=0''' меняете на '''1'''<br />
  В разделе '''[Graphics]'''
  '''FullScreen=1''' меняете на '''0'''
 
{| style="border: 1px solid rgba(0, 255, 0, 1); border-left-width: 4px; background-color: rgba(0, 255, 0, 0.1);"
|Либо если вы пользуетесь патчем '''SetCustomResolution''' от @!!ex (входящий в состав [[Perimeter Wide screen]]), то просто поставьте галочку напротив '''Editor mode''' и нажмите '''Patch.'''
|}
 
Редактором хорошо работать с сохраненными играми.<br />
При создании нового мира (карты) редактором удобно выравнивать ландшафт до зерослоя под начальным положением всех игроков, после чего сохранив игру из папки "Каталог игры"/resource/save можно скопировать ваше сохранение (три файла: .dat,.gmp,.spg) в multiplayer или battle, с кое какими изменениями (читайте раздел Редактор сообщества).
 
Меню строений, юнитов, скверны, гео процессов - '''Клавиша: Insert'''<br />
 
Для нормальной работы приложения возвращайте показатели в исходное положение.<br />
 
Сохраненные миссии хранятся в папке Папка-Периметра\Resource\Saves\НомерПрофиля\НазваниеМиссии.spg (и еще два таких же файла, но с другими расширениями). Чтобы миссия была доступна как миссия для кампании, ее файлы нужно скопировать в папку ПапкаПериметра\Resource\Missions\ . После этого ее (миссию) можно указать в файле history.hst, о котором рассказано ниже... Вы можете изменить имя, фракцию и фрейм игрока и противника/противников, если откроете .spg файл Блокнотом или чем-то подобным. Там, в самом начале файла, вы можете увидеть четыре секции, отвечающие за четырех соответствующих игроков в разделе playersData. Прежде всего, вам там важны три строчки: "belligerent = значение;", "colorIndex = значение;", "name = "значение";". Первая строка отвечает за принадлежность игрока к определенной стороне, а также за модель фрейма:
 
  BELLIGERENT_EXODUS0 - Кластер, Исход
  BELLIGERENT_EXODUS1 - Арк-9, Исход
  BELLIGERENT_HARKBACKHOOD0 - Зодиак, Возврат
  BELLIGERENT_HARKBACKHOOD1 - Странник, Возврат
  BELLIGERENT_EMPIRE0 - Роутер, Империя
  BELLIGERENT_EMPIRE1 - Экзистор, Империя
  BELLIGERENT_EMPIRE_VICE - Наместник, вроде как Империя
  (При игре за Наместника недоступна ни одна из расовых лабораторий, даже Имперская)
 
Вторая строка отвечает за цвет игрока (0 - синий, 1 - голубой, 2 - красный, 3 - оранжевый, 4 - зеленый, 5 - желтый, '''23 - розовый, 6 - белый (отсутствие цвета), 7 - черный (при отдалении плавно исчезает))'''. Можете попробовать выставить двум игрокам одинаковые цвета. Третья строка отвечает за имя игрока/компьютера. Скорее всего, вам не удастся задать какое-либо иное имя, кроме привязанного к значению первой строки. (То есть, если значение первой строки - BELLIGERENT_EMPIRE1, то, скорее всего, игра допустит только имена "Экзистор" и "Existor" для данного игрока) Боюсь, я описал все это несколько неясно, уж извините :) Аид
 
===Скрипты===
 
Редактируются вручную или редактором скриптов. Также, в некоторых файлах скриптов задана логика ботов для режима Сражений/мультиплеерной игры.<br />
*'''".spg"''' - Скрипты миров. Может содержать в себе триггеры, включая ботов. Поскольку триггеры приходится прописывать индивидуально для каждого из четырех игроков, целесообразнее создавать триггеры отдельно (смотрите следующий пункт).<br />
*'''".scr"''' - Скрипты миссий, ботов, кат-сцен и прочего, находятся в папке Scripts/Triggers. При добавлении или удалении триггера не забывайте менять число количества триггеров в начале скрипта.<br />
[https://yadi.sk/d/6wS_MPzh3LUgYV '''Редактор скриптов от @!!ex'''] для редактирования файлов типа ".scr"
 
'''Принципы работы с Advanced Perimeter Script Editor (APSL):'''
 
Основные операции по изменению триггеров происходят в окне Editor Window,<br />
в которм скрипты представляются в виде Advanced Perimeter Script Language(APSL).<br />
Этот язык разработан для упрощения работы со скриптами.<br />
Общее описание языка расположено в файле Specification.<br />
Быстрый доступ к зарезервированным словам,кондишенам, экшенам и константам можно получить по нажатию на Ctrl+Space.<br />
Быстрый доступ содержит все экшены/кондишены, но не все константы. Нужные пока придется искать самостоятельно основываясь на примерах.<br />
 
'''Общие правила написания скриптов на APSL:'''<br />
1) Идентификатор триггера должен быть уникальным для данного игрока и должен быть записан в кавычках.<br />
2) Регистр записи констант значения не имеет.<br />
3) Соблюдения отступа не обязательно и не повлияет на откомпилированный скрипт.<br />
4) Регистр записи блоков OR/AND,кондишенов и экшенов значения не имеет.<br />
5) Регистр записи типа кондишена(NORMAL/INVERTED) значения не имеет.<br />
6) Регистр записи типа триггера(SLEEPING/CHECKING) значения не имеет.<br />
7) ПОМНИТЕ! При записи строковых констант регистр имеет значение! "String" и "string" не одно и тоже!<br />
8) Наличие пустых строк не допустимо.<br />
9) Компилятор не проверяет правильности написания констант, поэтому очень внимательно следити за этим!!!<br />
10) Компилятор не проверяет количество кондишенов, поэтому внимательно следите, правильно ли вы указали их количество!<br />
 
'''Принципы работы с Быстрым Доступом.'''
 
''Прошу прощения за такое "кривое" название, но я просто не могу придумать корректного перевода. :) (прим. разраб.)''
 
Использовать очень просто. Набираем начало нужного слова Например: UNIT_ нажимаем Ctrl+Space и в открывшемся списке содержащем все слова начинающиеся на UNIT_ выбираем нужное.<br />
Быстрый доступ возможен только при редактировании скриптов на APSL.
 
==== Specification ====
Простейший триггер:
 
<pre>
"Simple"
    AND
          0
    END
ACTION 0
LINKS
STATE CHECKING
</pre>
 
 
Каждый тригер состоит из 5 основных элементов:<br />
1)Название. В данном случае триггер называется Simple:<br />
"Simple"
 
2)Условие(я) выполнения триггера. В данном случае триггер выполняется всегда:
<pre>
    AND
          0
    END
</pre>
3)Действие. В данном случае тригер не выполняет никаких действий:
<pre>
ACTION 0
</pre>
 
4)Ссылки. Список триггеров, которые активируются при выполнении текущего триггера. В данном случае список пустой:
<pre>
LINKS
</pre>
 
5)Статус триггера. Может быть либо CHECKING(выполняется, если выподнились все кондишены, после чего статус становится SlEEPING), либо SLEEPING(не выполняется). В данном случае триггер проверяется:
<pre>
STATE CHECKING
</pre>
 
Рассмотрим поподробнее блок:
<pre>
    AND
          0
    END
</pre>
AND означает, что над результатом всех кондишенов в блоке нужно произвести логическую операцию and.<br />
Также в начале блока может стоять OR, тогда соответственно над результатами производится операция or.<br />
Число идущее после обозначения логической операции обозначает количество вложенных конишенов (Вложенный блок также считается за одну команду).<br />
В данном случае 0 означает, что блок не содержит условий.
 
Следующий блок содержит одно условие, поэтому число равно 1.
<pre>
    AND
          1
          NORMAL FrameState(AI_FRAME_STATE_INSTALLED,AI_PLAYER_TYPE_ME,100)
    END
</pre>
Каждый блок может содержать в себе любое количество вложенных блоков. В данном случае имеется один вложенный блок типа OR:
<pre>
    AND
          3
          INVERTED PlayerState(PLAYER_STATE_UNABLE_TO_PLACE_CORE)>
          NORMAL OR
              3
              NORMAL PlayerState(PLAYER_STATE_UNABLE_TO_PLACE_BUILDING)
              INVERTED ObjectExists(UNIT_ATTRIBUTE_CORE,AI_PLAYER_TYPE_ME,true)
              INVERTED OutOfEnergyCapacity(90.)
          END
          INVERTED EnegyLevelLowerReserve(100.)
    END
</pre>
Каждый кондишн и вложенный блок имеет тип: либо NORMAL, либо INVERTED. NORMAL означает, что нужно взять результат кондишена без изменений, а INVERTED, что нужно взять противоположный.
 
Список кондишенов можно узнать в Conditions.<br />
Список экшенов можно узнать в Actions.<br />
Почти все кондишены и экшены имееют параметры. Список параметров можно получить в Variables.<br />
Все парметры перечисляются в круглых скобках через запятую. ПЕРЕНОС СТРОКИ НЕ ДОПУСТИМ!<br />
3 экщена, в которых дополнительные параметры указываются в следующих строках описаны в Specials.<br />
 
==== Specials ====
Существует три экшена-исключения, в которых присутствуют дополнительный параметры. Количество дополнительных параметров указывается в конце основных.
 
SetControls(1)
В качестве парметра указано количество блоков дополнительных парметров.
Каждый блок имеет следующий вид:
<pre>
controlID
enabled
visible
flashing
tabNumber
</pre>
Где controlID указывает на кнопку интерфейса параметры которой меняем,
enabled может принимать значения true/false, указывает на то, можно ли нажать эту кнопку или нет,
visible может принимать значения true/false, указывает на то, видна ли эта кнопку или нет,
flashing может принимать значения true/false, указывает на то, мигает ли кнопа или нет,
tabNumber обычно принимает значени 0, зачем нужна мне не ясно.
 
Пример:
<pre>
ACTION SetControls(2)
    SQSH_RELAY_ID
    true
    true
    true
    0
    SQSH_TAB_BUILD_ID
    true
    true
    true
    1
SquadAttack(...,1)
</pre>
Имеет множество основных парметров последний из которых указывает на количество дополнительных параметров.<br />
Каждый дополнительный параметр имеет вид:
<pre>
unitsToAttack
</pre>
Где unitsToAttack объекты, которые сквад должен атаковать в первую очередь.
 
Пример:
<pre>
ACTION SquadAttack(true,CHOOSE_SQUAD_1,UNIT_ATTRIBUTE_PIERCER,UNIT_CLASS_STRUCTURE_GUN,true,1,0,0,0,120,1,false,0.,CHOOSE_SQUAD_2,false,false,false,6)
    UNIT_ATTRIBUTE_GUN_HOWITZER,
    UNIT_ATTRIBUTE_GUN_FILTH_NAVIGATOR,
    UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR,
    UNIT_ATTRIBUTE_GUN_BALLISTIC,
    UNIT_ATTRIBUTE_CORE,
    UNIT_ATTRIBUTE_FRAME
AttackBySpecialWeapon(...,1)
</pre>
Имеет множество основных парметров последний из которых указывает на количество дополнительных параметров.<br />
Каждый дополнительный параметр имеет вид:
<pre>
unitsToAttack
</pre>
Где unitsToAttack объекты, которые супер оружие должно атаковать в первую очередь.
 
Пример:
<pre>
ACTION AttackBySpecialWeapon(true,UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR,UNIT_CLASS_FRAME | UNIT_CLASS_STRUCTURE_GUN,5)
    UNIT_ATTRIBUTE_BLACK_HOLE,
    UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR,
    UNIT_ATTRIBUTE_GUN_BALLISTIC,
    UNIT_ATTRIBUTE_GUN_FILTH_NAVIGATOR,
    UNIT_ATTRIBUTE_CORE
</pre>
==== Actions ====
<pre>
Victory()
 
SetCamera(cameraSplineName,stepTime,cycles,smoothTransition)
 
Task(type,taskID,duration,syncroBySound,showTips)
 
TeleportationOut()
 
ActivateObjectByLabel(label)
 
DeactivateObjectByLabel(label)
 
Defeat()
 
Action()
 
Message(messageID,message,delay,duration,syncroBySound)
 
SetInterface(enableInterface)
 
SetCameraAtObject(object,playerType,transitionTime,setFollow,turnTime)
 
Delay(delay,showTimer,scaleByDifficulty)
 
ActivateAllSpots()
 
SwitchFieldOn(onlyIfAi,duration,energyReserve,allCores,onlyIfCoreDamaged)
 
KillObject(object)
 
DeactivateAllSpots()
 
OrderBuilding(onlyIfAi,building,placementStrategy,energyReserve,buildDurationMax,priority)
 
HoldBuilding(onlyIfAi,building)
 
InstallFrame(onlyIfAi)
 
RepareObjectByLabel(label)
 
OscillateCamera(duration,factor)
 
SquadOrderUnits(onlyIfAi,chooseSquadID,soldiers,officers,technics,energyReserve)
 
SwitchGuns(onlyIfAi,mode,gunID)
 
SellBuilding(onlyIfAi,building,sellFactor,damagePercent)
 
SetControls(Count*)
 
SquadAttack(onlyIfAi, chooseSquadID, attackByType, unitClassToAttack, offensive, unitsNumber, soldiers, officers, technics, attackTime, remutateCounter, holdProduction, squadFollowDistance, squadToFollowBy, ignoreLastTarget, returnToBase, interruptable, Count*)
 
AttackBySpecialWeapon(onlyIfAi,weapon,unitClassToAttack,Count*)
</pre>
==== Conditions ====
<pre>
Teleportation(teleportationType,playerType)
 
ObjectExists(object,playerType,constructedAndConstructing)
 
FrameState(state,playerType,spiralChargingPercent)
 
ObjectNearObjectByLabel(label,object,objectConstructed,playerType,distance)
 
KillObject(object,playerType)
 
SkipCutScene()
 
UnitClassUnderAttack(victimUnitClass,damagePercent,agressorUnitClass,playerType)
 
IsFieldOn()
 
ClickOnButton(controlID)
 
SquadSufficientUnits(playerType,chooseSquadID,unitType,compareOperator,unitsNumber,soldiers,officers,technics)
 
CutSceneWasSkipped(timeMax)
 
OutOfEnergyCapacity(chargingPercent)
 
PlayerState(playerState)
 
DifficultyLevel(difficulty)
 
CaptureBuilding(object,playerType)
 
MutationEnabled(unitType)
 
KillObjectByLabel(label)
 
ActivateSpot(type)
 
ObjectByLabelExists(label)
 
TerrainLeveledNearObjectByLabel(label,radius)
 
TimeMatched(time)
 
ToolzerSelectedNearObjectByLabel(label,radius)
 
SetSquadWayPoint()
 
EnegyLevelUpperReserve(energyReserve)
 
BuildingNearBuilding(distance,playerType1,playerType2)
 
EnegyLevelLowerReserve(energyReserve)
 
NumberOfBuildingByCoresCapacity(building,factor,compareOp,building2,playerType)
 
UnitClassIsGoingToBeAttacked(victimUnitClass,agressorUnitClass)
 
SquadGoingToAttack(chooseSquadID)
 
CheckBelligerent(belligerent)
 
WeaponIsFiring(gun)
 
OnlyMyClan()
</pre>
==== Variables ====
{| class="wikitable"
!Экшены, экстеншены!!Возможные значения
|-
|teleportationType||TELEPORTATION_TYPE_OMEGA /TELEPORTATION_TYPE_ALPHA
|-
|playerType||AI_PLAYER_TYPE_ME /AI_PLAYER_TYPE_ANY /AI_PLAYER_TYPE_WORLD /AI_PLAYER_TYPE_ENEMY
|-
|object||UNIT_ATTRIBUTE_OFFICER_PLANT /UNIT_ATTRIBUTE_HARKBACK_STATION1 /UNIT_ATTRIBUTE_LASER_CANNON /UNIT_ATTRIBUTE_ROCKET_LAUNCHER /UNIT_ATTRIBUTE_SUBTERRA_STATION1 /UNIT_ATTRIBUTE_SUBTERRA_STATION2 /UNIT_ATTRIBUTE_BOMB_STATION1 /UNIT_ATTRIBUTE_BOMB_STATION2 /UNIT_ATTRIBUTE_BOMB_STATION3 /UNIT_ATTRIBUTE_COMMANDER /UNIT_ATTRIBUTE_LASER_STATION1 /UNIT_ATTRIBUTE_LASER_STATION2 /UNIT_ATTRIBUTE_LASER_STATION3 /UNIT_ATTRIBUTE_ROCKET_STATION3 /UNIT_ATTRIBUTE_ROCKET_STATION2 /UNIT_ATTRIBUTE_ROCKET_STATION1 /UNIT_ATTRIBUTE_FRAME /UNIT_ATTRIBUTE_CORE /UNIT_ATTRIBUTE_COLLECTOR /UNIT_ATTRIBUTE_RELAY /UNIT_ATTRIBUTE_SOLDIER /UNIT_ATTRIBUTE_FLY_STATION1 /UNIT_ATTRIBUTE_SCUM_SPOT /UNIT_ATTRIBUTE_SCUM_SPOT2 /UNIT_ATTRIBUTE_SCUM_SPOT3
|-
|constructedAndConstructing||true /false
|-
|state||AI_FRAME_STATE_TELEPORTATION_STARTED /AI_FRAME_STATE_TELEPORTATION_ENABLED /AI_FRAME_STATE_INSTALLED /AI_FRAME_STATE_SPIRAL_CHARGING
|-
|spiralChargingPercent||число от 0 до 100. Например: 100
|-
|label||идентификатор метки. Строка в кавычках. Нaпример: "ядро"
|-
|objectConstructed||true /false
|-
|distance||число. Например: 150.
|-
|victimUnitClass||UNIT_CLASS_STRUCTURE_ENVIRONMENT /UNIT_CLASS_FRAME /UNIT_CLASS_STRUCTURE_CORE /UNIT_CLASS_BASE /UNIT_CLASS_LIGHT /UNIT_CLASS_MEDIUM /UNIT_CLASS_HEAVY /UNIT_CLASS_AIR /UNIT_CLASS_AIR_HEAVY /UNIT_CLASS_STRUCTURE_GUN /UNIT_CLASS_MISSILE. Может быть указано несколько объектов через: <pre>|</pre> Например: <pre>UNIT_CLASS_FRAME | UNIT_CLASS_STRUCTURE_CORE</pre>
|-
|damagePercent||число. Например: 1
|-
|agressorUnitClass||см. victimUnitClass
|-
|controlID||SQSH_RELAY_ID /SQSH_STATION5_ID /SQSH_TAB_BUILD_ID
|-
|chooseSquadID||CHOOSE_SQUAD_1 /CHOOSE_SQUAD_2 /CHOOSE_SQUAD_3 /CHOOSE_SQUAD_4 /CHOOSE_SQUAD_5
|-
|unitType||UNIT_ATTRIBUTE_STRAFER
|-
|compareOperator||COMPARE_GREATER_EQ
|-
|unitsNumber||число. Например: 1
|-
|soldiers||число. Например: 30
|-
|officers||число. Например: 45
|-
|technics||число. Например: 10
|-
|timeMax||число. Например: 15
|-
|chargingPercent||число. Например: 90.
|-
|playerState||PLAYER_STATE_UNABLE_TO_PLACE_CORE /PLAYER_STATE_UNABLE_TO_PLACE_BUILDING
|-
|difficulty||DIFFICULTY_HARD /DIFFICULTY_NORMAL /DIFFICULTY_EASY
|-
|type(ActivateSpot)||FILTH /GEO. Может быть указано несколько объектов через: <pre>|</pre> Например: <pre>FILTH | GEO</pre>
|-
|radius||число. Например: 1.
|-
|time||число. Например: 0
|-
|energyReserve||число. Например: 100.
|-
|playerType1||см. PlayerType
|-
|playerType2||см. PlayerType
|-
|building||UNIT_ATTRIBUTE_CORE /UNIT_ATTRIBUTE_SOLDIER_PLANT /UNIT_ATTRIBUTE_OFFICER_PLANT /UNIT_ATTRIBUTE_TECHNIC_PLANT /UNIT_ATTRIBUTE_COLLECTOR /UNIT_ATTRIBUTE_LASER_STATION1 /UNIT_ATTRIBUTE_ROCKET_STATION1 /UNIT_ATTRIBUTE_SUBTERRA_STATION1 /UNIT_ATTRIBUTE_FLY_STATION1 /UNIT_ATTRIBUTE_GUN_SUBCHASER /UNIT_ATTRIBUTE_GUN_HOWITZER /UNIT_ATTRIBUTE_GUN_BALLISTIC /UNIT_ATTRIBUTE_GUN_FILTH_NAVIGATOR /UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR
|-
|factor||число. Например: 0.1
|-
|compareOp||COMPARE_LESS /COMPARE_GREATER
|-
|building2||см. building
|-
|belligerent||BELLIGERENT_EXODUS0 /BELLIGERENT_HARKBACKHOOD0 /EMPIRE /HARKBACKHOOD /EXODUS
|-
|gun||UNIT_ATTRIBUTE_GUN_SUBCHASER /UNIT_ATTRIBUTE_GUN_HOWITZER /UNIT_ATTRIBUTE_GUN_BALLISTIC /UNIT_ATTRIBUTE_GUN_FILTH_NAVIGATOR /UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR
|-
|cameraSplineName||идентификатор пути движения камеры. Строка в кавычках. Например: "Camera1"
|-
|stepTime||число. Например: 7.8125e-003
 
|-
|cycles||число. Например: 1059815424
|-
|smoothTransition||true /false
|-
|type(Task)||COMPLETED /ASSIGNED /FAILED
|-
|taskID||Идентификатор сообщения в btdb файле. Например: "Mission Tasks.Mission 00.Task 1"
|-
|duration||Число. Например: 5
|-
|syncroBySound||true /false
|-
|showTips||true /false
|-
|messageID||Идентификатор сообщения в btdb файле. Например: "Mission Tips.Mission 00.Tip 2"
|-
|message||Строка. Например: ""
|-
|delay||Число. Например: 0
|-
|enableInterface||true /false
|-
|transitionTime||Число. Например: 0
|-
|setFollow||true /false
|-
|turnTime||Число. Например: 0
|-
|showTimer||true /false
|-
|scaleByDifficulty||true /false
|-
|onlyIfAi||true /false
|-
|allCores||true /false
|-
|onlyIfCoreDamaged||true /false
|-
|placementStrategy||PLACEMENT_STRATEGY_CORE /PLACEMENT_STRATEGY_STATION /PLACEMENT_STRATEGY_PLANT /PLACEMENT_STRATEGY_GUN /PLACEMENT_STRATEGY_SPECIAL_WEAPON
|-
|buildDurationMax||Число. Например: 300
|-
|priority||Число. Например: 1
|-
|mode||ON /OFF
|-
|gunID||см. gun
|-
|sellFactor||AI_SELL_IF_DAMAGE_GREATER /AI_SELL_IF_GUN_CANT_REACH_BUILDINGS /AI_SELL_CLOSEST_TO_FRAME /AI_SELL_FAREST_FROM_FRAME
|-
|attackByType||UNIT_ATTRIBUTE_LEECH /UNIT_ATTRIBUTE_DISINTEGRATOR /UNIT_ATTRIBUTE_PIERCER /UNIT_ATTRIBUTE_FILTH_SPOT0 /UNIT_ATTRIBUTE_FILTH_SPOT1 /UNIT_ATTRIBUTE_FILTH_SPOT2 /UNIT_ATTRIBUTE_FILTH_SPOT3 /UNIT_ATTRIBUTE_SCUM_SPLITTER /UNIT_ATTRIBUTE_SCUM_TWISTER /UNIT_ATTRIBUTE_SCUM_HEATER /UNIT_ATTRIBUTE_SCUM_THROWER /UNIT_ATTRIBUTE_SNIPER /UNIT_ATTRIBUTE_GYROID /UNIT_ATTRIBUTE_LEAMO /UNIT_ATTRIBUTE_CEPTOR /UNIT_ATTRIBUTE_R_PROJECTOR /UNIT_ATTRIBUTE_ROCKER /UNIT_ATTRIBUTE_NONE /UNIT_ATTRIBUTE_DIGGER /UNIT_ATTRIBUTE_SCUMER /UNIT_ATTRIBUTE_MORTAR /UNIT_ATTRIBUTE_WARGON /UNIT_ATTRIBUTE_BOMBER /UNIT_ATTRIBUTE_EXTIRPATOR /UNIT_ATTRIBUTE_UNSEEN
|-
|unitClassToAttack||см. victimUnitClass
|-
|offensive||true /false
|-
|attackTime||число. Например: 120
|-
|remutateCounter||число. Например: 1
|-
|holdProduction||true /false
|-
|squadFollowDistance||число. Например: 0.
|-
|squadToFollowBy||см. chooseSquadID
|-
|ignoreLastTarget||true /false
|-
|returnToBase||true /false
|-
|interruptable||true /false
|-
|weapon||UNIT_ATTRIBUTE_GUN_BALLISTIC /UNIT_ATTRIBUTE_GUN_SCUM_DISRUPTOR /UNIT_ATTRIBUTE_GUN_FILTH_NAVIGATOR
|-
|Count*||Число. Указывает количество дополнительных параметров. Подробнее этот вопрос рассмотрен в теме Specials
|}


==Модели==
==Модели==
 
[[Редактирование моделей]]
===Установка и настройка инструментария===
 
Для работы с моделями необходим плагин meshexp.DLE для 3Ds max 5:
 
# Поместить файл '''meshexp.dle''' в папку '''plugins''' графического редактора 3DS Max;
# Открыть менеджер дополнительных утилит через меню '''Customize/Plug-in Manager''';
# Найти в нем строчку '''MESHEXP.DLE''' (в колонке '''Name'''). Обратите внимание, напротив имени утилиты в колонке '''Status''' стоит '''deferred'''. Необходимо загрузить плагин;
# Щелчком левой кнопки мыши выделить строчку с названием экспортера и, нажав правую кнопку, вывести меню, в котором выбрать пункт '''Selected Plug-in/Load'''. Зеленая точка в графе Status указывает на то, что плагин подключен, и можно приступать к работе.
 
Для просмотра моделей в игровом формате необходимо:
 
# Поместить файл '''WinVG.exe''' в папку с моделями (в игре это каталог установки Периметра\resource\models\main\);
# Запустить exe-файл;
# После запуска выбрать пункт меню '''File->Set effect directory''' и указать путь: каталог установки Периметра \RESOURCE\FX\;
# Просматривать файлы можно, открывая их через пункт меню '''File->Open''' или, выбирая модели в списке в правой части экрана;
# Повернуть модель в экране просмотра можно, зажав левую клавишу мыши и перемещая мышь. Перемещать модель в экране просмотра можно, зажав правую клавишу мыши, и перемещая мышь.
 
===Экспортирование модели в игровой формат===
 
Изменив модель в 3Ds Max 5, необходимо сохранить ее для использования в игре:
 
# Выбрать пункт меню '''File/Export''';
# В окне сохранения выбрать тип файла '''M3D ver2.0 (*.M3D)''';
# Нажать кнопку Save;
# В появившемся окне '''Export Scene to .M3D File''' необходимо указать информацию об анимации (если она используется). Для этого необходимо нажать кнопку '''Add''' и заполнить поля:
* '''Name''' - имя анимационной цепочки
* '''start frame''' - номер первого кадра анимационной цепочки (для первой 0)
* '''finish frame''' - номер последнего кадра анимационной цепочки
* '''number frame''' - количество кадров анимации, чем больше, тем точнее. Не имеет смысл ставить цифру больше чем (finish-start).
 
* '''precision vertex''' - минимальное число, при котором цепочка считается константной. (Скорее всего никогда не придется менять его.)
* '''bump scale''' - влияет на рельефность бамп текстуры.
 
    При создании модели следует обратить внимание чтобы в ней были те же самые ноды
    group* и logic* с аналогичной иерархией.
    В зданиях так-же должен быть объект _base_.
 
Если вы хотите изменить игровую модель, вы можете произвести экспорт в файл модели с заменой. При экспорте с заменой нет надобности указывать Name, start frame, finish frame, number frame, эти параметры будут заполнены автоматически.
 
===Анимация моделей===
 
'''Периметр - система анимации'''<br />
''v1.0 / 21.03.2006''
 
Анимация юнита задаётся в виде графа, связями между узлами в нём являются анимационные цепочки. Сами узлы обозначают начало и конец цепочек. У зацикленных цепочек начало и конец совпадает. При запросе какой-либо цепочки по графу ищется путь до её начала от текущего положения (конец включённой в данный момент цепочки), затем цепочки согласно этому пути переключаются.
 
Кроме цепочки, из кода может быть запрошен и просто узел графа, работает это аналогично запросу цепочки.
 
Список цепочек:
{| class="wikitable"
!идентификатор!!значение!!тип
|-
|CHAIN_SWITCH_ON||включение||общие
|-
|style="color: black; background-color: silver;"|CHAIN_SWITCHED_ON||style="color: black; background-color: silver;"|включено||style="color: black; background-color: silver;"|общие
|-
|CHAIN_SWITCH_OFF||выключение||общие
|-
|style="color: black; background-color: silver;"|CHAIN_SWITCHED_OFF||style="color: black; background-color: silver;"|выключено||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_UPGRADE_PREPARE||style="color: black; background-color: silver;"|подготовка апгрейда||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_UPGRADE||style="color: black; background-color: silver;"|апгрейд||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_BUILD[N]||style="color: black; background-color: silver;"|этап строительства||style="color: black; background-color: silver;"|здания
|-
|CHAIN_UNBUILD[N]||деконструкция этапа строительства||здания
|-
|style="color: black; background-color: silver;"|CHAIN_CLOSED||style="color: black; background-color: silver;"|закрыто||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_OPEN||style="color: black; background-color: silver;"|открытие||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_OPENED||style="color: black; background-color: silver;"|открыто||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_CLOSE||style="color: black; background-color: silver;"|закрытие||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_FIRE||style="color: black; background-color: silver;"|стрельба||style="color: black; background-color: silver;"|оружие
|-
|CHAIN_FIRE_PREPARE||подготовка к стрельбе||оружие
|-
|CHAIN_RESET||сброс||оружие
|-
|style="color: black; background-color: silver;"|CHAIN_CHARGE||style="color: black; background-color: silver;"|зарядка||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_CHARGED||style="color: black; background-color: silver;"|заряжено||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_DISCHARGE||style="color: black; background-color: silver;"|разрядка||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_DISCHARGED||style="color: black; background-color: silver;"|разряжено||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_DETACHED||style="color: black; background-color: silver;"|фрейм отсоединён от энергосистемы||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_ATTACHED||style="color: black; background-color: silver;"|фрейм подсоединён к эренгосистеме||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_DETACH||style="color: black; background-color: silver;"|отсоединение||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_ATTACH||style="color: black; background-color: silver;"|присоединение||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_DETACHED_INPUT||style="color: black; background-color: silver;"|заезд в отсоединённый фрейм||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_DETACHED_OUTPUT||style="color: black; background-color: silver;"|выезд из отсоединённого фрейма||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_ATTACHED_OUTPUT||style="color: black; background-color: silver;"|выезд из присоединённого фрейма||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_ATTACHED_INPUT||style="color: black; background-color: silver;"|заезд в присоединённый фрейм||style="color: black; background-color: silver;"|фреймы
|-
|style="color: black; background-color: silver;"|CHAIN_PRODUCTION||style="color: black; background-color: silver;"|производство||style="color: black; background-color: silver;"|заводы
|-
|style="color: black; background-color: silver;"|CHAIN_DIE||style="color: black; background-color: silver;"|смерть||style="color: black; background-color: silver;"|общие
|-
|style="color: black; background-color: silver;"|CHAIN_MOVE||style="color: black; background-color: silver;"|движение||style="color: black; background-color: silver;"|юниты
|-
|style="color: black; background-color: silver;"|CHAIN_STOP||style="color: black; background-color: silver;"|остановка||style="color: black; background-color: silver;"|юниты
|-
|CHAIN_TAKEOFF||взлёт||лётные
|-
|CHAIN_LANDING||посадка||лётные
|}
 
Значение и тип довольно условны, часть цепочек напрямую из кода не используется, идентификаторы в этом случае не принципиальны и нужны только для наглядности. <br />
Используемые из кода цепочки обозначены серым.
 
Список узлов:
{| class="wikitable"
!идентификатор узла!!значение
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_SWITCHED_ON||style="color: black; background-color: silver;"|включено
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_SWITCHED_OFF||style="color: black; background-color: silver;"|выключено
|-
|CHAIN_NODE_OPENED||открыто
|-
|CHAIN_NODE_CLOSED||закрыто
|-
|CHAIN_NODE_UPGRADE_START||начало апгрейда
|-
|CHAIN_NODE_BUILD[N]||этап строительства
|-
|CHAIN_NODE_CHARGED||заряжено
|-
|CHAIN_NODE_DISCHARGED||разряжено
|-
|CHAIN_NODE_FIRE||стрельба
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_DETACHED||style="color: black; background-color: silver;"|отсоединено от энергосистемы
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_ATTACHED||style="color: black; background-color: silver;"|присоединено к энергосистеме
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_DETACHED_OPENED||style="color: black; background-color: silver;"|отсоединено от энергосистемы / открыто
|-
|style="color: black; background-color: silver;"|CHAIN_NODE_ATTACHED_OPENED||style="color: black; background-color: silver;"|присоединено к энергосистеме / открыто
|-
|CHAIN_NODE_DEAD||смерть
|-
|CHAIN_NODE_GROUND||юнит на земле
|-
|CHAIN_NODE_FLIGHT||юнит в воздухе
|-
|CHAIN_NODE_UNDERGROUND||юнит под землёй
|}
 
 
Используемые из кода узлы обозначены серым, это делается только у фреймов и ядер/трансмиттеров.
 
Для обычных юнитов при движении включается CHAIN_MOVE, при остановке – CHAIN_STOP. Подземным юнитам под землёй тоже включается CHAIN_STOP.
 
Зданиям при строительстве включается CHAIN_BUILD[N], в построенном сотоянии – CHAIN_SWITCHED_ON. Есть исключения – фреймы, ядра/трансмиттеры, порталы анимируются по-своему, см. в коде. Заводам при производстве включается CHAIN_PRODUCTION, по окончании производства – CHAIN_OPEN.
 
Скверна анимируется по-своему, в зависимости от типа, см. в коде.
 
Для боевых юнитов стрельба визуализируеттся в отджельной анимационной группе, если в оружии установлен флаг WEAPON_HAS_FIRE_CONTROLLER или в корневой анимационной группе, если установлен флаг WEAPON_ROOT_FIRE_ANIMATION.
При стрельбе включается CHAIN_FIRE, по окончании стрельбы - CHAIN_SWITCHED_OFF. Если надо визуализировать зарядку оружия (установлен флаг WEAPON_NEED_CHARGE), то во время зарядки включается CHAIN_PRODUCTION.
 
Хранится анимация в AttributeLibrary, “Описание анимации”. Цепочки там объединены в анимационные группы, для независимой анимации частей объекта.
 
{| class="wikitable"
!идентификатор группы!!значение
|-
|ANIMATION_GROUP_ROOT||корневая группа, для основной анимации
|-
|ANIMATION_GROUP_CITY||фрейм – анимация города
|-
|ANIMATION_GROUP_PILLAR||фрейм – анимация колонн
|-
|ANIMATION_GROUP_ANIMATE||фрейм – анимация для оживления в подключенном состоянии
|-
|ANIMATION_GROUP_LIGHTING||ядра – источник света на колонне
|-
|ANIMATION_GROUP_CHARGING||ядра – визуализация зарядки
|-
|ANIMATION_GROUP_FIRE||оружие – отдельная группа для визуализации стрельбы
|}
 
Редактируемые параметры цепочки:
{| class="wikitable"
!параметр!!значение
|-
|chainID||идентификатор цепочки
|-
|chainName||имя цепочки в 3D модели
|-
|phase||начальная фаза цепочки, [0, 1]. Для цепочек, проигрываемых в обратном направлении ставить 1, для обычных 0
|-
|period||длительность цепочки, мс. Для цепочек, проигрываемых в обратном направлении ставить отрицательную
|-
|begin||идентификатор начала цепочки
|-
|end||идентификатор конца цепочки
|-
|periodDeviation||разброс длительности, если ненулевой, то period += rnd(perionDeviation), phase = rnd(1)
|-
|enableReverse||если = 1, то при запросе обратной по отношению к текущей цепочки (т.е. у них одинаковые начало и конец, но разное напревление) переход на неё происходит сразу (сделано исключительно для корректного отображения зарядки у ядер)
|-
|counter||служебные данные
|-
|soundID||идентификатор звукового события, привязанного к цепочке
|}
===Подключение готовой модели в игру===
 
Для интеграции модели в игру необходимо:
# Положить текстуру в каталог установки Периметра '''\resource\models\main\textures''';
# Дополнительно положить текстуру в каталог расы:
##'''каталог установки Периметра \resource\models\main\Empire''' - для Империи
##'''каталог установки Периметра \resource\models\main\Exodus''' - для Исхода
##'''каталог установки Периметра \resource\models\main\Harkbackhood''' - для Возврата
# Поместить в '''каталог установки периметра\resource\models\main''' файлы *.m3d (модели) и *.l3d (набор логики).
Текстуры могут иметь любой размер. Можно добавлять свои, дополнительные текстуры. Текстур обычно две RGB текстура и текстура микрорельефа – Bump. Normal Mapping не поддерживается.
 
===Требования к моделям===
 
При создании модели следует четко придерживаться иерархии сцены, с которой можно ознакомиться в прилагаемых примерах. Обязательно наличие объектов group* и logic* с аналогичной иерархией. В зданиях также должен быть объект _base_.
Иерархия строится на основе привязок (в 3Ds Max 5 на главной панели слева третий значок “Select and Link” https://pp.userapi.com/c840223/v840223067/1243f/2hEDihQmgiw.jpg) Dummy объектов и мешей модели. Правильную иерархию можно посмотреть не только в прилагаемых к Золотому Изданию игры исходных моделях, а так же в программе для просмотра моделей WinVG.exe.
Логика иерархии прописана в коде игры, поэтому следует четко придерживаться иерархии. Каждый элемент под названием Group, это Dummy в 3DsMax с тем же названием. Иерархия древовидная.
 
Ограничения по анимации - не поддерживается скелетная анимация и морфинг, можно только двигать, вращать, масштабировать объект целиком (масштабировать можно по всем или по одной оси).
 
Кроме этого, есть анимация прозрачности материала, координат материала и видимость-невидимость.
Можно использовать и анимировать источники света “Omni” и некоторые его параметры.
 
===Спецификация формата моделей и логики===
 
(скачать m3dl3d.docx: [https://drive.google.com/open?id=0B6q_T8-tsA4TWFB2M0FORWtfWDQ drive] [https://www.dropbox.com/s/dkfx12joawx2bm4/m3dl3d.docx?dl=0 dropbox]) (автор - @!!ex)
 
=== Статья по модификации моделей (автор GREM) ===
 
{Итак, я все же собрался ее написать. Только не судите строго, а если
чего неправильно - критикуйте.} <br />
 
Будем рассматривать пример Лимо, так как он мной лучше всего изучен. <br />
 
Допустим, что у вас уже есть какая-то модель, осталось только затекстурировать и вставить в игру. И тут я обнаружил первое ограничение - можно нанести карту только на весь объект (в 3д максовском смысле, то что в одном габаритном контейнере) сразу, на части наносить разные карты нельзя, хотя проекций можно использовать много. Всякие карты отражений и рельефности надо включать в один материал. Далее, те участки модели, которые будут изменять цвет в зависимомти от вашего выбора (в сражениях или сетевой игре цвет можно выбрать, я про него говорю) надо вынести в отдельные объектs. А вот как этот объект отделить от остальных, чтоб он действовал, я пока не знаю, но это связано с материалом. <br />
С текстурами у меня все... <br />
Теперь как организовать анимацию... <br />
Чтоб модель вообще работала, нужно насоздавать объектов dummy со следующими именами и привязаны друг к другу они должны быть так (тут же я укажу и привязку модели к логическим объектам, обозначение: <br />
 
'''    "обект 1" > "объект 2" > "объект 4"''' <br />
'''    :''' <br />
'''    > "объект 3"''' <br />
 
означает: объект 4 зависит от объекта 2, который зависит в свою очередь от объекта 1, обеъкт 3 также непосредственно зависит от объекта 1): <br />
logic center > logic bashnia > logic dulo > logic fire > logic targeting a > logic targeting b <br />
:
> logic bound {это простой бокс, охватывающий всю модель}
 
Теперь объекты, управляющие моделью: <br />
 
'''group center > group bashnia > group dulo > group fire > omni01 {источник света, который нужен для вспышки лазера}''' <br />
''': : :''' <br />
''': : > group targeting a > group targeting b''' <br />
''': : :''' <br />
''': : > [имя ствола]''' <br />
''': :''' <br />
''': > [имя башни лимо]''' <br />
''':''' <br />
'''> [имя корпуса лимо]''' <br />
 
Рекомендую логические объекты с названиями, отличающимися только словами logic и group создавать в одних и тех же координатах. <br />
Надо отметить, что корпус, или башня, или ствол могут состоять из нескольких частей, тогда все части прицепляются либо друг к другу, либо "параллельно". <br />
Что бы всышка лазера была, я объект omni01 копировал просто из оригинальной модели, я ее вам тоже дам. <br />
И еще тонкость: чтоб ствол вращался в правильном направлении, group dulo надо повернуть на 180 в любую сторону. <br />
Анимацию лучше оставить какая была, для этого сохраняем оригинальные файлы limo.m3d и limo.l3d куда нибудь в безопасное место, а свою работу сохраняем повер старых (как сохранить вы должны знать, если у вас есть плагин meshexp.dle). Старая анимация отобразится при сохранении в диалоге экспорта.
 
=== Статья по модификации моделей (Игромания) ===
[https://www.igromania.ru/article/4707/Igrovoe_redaktirovanie.html Статья Игромании]
 
==Миры==
 
===Полезное для создания миров===
 
Для создания маленького мира на троих, для ровного расположения игроков на карте, координаты следующие:<br/>
'''Player1:''' x1024, y292<br/>
'''Player2:''' x1657, y1389<br/>
'''Player3:''' x390, y1389
 
===Официальный редактор карт – SurMap3===
[[File:SurMap3.jpg|400px|thumb|right|Редактор миров SurMap]]
 
Выберите мир для редактирования из папки Worlds через меню File -> Open World As... (для создания нового мира необходимо открыть пустой шаблон в папке 001_EMPTY 4x4 или 001_EMPTY 2x2).
 
Панель инструментов в правой части экрана позволяет изменять ландшафт (насыпать или копать), используя простейший набор цветов. Панель инструментов в левой верхней части экрана позволяет работать с дополнительными опциями:
 
http://i.imgur.com/6cgg6vX.jpg Перемещение по поверхности мира.
 
http://i.imgur.com/5Bvo8cD.jpg Приближение или удаление камеры.
 
http://i.imgur.com/sRWJZvR.jpg Тулзер (инструмент для насыпания\выкапывания. Параметры тулзера (радиус, форма и свойства кисти) настраиваются на вспомогательной панели внизу экрана.
 
http://i.imgur.com/AcJYLsX.jpg Установка на мир готовой фигуры (пирамида, параметры настраиваются на вспомогательной панели внизу экрана).
 
http://i.imgur.com/pcN9voH.jpg Установка на мир готовой фигуры (круг, параметры настраиваются на вспомогательной панели внизу экрана).
 
http://i.imgur.com/DbeX2D8.jpg Работа с зеро-слоем, внизу экрана необходимо установить радиус инструмента.
 
http://i.imgur.com/P3WvOur.jpg Установка модели из списка внизу экрана.
 
http://i.imgur.com/hIXVFKO.jpg Наложение карты высот (карту необходимо выбрать из списка внизу экрана, после корректного размещения на мире нажать кнопку Put для перевода карты в рельеф).
 
http://i.imgur.com/lobi9pr.jpg Инструмент размытия контуров.
 
http://i.imgur.com/aPIp8AP.jpg Гео-инструмент для работы с рельефом (параметры настраиваются в нижней части экрана).
 
http://i.imgur.com/ixHbFYR.jpg Инструмент позволяет выделить прямоугольный участок мира и работать только в выделенной области.
 
По завершению работы с миром необходимо сохранить изменения через команду File -> Open World As... (для записи нового мира необходимо предварительно создать пустой каталог в папке Worlds). После завершения подготовки ландшафта можно наложить текстуру поверхности на мир. Предварительно подготовленную текстуру в формате TGA необходимо положить в папку мира, сохранив файл с текстурой под названием AllDamMap.tga (в папку также необходимо скопировать служебный файл leveledSurfaceTexture.tga - текстуру зерослоя).
 
http://i.imgur.com/SBqbcXl.jpg Данный инструмент используется в редакторе миров для наложения текстуры на готовый мир.
 
Все новые миры необходимо прописывать в списке миров - файле RESOURCE\Worlds\worlds.prm, в котором первая строка содержит количество миров, все остальные содержат имя файла и название папки (относительный путь к папке с миром).
 
=== Официальный редактор геотекстур – GeoTool ===
[[File:GeoTool.jpg|300px|thumb|right|Редактор геотекстур GeoTool]]
 
{| style="border: 1px solid #F00; border-left-width: 4px; background-color: rgba(255, 0, 0, 0.1);"
|Редактор '''не предназначен''' для редактирования текстуры поверхности (шкурки мира).
|}
{| style="border: 1px solid #F00; border-left-width: 4px; background-color: rgba(0, 150, 255, 0.2);"
|Внимание! В официальной поставке редактора не хватает ряда текстур в папке GeoTx. При запуске редактора возникают ошибки, где написан путь и название отсутствующей текстуры. Следует пройти по тому пути, продублировать близкий по названию файл и дать ему название из ошибки и перезапустить программу. Проделываем данное действие пока ошибки не пропадут.
|}
 
'''Геотектуры - текстуры недр спанжа, обножаемые ковшами при терроформировании.'''
Высота, на которой текстура поверхности сменяется на геотекстуру задается специальной картой глубины внутри output.vmp.
 
Для работы с геотекстурами на мире используется инструмент '''GeoTool.exe'''. <br />
После запуска вам предложат выбрать мир из списка (список формируется с помощью worlds.prm, поэтому все новые миры необходимо предварительно прописать в этом файле). <br />
Затем необходимо установить в верхней панели (включающей ряд слотов с установленным по умолчанию значением Empty) значения Clear, Mixer или Painter (список возможных значений выводится по правому клику). <br />
Чтобы загрузить текстуру - выбираем слот левым кликом, затем выбираем текстуру в списке слева и переносим пункт списка на экран, зажав левую клавишу.
 
Если вам требуется открыть карту, то слоты геотекстур окажутся пустыми, чтобы загрузить геотекстуры карты нужно нажать "File > Load textures" и в папке с нужным вам миром открыть файл geoTx.xml
 
При работе с геотекстурами можно копать и насыпать, чтобы видеть как будут вести себя геотекстуры в игре. Для этого в редакторе есть специальный инструмент [[File: Geotool2.JPG]], действие которого инвертируется зажатием клавиши Shift. Зажимая ctrl можно перемещать рампу клиппинга.
 
После завершения работы с геотекстурами необходимо записать изменения. При записи необходимо указать временной имя, для этого нажимаем '''File > Save Texture'''. В нашем примере было введено временное название '''"2"'''. После сохранения изменений в выбранной папке появятся 4 файла. Их необходимо перенести в каталог соответствующего мира, переименовав следующим образом:
 
  '''2.'''geoLattice.bin -> geoLattice.bin
  '''2.'''geoPal.xml -> geoPal.xml
  '''2.'''xml -> geoTx.xml
  '''2.'''pal.pal -> inGeo.act
 
===Редактор сообщества - Perimeter Map Compiler===
[[File:PMC__.jpg|400px|thumb|Right|Perimeter Map Compiler]]
 
Внимание, редактор представляет собой компилятор карт.
 
Требование к карте глубины, grayscale или RGB, 16bit предпочтительно tiff (tif не поддерживается).
 
Создаются [https://yadi.sk/d/qbZn7zIhv5V_MA компилятором карт] (создатель - Don Reba), с помощью различных изображений в формате .bmp (8bit), .tiff(8-16bit), .tga(8bit) для редактирования которых лучше пользоваться Adobe Photoshop. К слову, можно в 3D-редакторе (3ds max, Maya, Z-brush, Blender, 3D-Coat) или редакторах ландшафтов (World Mashine) сделать серую модель рельефа нужного мира и рендерить карту глубины z-depth в виде Top (сверху) в ортопроекции (способ создания heightmap в 3Ds Max). После - без динамичного света и затенения рендерить модели с текстурой.
 
В связи с тем, что Кусты сейчас как бы и не установишь (с помощью PMC), то предлагаю свою схему установки мира, которая проверена и отработана.
 
# Прежде всего делаем запасную копию файла ПапкаПериметра\Resource\Worlds\worlds.prm.
# Затем в PMC открываем файл проекта, жмем "Install Map", закрываем PMC.
# Удаляем модифицированный PMC'ом вышеупомянутый worlds.prm, ставим на его место свою копию.
# Открываем worlds.prm, плюсуем к числу в самом начале файла единицу, затем пишем английское имя мира в самом конце списка наименований, с сохранением всех отступов (делайте их пробелами или Tab'ами, не суть важно). Имя мира должно быть написано заглавными буквами.
# В каталоге ПапкаПериметра\Resource\Worlds\ переименовываем папку с добавленным вами миром (UNREGISTERED) в то имя, которое было указано в worlds.prm.
# В папке ПапкаПериметра\Resource\Multiplayer\ переименовываем файлы UNREGISTERED с расширениями .dat, .gmp и .spg в имена, аналогичные имени, указанному в worlds.prm.
# Открываем в этой же папке .spg-файл Блокнотом. Он может довольно-таки долго загружаться. Меняем в самом начале в строке "worldName = "UNREGISTERED";" слово UNREGISTERED на world.prm-овское имя.
# В том же файле, после блока с именами, цветами и фракциями игроков, меняем в строке "originalSaveName = "resource\\battle\\UNREGISTERED.spg";" слово UNREGISTERED на world.prm-овское имя.
# Проделываем пункт 6 еще раз, но уже в папке ПапкаПериметра\Resource\Battle\ .
# Проделываем пункты 7 и 8 с .spg-файлом в папке ПапкаПериметра\Resource\Battle\ .
# Повторяем пункты 9 и 10 с файлами в папке ПапкаПериметра\Resource\Battle\Survival\ .
# Открываем btdbEditor'ом файл ПапкаПериметра\Resource\LocData\Russian\Text\Texts.btdb. В самом конце найдите пункт MapNames.UNREGISTERED, выделите его, и нажмите пункт меню "Edit -> Remove Item".
# Нажимаем пункт меню "Edit -> Add Item". В поле "Value Name" введите world.prm-овское имя мира (вид должен быть такой: MapNames.WORLDNAME). В поле "Value Data" вводите русскоязычное имя мира (рекомендуется заглавными буквами). Нажимайте кнопку "ОК".
#. Сохраняем файл с текстом на место прежнего. Впрочем, никогда не будет лишним сделать запасную копию файла. Можете запускать Периметр и любоваться на свой добавленный мир.
 
P.S.: обратите внимание, у вас может не работать без дополнительной обработки режим выживания (то есть через ~10 секунд после запуска засчитывается автопобеда)! Также возможен такой глюк, что на добавленном вами мире абсолютно все будет черным и невидимым. Пока что способ решения найден только один: отключить в настройках графики самозатенение.
 
==== P-Launcher ====
Синхронизация карт в формате "Кустов" созданных в редакторе сообщества (разработчитк - Don Reba).
Фактически, даже если бы проект был завершен, сайт rul-clan.ru все равно давно не работает, а значит и синхронизация карт с сервером тоже.
 
Статус: заброшен ¯\_(ツ)_/¯
 
===Экстрактор текстур и карты глубины из игровых карт===
 
Разработанный @!!ex’ом конвертер VMPToTIFF ([https://drive.google.com/open?id=0B6q_T8-tsA4TSUZ3Q1RMX2F1SG8 drive]) предназначен исключительно для извлечения растровых текстур и карты глубины из игровых карт (World/NAME_MAP/_.vmp) для использования в своих целях.
Для того, чтобы извлечь текстуры из карты игры, нужно .VMP файл перетянуть на файл VMPToTIFF.exe. В папке с бинарником .VMP появятся текстуры и карта высоты данной игровой карты.


==Эффекты==
==Эффекты==
[[File:FX___.jpg|300px|thumb|Right|описание]]
[[File:FX___.jpg|300px|thumb|Right|FX_tool]]
===Официальный редактор EffectTool ===
===Официальный редактор EffectTool ===
Устаревший официальный редактор, который нигде не публиковался открыто. На смену ему пришел FX_tool.
Устаревший официальный редактор, который нигде не публиковался открыто. На смену ему пришел FX_tool.
Line 955: Line 55:
=== Видео ===
=== Видео ===


В формате RAD Game Video (.bik), открывается в RAD Video Tools и [https://mpc-hc.org MPC-HC].
В игре v1.00-1.03 используется формат RAD Game Video (.bik), открывается в RAD Video Tools и [https://mpc-hc.org MPC-HC].
 
В игре v3+ опционально используется видео в контейнере mkv с кодеком vp9.

Latest revision as of 12:23, 22 May 2024

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

Внимание! Техподдержка издателя не дает справок по работе представленного в Золотом Издании инструментария (техподдержки теперь вообще нет, за истечением времени). Разработчики не несут ответственности за неверное функционирование игры и повреждения данных, вызванных некорректным использованием инструментария.

Пакет материалов включенный в состав Золотого Издания содержит исходные версии игровых моделей (в формате 3DS Max 5), а также набор инструментов для модификации.

Модели находятся в архиве каталоге установки игры \Bonus\Modification\Models.exe (скачать: root drive Surmap dropbox). Для установки материалов скачайте и укажите каталог для распаковки.

Кроме этого, в архиве (скачать: drive) находится инструмент для редактирования и создания новых миров для игры. Аналогично, для установки Surmap необходимо воспользоваться ссылкой и указать каталог для распаковки данных.

Остальные (официальные) инструменты модификации (скачать: drive dropbox) и включает:

  • meshexp.dle - Экспортер для 3DS Max 5
  • WinVG.exe - утилита для просмотра просмотр моделей в игровом формате (m3d)


Миры (карты)

Создание и редактирование миров

Миссии

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

Модели

Редактирование моделей

Эффекты

FX_tool

Официальный редактор EffectTool

Устаревший официальный редактор, который нигде не публиковался открыто. На смену ему пришел FX_tool.

Официальный редактор FX_tool

Эффекты создаются редактором FX_tool. Редактор использовался К-Д Лаб при создании эффектов игры, никогда публично не публиковался. На данный момент в свободном доступе отсутствует.

Сценарий

Цепь Миров

Archive.

Для редактирования файла scenario.hst используйте редактор сценариев (в разработке, на этот раз Da_Net_Naverno создатель), содержащий окно предварительного просмотра. Инструкция в справке программы.

Тексты

Чтобы редактировать тексты игры, воспользуйтесь btdbEditor'ом (автор - Don Reba). Просто откройте файл [папка с игрой]\RESOURCE\LocData\Russian\Text\Texts.btdb

Мультимедиа

Голос

В кампании (формат Wav): [папка с игрой]\RESOURCE\LocData\Russian\Voice. Внутри 2 папки (формат ogg): Briefings - брифинги, Tips - голос в миссиях (т. е. непосредственно на самом мире).

Музыка

В папке [папка с игрой]\RESOURCE\Music , в формате ogg.

Видео

В игре v1.00-1.03 используется формат RAD Game Video (.bik), открывается в RAD Video Tools и MPC-HC.

В игре v3+ опционально используется видео в контейнере mkv с кодеком vp9.