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

From Perimeter Community Wiki
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 12: Line 12:
* meshexp.dle - Экспортер для 3DS Max 5
* meshexp.dle - Экспортер для 3DS Max 5
* 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 Статья Игромании]


==Миры==
==Миры==

Revision as of 09:58, 26 April 2024

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

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

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

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

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

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

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


Миссии

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

Модели

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


Миры

Полезное для создания миров

Для создания маленького мира на троих, для ровного расположения игроков на карте, координаты следующие:
Player1: x1024, y292
Player2: x1657, y1389
Player3: x390, y1389

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

Редактор миров SurMap

Выберите мир для редактирования из папки Worlds через меню File -> Open World As... (для создания нового мира необходимо открыть пустой шаблон в папке 001_EMPTY 4x4 или 001_EMPTY 2x2).

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

6cgg6vX.jpg Перемещение по поверхности мира.

5Bvo8cD.jpg Приближение или удаление камеры.

sRWJZvR.jpg Тулзер (инструмент для насыпания\выкапывания. Параметры тулзера (радиус, форма и свойства кисти) настраиваются на вспомогательной панели внизу экрана.

AcJYLsX.jpg Установка на мир готовой фигуры (пирамида, параметры настраиваются на вспомогательной панели внизу экрана).

pcN9voH.jpg Установка на мир готовой фигуры (круг, параметры настраиваются на вспомогательной панели внизу экрана).

DbeX2D8.jpg Работа с зеро-слоем, внизу экрана необходимо установить радиус инструмента.

P3WvOur.jpg Установка модели из списка внизу экрана.

hIXVFKO.jpg Наложение карты высот (карту необходимо выбрать из списка внизу экрана, после корректного размещения на мире нажать кнопку Put для перевода карты в рельеф).

lobi9pr.jpg Инструмент размытия контуров.

aPIp8AP.jpg Гео-инструмент для работы с рельефом (параметры настраиваются в нижней части экрана).

ixHbFYR.jpg Инструмент позволяет выделить прямоугольный участок мира и работать только в выделенной области.

По завершению работы с миром необходимо сохранить изменения через команду File -> Open World As... (для записи нового мира необходимо предварительно создать пустой каталог в папке Worlds). После завершения подготовки ландшафта можно наложить текстуру поверхности на мир. Предварительно подготовленную текстуру в формате TGA необходимо положить в папку мира, сохранив файл с текстурой под названием AllDamMap.tga (в папку также необходимо скопировать служебный файл leveledSurfaceTexture.tga - текстуру зерослоя).

SBqbcXl.jpg Данный инструмент используется в редакторе миров для наложения текстуры на готовый мир.

Все новые миры необходимо прописывать в списке миров - файле RESOURCE\Worlds\worlds.prm, в котором первая строка содержит количество миров, все остальные содержат имя файла и название папки (относительный путь к папке с миром).

Официальный редактор геотекстур – GeoTool

Редактор геотекстур GeoTool
Редактор не предназначен для редактирования текстуры поверхности (шкурки мира).
Внимание! В официальной поставке редактора не хватает ряда текстур в папке GeoTx. При запуске редактора возникают ошибки, где написан путь и название отсутствующей текстуры. Следует пройти по тому пути, продублировать близкий по названию файл и дать ему название из ошибки и перезапустить программу. Проделываем данное действие пока ошибки не пропадут.

Геотектуры - текстуры недр спанжа, обножаемые ковшами при терроформировании. Высота, на которой текстура поверхности сменяется на геотекстуру задается специальной картой глубины внутри output.vmp.

Для работы с геотекстурами на мире используется инструмент GeoTool.exe.
После запуска вам предложат выбрать мир из списка (список формируется с помощью worlds.prm, поэтому все новые миры необходимо предварительно прописать в этом файле).
Затем необходимо установить в верхней панели (включающей ряд слотов с установленным по умолчанию значением Empty) значения Clear, Mixer или Painter (список возможных значений выводится по правому клику).
Чтобы загрузить текстуру - выбираем слот левым кликом, затем выбираем текстуру в списке слева и переносим пункт списка на экран, зажав левую клавишу.

Если вам требуется открыть карту, то слоты геотекстур окажутся пустыми, чтобы загрузить геотекстуры карты нужно нажать "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

Perimeter Map Compiler

Внимание, редактор представляет собой компилятор карт.

Требование к карте глубины, grayscale или RGB, 16bit предпочтительно tiff (tif не поддерживается).

Создаются компилятором карт (создатель - 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), то предлагаю свою схему установки мира, которая проверена и отработана.

  1. Прежде всего делаем запасную копию файла ПапкаПериметра\Resource\Worlds\worlds.prm.
  2. Затем в PMC открываем файл проекта, жмем "Install Map", закрываем PMC.
  3. Удаляем модифицированный PMC'ом вышеупомянутый worlds.prm, ставим на его место свою копию.
  4. Открываем worlds.prm, плюсуем к числу в самом начале файла единицу, затем пишем английское имя мира в самом конце списка наименований, с сохранением всех отступов (делайте их пробелами или Tab'ами, не суть важно). Имя мира должно быть написано заглавными буквами.
  5. В каталоге ПапкаПериметра\Resource\Worlds\ переименовываем папку с добавленным вами миром (UNREGISTERED) в то имя, которое было указано в worlds.prm.
  6. В папке ПапкаПериметра\Resource\Multiplayer\ переименовываем файлы UNREGISTERED с расширениями .dat, .gmp и .spg в имена, аналогичные имени, указанному в worlds.prm.
  7. Открываем в этой же папке .spg-файл Блокнотом. Он может довольно-таки долго загружаться. Меняем в самом начале в строке "worldName = "UNREGISTERED";" слово UNREGISTERED на world.prm-овское имя.
  8. В том же файле, после блока с именами, цветами и фракциями игроков, меняем в строке "originalSaveName = "resource\\battle\\UNREGISTERED.spg";" слово UNREGISTERED на world.prm-овское имя.
  9. Проделываем пункт 6 еще раз, но уже в папке ПапкаПериметра\Resource\Battle\ .
  10. Проделываем пункты 7 и 8 с .spg-файлом в папке ПапкаПериметра\Resource\Battle\ .
  11. Повторяем пункты 9 и 10 с файлами в папке ПапкаПериметра\Resource\Battle\Survival\ .
  12. Открываем btdbEditor'ом файл ПапкаПериметра\Resource\LocData\Russian\Text\Texts.btdb. В самом конце найдите пункт MapNames.UNREGISTERED, выделите его, и нажмите пункт меню "Edit -> Remove Item".
  13. Нажимаем пункт меню "Edit -> Add Item". В поле "Value Name" введите world.prm-овское имя мира (вид должен быть такой: MapNames.WORLDNAME). В поле "Value Data" вводите русскоязычное имя мира (рекомендуется заглавными буквами). Нажимайте кнопку "ОК".
  14. . Сохраняем файл с текстом на место прежнего. Впрочем, никогда не будет лишним сделать запасную копию файла. Можете запускать Периметр и любоваться на свой добавленный мир.

P.S.: обратите внимание, у вас может не работать без дополнительной обработки режим выживания (то есть через ~10 секунд после запуска засчитывается автопобеда)! Также возможен такой глюк, что на добавленном вами мире абсолютно все будет черным и невидимым. Пока что способ решения найден только один: отключить в настройках графики самозатенение.

P-Launcher

Синхронизация карт в формате "Кустов" созданных в редакторе сообщества (разработчитк - Don Reba). Фактически, даже если бы проект был завершен, сайт rul-clan.ru все равно давно не работает, а значит и синхронизация карт с сервером тоже.

Статус: заброшен ¯\_(ツ)_/¯

Экстрактор текстур и карты глубины из игровых карт

Разработанный @!!ex’ом конвертер VMPToTIFF (drive) предназначен исключительно для извлечения растровых текстур и карты глубины из игровых карт (World/NAME_MAP/_.vmp) для использования в своих целях. Для того, чтобы извлечь текстуры из карты игры, нужно .VMP файл перетянуть на файл VMPToTIFF.exe. В папке с бинарником .VMP появятся текстуры и карта высоты данной игровой карты.

Эффекты

описание

Официальный редактор 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.

Видео

В формате RAD Game Video (.bik), открывается в RAD Video Tools и MPC-HC.