Сборник полезной информации, который поможет вам настроить среду разработки.
Read this in other languages: English, Russian
В ЧаВо есть раздел о Git, если вы с ним не знакомы.
Форкните репозиторий. Клонируйте свой форк в свою систему с помощью вашего инструмента Git. Далее репозиторий
- каталог вашего репозитория в вашей системе, а каталог bin
- папка в папке установки клиента. По умолчанию это:
C:/ProgramData/FAForever/bin
Скопируйте содержимое repository/setup/bin
в папку bin
. Откройте init_dev.lua
, который теперь находится в папке bin
. В верхней части указано:
-- измените это на расположение репозитория на вашем диске. Обратите внимание, что `\` используется
-- для экранирования символов, и вместо этого вы можете просто использовать `/` в своем пути.
local locationOfRepository = 'местоположение-вашего-репозитория'
Измените его, чтобы он соответствовал пути к репозиторию
в вашей системе. Вы можете запустить игру, вызвав dev_windows.bat
или dev_linux.sh
. Вы можете проверить их, чтобы узнать, что они делают. Когда вы используете скрипты, игра запустится с вашим репозиторием
в качестве источника.
Репозиторий не содержит всех базовых игровых чертежей и/или файлов сценариев. Это связано с проблемами лицензирования. Остальные файлы понадобятся вам при работе с репозиторием. Это полезно для поиска импортируемого файла или для поиска примеров. Вы можете увидеть этот шаблон в файле инициализации, который вы скопировали на предыдущем шаге:
-- mount in development branch
MountDirectory(locationOfRepository, '/')
-- load in any .nxt that matches the whitelist / blacklist in FAF gamedata
MountAllowedContent(InitFileDir .. '/../gamedata/', '*.nx5', allowedAssetsNxy)
MountAllowedContent(InitFileDir .. '/../gamedata/', '*.nxt', allowedAssetsNxt)
-- load in any .scd that matches the whitelist / blacklist in FA gamedata
MountAllowedContent(fa_path .. '/gamedata/', '*.scd', allowedAssetsScd)
Мы загружаем форк репозитория, файлы, установленные FAF, а затем файлы базовой игры. Первый найденный файл — это файл, из которого будет считываться игра. Например, файл /lua/sim/unit.lua
находится в репозитории вашей системы, в lua.nx5
и в lua.scd
. Используется первый найденный файл — в данном случае это файл в вашем репозитории.
Вы можете извлечь оставшиеся файлы, распаковав соответствующие файлы в папке gamedata вашей установки:
projectiles.scd
props.scd
units.scd
lua.scd
mohodata.scd
moholua.scd
schook.scd
Вы можете скопировать файл, изменить расширение на zip
и распаковать его с помощью программного обеспечения для сжатия. Мы рекомендуем вам создать отдельную папку для хранения распакованных папок. Вы можете запустить отдельный экземпляр Visual Studio Code для поиска в коде базовой игры. Вы также можете добавить дополнительную папку в рабочую область в Visual Studio Code, если не хотите иметь несколько экземпляров.
У нас есть два типа патчей: патч баланса и патч разработки. Первое выполняется командой балансировки, и они являются ответвлением от deploy/fafbeta
. Последнее выполняется командой игры, и они являются ветвями от deploy/fafdevelop
. Ветка fafbeta
используется для изменения баланса, типичным примером является настройка статистики юнитов, таких как здоровье, скорость передвижения и урон. Ветка fafdevelop
используется для общих изменений игры, таких как улучшение производительности, исправление ошибок и введение (новых) механик.
Когда вы новичок в программировании, у вас может не быть рабочей среды. Это часто называют интегрированной средой разработки (IDE). Мы рекомендуем использовать Visual Studio Code (VSC).
Если вы не знакомы с Visual Studio Code, то это сэкономит вам время на ознакомление с ним. Существует отличная вводная серия, предоставленная самим Visual Studio Code. Обратите внимание, что вам не нужно делать то, что вам говорят видео. Например, вам не нужно устанавливать Python. Мы не используем Python для игрового репозитория. Видео показывает вам, что возможно - оно показывает вам, как работает инструмент.
Другая полезная информация:
- Горячие клавиши для Visual Studio Code
Горячие клавиши могут значительно улучшить ваш рабочий процесс. Вам не нужно знакомиться с каждой из них. Мы рекомендуем вам просматривать этот лист каждый месяц и проверять, есть ли обычное действие, которое вы выполняли, которое можно было бы выполнить с помощью них.
Полезные расширения в целом:
- Git graph: Визуализация графов
- Gitlens: Отображает кем было сделано изменение
- Peacock: Окрашивает рабочие простанства, если у вас их несколько
Полезные расширения, если вы собираетесь работать с шейдерами:
Обратите внимание, что мы не рекомендуем языковой сервер Lua. В игре используется немного измененная версия Lua: синтаксис не соответствует стандартному. У нас также есть другая система импорта. Языковой сервер Lua выдает десятки ошибок. И он не приспособлен для работы с нашей системой импорта.
Этот шаг является необязательным и требуется только в том случае, если вы собираетесь исследовать исключения или сбой.
Благодаря KionX у нас есть отладчик. Когда возникает исключение, он может отследить его до строки кода Lua. Скомпилированный исполняемый файл доступен в каждом релизе. Сохраните исполняемый файл в папке bin
. Это та же самая папка bin
, как определено ранее. Нам нужно адаптировать файлы bat/bash для использования отладчика. В качестве примера мы меняем bat-файл с:
ForgedAlliance.exe /init "init_dev.lua" /EnableDiskWatch /showlog /log "dev.log"
На:
FADeepProbe.exe /init "init_dev.lua" /EnableDiskWatch /showlog /log "dev.log"
Аргументы передаются отладчиком. Изменения в сценарии bash аналогичны. Когда игра вылетает, отладчик попытается сообщить вам в журнале, что произошло.
Серьезный сбой может появиться только при повторе. Для расследования вам нужно будет использовать отладчик. Вам понадобится запустить повтор с помощью отладчика. Для этого требуется два шага: сопоставить игровую версию повтора и получить сам повтор.
Версия игры зависит от типа игры. Переведите репозиторий в нужную ветку:
FAF
:deploy/faf
FAF Beta
:deploy/fafbeta
FAF Develop
:deploy/fafdevelop
Найти повтор можно, запустив его с клиентом один раз и тут же закрыв. Он хранится в кеше клиента:
C:/ProgramData/FAForever/cache/temp.scfareplay
Скопируйте этот повтор в папку с повторами игры:
C:/Users/%USER_NAME%/Documents/My Games/Gas Powered Games/Supreme Commander Forged Alliance/replays/%PROFILE_NAME%
Обратите внимание, что последний путь неполный: вам нужно заменить %USER_NAME%
на имя профиля вашей системы, а %PROFILE_NAME%
— на имя профиля, который вы используете в игре. Вы можете запустить игру с помощью bat-файлов, как описано ранее.
Вы можете запустить несколько процессов одновременно, когда средства отладки включены. Вы можете сделать это, добавив следующую строку в файл настроек:
debug = { enable_debug_facilities = true }
Его можно найти здесь:
%userprofile%\AppData\Local\Gas Powered Games\Supreme Commander Forged Alliance\Game.prefs
Все файлы в каталоге schook
захватывают файлы в папке lua
. Моды применяют аналогичную стратегию захвата. Захват означает объединение файлов: один файл добавляется к следующему. Это позволяет добавлять код в файл. В качестве примера предположим, что у нас есть этот базовый файл игры:
lua/sim/unit.lua
И скажем, мы пытаемся захватить для него:
schook/lua/unit.lua
mods/my-mod/hook/lua/unit.lua
Затем происходит следующее:
lua/sim/unit.lua
=lua/sim/unit.lua
+schook/lua/unit.lua
+mods/my-mod/hook/lua/unit.lua
Где оператор сложения следует интерпретировать как добавление одного текстового (исходного) файла к другому текстовому (исходному) файлу. это расширяет файл модуля. Это подключение выполняется, когда файл импортируется в первый раз. Каталог, который используется для захвата, можно настроить в файлах инициализации.
На вики есть более конкретная информация о структуре репозитория или о том, как работает релиз.
- Что такое Git?
- Git — это программа для отслеживания изменений в наборе файлов, особенно полезная для исходных файлов. Отраслевой стандарт и хорошая инвестиция времени, чтобы ознакомиться с ней. Существуют различные источники для изучения git. Вы можете научиться использовать Git через командную строку, через Github Desktop[Github Desktop](https://desktop.github.com/) или через Код Visual Studio. Сначала важно понять, что такое форк, как размещать, коммитить(commit) или отправлять(push) файлы и как делать пулл-реквесты(PR). Более сложные темы, такие как слияние(merge) или перебазирование(rebase), становятся актуальными по мере того, как вы становитесь более вовлеченными в проект.
- Могу ли я играть в игру с другими людьми, в которую включены мои изменения?
- Нельзя - это вызовет рассинхронизацию. Например: если изменить количество наносимого урона, это произойдет только в вашей версии симуляции.
- У меня нет файлов .nx5.
- Запустите игру с клиентом, используя FAF Develop в качестве типа игры. Файл .nx5 является частью типа игры FAF Develop. Клиент загрузит их. Это может занять некоторое время.
- Мои настройки мохолога(moholog) постоянно сбрасываются
- Это сделано специально — вам нужно включить средства отладки, чтобы предотвратить это. См. раздел о запуске нескольких экземпляров.