Модификации:Карты: различия между версиями
Shtompel (обсуждение | вклад) |
Shtompel (обсуждение | вклад) |
||
Строка 393: | Строка 393: | ||
==Свойства== | ==Свойства== | ||
− | === | + | ===Свойства карты=== |
− | + | Свойства карты:¹ | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! | + | ! Свойство |
− | ! | + | ! Описание |
|- | |- | ||
− | | <tt>AmbientLight {{t|byte r}} {{t|byte g}} {{t|byte b}}</tt><br />''( | + | | <tt>AmbientLight {{t|byte r}} {{t|byte g}} {{t|byte b}}</tt><br />''(действует в помещениях и местах, где не учитывается наружное освещение)'' |
− | | | + | | Устанавливает [[wikipedia:RGB color model|RGB цвет]] вычитается из белого (255,255,255), чтобы создать окружающий свет.<br />''Например: <tt>AmbientLight 95 95 95</tt> для нормального внутреннего дневного освещения.'' |
|- | |- | ||
− | | <tt>BackwoodsEntry [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>BackwoodsEntry [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Позиция, в которую игрок попадает при входе на ферму из [[Глушь|Глуши]]. |
|- | |- | ||
− | | <tt>BrookSounds [{{t|int x}} {{t|int y}} {{t|int type}}]</tt><br />''( | + | | <tt>BrookSounds [{{t|int x}} {{t|int y}} {{t|int type}}]</tt><br />''(действует на открытом воздухе)'' |
− | | | + | | Добавляет источники звука. {{t|x}} {{t|y}} поля - это координаты тайла, и {{t|type}} ID звука. Значение поля {t|type}} может принимать следующие значения: |
− | * <tt>0</tt> (babblingBrook); | + | * <tt>0</tt> (babblingBrook)(журчание ручья); |
− | * <tt>1</tt> (cracklingFire); | + | * <tt>1</tt> (cracklingFire)(потрескивание огня); |
− | * <tt>2</tt> (engine); | + | * <tt>2</tt> (engine)(двигатель); |
− | * <tt>3</tt> (cricket). | + | * <tt>3</tt> (cricket)(сверчок). |
|- | |- | ||
− | | <tt>BusStopEntry [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>BusStopEntry [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Позиция, в которую игрок переходит при входе на ферму с [[Автобусная_остановка|автобусной остановки]]. |
|- | |- | ||
− | | <tt>CanCaskHere T</tt>²<br />''( | + | | <tt>CanCaskHere T</tt>²<br />''(действует в любом месте)'' |
− | | | + | | Позволяет бочкам работать в этом месте. |
|- | |- | ||
− | | <tt>DayTiles [{{t|string layerName}} {{t|int x}} {{t|int y}} {{t|int tilesheetIndex}}]+</tt><br />''( | + | | <tt>DayTiles [{{t|string layerName}} {{t|int x}} {{t|int y}} {{t|int tilesheetIndex}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Устанавливает тайлы, которые будут появляться с 6 утра до 7 вечера. В любое время до 7 вечера тайл находится в нужном положении ({{t|x}}, {{t|y}}) на сопоставлении слоев карты {{t|layerName}}, изменяет свой индекс спрайт-листа на указанный {{t|tilesheetIndex}}, и добавляет свечение для имитации дневного света. Свечение будет добавлено только в том случае, если местоположение находится в помещении, а {{t|tilesheetIndex}} равен 256, 288, 405, 469 или 1224. Параметры могут быть повторены, чтобы повлиять на несколько тайлов.<br />''Например: <tt>DayTiles Front 3 1 256 Front 3 2 288</tt>.'' |
|- | |- | ||
− | | <tt>Doors [{{t|int x}} {{t|int y}} {{t|string sheetID}} {{t|int tileID}}]+</tt><br />''( | + | | <tt>Doors [{{t|int x}} {{t|int y}} {{t|string sheetID}} {{t|int tileID}}]+</tt><br />''(действует в помещениях)'' |
− | | | + | | Добавляет функциональности межкомнатным дверям. Используется с свойством тайла <tt>Action Door</tt>. {{t|x}} {{t|y}} поля - это координаты тайла, {{t|sheetID}} это название листа, содержащего дверной спрайт, и {{t|tileID}} - индекс тайла в спрайт-листе. |
|- | |- | ||
| <tt>Fall_Objects T</tt>²<br /><tt>Spring_Objects T</tt>²<br /><tt>Summer_Objects T</tt>²<br /><tt>Winter_Objects T</tt>² | | <tt>Fall_Objects T</tt>²<br /><tt>Spring_Objects T</tt>²<br /><tt>Summer_Objects T</tt>²<br /><tt>Winter_Objects T</tt>² | ||
− | | | + | | Следует ли создавать сезонные объекты на создаваемых тайлах на основе данных из <tt>Data\Locations.xnb</tt>.<br />''Например: <tt>Fall_Objects</tt>.'' |
|- | |- | ||
− | | <tt>FarmCaveEntry [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>FarmCaveEntry [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Позиция, в которую игрок переходит при входе на ферму из [[Ферма#Пещера|пещеры на ферме]]. |
|- | |- | ||
− | | <tt>FarmHouseEntry[{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>FarmHouseEntry[{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Изменяет положение Фермерского дома. Соответствует входной двери или положению, в котором игрок будет находиться при выходе из дома. |
|- | |- | ||
− | | <tt>Feed {{t|int x}} {{t|int y}}</tt><br />''( | + | | <tt>Feed {{t|int x}} {{t|int y}}</tt><br />''(действует в птичнике или хлеву)'' |
− | | | + | | Задает местоположение [[Кормораздатчик|кормораздатчика]] в птичнике или хлеву.<br />''Например: <tt>Feed 3 2</tt>.'' |
|- | |- | ||
− | | <tt>forceLoadPathLayerLights T</tt>²<br />''( | + | | <tt>forceLoadPathLayerLights T</tt>²<br />''(действительно в местах, не связанных с фестивалями, на открытом воздухе)'' |
− | | | + | | Следует ли загружать огни со слоя <tt>Paths</tt> на карты, где их обычно не было бы.<br />''Например: <tt>forceLoadPathLayerLights true</tt>.'' |
|- | |- | ||
− | | <tt>ForceSpawnForageables T</tt>²<br />''( | + | | <tt>ForceSpawnForageables T</tt>²<br />''(действует в помещениях)'' |
− | | | + | | Позволяет появляться кормовым предметам в этом месте. |
|- | |- | ||
− | | <tt>ForestEntry [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>ForestEntry [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение, в котором находится игрок, когда он входит на ферму из [[Лес_Синдерсэп|Леса Синдерсэп]]. |
|- | |- | ||
− | | <tt>GrandpaShrineLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>GrandpaShrineLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение дедушкиного святилища. Соответствует верхнему левому углу. |
|- | |- | ||
− | | <tt>GreenhouseLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>GreenhouseLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение теплицы по умолчанию. Соответствует верхнему левому углу фундамента теплицы. |
|- | |- | ||
− | | <tt>IgnoreLightingTiles T</tt>²<br />''( | + | | <tt>IgnoreLightingTiles T</tt>²<br />''(действует в помещениях)'' |
− | | | + | | Следует ли игнорировать огни на <tt>Front</tt> и <tt>Buildings</tt> слоях.<br />''Например: <tt>IgnoreLightingTiles true</tt>.'' |
|- | |- | ||
− | | <tt>indoorWater T</tt>²<br />''( | + | | <tt>indoorWater T</tt>²<br />''(действует в помещениях)'' |
− | | | + | | Включает водную логику (т.е. рыбалка и т.д.) в этом месте. |
|- | |- | ||
− | | <tt>KitchenStandingLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>KitchenStandingLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует в фермерском доме)'' |
− | | | + | | Позиция, в которой будет стоять супруг игрока при использовании кухни. |
|- | |- | ||
− | | <tt>Light [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''( | + | | <tt>Light [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Добавляет источники света. Поле {t|type}} - вид источника света (например, 4 для двух свечей), и {{t|x}} {{t|y}} - координаты тайла. Поле {{t|type}} может принимать следующие значения: |
− | * <tt>1</tt> (lantern); | + | * <tt>1</tt> (lantern)''(фонарь)''; |
− | * <tt>2</tt> (window); | + | * <tt>2</tt> (window)''(окно)''; |
− | * <tt>4</tt> (sconce); | + | * <tt>4</tt> (sconce)''(подсвечник)''; |
− | * <tt>5</tt> (cauldron); | + | * <tt>5</tt> (cauldron)''(котёл)''; |
− | * <tt>6</tt> (indoor window); | + | * <tt>6</tt> (indoor window)''(внутреннее окно)''; |
− | * <tt>7</tt> (projector). | + | * <tt>7</tt> (projector)''(прожектор)''. |
− | + | Любое другое значение приведет к падению игры.<br />''Например: <tt>Light 3 8 4 6 8 4 11 8 4 3 2 5 10 2 5 6 19 5 5 15 5 5 11 5 11 12 5</tt> (Гильдия искателей приключений).'' | |
|- | |- | ||
− | | <tt>LocationContext Default</tt><br />''( | + | | <tt>LocationContext Default</tt><br />''(действует в любом месте)'' |
− | | | + | | Устанавливает карту как часть материка для целей игровой логики, таких как погода. |
|- | |- | ||
− | | <tt>LocationContext Island</tt><br />''( | + | | <tt>LocationContext Island</tt><br />''(действует в любом месте)'' |
− | | | + | | Устанавливает карту как часть Имбирного острова для целей игровой логики, таких как погода. |
|- | |- | ||
− | | <tt>MailboxLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>MailboxLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение почтового ящика игрока. Соответствует верхнему левому углу. |
|- | |- | ||
− | | <tt>Music {{t|string name}}</tt><br />''( | + | | <tt>Music {{t|string name}}</tt><br />''(действует в любом месте)'' |
− | | | + | | Задает музыку, которая воспроизводится при входе игрока, где {{t|name}} - наименование файла музыки.<br />''Например: <tt>Music MarlonsTheme</tt>.'' |
|- | |- | ||
− | | <tt>Music {{t|int start}} {{t|int end}} {{t|string name}}</tt><br />''( | + | | <tt>Music {{t|int start}} {{t|int end}} {{t|string name}}</tt><br />''(действует в любом месте)'' |
− | | | + | | Задает музыку, которая воспроизводится при входе проигрывателя, где {{t|name}} - имя сигнала в аудиофайлах, музыка будет воспроизводиться только в том случае, если время находится между {{t|int start}} (включительно) и {{t|int end}}(исключительно).<br />''например: <tt>Music 800 1200 MarlonsTheme</tt>.'' |
|- | |- | ||
− | | <tt>NightTiles [{{t|string layerName}} {{t|int x}} {{t|int y}} {{t|int tilesheetIndex}}]+</tt><br />''( | + | | <tt>NightTiles [{{t|string layerName}} {{t|int x}} {{t|int y}} {{t|int tilesheetIndex}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Меняет плитку после 7 вечера. Снаружи работет вместе с <tt>DayTiles</tt>: устанавливает <tt>DayTiles</tt> тайлы для загрузки карты с 6 утра до 7 вечера, затем <tt>NightTiles</tt> для загрузки с 7 вечера до конца дня. Используется в основном он для ламп. |
|- | |- | ||
− | | <tt>NPCWarp [{{t|int fromX}} {{t|int fromY}} {{t|string toArea}} {{t|int toX}} {{t|int toY}}]+</tt><br />''( | + | | <tt>NPCWarp [{{t|int fromX}} {{t|int fromY}} {{t|string toArea}} {{t|int toX}} {{t|int toY}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Эквивалентно <tt>Warp</tt>, но используется для NPC. |
|- | |- | ||
− | | <tt>Outdoors T</tt>²<br />''( | + | | <tt>Outdoors T</tt>²<br />''(действует в любом месте)'' |
− | | | + | | Определяет, находится ли место на открытом воздухе.<br />''Например: <tt>Outdoors true</tt>.'' |
|- | |- | ||
− | | <tt>ProduceArea {{t|int x}} {{t|int y}} {{t|int width}} {{t|int height}}</tt><br />''( | + | | <tt>ProduceArea {{t|int x}} {{t|int y}} {{t|int width}} {{t|int height}}</tt><br />''(действует в птичнике и хлеву)'' |
− | | | + | | Задает область, где животные могут размножаться в птичнике или хлеву.<br />''Например: <tt>ProduceArea 6 4 8 7</tt>.'' |
|- | |- | ||
− | | <tt>ScreenshotRegion {{t|int left}} {{t|int top}} {{t|int right}} {{t|int bottom}}</tt><br />''( | + | | <tt>ScreenshotRegion {{t|int left}} {{t|int top}} {{t|int right}} {{t|int bottom}}</tt><br />''(действует в любом месте)'' |
− | | | + | | Ограничивает часть карты, отображаемую при создании скриншотов.<br />''Например: <tt>ScreenshotRegion 0 27 69 61</tt>.'' |
|- | |- | ||
− | | <tt>SeasonOverride [{{t|string season}}]</tt><br />''( | + | | <tt>SeasonOverride [{{t|string season}}]</tt><br />''(действует в любом месте)'' |
− | | | + | | Берёт определенный сезон для большинства проверок игры. (Есть ли урожай в сезоне, какой спрайт-лист использовать, и т.д.) |
|- | |- | ||
− | | <tt>ShippingBinLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>ShippingBinLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение ячейки доставки по умолчанию. Соответствует верхнему левому углу. |
|- | |- | ||
− | | <tt>skipWeedGrowth T</tt>²<br />''( | + | | <tt>skipWeedGrowth T</tt>²<br />''(действует в любом месте)'' |
− | | | + | | Предотвращает размножение и распространение сорняков в этом месте. |
|- | |- | ||
− | | <tt>SpouseAreaLocation [{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>SpouseAreaLocation [{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Положение открытой зоны для супругов. Соответствует верхнему левому углу. |
|- | |- | ||
− | | <tt>Stumps [{{t|int x}} {{t|int y}} {{t|unused}}]+</tt><br />''( | + | | <tt>Stumps [{{t|int x}} {{t|int y}} {{t|unused}}]+</tt><br />''(действует в [[Тайный_лес|Тайном лесу]])'' |
− | | | + | | Ежедневно добавляет пни на карту Тайного леса. Третье поле для каждого пня, не используется.<br />''Например: <tt>Stumps 24 6 3 29 7 3 26 10 3 46 6 3 34 26 3 41 26 3</tt>.'' |
|- | |- | ||
| <tt>TreatAsOutdoors T</tt>²<br />''(valid in indoor locations)'' | | <tt>TreatAsOutdoors T</tt>²<br />''(valid in indoor locations)'' | ||
− | | | + | | Это место рассматривается как открытое для целей спавна чего-либо, кроме света со слоя <tt>Paths</tt> и получения [[Уголь|угля]] из камней.<br />''Пример: <tt>TreatAsOutdoors true</tt>.'' |
|- | |- | ||
− | | <tt>Trees [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''( | + | | <tt>Trees [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | |Добавляет деревья на карту. Поля {{t|x}} {{t|y}} - координаты тайла, и {{t|type}} - тип дерева (1: дуб, 2: клён, 3: сосна, 6: пальма, 7: грибное дерево).<br />''Например: <tt>Trees 17 18 2 20 31 2</tt>.'' |
|- | |- | ||
− | | <tt>UniquePortrait [{{t|str name}}]+</tt><br />''( | + | | <tt>UniquePortrait [{{t|str name}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Переключает портреты для NPC на уникальные варианты для местоположения. NPC <tt>Jane</tt> в локации <tt>Room</tt> переключится на портрет <tt>Portraits/Jane_Room</tt>.<br/>''Например: <tt>UniquePortrait Maru</tt>.'' |
|- | |- | ||
− | | <tt>UniqueSprite [{{t|str name}}]+</tt><br />''( | + | | <tt>UniqueSprite [{{t|str name}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Переключает спрайт-листы для NPC на уникальные варианты для местоположения. NPC <tt>Jane</tt> в локации <tt>Room</tt> will переключится на спрайт-лист <tt>Characters/Jane_Room</tt>.<br/>''Например: <tt>UniqueSprite Maru</tt>.'' |
|- | |- | ||
− | | <tt>ViewportFollowPlayer T</tt>²<br />''( | + | | <tt>ViewportFollowPlayer T</tt>²<br />''(действует в любом месте)'' |
− | | | + | | Заставляет окно игры центрироваться на игроке.<br />''например: <tt>ViewportFollowPlayer</tt>.'' |
|- | |- | ||
− | | <tt>Warp [{{t|int fromX}} {{t|int fromY}} {{t|string toArea}} {{t|int toX}} {{t|int toY}}]+</tt><br />''( | + | | <tt>Warp [{{t|int fromX}} {{t|int fromY}} {{t|string toArea}} {{t|int toX}} {{t|int toY}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Устанавливает тайлы, которые перемещают игрока на другую карту (например, двери). Поля {{t|fromX}} {{t|fromY}} - координаты тайла перехода, и {{t|toArea}} {{t|toX}} {{t|toY}} это название внутриигрового местоположения, в которое нужно переместиться, и координаты тайла внутри него<br />''Например: 6 20 Mountain 76 9''. |
|- | |- | ||
− | | <tt>WarpTotemEntry[{{t|int x}} {{t|int y}}]</tt><br />''( | + | | <tt>WarpTotemEntry[{{t|int x}} {{t|int y}}]</tt><br />''(действует на ферме)'' |
− | | | + | | Позиция, в которую игрок перемещается при телепортации на ферму с помощью Тотема телепортации или Скипетра Возврата. |
|- | |- | ||
− | | <tt>WindowLight [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''( | + | | <tt>WindowLight [{{t|int x}} {{t|int y}} {{t|int type}}]+</tt><br />''(действует в любом месте)'' |
− | | | + | | Добавляет источники света, которые горят только днем, когда нет дождя (например, свет, проникающий через окно). Смотри <tt>Light</tt> для получения дополнительной информации. |
|} | |} | ||
− | + | Используются следующие свойства, но, по-видимому, они не оказывают никакого эффекта: <tt>Arch</tt>, <tt>Debris</tt>, <tt>Spouse</tt>, и <tt>Fish</tt>. | |
− | <small>¹ | + | <small>¹ Свойства карты в основном обрабатываются различными методами класса <tt>GameLocation</tt>, особенно классом <tt>resetLocalState</tt>.</small><br /> |
− | <small>² | + | <small>² Значение <tt>T</tt> (сокращение от ''true''), но любое непустое значение тоже будет работать.</small> |
===Tile properties=== | ===Tile properties=== |
Версия 10:48, 1 сентября 2021
← Индекс
Неполный перевод Эта статья или её часть до сих пор не переведены на русский язык.
Вы можете оказать помощь в переводе путем ее редактирования. |
На этой странице объясняется, как редактировать карты. Это расширенное руководство для моддеров.
Вступление
Базовые компоненты
- Карта это расположение местности (например, воды, скал и земли), объектов местности (например, кустарников), зданий, дорожек и триггеров для определенной области. Когда вы достигаете края области или входите в здание, и экран становится черным во время перехода, вы перемещаетесь между картами.
- Каждая карта состоит из нескольких слоев, расположенных один над другим. Объекты на слое выше будут скрывать объекты на слоях ниже. Так расположены стандартные слои...
Название слоя Типичное содержание Back Рельеф, вода и основные функции (например, постоянные пути). Buildings Заполнители для зданий (например, фермерского дома). Любые плитки, размещенные на этом слое, будут действовать как стена, если свойство плитки не имеет "Проходимой" буквы "Т". Paths Полы, дорожки, трава и мусор (например, камни, сорняки и пни из таблицы "дорожки"), которые игрок может удалить. Front Объекты, которые нарисованы поверх вещей позади них, как и большинство деревьев. Эти объекты будут нарисованы поверх игрока, если игрок находится к северу от них, но позади игрока, если игрок находится к югу от них. AlwaysFront Объекты, которые всегда рисуются поверх других слоев, а также игрока. Это обычно используется для эффектов переднего плана, таких как лиственный покров. - (С Использованием Плитки) Существует 2 различных типа слоев, а также 5 основных слоев, Слой объектов (значок в виде облака) и слой плитки (значок сетки). Слой плитки-это место, где вы вносите изменения в карту (размещаете и удаляете плитки), а слои объектов-это место, где вы добавляете и редактируете данные плитки. Ваши слои должны соответствовать тем, что указаны выше. Обратите внимание, что в зависимости от карты у них может отсутствовать слой "Paths" или "AlwaysFront".
- Каждый слой состоит из множества тайлов, которые представляют собой квадраты размером 16×16 пикселей, расположенные в сетке для формирования видимой карты. Каждая плитка может иметь свойства (например, проходимая / заблокированная), специальную логику (например, действие, которое нужно выполнить, когда игрок наступит на них), и изображение, которое нужно показать. Изображение представлено индексом спрайта (или индексом плитки), который является его положением в связанной таблице спрайтов (см. Далее).
- Каждая карта имеет одну или несколько таблиц спрайтов (также известных как таблицы листов, когда речь идет о модах), которые содержат доступные плитки и изображения, собранные вместе для формирования видимой карты.
Координаты тайлов
Каждый тайл имеет координаты (x, y), которые представляют его положение на карте, где (0, 0) - верхний левый тайл. x значение увеличивается вправо, и y увеличивается вниз. Например:
Форматы карты
В моддинге Stardew Valley используются два формата карт: .tmx (из редактора тайловых карт) и .tbin (из ныне устаревшего редактора карт tIDE). Функции, поддерживаемые обоими форматами, почти идентичны, но есть несколько отличий:
Особенность | .tmx | .tbin |
---|---|---|
Формат | ✓ XML (в основном текст) | ✘ бинарный |
Редактировать тайлами | ✓ поддерживается | ✓ поддерживается с плагином |
Редактировать напрямую | ✓ можно открыть в текстовом редакторе | ✘ не поддерживается |
Переворачивание тайлов | ✓ поддерживается | ✘ не поддерживается |
Попорот тайлов | ✓ поддерживается | ✘ не поддерживается |
Управление версиями | ✓ эффективное хранение, может различать изменения | ✘ неэффективное хранение (необходимо копировать весь файл с каждой записью), не может различать изменения |
.tmx рекомендуется в соответствии с вышеизложенным, но оба формата удобны в использовании, и вы можете конвертировать их между собой, нажав File > Export As.
Приступая к работе
Существует два основных способа редактирования карты.
Использование SMAPI
Создание мода SMAPI требует программирования, но он намного мощнее, и несколько модов SMAPI могут редактировать одну и ту же карту. Если вы хотите использовать этот подход:
- Создание SMAPI мода.
- Смотри инструкции ниже для внесения изменений в карту.
Обратите внимание, что это также не исключает использования тайлов. Вы можете создавать/редактировать карты в тайлах, затем загружать/редактировать их в SMAPI.
Использование тайлов
Tiled - популярный редактор карт, который можно использовать для редактирования карт Stardew Valley, без необходимости программирования. Вам нужно распаковать XNB карту, отредактировать карту и создать Content Patcher или SMAPI мод и загрузить в него карту. Если вы хотите использовать этот подход:
- Установите последнюю версию Tiled.
- После установки в левом верхнем углу перейдите в Edit > Preferences > Plugins и включите плагин tbin (tbin.dll для Windows, libtbin.so для Linux, или libtbin.dylib для Mac).
- Установите следующие параметры:
Параметр Значение Описание View > Snapping > Snap to Grid ✓ Включен Необходимо для преобразования объектов обратно в формат игры. View > Highlight Current Layer ✓ Включен Делает выделение редактируемого тайла более понятным. - Смотри Модификации:Редактирование XNB файлов для помощи в распаковке и упаковке файлов карт.
- Смотри инструкции ниже для внесения изменений в карту.
(Если вы используете xnbcli для для распаковки оригинальных файлов карт, вам понадобится .tbin плагин, даже если вы планируете использовать .tmx поскольку xnbcli все еще производит .tbin файлы.)
Редактирование карты
Редактирование карт
Важное примечание: при создании пользовательских карт всегда начинайте с ванильной карты и редактируйте ее. Не пытайтесь создать новую карту в Tiled; в игре должны присутствовать определенные плитки, свойства карты и т.д.
Если вы используете Tiled:
- Распакуйте папку Content/Maps и создайте копию для редактирования ваших карт. Используйте эту копию папки для редактирования любых карт, прежде чем перемещать их в папку мода.
- Используйте тот же метод, чтобы распаковать карту, которую вы хотите отредактировать, если она не является ванильной, а затем поместите карту в папку редактирования.
- Откройте .tbin или .tmx файл в Tiled. Примечание: убедитесь, что файл находится в той же папке, что и распакованные таблицы тайлов!
- Внесите свои изменения.
- Сохраните файл. Не используйте Save as, так как это может повредить карту.
- Переместите .tbin или .tmx файл, и любые пользовательские таблицы тайлов, которые ему нужны, в папку вашего мода. Поместите их в папку assets.
- Загрузите свою карту через SMAPI или Content Patcher (или другой фреймворк модов).
Пользовательская карта
Вы можете добавить в игру новую карту и местоположение.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { // игра очищает локации при загрузке сохранения, поэтому сделайте это после загрузки сохранения helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // получиь внутренний ключ ресурса для файла карты string mapAssetKey = this.Helper.Content.GetActualAssetKey("assets/map.tmx", ContentSource.ModFolder); // добавить местоположение GameLocation location = new GameLocation(mapAssetKey, "YourLocationName") { IsOutdoors = false, IsFarm = false }; Game1.locations.Add(location); }
- Примечание:
- Ваша карта должна быть построена по определенному шаблону; посмотрите на карты в папке Content/Maps для примера.
- После загрузки файла сохранения вы можете использовать эту команду для перехода к карте: debug warp YourLocationName X Y
Если вы используете Tiled:
- Вы можете создать карту в Tiled, но вам нужен SMAPI, чтобы добавить ее в игру.
Настраиваемый лист тайлов
Вы можете добавлять на карту пользовательские спрайты, тайлы или изображения. Обязательно используйте префикс z_
перед ID чтобы избежать смещения индексов ванильных таблиц.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // Это позволяет получить ключ ресурса для файла tilesheet.png из папки вашего мода. Вы также можете загрузить таблицу игровых листов, например // helper.Content.GetActualAssetKey("spring_town", ContentSource.GameContent). string tilesheetPath = this.Helper.Content.GetActualAssetKey("tilesheet.png", ContentSource.ModFolder); // Получить экземпляр игрового местоположения, которое вы хотите исправить. Для фермы вместо этого используйте Game1.getFarm (). GameLocation location = Game1.getLocationFromName("Town"); // Добавить лист тайлов TileSheet tilesheet = new TileSheet( id: "z_your-custom-spritesheet", // уникальный ID для таблицы тайлов map: location.map, imageSource: tilesheetPath, sheetSize: new xTile.Dimensions.Size(32, 64), // размер тайла вашего изображения в таблице тайлов. tileSize: new xTile.Dimensions.Size(16, 16) // для карт всегда должно быть 16x16 ); location.map.AddTileSheet(tilesheet); location.map.LoadTileSheets(Game1.mapDisplayDevice); }
- Чтобы изменить тайлы с помощью новой таблицы тайлов, смотри #Тайлы.
Если вы используете Tiled:
- Создайте свою таблицу спрайтов и поместите ее в ту же папку, что и ваш .tbin или .tmx файл карты. Это должно быть изображение в формате PNG с изображениями, разделенными на плитки 16x16 (Для примера, смотри Модификации:Редактирование_XNB_файлов#Введение).
- Откройте файл карты в Tiled.
- Добавьте свой спрайт-лист:
- Добавьте свои спрайты на карту:
- На панели Layers, нажмите на слой, который хотите редактировать.
- На панели Tilesets, нажмите на вкладку с вашим спрайт-листом.
- На панели Tilesets, нажмите на один тайл, чтобы выбрать его. Чтобы выбрать несколько, щелкните и перетащите курсор.
- Наведите курсор на карту, и вы увидите наложение выбранных вами тайлов.
- Нажмите на карту, чтобы разместить тайлы на выбранном слое.
Свойства карты
Каждая карта может иметь несколько свойств карты, которые определяют атрибуты и поведение, связанные с картой, такие как освещение, музыка, точки деформации и т.д. Каждое свойство имеет имя (которое определяет тип свойства), тип (в Stardew Valley, всегда 'строка'), и значение (которое настраивает свойство). Смотри свойства ниже.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // получить значение 'Music' string currentMusic = Game1.currentLocation.map.Properties.TryGetValue("Music", out PropertyValue rawMusic) ? rawMusic.ToString() : null; // добавить или установить значение 'Music' Game1.currentLocation.map.Properties["Music"] = "MarlonsTheme"; // удалить значение 'Music' Game1.currentLocation.map.Properties.Remove("Music"); }
Если вы используете Tiled:
- Нажмите Map на панели инструментов и выберете Map Properties.
- Посмотрите и отредактируйте свойства с помощью графического интерфейса.
Свойства тайла
Свойства тайла задаются отдельно для каждого тайла. Они могут изменять поведение игры (например, может ли игрок пройти по тайлу), или выполнить действие когда игрок наступает/нажимает на него. У каждого свойства есть имя, тип (в Stardew Valley всегда 'строка'), и значение.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // например местоположение и координаты плитки GameLocation location = Game1.currentLocation; int tileX = 10; int tileY = 20; // получить свойство string value = location.doesTileHaveProperty(tileX, tileY, "Diggable", "Back"); // добавить или установить свойство location.setTileProperty(tileX, tileY, "Back", "Diggable", "T"); // удалить свойство тайла Layer layer = location.map.GetLayer("Back"); Tile tile = layer.PickTile(new xTile.Dimensions.Location(tileX, tileY) * Game1.tileSize, Game1.viewport.Size); tile.Properties.Remove("Diggable"); //tile.TileIndexProperties.Remove("Diggable"); // NOTE: removing a tile index property will affect all tiles of this type }
Если вы используете Tiled:
- В Tiled свойства тайла представлены двумя типами: object properties применяется только к выбранному тайлу, в то время как tile properties применитесь к каждому экземпляру этого тайла. В общем, вы всегда будете устанавливать object properties, так что мы рассмотрим только их.
- Для редактирования свойств существующего объекта:
- Чтобы добавить новый объект:
- Выберите слой объекта на панели Layers.
Для каждого слоя тайлов должен быть один слой объектов. Если слой объекта отсутствует, создайте слой с тем же именем, что и слой тайлов. - Выберете инструмент insert rectangle на панели инструментов.
- Нажмите и перетащите прямоугольник на тайл, которую вы хотите отредактировать. Убедитесь в том, что он привязан к сетке тайла (смотри #Использование Tiled), и выбран только один тайл.
- Переименуйте TileData в Name
- О том, как редактировать его свойства, смотри в предыдущем разделе.
- Выберите слой объекта на панели Layers.
Тайлы
Вы можете редактировать тайлы для существующей карты.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // пример местоположения и координаты тайла GameLocation location = Game1.currentLocation; int tileX = 10; int tileY = 20; // удалить тайл со слоя location.removeTile(tileX, tileY, "Back"); // добавить тайл Layer layer = location.map.GetLayer("Back"); TileSheet tilesheet = location.map.GetTileSheet("tilesheet name"); layer.Tiles[tileX, tileY] = new StaticTile(layer, tilesheet, BlendMode.Alpha, tileIndex: 100); // Изменить индекс тайла // переключение поведения водного тайла location.waterTiles[tileX, tileY] = false; // true: вода, false: не вода }
Если вы используете Tiled:
- Смотри документацию по Tiled.
Тайлы анимации
Вы можете анимировать плитки для создания эффектов, таких как Гил в кресле-качалке (смотри пример справа).
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { GameLocation location = Game1.currentLocation; // добавить анимированный тайл Layer layer = location.map.GetLayer("Buildings"); TileSheet tilesheet = location.map.GetTilesheet("tilesheet name"); layer.Tiles[tileX, tileY] = new AnimatedTile( layer, new StaticTile[] { new StaticTile(layer, tilesheet, BlendMode.Alpha, tileID), new StaticTile(layer, tilesheet, BlendMode.Alpha, tileID), new StaticTile(layer, tilesheet, BlendMode.Alpha, tileID), new StaticTile(layer, tilesheet, BlendMode.Alpha, tileID) }, 250 // interval in milliseconds ); }
Если вы используете Tiled:
- Нажмите кнопку изменить (значок гаечного ключа) для таблицы листов на панели Tilesets.
- Выберите тайл, который вы хотите анимировать в новом представлении.
- Нажмите Tileset > Tile Animation Editor на панели инструментов, чтобы отобразить это окно.
- В новом окне, перетащите плитки из таблицы в поле слева, чтобы создать кадр (одно изображение в последовательности).Если вам нужно удалить кадры, выберете их и нажмите Backspace/Delete(для Windows) или fn + Backspace(для Apple)
- Дважды щелкните, чтобы изменить продолжительность пребывания каждого кадра на экране (в миллисекундах). Убедитесь, что каждый кадр имеет одинаковое время; игра не может обрабатывать разное время кадров. Например, вот редактор анимации, показывающий одну из плиток раскачивания Гила:
- Когда вы закончите, закройте панель.
- Анимированные тайлы на панели Tilesets теперь буут иметь символ в правом нижнем углу:
Анимация теперь является частью этого тайла. Каждый экземпляр этого тайла на карте теперь будет иметь одну и ту же анимацию.
Переворот/поворот тайла
Вы можете поворачивать и переворачивать тайлы без необходимости создавать повернутые/перевернутые версии спрайт-листов. Для этого необходимо установить SMAPI 3.4 или более поздней версии; базовая игра не распознает преобразования тайлов.
Если вы используете SMAPI:
public override void Entry(IModHelper helper) { helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; } private void OnSaveLoaded(object sender, SaveLoadedEventArgs args) { // получить тайл GameLocation location = Game1.currentLocation; Layer layer = location.map.GetLayer("Buildings"); Tile tile = layer.Tiles[tileX, tileY]; // повернуть на 45° tile.Properties["@Rotation"] = 45; // перевернуть (0 = нормально, 1 = горизонтально, 2 = вертикально) tile.Properties["@Flip"] = 1; }
Если вы используете Tiled:
- Примечание: это работает только при редактировании .tmx файла. Преобразования тайлов не поддерживаются .tbin плагином.
- Выбрав инструмент штамп, нажмите на тайл в спрайт-листе, который вы хотите использовать.
- Нажмите кнопки перевернуть или повернуть (смотри изображение справа).
- Нажмите на карту, чтобы разместить перевернутый/повернутый тайл.
Свойства
Свойства карты
Свойства карты:¹
Свойство | Описание |
---|---|
AmbientLight <byte r> <byte g> <byte b> (действует в помещениях и местах, где не учитывается наружное освещение) |
Устанавливает RGB цвет вычитается из белого (255,255,255), чтобы создать окружающий свет. Например: AmbientLight 95 95 95 для нормального внутреннего дневного освещения. |
BackwoodsEntry [<int x> <int y> ](действует на ферме) |
Позиция, в которую игрок попадает при входе на ферму из Глуши. |
BrookSounds [<int x> <int y> <int type> ](действует на открытом воздухе) |
type}} может принимать следующие значения:
|
BusStopEntry [<int x> <int y> ](действует на ферме) |
Позиция, в которую игрок переходит при входе на ферму с автобусной остановки. |
CanCaskHere T² (действует в любом месте) |
Позволяет бочкам работать в этом месте. |
DayTiles [<string layerName> <int x> <int y> <int tilesheetIndex> ]+(действует в любом месте) |
Устанавливает тайлы, которые будут появляться с 6 утра до 7 вечера. В любое время до 7 вечера тайл находится в нужном положении (<x> , <y> ) на сопоставлении слоев карты <layerName> , изменяет свой индекс спрайт-листа на указанный <tilesheetIndex> , и добавляет свечение для имитации дневного света. Свечение будет добавлено только в том случае, если местоположение находится в помещении, а <tilesheetIndex> равен 256, 288, 405, 469 или 1224. Параметры могут быть повторены, чтобы повлиять на несколько тайлов.Например: DayTiles Front 3 1 256 Front 3 2 288. |
Doors [<int x> <int y> <string sheetID> <int tileID> ]+(действует в помещениях) |
Добавляет функциональности межкомнатным дверям. Используется с свойством тайла Action Door. <x> <y> поля - это координаты тайла, <sheetID> это название листа, содержащего дверной спрайт, и <tileID> - индекс тайла в спрайт-листе.
|
Fall_Objects T² Spring_Objects T² Summer_Objects T² Winter_Objects T² |
Следует ли создавать сезонные объекты на создаваемых тайлах на основе данных из Data\Locations.xnb. Например: Fall_Objects. |
FarmCaveEntry [<int x> <int y> ](действует на ферме) |
Позиция, в которую игрок переходит при входе на ферму из пещеры на ферме. |
FarmHouseEntry[<int x> <int y> ](действует на ферме) |
Изменяет положение Фермерского дома. Соответствует входной двери или положению, в котором игрок будет находиться при выходе из дома. |
Feed <int x> <int y> (действует в птичнике или хлеву) |
Задает местоположение кормораздатчика в птичнике или хлеву. Например: Feed 3 2. |
forceLoadPathLayerLights T² (действительно в местах, не связанных с фестивалями, на открытом воздухе) |
Следует ли загружать огни со слоя Paths на карты, где их обычно не было бы. Например: forceLoadPathLayerLights true. |
ForceSpawnForageables T² (действует в помещениях) |
Позволяет появляться кормовым предметам в этом месте. |
ForestEntry [<int x> <int y> ](действует на ферме) |
Положение, в котором находится игрок, когда он входит на ферму из Леса Синдерсэп. |
GrandpaShrineLocation [<int x> <int y> ](действует на ферме) |
Положение дедушкиного святилища. Соответствует верхнему левому углу. |
GreenhouseLocation [<int x> <int y> ](действует на ферме) |
Положение теплицы по умолчанию. Соответствует верхнему левому углу фундамента теплицы. |
IgnoreLightingTiles T² (действует в помещениях) |
Следует ли игнорировать огни на Front и Buildings слоях. Например: IgnoreLightingTiles true. |
indoorWater T² (действует в помещениях) |
Включает водную логику (т.е. рыбалка и т.д.) в этом месте. |
KitchenStandingLocation [<int x> <int y> ](действует в фермерском доме) |
Позиция, в которой будет стоять супруг игрока при использовании кухни. |
Light [<int x> <int y> <int type> ]+(действует в любом месте) |
type}} - вид источника света (например, 4 для двух свечей), и <x> <y> - координаты тайла. Поле <type> может принимать следующие значения:
Любое другое значение приведет к падению игры. |
LocationContext Default (действует в любом месте) |
Устанавливает карту как часть материка для целей игровой логики, таких как погода. |
LocationContext Island (действует в любом месте) |
Устанавливает карту как часть Имбирного острова для целей игровой логики, таких как погода. |
MailboxLocation [<int x> <int y> ](действует на ферме) |
Положение почтового ящика игрока. Соответствует верхнему левому углу. |
Music <string name> (действует в любом месте) |
Задает музыку, которая воспроизводится при входе игрока, где <name> - наименование файла музыки.Например: Music MarlonsTheme. |
Music <int start> <int end> <string name> (действует в любом месте) |
Задает музыку, которая воспроизводится при входе проигрывателя, где <name> - имя сигнала в аудиофайлах, музыка будет воспроизводиться только в том случае, если время находится между <int start> (включительно) и <int end> (исключительно).например: Music 800 1200 MarlonsTheme. |
NightTiles [<string layerName> <int x> <int y> <int tilesheetIndex> ]+(действует в любом месте) |
Меняет плитку после 7 вечера. Снаружи работет вместе с DayTiles: устанавливает DayTiles тайлы для загрузки карты с 6 утра до 7 вечера, затем NightTiles для загрузки с 7 вечера до конца дня. Используется в основном он для ламп. |
NPCWarp [<int fromX> <int fromY> <string toArea> <int toX> <int toY> ]+(действует в любом месте) |
Эквивалентно Warp, но используется для NPC. |
Outdoors T² (действует в любом месте) |
Определяет, находится ли место на открытом воздухе. Например: Outdoors true. |
ProduceArea <int x> <int y> <int width> <int height> (действует в птичнике и хлеву) |
Задает область, где животные могут размножаться в птичнике или хлеву. Например: ProduceArea 6 4 8 7. |
ScreenshotRegion <int left> <int top> <int right> <int bottom> (действует в любом месте) |
Ограничивает часть карты, отображаемую при создании скриншотов. Например: ScreenshotRegion 0 27 69 61. |
SeasonOverride [<string season> ](действует в любом месте) |
Берёт определенный сезон для большинства проверок игры. (Есть ли урожай в сезоне, какой спрайт-лист использовать, и т.д.) |
ShippingBinLocation [<int x> <int y> ](действует на ферме) |
Положение ячейки доставки по умолчанию. Соответствует верхнему левому углу. |
skipWeedGrowth T² (действует в любом месте) |
Предотвращает размножение и распространение сорняков в этом месте. |
SpouseAreaLocation [<int x> <int y> ](действует на ферме) |
Положение открытой зоны для супругов. Соответствует верхнему левому углу. |
Stumps [<int x> <int y> <unused> ]+(действует в Тайном лесу) |
Ежедневно добавляет пни на карту Тайного леса. Третье поле для каждого пня, не используется. Например: Stumps 24 6 3 29 7 3 26 10 3 46 6 3 34 26 3 41 26 3. |
TreatAsOutdoors T² (valid in indoor locations) |
Это место рассматривается как открытое для целей спавна чего-либо, кроме света со слоя Paths и получения угля из камней. Пример: TreatAsOutdoors true. |
Trees [<int x> <int y> <int type> ]+(действует в любом месте) |
Добавляет деревья на карту. Поля <x> <y> - координаты тайла, и <type> - тип дерева (1: дуб, 2: клён, 3: сосна, 6: пальма, 7: грибное дерево).Например: Trees 17 18 2 20 31 2. |
UniquePortrait [<str name> ]+(действует в любом месте) |
Переключает портреты для NPC на уникальные варианты для местоположения. NPC Jane в локации Room переключится на портрет Portraits/Jane_Room. Например: UniquePortrait Maru. |
UniqueSprite [<str name> ]+(действует в любом месте) |
Переключает спрайт-листы для NPC на уникальные варианты для местоположения. NPC Jane в локации Room will переключится на спрайт-лист Characters/Jane_Room. Например: UniqueSprite Maru. |
ViewportFollowPlayer T² (действует в любом месте) |
Заставляет окно игры центрироваться на игроке. например: ViewportFollowPlayer. |
Warp [<int fromX> <int fromY> <string toArea> <int toX> <int toY> ]+(действует в любом месте) |
Устанавливает тайлы, которые перемещают игрока на другую карту (например, двери). Поля <fromX> <fromY> - координаты тайла перехода, и <toArea> <toX> <toY> это название внутриигрового местоположения, в которое нужно переместиться, и координаты тайла внутри негоНапример: 6 20 Mountain 76 9. |
WarpTotemEntry[<int x> <int y> ](действует на ферме) |
Позиция, в которую игрок перемещается при телепортации на ферму с помощью Тотема телепортации или Скипетра Возврата. |
WindowLight [<int x> <int y> <int type> ]+(действует в любом месте) |
Добавляет источники света, которые горят только днем, когда нет дождя (например, свет, проникающий через окно). Смотри Light для получения дополнительной информации. |
Используются следующие свойства, но, по-видимому, они не оказывают никакого эффекта: Arch, Debris, Spouse, и Fish.
¹ Свойства карты в основном обрабатываются различными методами класса GameLocation, особенно классом resetLocalState.
² Значение T (сокращение от true), но любое непустое значение тоже будет работать.
Tile properties
Known tile properties (excluding specialised properties like TouchAction WomensLocker):¹
layer | property | explanation |
---|---|---|
Back | Bed T² | If the player stands on this tile, they're considered in bed for the purposes of stamina regen (in multiplayer) and pass-out logic. |
Back | Buildable T² | Allows farm buildings to be placed on this tile if there are no other obstructions. |
Back | Diggable T² | Marks the tile as diggable with the hoe and enables planting crops. Also allows grass to spread to this tile. |
Back | NoFishing T² | Prevents the player from casting the line onto this tile when fishing. |
Back | NoFurniture T² | Prevents the player from placing furniture on this tile. |
Back | NoSpawn All NoSpawn True |
Combines NoSpawn Grass and NoSpawn Tree. |
Back | NoSpawn Grass | Prevents debris (e.g. weeds or stones) from spawning on this tile. |
Back | NoSpawn Tree | Prevents trees from spawning on this tile. Prevents the player from planting trees on this tile, except on the farm. If a tree is already on this tile, prevents it from growing. |
Back | NoSprinklers T² | Prevents sprinklers from being placed on this tile. |
Back | NPCBarrier T² | Prevents NPCs from crossing this tile. |
Back | Passable T² | Lets players walk or place objects on this tile, even if they'd normally be blocked by a building tile or different property. Different from Buildings Passable T below. |
Back | Placeable T² | Prevents players from placing objects on this tile. |
Back | Type <str type>
|
Sets the tile type for various game logic (e.g. step sounds or planting crops), where <type> is one of Dirt, Stone, Grass, or Wood.
|
Back | Water T² | Marks the tile as a water tile for various game logic (i.e. items splash into it, can refill watering can from it, can possibly fish in it, can possibly place crab pots in it, will water nearby paddy crops, will block most open-tile checks, will regenerate health in it if indoors, and will draw animated overlay over it if outdoors; if in the Mines, Sewer, or Submarine; or otherwise not in the Desert). |
Back | WaterSource T² | Lets the player refill the watering can from this tile. |
Buildings | Passable T² | When placed on a water tile, the game no longer considers it open water (e.g. if it's a bridge). Different from Back Passable T above. |
Paths | Order <I>
|
To place on index 29 and 30 of the Paths tilsheet. Set the order the cabins will spawn at the creation of a Multiplayer save. |
The TouchAction property makes something happen when the player steps on the tile:
layer | property | explanation |
---|---|---|
Back | TouchAction Bus | Starts the Bus Ride to the Desert mini-cutscene, works in conjunction with Action BusTicket. |
Back | TouchAction ChangeIntoSwimsuit | Changes the player into their swimsuit and disables running. |
Back | TouchAction ChangeOutOfSwimsuit | Changes the player into their regular clothes and enables running. |
Back | TouchAction DesertBus | Lets you ride the bus back to the Bus Stop.. |
Back | TouchAction Emote <string npc> <int emoteID>
|
Finds the NPC whose name matches the <npc> field, and causes them to show the given <emoteID> above their head (4: empty can, 8: question mark, 12: angry, 16: exclamation, 20: heart, 24: sleep, 28: sad, 32: happy, 36: x, 40: pause, 52: videogame, 56: music note, 60: blush).
|
Back | TouchAction FacingDirection <string npc> <int direction>
|
Finds the NPC whose name matches the <npc> field, and make them face the given direction (0: up, 1: right, 2: down, 3: left).
|
Back | TouchAction legendarySword | Gives them the Galaxy Sword when holding a Prismatic Shard. |
Back | TouchAction MagicWarp <string area> <int x> <int y> [string prerequisite]
|
Warps the player to the <x> <y> tile coordinates in the given <area> with a magic sound and effects. If the [prerequisite] field is specified, only occurs if that flag is set via Game1.player.mailReceived.
|
Back | TouchAction PoolEntrance | Switches the player between swimming and walking mode. |
Back | TouchAction Sleep | Ends the day if the player confirms. |
The Action property makes something happen when the player interacts (e.g. clicks) with the tile:
layer | property | explanation |
---|---|---|
Buildings | Action AdventureShop | Shows the Adventurer's Guild shop screen. |
Buildings | Action Arcade_Prairie | Shows the Journey of the Prairie King arcade game. |
Buildings | Action Arcade_Minecart | Shows the Junimo Kart arcade game. |
Buildings | Action BuyBackpack | Shows a menu which lets the player upgrade their backpack if an upgrade is available. |
Buildings | Action Billboard | Shows the calendar menu. |
Buildings | Action Blacksmith | Opens Clint's shop menu. |
Buildings | Action BrokenBeachBridge | Prompts you to use wood to repair the bridge. |
Buildings | Action BusTicket | Offers to let you go to the Calico Desert if the Bus has been repaired. Works in conjunction with TouchAction Bus. |
Buildings | Action BuyQiCoins | Shows a dialogue which lets the player buy 100 Casino club coins. |
Buildings | Action ColaMachine | Offers to let the player buy a Joja cola. |
Buildings | Action ClubCards Action Blackjack |
Shows the casino blackjack minigame. |
Buildings | Action ClubComputer Action FarmerFile |
Shows a dialogue with play stats (steps taken, gifts given, dirt hoed, etc). |
Buildings | Action ClubSeller | Shows a dialogue which lets the player buy a Statue of Endless Fortune for one million gold. |
Buildings | Action ClubShop | Shows the casino shop menu. |
Buildings | Action ClubSlots | Shows the casino slots minigame. |
Buildings | Action Dialogue <text>
|
Shows a generic dialogue box with the given text. See dialogue format. Example: Action Dialogue Hi there @! |
Buildings | Action DivorceBook | Shows divorce options for the player's current marriage status (as if they clicked the divorce book). |
Buildings | Action Door <npcName> [npcName]
|
Sets up an interior door that cannot be opened unless the player has two or more hearts of friendship with any of the named NPC(s). Placed on the lower of the two door tiles. See dialogue format. Example: Action Door Abigail |
Buildings | Action ElliotBook | TODO: Explain what this does. |
Buildings | Action ElliotPiano | TODO: Explain what this does. |
Buildings | Action EnterSewer | Warps you to the sewer if you have obtained the key. |
Buildings | Action EvilShrineLeft | Turns your kids into doves for a prismatic shard. |
Buildings | Action EvilShrineCenter | Erases your ex-spouses memory of you. |
Buildings | Action EvilShrineRight | Toggles monster spawning for your farm. |
Buildings | Action Garbage <ID>
|
Has a chance to give a specific item to the player based on the <ID> . Can only be clicked once per day. TODO: Explain what each <ID> means.
|
Buildings | Action Gunther | Opens the museum menu where you can donate artifacts or claim rewards. |
Buildings | Action HMGTF | Gives you "??HMTGF??" when you have a Super Cucumber in your hand. |
Buildings | Action IceCreamStand | If Summer, shows the Ice Cream Stand shopping screen. Otherwise, the player will be told to come back in the summer. |
Buildings | Action JojaShop | Shows the Joja shopping screen. |
Buildings | Action Jukebox | Shows the jukebox menu to choose the ambient music. |
Buildings | Action kitchen | Shows the cooking menu. |
Buildings | Action Letter <string text>
|
Shows the letter menu on-screen with the given text, with the syntax used by Data\mail.xnb. Example: Action Letter Hey there!^I had some extra wood lying around... I thought maybe you could use it. Take care! ^ -Robin %item object 388 50 %% |
Buildings | Action LockedDoorWarp [<int toX> <int toY> <string toArea> <int openTime> <int closeTime> ]
|
Creates an activation warp normally used on doors with a time window for when it can be used. Note that you must use 24-hour times, i.e. 2000 for 8pm. Example: 6 29 SeedShop 900 2100 |
Buildings | Action LuauSoup | Used for the Luau Festival, this is where you insert a food item for the soup. |
Buildings | Action MagicInk | Adds the Magic Ink to your wallet. |
Buildings | Action Mailbox | Shows the next letter from the player's mailbox (if any). |
Buildings | Action Material | Shows a summary of the player's stockpiled wood and stone. |
Buildings | Action Message <string messageKey>
|
Loads a message with the given key from the Content\Strings\StringsFromMaps.xnb file and displays it in a dialogue box. |
Buildings | Action MessageOnce <int eventID> <string message>
|
If the player hasn't seen the event with ID <eventID> , marks that event seen and displays the given message text in a dialogue box. This does not parse dialogue format.
|
Buildings | Action MessageSpeech <string messageKey>
|
Identical to Action Message, but replaces the usual inspection cursor with a speech cursor. |
Buildings | Action MineSign <string message>
|
Shows a mini-dialogue box with the given raw message text. This does not parse dialogue format. |
Buildings | Action MinecartTransport | Shows the minecart destination menu (or a message if not unlocked). |
Buildings | Action MineElevator | Shows the mine elevator menu (to warp to a mine level) if the player has reached mine level 5+, else a mine elevator not working message. |
Buildings | Action NextMineLevel | Warps the player to the next mine level (or level 1 if they're not in the mine). |
Buildings | Action Notes <int noteID>
|
If the player has found the specified lost book, displays its museum note text and marks it read. Example: Action Notes 17 |
Buildings | Action NPCMessage <str name> "<str dialogueKey> "
|
If the named NPC is within 14 tiles of the player, reads dialogue with the given key from the string files and displays a dialogue box. See dialogue format. Example: Action NPCMessage Abigail "Strings\\StringsFromCSFiles:Event.cs.1022" |
Buildings | Action playSound <str cueName>
|
Play the sound or music with the given name. |
Buildings | Action QiCoins | Shows a dialogue which lets the player buy 10 Casino club coins if they have none, else shows how many they have. |
Buildings | Action SandDragon | Used for Part 3 of the Mysterious Mr. Qi Quest. |
Buildings | Action Shop | On festival maps, opens the festival shop. No effect on non-festival maps. |
Buildings | Action TownMailbox <ID>
|
TODO: Explain what this does. |
Buildings | Action Warp <int x> <int y> <str area>
|
Warps the player to the <x> <y> tile coordinate in the <area> game location.Example: Action Warp 76 9 Mountain |
Buildings | Action WarpCommunityCenter | Warps the player to the inside of the Community Center if they have access (else show an "it's locked" message). |
Buildings | Action WarpGreenhouse | Warps the player to the inside of their greenhouse if they've unlocked it, else shows a message about the greenhouse ruins. |
Buildings | Action WizardBook | If unlocked, you buy buildings from the wizard here. |
Buildings | Action WizardHatch | If you're good enough friends with the wizard you warp to his basement, if not you get told you can't go in. |
Buildings | Action WizardShrine | Shows the character customisation menu normally available from the Wizard's tower. |
¹ Tile properties are handled throughout the codebase using GameLocation::doesTileHaveProperty. Actions and touch actions are handled by GameLocation::performAction and GameLocation::performTouchAction respectively. Emote IDs are listed as Character constants.
² The T value (short for true) is conventional, but any non-empty value will work too.
Paths layer
The Paths layer has icon tiles from the paths tilesheet which affect game behavior on the map:
tile index | explanation | restrictions |
---|---|---|
0–7 | No effect? TODO: verify how the pathing logic uses it. | |
8 | Add this tile to the Light map property with light type 4 (sconce). | Indoors and festivals only.² |
9–12 | Spawn a tree when the location is created. Outside the farm, 50% chance to respawn each day. (See also 31–32.) Available trees: oak (9), maple (10), pine (11), and palm 1 (12). |
Outdoors only. |
13–18 | Spawn debris when the location is created, or randomly each day. Outside the farm, respawn in spring. Available debris: seasonal weed (13–15), rock (16–17), twig (18). |
Outdoors only. |
19 | Spawn a large log when the farm is created, with the top-left corner on this tile. | Farm only. |
20 | Spawn a boulder the farm is created, with the top-left corner on this tile.. | Farm only. |
21 | Spawn a hardwood stump when the farm is created (and every day on the forest farm), with the top-left corner on this tile. | Farm only. |
22 | Spawn grass when the location is created, or randomly afterwards. | Outdoors only. |
23 | Spawn a random oak, maple, or pine tree at growth stage 2–3 when the location is created. | Outdoors only. |
24–26 | Spawn a normal bush when the location is created. Medium bushes grow blackberries and salmonberries. Available bushes: large (24), medium (25), small (26). |
Outdoors only. |
27 | When the location is created, add this tile to the BrookSounds map property with the babblingBrook sound. | Outdoors only. |
28 | Spawn a grub here (33% chance per day, unless the map already has 50 grubs). | Mutant Bug Lair only. |
29–30 | Place prebuilt cabins in multiplayer based on the layout (29=nearby or 30=separate) and Order tile property, with the top-left corner on this tile. | Farm only. |
31–32 | Spawn a tree when the location is created. Outside the farm, 50% chance to respawn each day. (See also 9–12.) Available trees: palm 2 (31), mahogany (32). |
Outdoors only. |
33 | Spawn a golden walnut bush when the location is created. | Outdoors only. |
Notes:
- In the Mutant Bug Lair, debris spawn rate is reduced to 33% chance per day.
- Restriction can be overridden with forceLoadPathLayerLights map property.
Potential issues
Порядок листов тайлов
When you replace a vanilla map, don't change the order or IDs of the original tilesheets. Prefix new tilesheet IDs with z_
to avoid changing the original order.
- Why this causes problems
- For example, let's say you replace a map which normally has these tilesheets in Tiled:
- When you add a new tilesheet, note that the order changes from [paths, untitled tile sheet] to [customSheet, paths, untitled tile sheet]:
- If the game tries to access a tile from the first tilesheet, it will get it from customSheet instead of the expected Paths tilesheet. That can cause anything from visual glitches (e.g. showing the wrong tile images) to outright crashes (especially if the new tilesheet is smaller than the one it expected).
- To avoid that, always keep the original tilesheets in the same order and prefix new tilesheets with
z_
so they're added at the end:
- How to fix an affected tilesheet
- See "mod reordered the original tilesheets" below.
Local copy of a vanilla tilesheet
When editing a map in Tiled, you may need to copy vanilla tilesheets like path.png or spring_town.png into the map folder for Tiled to find. If the tilesheet is still there when you load the game, SMAPI will use it for your map instead of the game's vanilla tilesheet, which may have unintended effects (e.g. edits from recolor mods won't work in your map).
To avoid issues, you can either...
- Delete vanilla tilesheets from the folder before testing or releasing the mod.
- Rename the tilesheet file to start with a dot (like .spring_town.png) and reference that. When SMAPI loads the map in-game, it'll automatically ignore the dot and look for spring_town.png in the local files or Content/Maps folder.
Map-specific issues
The game makes some assumptions about maps which may break for modded maps. These are the known issues:
affected maps | issue |
---|---|
Maps/Farm Maps/Farm_Combat Maps/Farm_Fishing Maps/Farm_Foraging Maps/Farm_Mining |
|
Maps/FarmHouse* |
|
Maps/SpouseRooms |
|
- ↑ The grass sound is set in Grass::loadSprite, which is called from GameLocation::loadObjects if the Paths layer has tile index 22. (The game spawns a grass for each such tile, and later removes them.)
'Save as' in Tiled
When you use 'save as' in Tiled, never save into a different folder. That will change all the tilesheet references to point to the old folder, so it'll no longer work in-game. Instead, copy/move the map files to a different folder if needed.
Locating tilesheets in Tiled
When a map tilesheet is missing, never use the locate option to use a tilesheet from a different folder. That will add a complex tilesheet path which won't work in-game. Instead copy the tilesheets into the same folder as the map, and reference them from there.
Troubleshooting
See also potential issues above for common issues.
"Tilesheet paths must be a relative path without directory climbing (../)"
- What does this mean?
- Your map uses a tilesheet that's outside its folder root. That might happen if you used 'save as' in Tiled to save into a different folder, copied & pasted tiles between maps in different folders, or manually added a tilesheet from a different folder.
- For example:
📁 Stardew Valley/ 📁 Content/ 📁 Maps/ 🗎 townInterior <──┐ 📁 Mods/ │ 📁 YourModName/ │ ../../../Content/Maps/townInterior 📁 assets/ │ 🗎 your-map.tmx ───┘
- This isn't allowed since it's very fragile (e.g. players might install your mod in a different folder path).
- How do I fix it?
-
- Copy the tilesheets you're using into the same folder as the map.
- For unchanged vanilla tilesheets, rename them to start with a dot (like .townInterior.png). This tells SMAPI to ignore the file when loading the map in-game, and load the one in the Content folder instead.
- In Tiled, click the edit icon under the tilesheet.
- In the tab that opens, click Tileset > Tileset Properties.
- Click the 'Image' field, then the 'Edit' button to locate the tilesheet in the same folder.
For a screenshot guide of steps 3-5, see these images provided by Discord user foggywizard#7430.
- After fixing it, the above example would look like this:
📁 Stardew Valley/ 📁 Mods/ 📁 YourModName/ 📁 assets/ 🗎 your-map.tmx ───┐ 🗎 .townInterior.png <──┘ .townInterior.png
"mod reordered the original tilesheets"
- What does this mean?
- See tilesheet order for more info.
- How do I fix it?
- Always keep the original tilesheets in the same order and prefix new tilesheets with
z_
so they're added at the end:
- To rename an affected tilesheet in Tiled:
"mod has no tilesheet with ID '<name>'"
- What does this mean?
- You replaced one of the vanilla maps, but your custom map doesn't have all of the original map's tilesheets (or you changed their names in Tiled). This will cause a crash if the game tries to access the missing tilesheet.
- How do I fix it?
- Compare the original and custom maps in Tiled. For each tilesheet in the original map, make sure it's also in the custom map and has the same name (even if you're not using it).
- If you need to rename a tilesheet:
- In the tileset pane, click the tab for the tileset and then click the edit icon.
- Click Tileset > Tileset Properties from the top menu to show the properties pane.
- Change the Name field to match the original map's tilesheet name.
Смотри также
- Discord user foggywizard#7430 annotated some screenshot guides for using Tiled. These include an annotated overview, how to find where the coordinates are, and how to rename a tilesheet.