Difference between revisions of "User:Pathoschild/Modding wishlist"

From Stardew Valley Wiki
Jump to navigation Jump to search
(→‎Small changes: + TouchAction Warp)
(→‎Medium changes: move consistent display name usage to done)
 
(19 intermediate revisions by 2 users not shown)
Line 6: Line 6:
  
 
===Small changes===
 
===Small changes===
* ☐ Add a <tt>TouchAction Warp</tt> tile property which is identical <tt>TouchAction MagicWarp</tt>, but without the sound/visual effects.
+
''All done!''
* ☐ Change all remaining <code>internal class</code> and <code>private class</code> to <code>public class</code> to simplify mod access.
 
  
 
===Medium changes===
 
===Medium changes===
* ☐ Some XNB files have a separate display name field, but only in non-English. Using display names consistently regardless of language would let mods rename things without breaking keys:
+
* ☐ Add map property for default warp location (e.g. <samp>Utility.getDefaultWarpLocation</samp>).
** ☐ <tt>Data\Bundles</tt>
 
** ☐ <tt>Data\CraftingRecipes</tt>
 
** ☐ <tt>Data\CookingRecipes</tt>
 
** ☐ <tt>Data\Weapons</tt>
 
* ☐ Remove hardcoded logic that ignores display names when playing in English (e.g. for NPC gift taste dialogues); can search <code>LocalizedContentManager.LanguageCode.en</code> to find many of them. That causes a bug where renamed NPCs still show their internal name in some places.
 
  
 
===Refactoring===
 
===Refactoring===
<ul>
+
* ☐ Change all <code>const</code> fields to <code>static readonly</code>. They're accessed the same way and the performance difference is negligible, but that'll make the decompiled code much easier to understand, and avoid issues where const values get 'baked in' to mod assemblies.
<li>☐ Replace <tt>Item.ParentSheetIndex</tt> with three properties:
 
 
 
{| class="wikitable"
 
|-
 
! field
 
! type
 
! notes
 
|-
 
| <tt>ID</tt>
 
| <tt>string</tt>
 
| An ID unique across all item types (like <tt>parsnip</tt> or <tt>radish_salad</tt>). That would allow unambiguous and human-readable item references throughout the code (e.g. gift tastes, machine behaviour, etc), fix bugs like the wallpaper glitch, and make it easy to avoid ID collisions in mods (e.g. <tt>spacechase0.JsonAssets/watermelon</tt>).
 
|-
 
| <tt>Sheet</tt>
 
| <tt>Texture2D</tt>
 
| The spritesheet to draw (e.g. <tt>Game1.objectSpriteSheet</tt>). This lets modders easily add custom items with their own spritesheet, and simplifies draw logic.
 
|-
 
| <tt>SheetIndex</tt>
 
| <tt>int</tt>
 
| Equivalent to the old <tt>ParentSheetIndex</tt>, but for the <tt>Sheet</tt> texture. No longer used as an ID.
 
|}
 
Files like <tt>Data/ObjectInformation</tt> would be updated to use the new IDs:
 
<syntaxhighlight lang="yaml">
 
# old format
 
634: "Apricot/50/15/Basic -79/Apricot/A tender little fruit with a rock-hard pit."
 
629: "Apricot Sapling/500/-300/Basic -74/Apricot Sapling/Takes 28 days to produce a mature Apricot tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty."
 
 
 
# new format
 
apricot: "634/Apricot/50/15/Basic -79/A tender little fruit with a rock-hard pit."
 
apricot_sapling: "629/Apricot Sapling/500/-300/Basic -74/Takes 28 days to produce a mature Apricot tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty."
 
</syntaxhighlight>
 
With equivalent changes in files like <tt>Data/NPCGiftTastes</tt>:
 
<syntaxhighlight lang="yaml">
 
# old format
 
Universal_Like: "-2 -7 -26 -75 -80 72 395 613 634 635 636 637 638 724 459"
 
 
 
# new format
 
Universal_Like: "-2 -7 -26 -75 -80 apple apricot cherry coffee maple_syrup mead orange peach pomegranate shrimp"
 
</syntaxhighlight>
 
 
 
Creating a vanilla item would use a key lookup like before:
 
<syntaxhighlight lang="C#">
 
Object item = new Object("apricot"); // equivalent to new Object("apricot", "Maps/springobjects", 634, ...);
 
</syntaxhighlight>
 
 
 
This also avoids needing to check item types in most code (e.g. no need to exclude bigcraftables in gift tastes, since there's no possible ID overlap with the IDs listed in <tt>Data/NPCGiftTastes</tt>).
 
</li>
 
<li>☐ Change all <code>const</code> fields to <code>static readonly</code>. They're accessed the same way and the performance difference is negligible, but that'll make the decompiled code much easier to understand, and avoid issues where const values get 'baked in' to mod assemblies.</li>
 
</ul>
 
  
 
==Completed items==
 
==Completed items==

Latest revision as of 03:19, 4 December 2022

A list of requested changes in the game code to support modders. This list does not include complex refactoring or rewriting, which is unlikely to be accepted.

Wishlist

Bug fixes

All done!

Small changes

All done!

Medium changes

  • ☐ Add map property for default warp location (e.g. Utility.getDefaultWarpLocation).

Refactoring

  • ☐ Change all const fields to static readonly. They're accessed the same way and the performance difference is negligible, but that'll make the decompiled code much easier to understand, and avoid issues where const values get 'baked in' to mod assemblies.

Completed items

See the list of items completed in previous game versions.