stardew-valley-data 0.21.0 → 0.23.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,30 @@ 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.23.0] - 2026-03-22
9
+
10
+ ### Added
11
+
12
+ - **Greenhouse** added to `data/buildings.json` — unlocked via Community Center Pantry bundles or
13
+ Joja purchase; climate-controlled building for all-season crop growing
14
+ - `animalCapacity?: number` optional field added to `Building` type — Coop (4), Big Coop (8), Deluxe
15
+ Coop (12), Barn (4), Big Barn (8), Deluxe Barn (12), Slime Hutch (20)
16
+ - `BuildingBuilder` type expanded to include `'Community Center' | 'Joja'`
17
+
18
+ ## [0.22.0] - 2026-03-22
19
+
20
+ ### Added
21
+
22
+ - `parseHorse()` parser added — new `horse` field on `SaveData` capturing horse name, type, and
23
+ HorseId from the Farm location; returns `null` if no horse exists
24
+ - `SaveHorse` interface added to save file types (`{ name: string; type: 'horse'; id: string }`)
25
+
8
26
  ## [0.21.0] - 2026-03-21
9
27
 
10
28
  ### Fix
11
29
 
12
- - Update Special Items ids to match data files proper
30
+ - Special item IDs updated to match `Powers.json` keys: 12 special-items, 19 books, 5 masteries, 5
31
+ skill-books all converted to PascalCase format
13
32
 
14
33
  ## [0.20.0] - 2026-03-21
15
34
 
@@ -24,17 +43,25 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
24
43
 
25
44
  ## [0.19.0] - 2026-03-21
26
45
 
46
+ ### Added
47
+
48
+ - **Prismatic Slime** added to `data/monsters.json` as a top-level monster (HP 1000, damage 35);
49
+ drops Slime and Prismatic Shard; image downloaded as GIF
50
+ - **Frost Jelly** extracted from Green Slime variants as its own top-level monster entry
51
+
27
52
  ### Fix
28
53
 
29
- - Add missing Monsters
30
- - Update Monster Slayer Goals to use proper ids of monsters
54
+ - `monster-loot.json` `droppedBy` arrays updated to use actual monster IDs from `monsters.json`
55
+ instead of kebab-case slugs
56
+ - Dragon Tooth image path references updated in `wizard-shop.json` and `island-trader-shop.json`
31
57
 
32
58
  ## [0.18.0] - 2026-03-21
33
59
 
34
60
  ### Added
35
61
 
36
- - Add Bookseller possible dates to seasons data
37
- - Add Bookseller Calendar icon
62
+ - `bookseller: number[]` field added to `SeasonData` type and all four seasons in
63
+ `data/seasons.json` with possible Bookseller visit dates
64
+ - Bookseller calendar icon downloaded to `images/seasons/calendar-icons/Bookseller.png`
38
65
 
39
66
  ## [0.17.0] - 2026-03-21
40
67
 
@@ -46,7 +73,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
46
73
 
47
74
  ### Added
48
75
 
49
- - Add Dragon Tooth Item to Monster Loot data
76
+ - **Dragon Tooth** (`id: "852"`) added to `data/monster-loot.json` 500g sell price, dropped by
77
+ Lava Lurk; image moved from `images/minerals/` to `images/monsters/monster-loot/`
50
78
 
51
79
  ## [0.15.0] - 2026-03-20
52
80
 
@@ -20,6 +20,7 @@
20
20
  ],
21
21
  "upgradeFrom": null,
22
22
  "magical": false,
23
+ "animalCapacity": 4,
23
24
  "image": "images/buildings/coop/Coop.png"
24
25
  },
25
26
  {
@@ -43,6 +44,7 @@
43
44
  ],
44
45
  "upgradeFrom": "coop",
45
46
  "magical": false,
47
+ "animalCapacity": 8,
46
48
  "image": "images/buildings/coop/Big Coop.png"
47
49
  },
48
50
  {
@@ -66,6 +68,7 @@
66
68
  ],
67
69
  "upgradeFrom": "big-coop",
68
70
  "magical": false,
71
+ "animalCapacity": 12,
69
72
  "image": "images/buildings/coop/Deluxe Coop.png"
70
73
  },
71
74
  {
@@ -89,6 +92,7 @@
89
92
  ],
90
93
  "upgradeFrom": null,
91
94
  "magical": false,
95
+ "animalCapacity": 4,
92
96
  "image": "images/buildings/barn/Barn.png"
93
97
  },
94
98
  {
@@ -112,6 +116,7 @@
112
116
  ],
113
117
  "upgradeFrom": "barn",
114
118
  "magical": false,
119
+ "animalCapacity": 8,
115
120
  "image": "images/buildings/barn/Big Barn.png"
116
121
  },
117
122
  {
@@ -135,6 +140,7 @@
135
140
  ],
