Привет, капсулиры!
CCP Mankiller (не судимый) здесь для того, чтобы рассказать вам немного о том, как мы сохраняем данные для наших космических корабликов. Сейчас, под «данными» я подразумеваю визуальное представление, ни какого геймплея, количества хайслотов, дронбея и т.п. Я говорю именно о вещах, которые вы можете увидеть в космосе: материалы, свет и разного рода декали.
Я знаю-знаю! Большинство вас больше беспокоится о скорости Домика и об арморе, чем о цвете или маленьком галлентском значке сзади на движках. Графика хорошая, бесспорно, но Ева — это игра о табличках в космосе, поэтому я постараюсь объяснить покороче! ;-)
Как это было ранее — red-файлы
В Еве множество кораблей. Многие из них отличаются от других (например, Морос и Инкурсус), другие не очень (Скорп и Раттл). Без разницы сколько было отличий между двумя кораблями, мы использовали для каждого корабля один уникальный файл, так же известный как red-файл:
- Moros: model/ship/gallente/dreadnought/GDn1/GDn1_T1.red
- Incursus: model/ship/gallente/Frigate/GF4/GF4_T1.red
- Scorpion: model/ship/caldari/BattleShip/CB2/CB2_T1.red
- Rattlesnake: model/ship/caldari/BattleShip/CB2/Guristas/CB2_T1_Guristas.red
Проблема в том, содержимое файлов CB2_T1.red и CB2_T1_Guristas.red было практически идентичное! Хотя если вы сравните GDn1_T1.red и GF4_T1.red вы найдете некоторые общие черты: декали, т.к. оба корабля галлентские.
Поддержание такого рода избыточных данных - плохая практика и приводит к противоречиям между нашими кораблями. Плюс это кошмар для работы с ними. Если мы захотим изменить оттенок свечения Sarum-кораблей, к примеру, мы должны открыть, изменить, сохранить и обработать каждый red-файл для каждого Sarum корабля.
На вершине всего этого: как должна работать кастомизация кораблей с этими red-файлами? Ответ простой: она и не будет! И мы знаем, после прошлых Фанфестов и триальных блюпринтов разного рода корабликов (всякие сарум магнате и прочее, — прим. пер.) как наши пилоты хотят кастомизацию кораблей. Будь прокляты эти таблицы, — говорим мы! И таким образом, мы решили, что пора что-то изменить...
The Space Object Factory (далее просто SOF)
SOF — это одиночный программный модуль, хранящий все данные корабля и изготавливающий любой и каждый корабль, идентифицируемый минимальным набором строк. К примеру, SOF описывает все вышеупомянутые корабли следующим образом:
- Moros: gdn1_t1:gallentebase:gallente
- Incursus: gf4_t1:gallentebase:gallente
- Scorpion: cb2_t1:caldaribase:caldari
- Rattlesnake: cb2_t1:guristas:caldari
Каждый стандартный корабль в Еве мы можем свести к его хуллу (gdn1_t1, gf4_t1 и т.д.), фракции (gallentebase, caldaribase) и расы (gallente, caldari). Каждое имя указывает на уникальный набор данных для хулла, фракции и расы, и на выходе получается корабль, который подгружается в клиент.
В теории, возможна любая комбинация и поддерживается SOF, но какой смысл будет иметь хулл Мороса, с гуристовским материалом и саньша декалями? Это риторический вопрос. Пожалуйста не спрашивайте Sanistoros. Серьезно.
Что это меняет для игроков?
Визуально? Сейчас ничего. Корабли генерируются SOF и визуально ничем не отличаются от тех, что были ранее из red-файлов, редактировавшихся в ручную. Загрузка данных, тем не менее, стала быстрее, за счет более эффективного хранения данных. Из-за этого корабли должны быстрее прорисовываться в космосе при запросе.
Тем не менее, мы воспользовались возможностью переделать red-файлы, которые на протяжение многих лет, постоянно изменялись от ручного редактирования фракций и рас. Мы, наконец-то, переделали Gallente CreoDron корабли, как пример. Сейчас они стали с зеленоватым оттенком, который был во времена более молодого NewEden.
Что это меняет для разработчиков?
В будущем? Дохрена. Если ваша работа упирается в изменение кучи файлов — это проблема. Мы пока будем использовать эти файлы, но следующий шаг будет тотальное избавление от них. Мы можем переделать свои инструменты, чтобы они использовали одну SOF-базу:
- dx9/model/SpaceObjectFactory/data.red
Надеюсь, это поможет объяснить фундаментальное (надеемся, невидимое для вас) изменение хранения данных о кораблях, которое прямиком направляет нас на кастомизацию кораблей в будущем. И, как всегда, я приглашаю вас задавать вопросы и к обсуждению в следующем топике.
Перевод © Jack Hareka