Перед тем как начать мапить обязательно установите хуки или редактор 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