136
141
  "upgradeFrom": "big-barn",
137
142
  "magical": false,
143
+ "animalCapacity": 12,
138
144
  "image": "images/buildings/barn/Deluxe Barn.png"
139
145
  },
140
146
  {
@@ -329,6 +335,7 @@
329
335
  ],
330
336
  "upgradeFrom": null,
331
337
  "magical": false,
338
+ "animalCapacity": 20,
332
339
  "image": "images/buildings/Slime Hutch.png"
333
340
  },
334
341
  {
@@ -525,5 +532,17 @@
525
532
  "upgradeFrom": null,
526
533
  "magical": true,
527
534
  "image": "images/buildings/Gold Clock.png"
535
+ },
536
+ {
537
+ "id": "greenhouse",
538
+ "name": "Greenhouse",
539
+ "description": "A climate-controlled building where crops can be grown in any season. Unlocked by completing the Pantry bundles or purchasing the Joja Greenhouse.",
540
+ "builder": "Community Center",
541
+ "buildCost": 0,
542
+ "buildDays": 0,
543
+ "materials": [],
544
+ "upgradeFrom": null,
545
+ "magical": false,
546
+ "image": "images/buildings/Greenhouse.png"
528
547
  }
529
548
  ]
package/dist/index.d.mts CHANGED
@@ -1235,7 +1235,7 @@ interface BuildingMaterial {
1235
1235
  item: string;
1236
1236
  quantity: number;
1237
1237
  }
