Russian Homeworld Wiki
Advertisement

При создании своих кораблей крайне важно также и правильно их сконфигурировать.
Homeworld 2 предлагает достаточно возможностей для настройки поведения игровых моделей. Конечно, не на всё хватает предоставленных фишек, но на большую часть - явно.
В игре есть три похожих по настройкам типа "кораблей":

  1. Сами корабли: /Data/ship/*, *.ship-файл - это настройка;
  2. Подсистемы: /Data/subsystems/*, *.subs-файл - это настройка;
  3. Ракеты: /Data/missiles/*, *.miss-файл - это настройка;

Они по сути являются *.lua-файлами, поэтому в них работают все lua-фишки.
Ниже даются объяснения, что значит та или иная функция.

Типы данных[]

В дальнейших описаниях вместо конкретных данных будут встречаться записи вроде bFlag, что является "кодовым" обозначением переменной, состоящей из буквы для типа переменных и слова для названия.

  • b, boolean - может принимать значения "true/да"(1) или "false/нет"(0);
  • i, integer - только целые положительные числа;
  • f, float - можно вписывать дроби;
  • s, string - текстовые данные, писать в "кавычках";

Общие настройки[]

То, с чего начинается любой корабль:

NewShipType = StartShipConfig() -- точнее, это корабль;
  ИЛИ
NewShipType = StartMissileConfig() -- а это начало конфига ракеты;
NewShipType.controllerType = <sControllerType>

Эта функция говорит движку, что это:

  • Ship - корабль;
  • Missile - ракета;
  • "None" - никем не контроллируется, обломок;

Содержимое файла *.ship[]

Файлы корабля, чтобы игра их распознала, должны храниться в папке /Data/ship, в каталоге с характерным именем "префиксрасы_названиекорабля", а его настройки - в этой папке, в *.ship-файле, у которого должно быть то же имя, что и папки. Впрочем, это касается всего содержимого каталога.

Базовые настройки[]

NewShipType.displayedName = <sShipName> -- название корабля при его выборе;
NewShipType.sobDescription = <sDescription> -- описание корабля;

Названия и описания могут быть локализированы.

NewShipType.blobName = <sBlobName> -- специальное название для корабля, появляется при наведении на него мышкой;
NewShipType.blobNamePriority = <iPriority>
NewShipType.isTransferable = <bFlag> -- можно ли отдать корабль противнику, да(1)/нет(0);
NewShipType.militaryUnit = <bIsMilitary> -- военный ли юнит, нужно для выбора только военных юнитов;
NewShipType.useEngagementRanges = <bFlag> -- If 1, can use engagement ranges. If 0, it can't;
NewShipType.unitCapsNumber = <iUnitCapsNumber>
NewShipType.addedUnitCaps = <iUnitCapsNumber>

Неиспользуемые параметры; возможно, когда-то планировалось сделать ограничение кораблей по экипажу а-ля ХВК;

Масса корабля[]

Изначально урон от столкновения отключен, чтобы кампания работала - иначе рабочие Таниса взрываются.

NewShipType.collisionMultiplier = <fMultiplier> -- коэффициент урона при столкновении;
NewShipType.mass = <fMass>-- масса корабля, для определение урона в столкновении;

Используются такие значения:

  • 10 - истребители и ниже;
  • 15 - корветы;
  • 20 - турели;
  • 40 - коллектор, тягач;
  • 50 - дохлый тягач;
  • 100 - фрегат;
  • 300 - эсминец Хранителей;
  • 500 - эсминец;
  • 1к - суперкэпы;
  • 1.5к - Саджуук;
  • 2к - Мамы и верфи, а также тюремная станция вэйгров;
  • 5к - всякие дереликты и астероиды;
  • 20к - комстанция вэйгров;

Строительство[]

NewShipType.buildCost = <iCost> -- стоимость корабля;
NewShipType.buildTime = <fTime>-- время постройки корабля, в секундах;
NewShipType.buildPriorityOrder = <iOrder> -- чем меньше значение, тем выше в списке строящих кораблей будет показываться судно;

Здоровье и броня[]

NewShipType.maxhealth = <iHealth> -- хитпойнты корабля;
NewShipType.regentime = <fTime> -- время, нужное для регенерации "здоровья" от 0 до максимума;
NewShipType.minRegenTime <fTime> -- минимальное время, нужное для регенерации (вероятно, при воздействии усилителей);
NewShipType.sideArmourDamage = <fMultiplier> -- коэффициент урона при ударе в бока корабля;
NewShipType.rearArmourDamage = <fMultiplier> -- коэффициент урона при ударе корабля сзади;
NewShipType.dustCloudDamageTime = <fTime> -- время до полного уничтожения (?) при нахождении в пылевых облаках;
NewShipType.nebulaDamageTime = <fTime> -- время до полного уничтожения (?) при нахождении в радиоактивных облаках;

Формации и звенья[]

Формации смотреть в специально отведённом файле (TODO: указать где и как, создать страницу, посвящённую созданию формаций).

NewShipType.SquadronSize = <iSize> -- количество кораблей в звене;
NewShipType.formationSpacing = <fDistance> -- расстояние между кораблями в формации, параметр может отсутствовать, если корабль - одиночка;
NewShipType.passiveFormation = <sFormationName> -- формация при заданной пассивной тактике;
NewShipType.defensiveFormation = <sFormationName> -- формация при заданной нейтральной тактике;
NewShipType.aggressiveFormation = <sFormationName> -- формация при заданной агрессивной тактике;
NewShipType.paradeData = <sName> -- Supports Parade, such as Carrier, Building emplacements, etc. (e.g. "vgr_mothership_parade");

Скорости и движение[]

NewShipType.thrusterMaxSpeed = 161 -- standard is 161; anticaps have 150; capture frigates - 230;
NewShipType.thrusterAccelTime = 7
NewShipType.thrusterBrakeTime = 2
NewShipType.mainEngineMaxSpeed = 161 -- is the same with the .thrusterMaxSpeed;
NewShipType.mainEngineAccelTime = 8
NewShipType.mainEngineBrakeTime = 2
NewShipType.rotationMaxSpeed = 22 -- usual 22, HICF got 35;
NewShipType.rotationAccelTime = 0.75 --standard is 0.75, HICF got 0.4;
NewShipType.rotationBrakeTime = 0.4 -- hiigaran standard is 0.4, HICFr got 0.2; vaygr got 0.3 ;
NewShipType.thrusterUsage = 0.5 --standard is 0.5, capture frigates got 0.75;
NewShipType.accelerationAngle = 40
NewShipType.mirrorAngle = 0
NewShipType.secondaryTurnAngle = 0
NewShipType.maxBankingAmount = 20
NewShipType.descendPitch = 20
NewShipType.goalReachEpsilon = 30
NewShipType.slideMoveRange = 100
NewShipType.tumbleStaticX = 10
NewShipType.tumbleStaticY = 20
NewShipType.tumbleStaticZ = 5
NewShipType.tumbleDynamicX = 2
NewShipType.tumbleDynamicY = 10
NewShipType.tumbleDynamicZ = 5
NewShipType.tumbleSpecialDynamicX = 2
NewShipType.tumbleSpecialDynamicY = 10
NewShipType.tumbleSpecialDynamicZ = 5
NewShipType.relativeMoveFactor = 3 --all but VIFr with 2;
NewShipType.swayUpdateTime = 4 --Hiigaran have 4, Vaygr have 2;
NewShipType.swayOffsetRandomX = 10
NewShipType.swayOffsetRandomY = 10
NewShipType.swayOffsetRandomZ = 10
NewShipType.swayBobbingFactor = 0.05 --hiigaran standard is 0.05, HMFr got 0.1, HFFr - 0.15; vaygr all have 0.15;
NewShipType.swayRotateFactor = 0

Орудийный расчёт[]

NewShipType.useTargetRandom = 1
------------------- .targetRandomPoint* parameter is individual;
--NewShipType.targetRandomPointXMin = -0.3
--NewShipType.targetRandomPointXMax = 0.4
--NewShipType.targetRandomPointYMin = -0.35
--NewShipType.targetRandomPointYMax = 0.6
--NewShipType.targetRandomPointZMin = -0.75
--NewShipType.targetRandomPointZMax = 0.85
--------------------

Принадлежность к "семьям"[]

NewShipType.MinimalFamilyToFindPathAround = "MotherShip"
NewShipType.BuildFamily = "Frigate_Tdn" -- depends on race which frigate belongs to;
NewShipType.AttackFamily = "Frigate" --could be another family, like "capturer", for HMFr;
NewShipType.DockFamily = "Frigate"
NewShipType.AvoidanceFamily = "Frigate"
NewShipType.DisplayFamily = "Frigate"
NewShipType.AutoFormationFamily = "Frigate"
NewShipType.CollisionFamily = "Big"
NewShipType.ArmourFamily = "MediumArmour"
NewShipType.UnitCapsFamily = "Frigate"
NewShipType.UnitCapsShipType = "CaptureFrigate" --this line may not be present if no special count on them;

Информация для AI[]

NewShipType.fighterValue = 0
NewShipType.corvetteValue = 0
NewShipType.frigateValue = 10 --usually is 10, but if powerful frigate, then 12;
NewShipType.neutralValue = 0
NewShipType.antiFighterValue = 0
NewShipType.antiCorvetteValue = 0
NewShipType.antiFrigateValue = 12
NewShipType.totalValue = 10 --usually is the same with the .frigateValue;

Визуальное отображение[]

NewShipType.retaliationRange = 5500
NewShipType.retaliationDistanceFromGoal = 160
NewShipType.mouseOverMinFadeSize = 0.045
NewShipType.mouseOverMaxFadeSize = 0.1
NewShipType.meshRenderLimit = 13000
NewShipType.dotRenderLimit = 10
NewShipType.visibleInSecondary = 1
NewShipType.minLOD = 0.25 --usual is 0.25, except VIFr - 0.3;
NewShipType.goblinsStartFade = 1500
NewShipType.goblinsOff = 1500
NewShipType.upLOD = 2000
NewShipType.upLOD = 2500
NewShipType.downLOD = 2015
NewShipType.downLOD = 2515
NewShipType.minimumZoomFactor = 0.6 -- anticaps got 0.6; assaults with torpedo got 0.63 (anti-strikecraft); specials  got 0.5;
NewShipType.selectionLimit = 150000
NewShipType.preciseATILimit = 0
NewShipType.selectionPriority = 75
NewShipType.healthBarStyle = 1
NewShipType.nbRestrictedHardpoints = 1
NewShipType.alternativeHyperspaceA = "/etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN_MS" -- альтернативный эффект гиперпрыжка (?);

Tactical Overlay[]

ТО - тактическое отображение, пояснительная графика к кораблям.

NewShipType.TOIcon = "Diamond"
NewShipType.TOScale = 1
NewShipType.TODistanceFade0 = 9000
NewShipType.TODistanceDisappear0 = 7000
NewShipType.TODistanceFade1 = 4500
NewShipType.TODistanceDisappear1 = 3500
NewShipType.TODistanceFade2 = 12000
NewShipType.TODistanceDisappear2 = 35000
NewShipType.TOGroupScale = 1
NewShipType.TOGroupMergeSize = 0

NLIPS[]

NLIPS - эта штука увеличивает размер корабля издали (чтобы истребители можно было разглядеть).

NewShipType.nlips = 0.000125 --usually is 0.000125, except HMFr - 0.0001 - and assaults - 0.00015;
NewShipType.nlipsRange = 6000
NewShipType.nlipsFar = 0.0001 --usually is 0.0001, except assaults & VHMFr - 0.00015;
NewShipType.nlipsFarRange = 10000

Стратегический экран[]

SM - менеджер сенсоров или стратегический экран.

NewShipType.SMRepresentation = "HardDot" -- или меш или харддот: что подгружается в Менеджере Сенсоров, точка или моделька корабля;

Возможны варианты:

  • Invisible - для ракет и прочего;
  • Harddot - для всякой эскадрильной мелочи;
  • Mesh - для суперкапов;
--NewShipType.SMHighlightDistMin = 20000 -- походу, только для меша;
--NewShipType.SMHighlightDistMax = 30000 -- походу, только для меша;

Сенсоры[]

NewShipType.visualRange = 1000 -- радиус, на котором враги становятся видны на тактическом экране;
NewShipType.prmSensorRange = 5000 -- радиус, на котором враги становятся видны на стратегическом экране;
NewShipType.secSensorRange = 6000 -- радиус, на котором засекаются подходящие корабли на стратегическом экране;
NewShipType.detectionStrength = 1 -- сила сенсоров, от 1 до 4; при 4ёх видны все невидимки;

Докинг[]

NewShipType.dockTimeBetweenTwoFormations = 1 -- время задержки после приёма первого звена лёгких кораблей;
NewShipType.dockTimeBeforeStart = 2
NewShipType.dockNrOfShipsInDockFormation = 1
NewShipType.dockFormation = "delta" -- формация для влёта в доки;
NewShipType.queueFormation = "dockline" -- формация ожидания докинга;
NewShipType.dontDockWithOtherRaceShips = 1 -- не стыковаться с кораблями другой расы, да(1)/нет(0);
NewShipType.ignoreRaceWhenDocking = 0 -- игнорировать расу при докинге, да(1)/нет(0);

Последние два параметра вызывают вопрос. Вероятно, последний параметр намекает на расу союзника, а предпоследний - на, собственно, тип корабль. То есть, при указанных параметрах, нельзя будет посадить звено хиигарянских истребителей на носители союзника-вэйгра, даже если у него будет захвачен хиигарянский носитель.

Запуск[]

NewShipType.launchTimeBetweenTwoFormations = 1 -- время между запуском звеньев;
NewShipType.launchTimeBeforeStart = 2
NewShipType.launchNrOfShipsInDockFormation = 1
NewShipType.launchFormation = "delta" -- формация лёгких кораблей при вылете из дока;

Загрузка модели[]

Для корабля:

LoadModel(NewShipType, 1) --загружаем модель из той же папки; хз, чо значит "1";
  ИЛИ
LoadSharedModel(NewShipType, "Hgn_Shipyard") -- прописываем в случае, если используем чужую модель;

Для ракеты:

LoadHODFile(NewShipType, 1)

Повреждения и смерть[]

NewShipType.battleScarMaxTriBase = 75
NewShipType.battleScarMaxTriInc = 100
NewShipType.sobDieTime = 1
NewShipType.sobSpecialDieTime = 1
NewShipType.specialDeathSpeed = 40
NewShipType.chanceOfSpecialDeath = 0
NewShipType.deadSobFadeTime = 0
SpawnSalvageOnDeath(NewShipType,
  "Slv_Chunk_Lrg03", --тип обломка, берётся в папке /Data/resource/salvage/*, см. также здесь;
  1,
  0.75,
  0, 0, 0, 50,
  0, 0, 0, 200,
  0, 0, 0, 50,
  0, 0, 0, 50
)

Выхлоп двигателя[]

Полоса за двигателем[]

NewShipType.trailLinger = 4 -- vaygr have 2, hiigaran have 4, except HDFFr, which is also 2;
setEngineTrail(NewShipType,
  0, 15,
  "trail_ribbon.tga",
  0.2, 0.5, 0.025, 8
)

Пламя из движка[]

setEngineBurn(
  <rNewObjectType>, -- NewShipType для корабля или NewMissileType или ракеты;
  <iSparksPerPath>, -- количество сфер на путь. Траектория пути задается в файле .hod;
  <fSpeedLow>, -- стартовая скорость бегающей сферы;
  <fSpeedHigh>, -- конечная скорость бегающей сферы;
  <fSparkSize>, -- диаметр первой сферы в цепочке;
  <fSpeedSparkSize>, -- масштаб стартовой вспышки; умножается на <fSparkZize>;
  <fFlareMin>, -- при взгляде на двигатель в направлении с носа на корму, этот параметр уменьшает яркость свечения <fFlareSize>;
  <fFlarePos>, -- смещение основного свечения;
  <fFlareSize> -- диаметр основного свечения;
)
Для примера: setEngineBurn(NewShipType, 20, 0.3, 2, 30, 2, 0.5, 0, 100)

Сияние выхлопа[]

setEngineGlow(NewShipType,
  1, 1, 1.02, 20, 300, 50, 1.5, -- standard for all frigates;
  {0.27, 0.47, 0.69, 0.25,} -- цвет выхлопа, в формате {RGB + прозрачность}, от 0 до 1; 
)

Расовое сияние:

    • {0.27, 0.47, 0.69, 0.25,} -- для хиигарянский кэпов, где-то RGB(69,120,176);
    • {0.92, 0.21, 0.09, 0.25,} -- для вэйгрских кэпов, где-то RGB(235,54,23);

Озвучка корабля[]

loadShipPatchList(NewShipType,
  "data:sound/sfx/ship/", --указываем папку, где хранятся звуки;
  0, "Vaygr/Carrier/Engines/VDestroyerEng", "", --указываем первый звук и точку привязки (пустой слот, значит, весь корабль);
  1, "Vaygr/Carrier/Ambience/VDestroyerAmb", "", --указываем второй звук и точку привязки;
  3, "Megaliths/RandomEmit/HANGAR_EMITTERS", "HardPoint_Production1_Position" --хз, почему здесь "3" (может, был 3ий звук, но его потом удалили), но логика та же; итд;
)

= Abilities[]

В следующих строчках будут описаны параметры абилок через комментарии к коду; если комментариев нет - значит, хз, чо за параметр, то есть, требуется экспериментатор для проверки.

Стандартные абилки[]

addAbility(NewShipType, "ParadeCommand", 1) --цифра показывает, доступно ли по умолчанию; возможность к парадным построениям (?) - есть у всех кораблей;
addAbility(NewShipType, "MoveCommand",
  1,--доступно ли по умолчанию, проще говоря, способен ли двигаться, если нет - то зачем прописывать? );
  0 -- этот параметр показывает, сколько раз может двигаться корабль; если 0 - то бесконечно, если 1, то 1 раз; неясно, это вкл/выкл, или циферька показывает количество перемещений до полной остановки;
)
addAbility(NewShipType, "WaypointMove") --судя по всему, способность двигаться по маршрутам; есть у всех "неодноразовых" кораблей;
addAbility(NewShipType, "GuardCommand", --способность "эскорта";
  1,--доступно ли по умолчанию;
  3000, --походу, расстояние; то ли стандартное, то ли максимальное от эскортируемого;
  600 --эскадрильи и коллекторы: 500; фрегаты: 600, кроме ДФГ(300); эсминцы и контроллеры: 800; верфи, "линейки" и носители: 1000; возможно, минимальное расстояние от эскортируемого;
)
addAbility(NewShipType, "RetireAbility", --способность разбираться на запчасти;
  1,--доступно ли по умолчанию;
  1 -- единица у всех кораблей, начиная с фрегат-класса и выше, за исключением, флагманов и верфей;
)
Атака/CanAttack[]

Функция

addAbility("NewShipType", "CanAttack", <bIsActive>, <iNumberOfShips>, <bKamikaze>, <bInterpolate>, <fSplitDelay>, <fDistanceMultiplier>, <sAttackFamilies>, <sAttackStyle>, <tStyleException1>, ..., <tStyleExceptionN>)

Описание

addAbility(NewShipType, "CanAttack", --способность атаковать;
  1, --доступно ли по умолчанию (0 - нет, 1 - да);
  1, --количество кораблей в микроформации, на которые расходится звено в атаке;
  0, --может ли корабль идти на таран (0 - нет, 1 - да);
  1, --<bInterpolate>: can the ship interpolate targets?;
  0.35, --задержка в секундах перед разделением на формации;
  1.5, --умножитель расстояния до цели, с которого корабль начинает использовать определённый стиль атаки;
  "Capturer, Frigate, SmallCapitalShip, BigCapitalShip, Mothership, Utility, Corvette", --приоритет атаки кораблей, от высшего к низшему;
  "Frontal",  --главный стиль атаки для данного корабля
  {SubSystem = "FrontalVsSubSystem",},  --стиль атаки для определённых типов кораблей;
  ... --и дополнять дальше по вышеозначенным образцам, семью атакуемых смотреть в familylist.lua, тип атаки - хз;
)

Стили атаки

  • Frontal;
  • FrontalVsSubSystem;
  • MoveToTargetAndShoot;
  • ...;

Свою тактику можно прописать в <название файла и путь; линк на статью о создании>.

Производство[]

addAbility(NewShipType, "CanBuildShips",
  1, --вероятно, параметр "разрешения" - доступно ли по умолчанию;
  "Fighter_Hgn, ..., Corvette_Hgn,", --здесь перечисляем, корабли каких семейств можно строить, смотреть в familylist.lua;
  "Utility, ..., Fighter," --здесь перечисляем какие типы кораблей вообще можно строить, смотреть в familylist.lua;
)

Ангары[]

addAbility(NewShipType, "ShipHold",
  <bIsActive>, -- доступно ли по умолчанию, требуется для сброса ресурсов рабочими, автозапуска;
  <fDropoffRate>, -- количество перечисляемых ресурсов в секунду при стыковке рабочими;
  <iShipholdSize>, -- общее количество мест в доке;
  <sEffectName>, -- название эффекта, используемого для rally point (?);
  <sDockFamilies>, -- здесь перечисляем какие типы кораблей можно принимать на борт, смотреть в familylist.lua;
  <fRepairRate>, -- количество чинимых хитпойнтов в секунду или шаг;
  <{%название_семьи% = "%число%",}> -- исключения <fRepairRate> для перечисленных семейств кораблей (до 4);
)
addAbility(NewShipType, "CanDock",
  <bIsActive>, -- доступно ли по умолчанию;
  <bByPlayer> -- может ли игрок пользоваться этой возможностью;
)
addAbility(NewShipType, "CanLaunch") -- может выпускать корабли;

Обеспечение[]

  • Добыча ресурсов
addAbility(NewShipType, "Harvest",
  1, --доступно ли по умолчанию;
  200, --количества рублей в трюме;
  8, --количество РУблей, добываемых в секунду;
  300 --расстояние до астероида при добыче
)
  • Собирание обломков
addAbility(NewShipType, "SalvageCommand", 1)  -- цифра показывает, доступно ли по умолчанию;

Чтобы обломок можно было забрать, ему нужно прописать эту ability:

addAbility(NewShipType, "CanBeSalvaged")
  • Ремонт
addAbility(NewShipType, "RepairCommand",
  0, --доступно ли по умолчанию;
  500, 9,
  {SuperCap = "18",},
  ... --искать в familylist.lua, хз, чо значат циферьки;
  {Flagship = "18",}
)

Чтобы корабль можно было починить, ему нужно прописать эту ability:

addAbility(NewShipType, "CanBeRepaired")

Гиперпространство[]

  • Гипер-прыжок
addAbility(NewShipType, "HyperSpaceCommand",
  0, --доступно ли по умолчанию;
  1, 200, 500, 0, 3
) -- hiigarans have (0, 1, 200, 500, 0, 3), vaygr  have (0, 1, 500, 1000, 0, 3);
  • Использование гипер-воронок
addAbility(NewShipType, "HyperspaceViaGateCommand",
  1, --доступно ли по умолчанию;
  3, 1, 0.3
) --стандартные параметры для всех кораблей; максимальный класс корабля - эсминец;
  • Формирование гипер-канала
addAbility(NewShipType, "FormHyperspaceGateCommand",
  1, --доступно ли по умолчанию;
  1000, 500, 1000, 0
)
  • Гипер-ингибитор
addAbility(NewShipType, "HyperspaceInhibitorAbility",
  0, --вероятно, параметр "разрешения" - доступно ли по умолчанию (нет, т.к. нужен модуль);
  12000 -- радиус ингибитор-поля;
)

Другие умения[]

  • Стэлс
addAbility(NewShipType, "CloakAbility",
  0, --вероятно, параметр "разрешения" - доступно ли по умолчанию (нет, т.к. нужен модуль);
  2, 2000, 4000, 3, 100, 1, 1000
)
  • Пинг
addAbility(NewShipType, "SensorPing",
  0, --доступно ли по умолчанию;
  1, 10, 2.5
)
  • ЭМИ
addAbility(NewShipType, "SpecialAttack",
  0, --доступно ли по умолчанию;
  "EMP" --вероятно, тип специальной атаки, см. Data\Scripts\weaponfire;
)

Для защиты от этого умения атакуемым кораблям нужно прописать:

addShield(NewShipType,
  "EMP", -- тип атаки, см. Data\Scripts\weaponfire;
  310, --крутость щита;
  20 --время в секундах на восстановление;
)
  • Абордаж
addAbility(NewShipType, "CaptureCommand",
  1, --доступно ли по умолчанию;
  -50
)

Чтобы корабль можно было захватить, ему нужно прописать:

addAbility(NewShipType, "CanBeCaptured", 
  45, --usually is used 45, but HICFr, HFFr & HTFr are 30;  generally speaking, hiigaran battle frigates;
  0.1 -- usually is used 0.1, but HMFr & HDFFr got 0.5;
)
  • Силовое поле
AddShipAbility(NewShipType, "DefenseField",
  1, --доступно ли по умолчанию;
  "ThisShipOnly", --ареал распространения (смотри "Усилители");
  0
)
addAbility(NewShipType, "DefenseFieldShieldAbility", --имеется большое подозрение, что эта фича связана с синглплеерной фишкой защиты от радиационного поля;
  0, --доступно ли по умолчанию;
  1200, 0, 0
)

"Усилители"[]

В общем виде это дело выглядит так:

AddShipMultiplier(NewShipType,
  "WeaponAccuracy", --тип усиления;
  "OwnShipsWithinRadiusExcludingThisShip", --ареал распространения;
  "Linear", --график увеличения статов (неясно), линейное;
  1.15, 1.15, --коэффициенты, неясно, почему два;
  4500 --расстояние распространения
)

Было бы интересно попробовать, какие функции запрограммировали ещё в движок. Для примера:

  • Linear: f(x)=ax+b;
  • Quadratic: f(x)=ax2+bx+c;
  • Cubic: f(x)=ax3+bx2+cx+d;
  • Exponential: f(x)=ax;

Правда, всё равно не понятно, почему указано два коэффициента. Это намёк на x,y, какую-то геометрическую фигуру (овал, к примеру), двухаргументную функцию, полярные координаты или что?.. Или просто - коэффициенты для передней/задней или нижней/верхней полусфер?

Типы усиления[]

Параметры, встречающиеся в research.lua и требующие проверки, будут отмечены буквой R.

Жизненные параметры[]
MAXHEALTH -- изменение хитпойнтов кораблей; R
HealthRegenerationRate -- изменение скорости регенерации хитпойнтов; R
NebulaSensitivity -- изменение чувствительности к туманностям; R
DustCloudSensitivity -- изменение чувствительности к пылевым облакам;
ShipHoldRepairSpeed -- Modifies the speed at which ships are repaired when docked
ShieldRegenerationRate -- How fast shields regenerate.
MaxShield -- Modify the shield capacity
DefenseFieldTime -- Modify how fast a ship uses up its defense field capacity. < 0 means more time spent shielding and faster recharge, > 1 means less time for shielding and slow recharge.
DustCloudSensitivity -- Sensitivity to DustCloud charge damage (damage ships inside dustclouds). If this one is set to 0, no damage is taken. If set to 1, full damage is taken.
NebulaSensitivity -- Sensitivity to Nebula charge damage (damage ships inside nebulas receive). If this one is set to 0, no damage is taken. If set to 1, full damage is taken.
Скорость[]
Speed -- Maximum speed multiplier. Influences the speeds and the acceleration of the ship. (If you lower the speed, the ships take longer to brake as well, as the acceleration is lowered, too)
MaxSpeed -- Influence only the maximum speeds, and not the acceleration of the ship. This makes the ship actually able to stop when the maxspeed is lowered.
BUILDSPEED -- изменение скорости строительства; R
MAXSPEED -- изменение скорости кораблей; R
Оружие[]
WeaponAccuracy -- изменение точности орудий;
WeaponDamage -- изменение урона от орудий;
Capture -- изменение скорости захвата; R
Гипер-прыжки[]
HyperspaceCost -- изменение стоимости прыжка; R
HyperspaceRecoveryTime -- изменение времени "оживления" корабля после гипер-прыжка; R
HyperspaceTime -- изменение времени, проводимого кораблём в гиперпространстве; R
HyperSpaceAbortDamage -- изменение процента повреждений, получаемых кораблём при попадании на вражеский ингибитор; R
Сенсоры[]
VisualRange -- изменение радиуса видимости в тактическом экране; R
PrimarySensorsRange -- изменение первичного радиуса видимости; R
SecondarySensorsRange -- изменение вторичного радиуса видимости; R
SensorDistortion -- ухудшение вражеских сенсоров;
CloakingStrength -- Modify the cloaking value used when comparing vs. detection attempts. Bigger numbers mean harder to spot.
CloakDetection -- Modify the detection value used to compare against cloaking
CloakingTime -- Modify how fast a ship uses up its cloak capacity. < 0 means more time spent cloaking and faster recharge, > 1 means less time for cloaking and slow recharge.
SensorDistortion -- Sensor distortion multiplier. This multiplier makes ships harder (if multiplier is [0..1]) or easier (if multiplier is greater than 1) to detect by sensors. The multiplier is applied to the detectors’ sensor ranges.
Ресурсы[]
ResourceCollectionRate -- Modifies the rate at which a collector collects resources
ResourceDropOffRate -- Modifies the rate at which a ship removes resources from a collector when it is docked.
ResourceCapacity -- Modifies how many RUs a ship can store.

Типы ареалов[]

ThisShipOnly -- только этот корабль;
OwnShipsWithinRadius -- свои корабли в радиусе;
OwnShipsWithinRadiusExcludingThisShip -- свои корабли в радиусе, за исключением корабля-источника;
AllShipsWithinRadiusExcludingThisShip -- все корабли в радиусе, за исключением корабля-источника;

Должно быть уже и AllShipsWithinRadius тогда...

Примеры[]

AddShipMultiplier(NewShipType, "WeaponAccuracy", "OwnShipsWithinRadiusExcludingThisShip", "Linear", 1.15, 1.15, 4500) -- КомКорвет;
AddShipMultiplier(NewShipType, "SensorDistortion", "OwnShipsWithinRadius", "Linear", 0.6, 0.6, 6000) -- ДисторПробка;
AddShipMultiplier(NewShipType, "NebulaSensitivity", "ThisShipOnly", "Linear", 0, 0, 0) --Муверы;

Оружие[]

StartShipWeaponConfig(NewShipType,
  "Hgn_VulcanKineticTurretWeak",
  "Weapon_TurretTop",
  "Weapon_TurretTop"
)

Содержимое файла *.subs[]

Содержимое этого файла во многом повторяет конфигурацию кораблей, поэтому можно поэкспериментировать в присвоении функций модуля кораблю и наоборот.

Умения от модулей[]

Гипер-ингибитор[]

AddSubSystemAbility(NewSubSystemType, "HyperspaceInhibitor",
  1, --доступно ли по умолчанию;
  "ThisShipOnly",
  0 -- скорее всего, радиус действия, 0 просто из-за того, что ареал распространения - только этот корабль;
)

Гипер-прыжок[]

AddSubSystemAbility(NewSubSystemType, "Hyperspace",
  1, --доступно ли по умолчанию;
  "OwnShipsWithinRadius", --ареал действия;
  3500 -- радиус действия;
)

Стэлс[]

AddSubSystemAbility(NewSubSystemType, "Cloak",
  1,
  "ThisShipOnly",
  0 -- скорее всего, радиус действия, 0 просто из-за того, что ареал распространения - только этот корабль;
)

Усилители[]

AddSubSystemMultiplier(NewSubSystemType, "Speed", "ThisShipOnly", "Linear", 1, 0.35, 0) -- скорость кораблей (странно, чем отличается от MAXSPEED?);
AddSubSystemMultiplier(NewSubSystemType, "ResourceDropOffRate", "ThisShipOnly", "Linear", 1, 0, 0) -- что-то с ресурсами;
AddSubSystemMultiplier(NewSubSystemType, "CloakDetection", "ThisShipOnly", "None", 4, 4, 0) -- анти-стэлс (временный?);
AddSubSystemMultiplier(NewSubSystemType, "VisualRange", "ThisShipOnly", "None", 4, 4, 0) -- анти-стэлс (постоянный?);

Содержимое файла *.miss[]

Конфигурационный файл для ракет.
Всё, что уже рассортировано и повторялось раньше, здесь не приводится.

NewShipType.maxShield = 0
NewShipType.shieldRechargeTime = 0
NewShipType.weaponName = "Hgn_TorpedoLauncher"
NewShipType.lifeTime = 20
NewShipType.launchTime = 0
NewShipType.detectionDistance = 1000
NewShipType.clusterDistance = 750
NewShipType.numberSubMunitions = 4
NewShipType.subMunitionName = "Hgn_ClusterTorpedoB"
NewShipType.clusterAngle = 65
NewShipType.density = 1
NewShipType.slowdownFactor = 0.5
NewShipType.tumbleSpeed = 0
NewShipType.targetAngle = 5
NewShipType.spiralsPerSecondMin = 0.5
NewShipType.spiralsPerSecondMax = 0.6

См. также[]

Ссылки[]

  • VariableShip - переменные кораблей на Кладбище Кароса;

Advertisement