Skip to content

Latest commit

 

History

History
174 lines (109 loc) · 13.3 KB

HOW_ADD_STATION.md

File metadata and controls

174 lines (109 loc) · 13.3 KB

Как добавить новую станцию

Начало

Перед тем как начать мапить обязательно установите хуки или редактор StrongDMM который автоматически переводит карту в TGM формат. Больше информации об этом Здесь

Для информации по самому маппингу станции можете обратиться к этой англоязычной статье (часть информации не будет применима к нашему билду): Guide to mapping

Добавление станции

Условия

Размер станции

Станция должна находится на одном слое размером не более 255x255. Загрузка станции из нескольких слоёв поддерживается, но не рекомендуется, так как механизмы работы с multiz картами отсутствуют

Шатлы

Шатлы работают с помощью зон. Размер, форму или направление зоны изменять нельзя, копируйте их со стандартной станции. На данный момент необходимо наличие всех зон шатлов что и на стандартной карте

  • Шатл прибытия
  • Шатл эвакуации/конца смены
  • Шатл полётов на астероид (вместе с самим шатлом, не обязателен если астероида не будет)
  • Шатл карго (не обязателен если карго не будет)
  • Шатл ЕРТ
  • 6 шатлов нюки с разных сторон станции
  • 4 шатла воксов с разных сторон станции

Следующие зоны для шатлов не обязательны но желательны:

  • Шатл велосити
  • Шатл элитного синдиката
  • Шатл дефсквада
  • Транспортный шатл Ferry

Конфигурация

Создайте в папке maps новую папку с названием своей станции и поместите файл карты туда. Карта НЕ должна компилироваться в билд, если в списке файлов билда в дрим мейкере напротив карты станции стоит галочка, то уберите её

Затем создайте в папке maps новый .json файл с таким же именем как и папка

Минимальное содержимое этого файла выглядит так

{
    "map_name": "Box Station",
    "map_path": "boxstation",
    "map_file": "boxstation.dmm"
}

"map_name" будет отображаться в списке выбора карты. Но станция всё равно будет называться Исход и находится в системе Тау Кита

"map_path" папка с картой

"map_file" имя файла с картой

Дополнительные параметры

Вот пример конфига карты со всеми необязательными параметрами

{
    "map_name": "Box Station",
    "map_path": "boxstation",
    "map_file": "boxstation.dmm",
    "station_name": "NSS Exodus",
    "system_name" : "Tau Ceti",
    "station_image": "exodus",
    "traits": [],
    "space_ruin_levels": 2,
    "space_empty_levels": 1,
    "load_junkyard": 1,
    "minetype": "asteroid"
}

"station_name" полностью переименовывает станцию. Везде где участвует название станции будет использоваться это значение

"system_name" определяет в какой системе находится станция. Очень нежелательно менять со стандартного значения

"station_image" изображение, которое используется для карты, которую видно в консоли камер или консоли датчиков. Сгенерируйте его с помощью кнопки "Generate NanoUI Map" и положите в папку "/nano/images"

"traits" указывает какими трейтами будет обладать ваша карта, больше информации о них будет ниже. Пример: "traits": [{"Space Ruins": true}] добавит генерацию космических структур на слой станции

"space_ruin_levels" указывает сколько слоёв будет создано для генерации космических структур

"space_empty_levels" указывает сколько будет создано полностью пустых слоёв

"load_junkyard" указывает будет ли загружена карта свалки

"minetype" указывает какая карта будет загружена для шахтерки. При значение null не будет загружена никакая. Единственное поддерживаемое значение на данный момент это "asteroid"

Добавление в список карт и запуск

После создания конфига необходимо добавить карту в список возможных карт. Для этого откройте файл config/maps.txt и добавьте новое определение карты . Минимальное определение карты выглядит так:

map boxstation
endmap

После map идёт название .json конфига, который вы создали. В этом файле есть ещё некоторые параметры, которые можно настроить, но они пока никак не влияют. Эти параметры будут использоваться в дальнейшем для автоматической ротации карт.

После всего этого можете запустить игру и нажать кнопку Server -> Change map, новая карта должна появится в этом списке. После выбора карты раунд необходимо перезапустить для загрузки этой карты

