Dynamic Map Tiles Extended - DMTE

Dynamic Map Tiles Extended - DMTE

使地图图块动态化 - 实时改变图块、图块集和属性;图块可被推动和炸毁;可治疗或伤害;给予物品和金钱;播放音效和切换音乐;显示自定义事件;触发增益、减益、表情,以及

模组工具

动态地图图块 (DMT)

DMT 允许你对地图图块应用动作,这些动作可以通过多种方式触发。

[img]https://i.ibb.co/dJP8H2Z8/triggers.png[/img]

DMT 目前支持以下触发器:

  • Action - 玩家对图块执行操作时触发。
  • CropHarvest - 作物、花卉或采集作物被收获时触发。
  • CropPlanted - 作物、花卉或采集作物被种植时触发。
  • Enter - 玩家进入某个地点时触发。
  • Explode - 图块处于爆炸的爆裂范围内时触发。
  • Item - 玩家手持指定物品与图块互动时触发。
  • Load - 地图首次加载时触发。
  • MonsterSlain - 玩家击杀怪物时触发。
  • ObjectClicked - 指定物品完成生产并被收集时触发。
  • ObjectPlaced - 指定物品被放置时触发。
  • ObjectRemoved - 可使用工具移除的指定物品被移除时触发。
  • Off - 玩家离开图块时触发。
  • On - 玩家踩上图块时触发。
  • Push - 图块被推动时触发。
  • Pushed - 图块推动完成时触发。
  • Talk - 玩家与 NPC 对话时触发。
  • Tool - 在某个图块上使用特定工具时触发。

触发器的完整文档可在 GitHub 上找到。


[img]https://i.ibb.co/ZzbpVy0d/tile-actions.png[/img]

DMT 目前支持以下动作键:

地图相关动作

玩家相关动作

视觉和音频动作

游戏玩法动作

作物动作

杂项动作

动作的完整文档可在此处查阅:这里


[img]https://i.ibb.co/GfVPfPLp/getting-started.png[/img]

要开始使用 DMTE,首先安装模组。安装后,创建一个文件夹以便轻松访问,并为其命名,例如你的模组名。

打开文件夹并创建以下文件:

  • manifest.json - 任何星露谷物语模组所需的模组清单(详情可查看这里)
  • content.json - Content Patcher 模组的入口点(详情可查看这里)

Content Patcher 的文档详细说明了语法的填写方式,因此建议仔细阅读。此模组不需要作为依赖项添加,任何编辑都可以通过 Content Patcher 的 HasMod 条件有条件地添加。


[img]https://i.ibb.co/XrkQsQCW/how-to-add-tile-actions.png[/img]

图块动作可以通过两种方式添加到地图中:EditMap 和 EditData。

EditMap

任何图块动作键都可以直接添加到图块的属性中,通过编辑地图图块实现,如下所示:

{
    "Format": "2.8.0",
    "Changes": 
    [
        {
           "LogName": "Change A Tile Index When Stepped On A Specific Coordinate",
           "Action": "EditMap",
            "Target": "Maps/Farm",
            "MapTiles": 
            [
                {
                    "Position": 
                    { 
                        "X": 72, 
                        "Y": 15 
                    },
                    "Layer": "Back",
                    "SetProperties": 
                    {
                        "DMT/changeIndex_On": "69"
                    }
                }
            ]
        }
    ]
}

以上代码编辑了农场地图,并在位置 X:72、Y:15 的“Back”层图块上设置了属性 "DMT/changeIndex"。此属性带有触发器 "On",意味着当玩家踩上该图块时,属性将被激活。激活后,图块的纹理将更改为图块表中指定的索引(本例中为 "69")。

你可以在动作和触发器之间添加 Once 或 Swap,例如:

  • "DMT/changeIndex_Once_On"
  • "DMT/changeIndex_Swap_On"

Once 会在触发一次后移除该属性。
Swap 会将属性值与键前缀为 "Swap" 的属性进行交换,例如:

  • "DMT/changeIndex_Swap_On"
  • "SwapDMT/changeIndex_Swap_On"

你需要同时创建这两个条目才能使 Swap 生效。

EditData

