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 +34 -6
- package/data/buildings.json +19 -0
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +42 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
-
-
|
|
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
|
-
-
|
|
30
|
-
|
|
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
|
-
-
|
|
37
|
-
|
|
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
|
-
-
|
|
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
|
|
package/data/buildings.json
CHANGED
|
@@ -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),
|