Перед публикации нового пулл реквеста на гитхабе обязательно отредактируйте и файл config/example/maps.txt, добавив туда определение карты

Система трейтов для карт

Прошлая система, которая использовала захардкоженные z уровни, была заменена на систему трейтов, которая позволяет указать какими свойствами обладает каждый слой. Все возможные трейты определены в файле code/__DEFINES/maps.dm, некоторые из них пока не имеют логики. Посмотреть какими трейтами обладают все z слои можно с помощью кнопки Mapping -> Debug Z-Levels (предварительно необходимо включить показ Debug вербов с помощью нажатие кнопки Debug -> Debug verbs)

Список используемых трейтов

ZTRAIT_CENTCOM этот слой является центкомом

ZTRAIT_STATION этот слой является станцией

ZTRAIT_MINING этот слой является шахтерским

ZTRAIT_JUNKYARD этот слой является свалкой

ZTRAIT_SPACE_RUINS на этом слое будут генерироваться космические структуры

ZTRAIT_LINKAGE определяет как будет происходить переход между слоями при подходе к краю карты, имеется возможных вариантов.

  • UNAFFECTED / null - перехода нет, вы упрётесь в край карты
  • SELFLOOPING / "Self" - при подходе к краю карты вы окажитесь на том же слое, но с другой стороны. Слой будет "зацикливаться"
  • CROSSLINKED / "Cross" - вы попадёте на один из других слоёв которые помечены как CROSSLINKED. Шансы зависят от других трейтов, эта логика определена в файле code/modules/maps/space_management/space_transition.dm

Функции для работы с трейтами карт

SSmapping.level_trait(z, trait) проверяет есть ли у данного z уровня данный трейт

is_centcom_level(z) is_station_level(z) is_mining_level(z) is_junkyard_level(z) являются функциями-хелперами и проверяют является ли данный z уровень центкомом, станцией, шахтеркой или свалкой

SSmapping.level_by_trait(trait) возвращает первый z слой который имеет данный трейт либо null если таких слоёв нет

SSmapping.levels_by_trait(trait) возвращает список z слоёв которые имеют данный трейт

SSmapping.levels_by_any_trait(list/traits) возвращает список z слоёв, которые имеют хотя бы один из трейтов которые переданы в списке-аргументе. Пример использования:

var/list/playable_zlevels = SSmapping.levels_by_any_trait(list(ZTRAIT_STATION, ZTRAIT_MINING))

Редактирование и отключение профессий для карты

Через Dream Maker создайте файл job_changes.dm в той же папке, где хранится .dmm файл карты

Первой строчкой обязательно должен быть следующий дефайн

#define JOB_MODIFICATION_MAP_NAME "Тут_Название_Карты"

Названием карты является значение "map_name" из .json файла. После редактирования этого файла необходимо перекомпилировать билд для применения изменений

Отключение профессий

Чтобы отключить определенную профессию добавьте строчку MAP_REMOVE_JOB(Тип_Профы)

Типом профессии является последняя часть типа датума /datum/job, которые определены в code/game/jobs/job.

Например, необходимо отключить профессию барбера. Его датум определён в файле code/game/jobs/job/civilian.dm и выглядит вот так: /datum/job/barber. Чтобы отключить эту профессию необходимо добавить строчку MAP_REMOVE_JOB(barber)

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

Если вы хотите изменить доступ определенной профессии, максимальное количество или другие параметры то необходимо переопределить функцию создания профессии. Например, добавление офицерам СБ доступа в крематорий будет выглядеть так:

/datum/job/officer/New()
	..()
	MAP_JOB_CHECK
	access += list(access_crematorium)

MAP_JOB_CHECK и вызов родительского прока ..() обязательны. Дефайн MAP_JOB_CHECK позволяет отредактировать профессию только если текущая карта является той, которая определена в дефайне MAP_JOB_CHECK. После этих строчек можно менять любые параметры профессии и они будут применены только на вашей карте.

Пример редактирования и отключения профессий

Карта Test map является примером. На ней офицеры службы безопасности переименованы в Clown Police, имеют доступ клоуна и спавнятся с маской и рюкзаком клоуна. Так же есть примеры отключения профессий. Для просмотра кода этого примера откройте файл maps\testmap\job_changes.dm