Line 6,282: |
Line 6,282: |
| ====Other changes==== | | ====Other changes==== |
| * The game no longer crashes when playing audio which doesn't exist. It now logs an error and returns a default quiet click sound instead. (If you use <code>try..catch</code> to check if an audio cue exists, you should check <code>Game1.soundbank.Exists(name)</code> instead.) | | * The game no longer crashes when playing audio which doesn't exist. It now logs an error and returns a default quiet click sound instead. (If you use <code>try..catch</code> to check if an audio cue exists, you should check <code>Game1.soundbank.Exists(name)</code> instead.) |
| + | |
| + | ===Custom buffs=== |
| + | : ''See also: [[#Buff overhaul|buff overhaul]].'' |
| + | |
| + | You can now define custom buffs by editing the new <samp>Data/Buffs</samp> asset. You can then use the buff from other places like <samp>Data/Object</samp>'s <samp>Buff</samp> field. |
| + | |
| + | This consists of a string → model lookup, where... |
| + | * The key is a [[Modding:Modder Guide/Game Fundamentals#Unique string IDs|unique string ID]] for the buff. |
| + | * The value is a model with the fields listed below. |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! field |
| + | ! purpose |
| + | |- |
| + | | <samp>DisplayName</samp> |
| + | | A [[Modding:Tokenizable strings|tokenizable string]] for the buff name. |
| + | |- |
| + | | <samp>Description</samp> |
| + | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the buff name. Default none. |
| + | |- |
| + | | <samp>IsDebuff</samp> |
| + | | ''(Optional)'' >Whether this buff counts as a debuff, so its duration should be halved when wearing a [[Sturdy Ring|sturdy ring]]. Default false. |
| + | |- |
| + | | <samp>GlowColor</samp> |
| + | | ''(Optional)'' The glow color to apply to the player. See [[#Color fields|color format]]. Default none. |
| + | |- |
| + | | <samp>Duration</samp> |
| + | | The duration in milliseconds for which the buff should be active. This can be the exact value <samp>-999888</samp> for a buff that should last for the rest of the day. |
| + | |- |
| + | | <samp>MaxDuration</samp> |
| + | | ''(Optional)'' The maximum buff duration in milliseconds. If specified and larger than <samp>Duration</samp>, a random value between <samp>Duration</samp> and <samp>MaxDuration</samp> will be selected for each buff. Default none. |
| + | |- |
| + | | <samp>IconTexture</samp> |
| + | | The asset name for the texture containing the buff's sprite. |
| + | |- |
| + | | <samp>IconSpriteIndex</samp> |
| + | | ''(Optional)'' The sprite index for the buff icon within the <samp>IconTexture</samp>. Default 0. |
| + | |- |
| + | | <samp>Effects</samp> |
| + | | ''(Optional)'' The buff attributes to apply. Default none. |
| + | |
| + | This consists of a model with any combination of these fields: |
| + | {| class="wikitable" |
| + | |- |
| + | ! field |
| + | ! purpose |
| + | |- |
| + | | <samp>FarmingLevel</samp><br /><samp>FishingLevel</samp><br /><samp>ForagingLevel</samp><br /><samp>LuckLevel</samp><br /><samp>MiningLevel</samp> |
| + | | ''(Optional)'' An amount applied to the matching [[Skills|skill level]] while the buff is active. This can be negative for a debuff. Default 0. |
| + | |- |
| + | | <samp>Attack</samp><br /><samp>Defense</samp><br /><samp>MagneticRadius</samp><br /><samp>MaxStamina</samp><br /><samp>Speed</samp> |
| + | | ''(Optional)'' An amount applied to the player's [[attack]], [[defense]], [[Magnetism|magnetic radius]], maximum [[Energy|stamina]], or [[speed]] while the buff is active. This can be negative for a debuff. Default 0. |
| + | |} |
| + | |- |
| + | | <samp>CustomFields</samp> |
| + | | ''(Optional)'' The [[#Custom data fields|custom fields]] for this entry. |
| + | |} |
| | | |
| ===Custom data fields=== | | ===Custom data fields=== |