维护提醒

BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。

全站通知:

模组:地点上下文

来自星露谷物语维基
跳到导航 跳到搜索

目录

此页面解释如何编辑和创建地点上下文(location context)。这是面向模组开发者的高级指南。

原版上下文

  • 旧版游戏有两个硬编码的地点上下文枚举项:Default(用于星露谷地区)和 Island(用于姜岛地区)。现在,Data/LocationContexts 素材中的数据模型代替了它们。
  • 沙漠现在隶属于新增的 Desert 上下文(而不再属于 Default)。旧版中某些硬编码的沙漠逻辑(例如总是晴天)现在被调整为 Data/LocationContexts 上下文数据中的一部分。

格式

可以通过编辑新增的 Data/LocationContexts 素材文件来创建自定义上下文,以及在地点的 LocationContext 地图属性中设置上下文名称。

此素材文件内含一个“字符串 → 数据模型”查询,其中键名与 Name 字段一致,值为包含如下字段的数据模型:

必需字段

字段 效果
Name 此地点上下文的唯一字符串ID

玩家动作

字段 效果
AllowRainTotem (可选)是否可以在此处使用雨水图腾来强制明日降雨。若为 false,则在此处使用雨水图腾会显示“该物品无法在此处使用”消息。
RainTotemAffectsContext (可选)若设置,则在此处使用雨水图腾会改变指定地点上下文的天气。例如,在沙漠中使用雨水图腾会改变星露谷地区的天气。
MaxPassOutCost (可选)玩家在此地点(由于疲劳或在凌晨 2 点)昏倒,可能丢失的最大金币数。若忽略或设为 -1,则使用与 Default 上下文相同的值(默认为 Gold.png1,000)。
PassOutMail (可选)玩家在此地点(由于疲劳或在凌晨 2 点)昏倒,可能收到的信件的ID(假设之前没有收到过)。若多个信件可用,则会随机选取一个(除非指定了 SkipRandomSelection)。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
Id 此列表项的唯一字符串ID
Mail 欲添加的信件 ID

游戏会按照如下顺序在 Data/mail 中寻找存在的信件 ID(如果玩家丢失了金币,则 <billed>Billed,否则为 NotBilled<gender>FemaleMale):

  • <letter id>_<billed>_<gender>
  • <letter id>_<billed>
  • <letter id>

若在 Data/mail 没有匹配项,则游戏会发送 passedOut2

若信件 ID 以 passedOut 开头,则信件文本中的 {0} 会被自动替换为丢失的金币数量,且不会出现在收集品页面中。

MaxPassOutCost (可选)可能丢失的最大金币数量。此字段会被用于该地点上下文的 MaxPassOutCost 之后(也就是,基于 MaxPassOutCost 计算得到的随机值会被该字段截断)。默认为无限。
Condition (可选)一个游戏状态查询,指示此列表项是否可用。默认为总是可用。
SkipRandomSelection (可选)若为 true,则在具备 Condition 条件时发送此信件,而非发送随机信件。默认为 true。

If true, send this mail if the Condition matches instead of choosing a random valid mail. Default false.

PassOutLocations (可选)当玩家(由于疲惫或在凌晨 2 时)在此地点晕倒在另一个地点上下文处开启新的一天,此字段用于指示玩家醒来的地点。(若玩家在同一个上下文晕倒和开启下一天,则会在其睡觉的最后一张床上醒来)。

若选中的地面不包含床且不具有 AllowWakeUpWithoutBed 地图属性,则玩家会在农舍中醒来。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
Id 此列表项的唯一字符串 ID
Location 内部地点名称。
Position 此地点的默认地块坐标,为一个具有 XY 字段的数据模型。若此地点具有床,则玩家会被放置在第一个找到的床。

The default tile position within the location, specified as an object with X and Y fields. If the location has any bed furniture, they'll be placed in the first bed found instead.

Condition (可选)一个游戏状态查询,指示词列表项是否可用。默认为总是可用。

若没有指定地点或没有匹配地点,则玩家会在家中的床上醒来。

ReviveLocations (可选)若玩家在战斗中被打晕,则此字段指示其苏醒位置。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
Id 此列表项的唯一字符串 ID
Location 内部地点名称。
Position 地点内的地块坐标,为一个具有 XY 字段的数据模型。
Condition (可选)一个游戏状态查询,指示此列表项是否可用。默认为总是可用。

若选中的地点有一个键名为 PlayerKilled 的标准事件(键名中不可包含 / 或事件前提),则此事件会在玩家醒过来时播放,且游戏会使用遗失物品或金币逻辑。游戏不会追踪此事件,因此玩家每次苏醒时都会播放此事件。如果没有事件,则玩家醒来时不会丢失物品或金币。

若没有指定地点或没有匹配地点,则玩家会在哈维的诊所醒来。

季节

字段 效果
SeasonOverride (可选)此地点上下文终年保持的季节(取 springsummerfallwinter 之一)。例如,将此字段设为 summer 会使得此地点上下文终年为夏季,无论日历上的季节为何。若忽略,则使用日历季节。

天气

字段 效果
WeatherConditions (可选)此地点上下文的各地点的天气逻辑(若指定了 CopyWeatherFromLocation,则忽略此字段)。默认为总是晴天。若设定了多组数据,则使用第一个匹配的。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
Id 此列表项的唯一字符串 ID
Weather 欲设置的天气 ID
Condition (可选)一个游戏状态查询,指示此列表项是否可用。默认为总是可用。
CopyWeatherFromLocation (可选)用于拷贝其他地点的天气,此字段应当为欲拷贝地点的 Name(即,唯一 ID)。

若此地点上下文中有某个被动节日正处于活跃状态,则无论天气字段为何,游戏中都会是晴天。

音乐

字段 效果
DefaultMusic (可选)玩家进入该地点时播放的音乐 ID。此字段可以被 Music 地图属性覆盖。虽然此字段名为“默认”音乐,但实际上要比下文提到的季节音乐优先级高。若忽略,则此字段无效。
DefaultMusicCondition (可选)一个游戏状态查询,指示是否应当使用 DefaultMusic(如果没有播放更具体的音乐)。默认为总是使用。
DefaultMusicDelayOneScreen (可选)当玩家切换地点,音乐改变时,是否静音或播放环境音(若有),直到下一次传送(类似于星露谷地区)。默认为 false。
Music (可选)该地点上下文上午播放的声音提示 ID 的列表。若为雨天,或地图具有 Music 地图属性,或该地点上下文 DefaultMusic 字段非空,则不使用此字段。若指定多个值,则会按列表顺序每天选取一首播放。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
Id (可选)当前列表项的唯一字符串 ID。默认为 Track 字段的取值。
Track 欲播放的音轨 ID
Condition (可选)一个游戏状态查询,指示此列表项是否可用。默认为总是可用。
DayAmbience
NightAmbience
(可选)没有正在播放的音乐时,背景音效的声音提示 ID,这两个字段分别用于白天和晚上。两个字段都默认为空。
PlayRandomAmbientSounds (可选)是否基于季节和事件等因素播放随机室外背景音效(例如鸟叫、蟋蟀叫、雨天的嚎叫)。这与 DayAmbienceNightAmbience 字段无关。默认为 true。

高级

字段 效果
CustomFields 此列表项的自定义字段