1238
- type BuildingBuilder = 'Robin' | 'Wizard';
1238
+ type BuildingBuilder = 'Robin' | 'Wizard' | 'Community Center' | 'Joja';
1239
1239
  interface Building {
1240
1240
  id: string;
1241
1241
  name: string;
@@ -1246,6 +1246,7 @@ interface Building {
1246
1246
  materials: BuildingMaterial[];
1247
1247
  upgradeFrom: string | null;
1248
1248
  magical: boolean;
1249
+ animalCapacity?: number;
1249
1250
  image: string;
1250
1251
  }
1251
1252
 
@@ -2651,6 +2652,7 @@ interface SaveData {
2651
2652
  islandUpgrades: SaveIslandUpgrades;
2652
2653
  children: SaveChild[];
2653
2654
  pet: SavePet | null;
2655
+ horse: SaveHorse | null;
2654
2656
  powers: SavePowers;
2655
2657
  raccoons: SaveRaccoons;
2656
2658
  perfection: SavePerfection;
@@ -2894,6 +2896,12 @@ interface SavePet {
2894
2896
  breed: number;
2895
2897
  friendship: number;
2896
2898
  }
2899
+ /** The player's horse with name and unique ID. */
2900
+ interface SaveHorse {
2901
+ name: string;
2902
+ type: 'horse';
2903
+ id: string;
2904
+ }
2897
2905
  /** Powers and special items collection with acquisition status. */
2898
2906
  interface SavePowers {
2899
2907
  specialItems: SavePowerEntry[];
package/dist/index.d.ts CHANGED
@@ -1235,7 +1235,7 @@ interface BuildingMaterial {
1235
1235
  item: string;
1236
1236
  quantity: number;
1237
1237
  }
1238
- type BuildingBuilder = 'Robin' | 'Wizard';
1238
+ type BuildingBuilder = 'Robin' | 'Wizard' | 'Community Center' | 'Joja';
1239
1239
  interface Building {
1240
1240
  id: string;
1241
1241
  name: string;
@@ -1246,6 +1246,7 @@ interface Building {
1246
1246
  materials: BuildingMaterial[];
1247
1247
  upgradeFrom: string | null;
1248
1248
  magical: boolean;
1249
+ animalCapacity?: number;
1249
1250
  image: string;
1250
1251
  }
1251
1252
 
@@ -2651,6 +2652,7 @@ interface SaveData {
2651
2652
  islandUpgrades: SaveIslandUpgrades;
2652
2653
  children: SaveChild[];
2653
2654
  pet: SavePet | null;
2655
+ horse: SaveHorse | null;
2654
2656
  powers: SavePowers;
2655
2657
  raccoons: SaveRaccoons;
2656
2658
  perfection: SavePerfection;
@@ -2894,6 +2896,12 @@ interface SavePet {
2894
2896
  breed: number;
2895
2897
  friendship: number;
2896
2898
  }
2899
+ /** The player's horse with name and unique ID. */
2900
+ interface SaveHorse {
2901
+ name: string;
2902
+ type: 'horse';
2903
+ id: string;
2904
+ }
2897
2905
  /** Powers and special items collection with acquisition status. */
2898
2906
  interface SavePowers {
2899
2907
  specialItems: SavePowerEntry[];
package/dist/index.js CHANGED
@@ -40029,6 +40029,7 @@ var buildings_default = [
40029
40029
  ],
40030
40030
  upgradeFrom: null,
40031
40031
  magical: false,
40032
+ animalCapacity: 4,
40032
40033
  image: "images/buildings/coop/Coop.png"
40033
40034
  },
40034
40035
  {
@@ -40052,6 +40053,7 @@ var buildings_default = [
40052
40053
  ],
40053
40054
  upgradeFrom: "coop",
40054
40055
  magical: false,
40056
+ animalCapacity: 8,
40055
40057
  image: "images/buildings/coop/Big Coop.png"
40056
40058
  },
40057
40059
  {
@@ -40075,6 +40077,7 @@ var buildings_default = [
40075
40077
  ],
40076
40078
  upgradeFrom: "big-coop",
40077
40079
  magical: false,
40080
+ animalCapacity: 12,
40078
40081
  image: "images/buildings/coop/Deluxe Coop.png"
40079
40082
  },
40080
40083
  {
@@ -40098,6 +40101,7 @@ var buildings_default = [
40098
40101
  ],
40099
40102
  upgradeFrom: null,
40100
40103
  magical: false,
40104
+ animalCapacity: 4,
40101
40105
  image: "images/buildings/barn/Barn.png"
40102
40106
  },
40103
40107
  {
@@ -40121,6 +40125,7 @@ var buildings_default = [
40121
40125
  ],
40122
40126
  upgradeFrom: "barn",
40123
40127
  magical: false,
40128
+ animalCapacity: 8,
40124
40129
  image: "images/buildings/barn/Big Barn.png"
40125
40130
  },
40126
40131
  {
@@ -40144,6 +40149,7 @@ var buildings_default = [
40144
40149
  ],
40145
40150
  upgradeFrom: "big-barn",
40146
40151
  magical: false,
40152
+ animalCapacity: 12,
40147
40153
  image: "images/buildings/barn/Deluxe Barn.png"
40148
40154
  },
40149
40155
  {
@@ -40338,6 +40344,7 @@ var buildings_default = [
40338
40344
  ],
40339
40345
  upgradeFrom: null,
40340
40346
  magical: false,
40347
+ animalCapacity: 20,
40341
40348
  image: "images/buildings/Slime Hutch.png"
40342
40349
  },
40343
40350
  {
@@ -40534,6 +40541,18 @@ var buildings_default = [
40534
40541
  upgradeFrom: null,
40535
40542
  magical: true,
40536
40543
  image: "images/buildings/Gold Clock.png"
40544
+ },
40545
+ {
40546
+ id: "greenhouse",
40547
+ name: "Greenhouse",
40548
+ description: "A climate-controlled building where crops can be grown in any season. Unlocked by completing the Pantry bundles or purchasing the Joja Greenhouse.",
40549
+ builder: "Community Center",
40550
+ buildCost: 0,
40551
+ buildDays: 0,
40552
+ materials: [],
40553
+ upgradeFrom: null,
40554
+ magical: false,
40555
+ image: "images/buildings/Greenhouse.png"
40537
40556
  }
40538
40557
  ];
40539
40558
 
@@ -40975,6 +40994,28 @@ function parsePet(root) {
40975
40994
  }
40976
40995
  return null;
40977
40996
  }
40997
+ function parseHorse(root) {
40998
+ const locations2 = ensureArray(root.locations?.GameLocation);
40999
+ for (const loc of locations2) {
41000
+ const l = loc;
41001
+ const name = str(l.name);
41002
+ if (name !== "Farm") continue;
41003
+ const characters = ensureArray(l.characters?.NPC);
41004
+ for (const npc of characters) {
41005
+ const n = npc;
41006
+ const xsiType = str(
41007
+ n["@_xsi:type"] ?? n["@_type"]
41008
+ );
41009
+ if (xsiType !== "Horse") continue;
41010
+ return {
41011
+ name: str(n.name),
41012
+ type: "horse",
41013
+ id: str(n.HorseId)
41014
+ };
41015
+ }
41016
+ }
41017
+ return null;
41018
+ }
40978
41019
 
40979
41020
  // src/save-file/parsers/v1/fish.ts
40980
41021
  function parseFishCaught(fishCaught) {
@@ -41540,6 +41581,7 @@ var v1 = (ctx) => ({
41540
41581
  islandUpgrades: parseIslandUpgrades(ctx.mailSet),
41541
41582
  children: parseChildren(ctx.root),
41542
41583
  pet: parsePet(ctx.root),
41584
+ horse: parseHorse(ctx.root),
41543
41585
  powers: parsePowers(ctx.mailSet, ctx.eventsSet),
41544
41586
  raccoons: parseRaccoons(ctx.root, ctx.mailSet),
41545
41587
  perfection: parsePerfection(ctx.root),