该模组还提供了一个自定义数据字典,你可以将所有内容添加进去,这些内容会在游戏地点加载时自动应用。数据包含以下字段:

  • Locations:(可选) 应用属性的地点名称列表,例如:"Locations: ["Farm", "Beach"]" 或 "locations: ["Town", "Mountain", "Forest"]"。留空或省略将把动作应用到每个地点(不推荐)。

  • Layers:(可选) 应用属性的层 ID 列表,例如:"Layers: ["Back"]" 或 "layers: ["Buildings"]"。留空或省略将应用到每个层(不推荐)。

  • TileSheets:(可选) 在应用属性前检查的图块表 ID 列表。如果图块没有指定的图块表 ID,属性将不会被应用。例如:"TileSheets: ["indoors"]" 或 "tileSheets: ["outdoors"]"。

  • TileSheetPaths:(可选) 在应用属性前检查的图块表路径 ID 列表。如果图块没有指定路径的图块表,属性将不会被应用。

  • Indexes:(可选) 在应用属性前检查的图块索引数字 ID 列表。如果图块在图块表中的索引不在此列表中,属性将不会被应用。

  • Rectangles:(可选) 指定搜索区域的列表,例如:"Rectangles: [{"X": 5, "Y": 7, "Width": 3, "Height": 3}, {"X": 12, "Y": 23, "Width": 2, "Height": 6}]"。矩形是按图块而不是按大小搜索的。

  • Tiles:(可选) 指定应用动作的图块列表,例如:"Tiles: [{"X": 7, "Y": 18}, {"X": 24, "Y": 20}]"。建议与 Layers 一起使用。

  • Properties:(可选) 当条件满足时要应用的属性字典。此字段是旧格式;请改用 Actions。

  • Actions:对象列表,指定要应用于地图的属性的详细信息。动作具有以下格式:

    • LogName:(可选) 一个唯一名称,当与此属性相关的任何内容记录到控制台时都会包含此名称,便于调试。
    • Key:图块属性的键,例如 "DMT/give" 或 "DMT/animate"。
    • Value:图块属性的值,遵循你希望使用的动作所描述的格式。
    • Trigger:(依赖于动作) 用于激活此属性的触发器。
    • Once:(可选) 是否只运行此属性一次然后移除。默认为 false。
    • Swap:(可选) 触发后,将此键的值与键前缀为 Swap 的值进行交换(例如 DMT/sound 和 SwapDMT/sound)。默认为 false。

按照更新的格式,你的 Content Patcher 文件应如下所示:

{
  "Format": "2.8.0",
  "Changes": [
    {
      "LogName": "Slippery Tiles",
      "Action": "EditData",
      "Target": "DMT/Tiles",
      "Entries": {
        "{{ModId}}.IceTiles": {
          "Locations": [
            "Forest"
          ],
          "Layers": [
            "Back"
          ],
          "TileSheets": [
            "fest"
          ],
          "TileSheetPaths": [
            "Festivals"
          ],
          "Indexes": [
            226,
            227
          ],
          "Rectangles": [
            {
              "X": 0,
              "Y": 0,
              "Width": 100,
              "Height": 100
            }
          ],
          "Actions": [
            {
              "LogName": "Ice Tiles Festival",
              "Key": "DMT/slippery",
              "Value": "0.25",
              "Trigger": "Load",
              "Once": false
            }
          ]
        }
      }
    }
  ]
}

在此示例中,满足所列条件的图块会变得滑溜。


[img]https://i.ibb.co/vfszq64/known-issues.png[/img]

暂无已知问题。


[img]https://i.ibb.co/gK0CmYz/technical.png[/img]

这是 aedenthorn 原版 Dynamic Map Tiles 模组的更新版本,由 MindMeldMax 从头重写以实现更简单的扩展性。此模组替换并扩展了 DMT 框架,该框架允许模组开发者通过为单个或广泛的地图图块分配图块属性来创建动态的游戏机制。虽然大多数以前的 DMT 内容包无法在不经修改的情况下直接使用,但这些改动应该很小;不过,建议迁移到更新的语法。

需要 SMAPI 和 Content Patcher。

源代码:https://github.com/aedenthorn/StardewValleyMods/tree/master/DynamicMapTilesExtended


[img]https://i.ibb.co/fV9Sqfvw/credits.png[/img]