View Single Post
Old 05-22-2011, 08:28 PM   #15
Ten
Главнокомандующийp2ambassador
 
Ten's Avatar
 
Faction:
Стражи Садов Кадеша

Join Date: Feb 2004
Location: Great Nebula
Posts: 2,514
Re: Произвольный цвет корпуса и шлейфов кораблей

Добил-таки этот вопрос, и даже могу порадовать – возможность задавать произвольные цвета корабельных корпусов и шлейфов у игрока есть. Правда, окольными путями и с некоторыми оговорками, но даже это лучше, чем ничего. Ну да обо всём по порядку.

Начать, наверное, стоит с того, что в первом Homeworld на игровой локации одновременно могут присутствовать до 8 игроков, т.е. 8 команд (teams). У каждой из команд, естественно, есть свой цвет по умолчанию, который назначается компьютерным противникам:
  1. светло-серый (стандарт для кушан);
  2. жёлто-красный (стандарт для тайдан);
  3. синий;
  4. зелёный;
  5. ярко-жёлтый;
  6. оранжевый;
  7. пурпурный;
  8. бледно-зелёный.
Задаются они с помощью директив BaseColor (основной цвет) и StripeColor (цвет полос) в файле настройки цветов команд, который зовётся teamcolors.script и находится в корне главного big-файла. В этом же скрипте директивами TrailColor задаётся цвет шлейфов. Кстати, обратите внимание, что шлейф условно разбит на 4 сегмента, цвета для которых указываются отдельно, так что при желании можно наваять эскадрилье павлиний хвост, переливающийся всеми цветами радуги (как в первом аттаче, например). К сожалению, когда окраску кораблей задаёт ползунками игрок, цвета шлейфов рассчитываются на основе базового цвета с учётом поправочных коэффициентов, задаваемых директивами BaseToTrailFactors<N>, где <N> – номер сегмента (0, 1, 2, 3).

Но, поскольку у разработчиков игры возникла необходимость менять цвета команд по ходу развития сценария (белый посольский корвет, чёрные корабли Элитной гвардии и т.д.), директивы BaseColor, StripeColor и TrailColor можно использовать и в mission-файлах карт. В этих же файлах доступна дополнительная директива AvailableColorSchemes, разрешающая тому или иному типу кораблей носить дополнительные цветовые схемы. Её появление обусловлено тем, что каждый новый окрас команды это ещё один набор текстур, т.е. дополнительный расход памяти, которую в те времена экономили как могли. Поэтому по умолчанию кораблю доступен только один набор цветов в соответствии с номером его команды.

Замечу, что от директивы TrailColor в файлах карт проку мало – она подхватывается только при старте карты. Если загружаете сохранёнку, цвета шлейфов инициализируются значениями из файла teamcolors.script – именно поэтому, например, за посольским корветом или джанкъярдским псом тянется зеленоватый шлейф седьмой схемы (которым, кстати, щеголяют дроны и муверы в ХВ2). Более того, если в карте применяются директивы BaseColor / StripeColor, при её загрузке шлейфы как обычно окрашиваются в базовые цвета. Зато директива AvailableColorSchemes на поверку оказалась куда полезнее, т.к. позволяет не только назначать новые цветовые схемы, но и отменить родную. И думается, что после прочтения вышеизложенного у сообразительных читателей уже созрела мысль, как получить корабли с произвольной окраской. Всё верно – нужно настроить последнюю цветовую схему в teamcolors.script по своему вкусу (редко кто играет одновременно с семью противниками, да и не на всех картах такое возможно), а в облюбованной карте разрешить кораблям своей расы только её. Для кампании лучше выбрать схему №3 – она всё равно нигде не используется. Ну, а чтобы не быть голословным, смотрите второй и третий аттачи.

Не обошлось и без ложки дёгтя. Поскольку приходится редактировать файлы карт, способ мало подходит для многопользовательской игры – изменённая карта загружается при старте, а значит корабли одной расы, принадлежащие разным игрокам, будут иметь одинаковые цвета. Впрочем, способ из поста №2 в мульти вообще неприменим: при старте идёт проверка на яркость выбранного цвета, и если её значение меньше 117 (из 255), корабли получают гламyрнейшyю розовую окраску (никак индикатор нештатной ситуации), и смотрится оно весьма противно. В случае кампании нужно разрешать/запрещать цветовые схемы в файле каждой миссии, иначе вновь построенные корабли будут иметь цвет, выбранный игроком в начале компании. Ничем, кроме изменения экзешника, это не лечится, так что способ оказался куда менее универсальным, чем того хотелось бы. Но настрогать красивых скриншотов с его помощью вполне можно

Напоследок приведу синтаксис вышеупомянутых директив (вольный перевод краткой справки из скрипта):
Code:
// Основной цвет и цвет полос:
BaseColor                     <iPlayer>, <red>, <green>, <blue>
StripeColor                   <iPlayer>, <red>, <green>, <blue>
// Цвета сегментов шлейфа:
TrailColor                    <iPlayer>, <iControlPoint>, <red>, <green>, <blue>
// Цвета сегментов шлейфа на основе базового:
BaseToTrailFactors<iPoint>    <hue>, <lum>, <sat>
// Ну и на закуску цвет тактического оверлея на основе базового:
BaseToTOFactors               <hue>, <lum>, <sat>
// Разрешение цветовых схем для кораблей (указывается в mission-файлах карт):
AvailableColorSchemes          <race> <ship> <schemes>
Здесь:
  • <iPlayer> – номер игрока (0..7);
  • <iPoint> – номер сегмента шлейфа (0..3);
  • <red> – красный (0..255);
  • <green> – зелёный (0..255);
  • <blue> – синий (0..255);
  • <hue> – оттенок (0.0..1.0);
  • <lum> – яркость (0.0..1.0);
  • <sat> – насыщенность (0.0..1.0).

  • <race> – название расы (R1 - кушане, R2 - тайдане, P1 - рейдеры, P2 - стражи, Traders - торговцы).
  • <ship> – название корабля (см. названия в папках кораблей).
  • <schemes> – номер схемы (0..7), если несколько, перечисляются через запятую.
Для директив BaseToTrailFactors<N> и BaseToTOFactors базовые цвета преобразуются в HLS-модель, оттенок складывается с параметром <hue>, а яркость и насыщенность умножаются на <lum> и <sat> соответственно, после чего все три значения приводятся к диапазону [0.0;1.0], и в результате получаем рассчитанные цвета сегментов шлейфа / значков тактического оверлея. Как видите, ничего сложного тут нет.


Добавлено через 4 минуты
Вообще возникла мысль, раз уж цвета шлейфов задаются сегментами, первый из них покрасить в цвет двигателя, а то, например, зелёный выхлоп (или пусть даже белый) на фоне оранжевой окраски сопел как-то странновато смотрится.
Attached Images
File Type: jpg r2eliteint_rainbow.jpg (59.4 KB, 42 views)
File Type: jpg r1eliteint_orange.jpg (64.3 KB, 43 views)
File Type: jpg r2regularint_righttrail.jpg (131.3 KB, 43 views)

Last edited by Ten : 05-22-2011 at 08:32 PM. Reason: добавлено сообщение
Ten is offline   Reply With Quote