门用五金

门用五金

添加了两个功能完整的门,作为可制作、可购买的家具,可以打开、关闭和涂色。让模组制作者能够创建类似的门,以及带有钥匙和钥匙环的可上锁的门家具。

游戏玩法机制

[youtube]-deHuwqq9dc[/youtube]

概要

此模组实现以下功能:

  • 添加可制作或购买的(不可锁定)木门和铁门作为家具。
  • 提供一个可选下载,添加可锁定(可锁定)的木门和铁门作为可制作或购买的家具。
  • 添加配置选项,用于更改所添加门的制作和购买成本。
  • 为模组制作者提供一种非常简便的方法来创建自己的、可选锁定的门家具。
  • 实现门染色和自定义颜色选择器。
  • 实现自定义门家具描述(游戏默认不允许自定义家具描述)。
  • 实现玩家对门的开门、关门、上锁和开锁操作。
  • 实现门的自定义碰撞边界,使玩家只与门框本身碰撞,而非整个瓦片。
  • 为所有四种可能的旋转方向以及翻转实现正确的门动画,每个门共有八种可能的位置。
  • 使NPC在穿过门时自动开关门。
  • 提供指定延迟后门自动打开和自动关闭的选项。
  • 为可锁定的门添加门钥匙物品类型,并为钥匙管理添加钥匙环物品类型。
  • 添加钥匙命名、重命名和复制功能。

基本用法

你可以使用10个木材和5个硬木制作木门,或从罗宾处以2000金币购买。

你可以使用10个铁锭和5个精炼石英制作铁门,或从罗宾处以5000金币购买。

你可以在配置中更改所需的材料和价格。将材料留空或价格设为负数,将分别从制作和购买选项中移除该物品。

手持门时,你可以像旋转其他家具一样旋转它。要翻转门,请在手握门时按下翻转键(默认为F)。

门放置后,与其互动将使其打开或关闭。未上锁的门可以像其他家具一样被拾起。

要更改已放置门的颜色,可以将鼠标悬停在门上并滚动鼠标滚轮,或按下颜色键(默认为C)打开自定义颜色选择器。

可锁定的门

主模组文件不包含任何可锁定的门,但提供了对可锁定门的完整支持。有一个可选文件添加了两个可锁定的门,它们与两个普通门完全相同(除了名称中带有“可锁定”字样)。

要锁上一扇可锁定的门,走到它面前并按下锁定键(默认为L)。你必须面向并紧邻一扇门才能上锁或开锁。

第一次锁定一扇门时,它会给你一把钥匙并打开一个钥匙命名菜单,以便为钥匙命名。钥匙只对其创建时对应的门有效。

锁定的门无法被拾起。

要打开一扇可锁定的门,走到锁着的门前并按下锁定键。玩家背包中必须有对应的钥匙(或钥匙环上的钥匙)才能开锁。

钥匙可以使用组合键(默认为鼠标中键)进行组合,组合后会变成一个钥匙环。在背包中,按住一把钥匙(或钥匙环),悬停在另一把钥匙(或钥匙环)上,然后按下组合键。

要拆开钥匙环,请在不按住任何物品的情况下悬停在钥匙环上,然后按下组合键。

要复制一把门钥匙,在背包中悬停在钥匙上并按复制键(默认为C)。

要重命名一把门钥匙,在背包中悬停在钥匙上并按重命名键(默认为R)。

自动化

你可以在配置中设置门的全局自动化。

可以将门设置为碰撞时自动打开。NPC会在与门碰撞时自动开门(除非门是锁着的)。

可以设置在配置中指定延迟后门自动关闭。NPC会在10个游戏刻后自动关门(可在配置中更改)。

自动关门的计时器只有在没有玩家或NPC处于门范围内时才会倒计时。

自定义门精灵图

要更改此模组添加的两个门的精灵图,只需使用 Content Patcher 的 EditImage 函数指定它们的精灵图路径:

"aedenthorn.DoorFurniture_door"

要更改默认钥匙和钥匙环物品的精灵图,请使用 Content Patcher 的 EditImage 函数指定它们的精灵图路径:

"aedenthorn.DoorFurniture_key"

自定义门

创建基本自定义门非常简单。

首先,使用 Content Patcher 创建你的自定义门家具,例如:

    {
        "Action": "EditData",
        "Target": "Data/Furniture",
        "Entries": {
            "aedenthorn.DoorFurniture_door3": "aedenthorn.DoorFurniture_door3/door/1 3/1 1/4/100/2/{{i18n:aedenthorn.DoorFurniture_door3}}/0/aedenthorn.DoorFurniture_door/true"
        }
    },

其次,为你的门家具提供精灵图。这是最困难的部分,因为精灵图需要三个与游戏原始精灵图不同的帧(用于门把手在门另一侧的旋转2)。你可以参考下面的精灵图:

[img width=256]https://github.com/aedenthorn/StardewValleyMods/blob/master/DoorFurniture/assets/door.png?raw=true[/img]

精灵图中的每个门需要8帧,如下所示:

旋转0,旋转1(以及翻转后的旋转3),旋转2,打开帧1,打开帧2,旋转2打开帧1,旋转2打开帧2,旋转2打开后的帧。

如果门是可染色的,你需要像上面那样添加灰度覆盖层。

像往常一样告诉 Content Patcher 关于你的精灵图,例如:

    {
        "Action": "Load",
        "Target": "aedenthorn.DoorFurniture_door",
        "FromFile": "assets/door.png"
    },

第三,使用 Content Patcher 将此模组告知你的门家具,例如:

    {
        "Action": "EditData",
        "Target": "aedenthorn.DoorFurniture/dict",
        "Entries": {
            "aedenthorn.DoorFurniture_door3": {},
        }
    },

就这样!

对于高级自定义门,你可以在字典条目中添加许多不同的字段,例如:

    {
        "Action": "EditData",
        "Target": "aedenthorn.DoorFurniture/dict",
        "Entries": {
            "aedenthorn.DoorFurniture_door": {
                "Bounds": [
                    {
                        "X": 0,
                        "Y": 48,
                        "Width": 64,
                        "Height": 16
                    },
                    {
                        "X": 48,
                        "Y": 0,
                        "Width": 16,
                        "Height": 64
                    },
                    {
                        "X": 0,
                        "Y": 0,
                        "Width": 64,
                        "Height": 16
                    },
                    {
                        "X": 0,
                        "Y": 0,
                        "Width": 16,
                        "Height": 64
                    }
                ],
                "Type": "Door",
                "Description": "Can be opened and closed.",
                "KeyItem": "aedenthorn.DoorFurniture_key",
                "KeyRingItem": "aedenthorn.DoorFurniture_keyring",
                "OpenSound": "doorOpen",
                "CloseSound": "doorClose",
                "LockSound": "openBox",
                "UnlockSound": "openBox",
                "Lockable": false,
                "AutoOpen": false,
                "AutoCloseDelay": -1,
               "ColorSpriteOffset": {
                      "X": 0,
                      "Y": 96
                },
                "Colorable": true,
                "DefaultUncolored": true,
                "DefaultColor": {
                      "B": 0,
                      "G": 0,
                      "R": 0,
                      "A": 255
                },
                "Colors": null
            }
        }
    },

所有字段都可以安全地省略。

字段解释如下:

  • Bounds - 碰撞边界(以像素为单位),每个门旋转方向一个。
  • Type - 用于在工具提示中作为类别显示的彩色文本。
  • Description - 在工具提示中代替通用家具描述显示的内容。
  • KeyItem - 用作此类门的钥匙的物品的ItemId。
  • KeyRingItem - 用作此类门钥匙的钥匙环的物品的ItemId。
  • OpenSound - 门打开时播放的声音。
  • CloseSound - 门关闭时播放的声音。
  • LockSound - 门上锁时播放的声音。
  • UnlockSound - 门开锁时播放的声音。
  • AutoOpen - 无论模组配置设置如何,门是否应在玩家碰撞时自动打开。
  • AutoCloseDelay - 在自动关门之前等待的游戏刻数(负值表示不会自动关闭)。
  • Colorable - 此门是否可染色(需要在精灵图中包含灰度覆盖层)。
  • ColorSpriteOffset - 灰度覆盖层在精灵图上与未染色精灵图的x-y像素偏移量。
  • DefaultColor - 分配给(或用作占位符)未染色的可染色门的颜色。
  • DefaultUncolored - 默认颜色是否应改为显示未染色的精灵图。
  • Colors - 允许门被涂绘的自定义颜色列表。每个条目应包含“R”、“G”和“B”值。如果没有此列表,将使用游戏内的宝箱颜色。

模组配置

你可以使用GMCM编辑配置变量。选项包括:

  • 全局自动开门和关门设置
  • 门制作和购买成本
  • 按键绑定
  • 文本颜色

局限性

首先,请记住这些不是地图瓦片,它们是家具。所以,在我被问一百万次之前,不,它们不会根据你的地图重色模组而神奇地变色。幸运的是,你可以轻松实现自己的门,或者像上面解释的那样更改默认门的精灵图。

NPC不会尊重锁上的门——它们会直接穿过去;我认为由于它们的日程安排,另一种方案可能不可行。

技术信息

需要SMAPI。

实现了一个通用模组配置菜单接口,以便在游戏中更改配置设置。如果你有GMCM Options,你还可以在游戏中更改颜色。

代码位于https://github.com/aedenthorn/StardewValleyMods。

我所有星露谷物语模组的列表可在https://www.nexusmods.com/stardewvalley/articles/895找到。