stardew-valley-data 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,11 +5,20 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
6
6
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.22.0] - 2026-03-22
9
+
10
+ ### Added
11
+
12
+ - `parseHorse()` parser added — new `horse` field on `SaveData` capturing horse name, type, and
13
+ HorseId from the Farm location; returns `null` if no horse exists
14
+ - `SaveHorse` interface added to save file types (`{ name: string; type: 'horse'; id: string }`)
15
+
8
16
  ## [0.21.0] - 2026-03-21
9
17
 
10
18
  ### Fix
11
19
 
12
- - Update Special Items ids to match data files proper
20
+ - Special item IDs updated to match `Powers.json` keys: 12 special-items, 19 books, 5 masteries, 5
21
+ skill-books all converted to PascalCase format
13
22
 
14
23
  ## [0.20.0] - 2026-03-21
15
24
 
@@ -24,17 +33,27 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
24
33
 
25
34
  ## [0.19.0] - 2026-03-21
26
35
 
36
+ ### Added
37
+
38
+ - **Prismatic Slime** added to `data/monsters.json` as a top-level monster (HP 1000, damage 35);
39
+ drops Slime and Prismatic Shard; image downloaded as GIF
40
+ - **Dragon Tooth** (`id: "852"`) added to `data/monster-loot.json` — 500g sell price, dropped by
41
+ Lava Lurk; image moved from `images/minerals/` to `images/monsters/monster-loot/`
42
+ - **Frost Jelly** extracted from Green Slime variants as its own top-level monster entry
43
+
27
44
  ### Fix
28
45
 
29
- - Add missing Monsters
30
- - Update Monster Slayer Goals to use proper ids of monsters
46
+ - `monster-loot.json` `droppedBy` arrays updated to use actual monster IDs from `monsters.json`
47
+ instead of kebab-case slugs
48
+ - Dragon Tooth image path references updated in `wizard-shop.json` and `island-trader-shop.json`
31
49
 
32
50
  ## [0.18.0] - 2026-03-21
33
51
 
34
52
  ### Added
35
53
 
36
- - Add Bookseller possible dates to seasons data
37
- - Add Bookseller Calendar icon
54
+ - `bookseller: number[]` field added to `SeasonData` type and all four seasons in
55
+ `data/seasons.json` with possible Bookseller visit dates
56
+ - Bookseller calendar icon downloaded to `images/seasons/calendar-icons/Bookseller.png`
38
57
 
39
58
  ## [0.17.0] - 2026-03-21
40
59
 
package/dist/index.d.mts CHANGED
@@ -2651,6 +2651,7 @@ interface SaveData {
2651
2651
  islandUpgrades: SaveIslandUpgrades;
2652
2652
  children: SaveChild[];
2653
2653
  pet: SavePet | null;
2654
+ horse: SaveHorse | null;
2654
2655
  powers: SavePowers;
2655
2656
  raccoons: SaveRaccoons;
2656
2657
  perfection: SavePerfection;
@@ -2894,6 +2895,12 @@ interface SavePet {
2894
2895
  breed: number;
2895
2896
  friendship: number;
2896
2897
  }
2898
+ /** The player's horse with name and unique ID. */
2899
+ interface SaveHorse {
2900
+ name: string;
2901
+ type: 'horse';
2902
+ id: string;
2903
+ }
2897
2904
  /** Powers and special items collection with acquisition status. */
2898
2905
  interface SavePowers {
2899
2906
  specialItems: SavePowerEntry[];
package/dist/index.d.ts CHANGED
@@ -2651,6 +2651,7 @@ interface SaveData {
2651
2651
  islandUpgrades: SaveIslandUpgrades;
2652
2652
  children: SaveChild[];
2653
2653
  pet: SavePet | null;
2654
+ horse: SaveHorse | null;
2654
2655
  powers: SavePowers;
2655
2656
  raccoons: SaveRaccoons;
2656
2657
  perfection: SavePerfection;
@@ -2894,6 +2895,12 @@ interface SavePet {
2894
2895
  breed: number;
2895
2896
  friendship: number;
2896
2897
  }
2898
+ /** The player's horse with name and unique ID. */
2899
+ interface SaveHorse {
2900
+ name: string;
2901
+ type: 'horse';
2902
+ id: string;
2903
+ }
2897
2904
  /** Powers and special items collection with acquisition status. */
2898
2905
  interface SavePowers {
2899
2906
  specialItems: SavePowerEntry[];
package/dist/index.js CHANGED
@@ -40975,6 +40975,28 @@ function parsePet(root) {
40975
40975
  }
40976
40976
  return null;
40977
40977
  }
40978
+ function parseHorse(root) {
40979
+ const locations2 = ensureArray(root.locations?.GameLocation);
40980
+ for (const loc of locations2) {
40981
+ const l = loc;
40982
+ const name = str(l.name);
40983
+ if (name !== "Farm") continue;
40984
+ const characters = ensureArray(l.characters?.NPC);
40985
+ for (const npc of characters) {
40986
+ const n = npc;
40987
+ const xsiType = str(
40988
+ n["@_xsi:type"] ?? n["@_type"]
40989
+ );
40990
+ if (xsiType !== "Horse") continue;
40991
+ return {
40992
+ name: str(n.name),
40993
+ type: "horse",
40994
+ id: str(n.HorseId)
40995
+ };
40996
+ }
40997
+ }
40998
+ return null;
40999
+ }
40978
41000
 
40979
41001
  // src/save-file/parsers/v1/fish.ts
40980
41002
  function parseFishCaught(fishCaught) {
@@ -41540,6 +41562,7 @@ var v1 = (ctx) => ({
41540
41562
  islandUpgrades: parseIslandUpgrades(ctx.mailSet),
41541
41563
  children: parseChildren(ctx.root),
41542
41564
  pet: parsePet(ctx.root),
41565
+ horse: parseHorse(ctx.root),
41543
41566
  powers: parsePowers(ctx.mailSet, ctx.eventsSet),
41544
41567
  raccoons: parseRaccoons(ctx.root, ctx.mailSet),
41545
41568
  perfection: parsePerfection(ctx.root),