stardew-valley-data 0.18.0 → 0.20.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,6 +5,24 @@ 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.20.0] - 2026-03-21
9
+
10
+ ### Added
11
+
12
+ - `willyBackRoomInvitation: boolean` field added to `SavePlayer` — checks for
13
+ `"willyBackRoomInvitation"` mail flag in save file
14
+ - `parseCommunityCenter()` parser added — new `communityCenter` field on `SaveData` tracking unlock
15
+ status, bundle activation, completion, ceremony attendance, Joja route, and individual room
16
+ completions (boilerRoom, craftsRoom, pantry, fishTank, vault, bulletin)
17
+ - `SaveCommunityCenter` and `SaveCommunityCenterRooms` interfaces added to save file types
18
+
19
+ ## [0.19.0] - 2026-03-21
20
+
21
+ ### Fix
22
+
23
+ - Add missing Monsters
24
+ - Update Monster Slayer Goals to use proper ids of monsters
25
+
8
26
  ## [0.18.0] - 2026-03-21
9
27
 
10
28
  ### Added
@@ -3,7 +3,7 @@
3
3
  "id": "Slimes",
4
4
  "name": "Slime",
5
5
  "killTarget": 1000,
6
- "monsters": ["Green Slime", "Frost Jelly", "Sludge", "Tiger Slime"],
6
+ "monsters": ["Green Slime", "Frost Jelly", "Big Slime", "Tiger Slime", "Prismatic Slime"],
7
7
  "reward": {
8
8
  "name": "Slime Charmer Ring",
9
9
  "itemId": "(O)520",
@@ -14,7 +14,7 @@
14
14
  "id": "Shadows",
15
15
  "name": "Void Spirits",
16
16
  "killTarget": 150,
17
- "monsters": ["Shadow Guy", "Shadow Shaman", "Shadow Brute", "Shadow Sniper"],
17
+ "monsters": ["Shadow Shaman", "Shadow Brute", "Shadow Sniper"],
18
18
  "reward": {
19
19
  "name": "Savage Ring",
20
20
  "itemId": "(O)523",
@@ -47,7 +47,7 @@
47
47
  "id": "Insects",
48
48
  "name": "Cave Insects",
49
49
  "killTarget": 80,
50
- "monsters": ["Grub", "Fly", "Bug"],
50
+ "monsters": ["Grub", "Cave Fly", "Bug"],
51
51
  "reward": {
52
52
  "name": "Insect Head",
53
53
  "itemId": "(W)13",
@@ -11,17 +11,6 @@
11
11
  "lootIds": ["766"],
12
12
  "dangerous": false,
13
13
  "variants": [
14
- {
15
- "name": "Blue Slime",
16
- "hp": 106,
17
- "damage": 7,
18
- "speed": 0,
19
- "xp": 6,
20
- "image": "images/monsters/Blue Slime.png",
21
- "locations": ["The Mines (Floors 41-79)", "The Farm"],
22
- "lootIds": ["766"],
23
- "dangerous": false
24
- },
25
14
  {
26
15
  "name": "Red Slime",
27
16
  "hp": 205,
@@ -68,6 +57,19 @@
68
57
  }
69
58
  ]
70
59
  },
60
+ {
61
+ "id": "Frost Jelly",
62
+ "name": "Frost Jelly",
63
+ "hp": 106,
64
+ "damage": 7,
65
+ "speed": 0,
66
+ "xp": 6,
67
+ "image": "images/monsters/Blue Slime.png",
68
+ "locations": ["The Mines (Floors 41-79)", "The Farm"],
69
+ "lootIds": ["766"],
70
+ "dangerous": false,
71
+ "variants": []
72
+ },
71
73
  {
72
74
  "id": "Big Slime",
73
75
  "name": "Big Slime",
@@ -622,5 +624,18 @@
622
624
  "locations": ["Volcano Dungeon"],
623
625
  "lootIds": [],
624
626
  "dangerous": false
627
+ },
628
+ {
629
+ "id": "Prismatic Slime",
630
+ "name": "Prismatic Slime",
631
+ "hp": 1000,
632
+ "damage": 35,
633
+ "speed": 2,
634
+ "xp": 10,
635
+ "image": "images/monsters/Prismatic Slime.gif",
636
+ "locations": ["The Mines", "Quarry Mine", "Skull Cavern"],
637
+ "lootIds": ["766", "74"],
638
+ "dangerous": false,
639
+ "variants": []
625
640
  }
626
641
  ]
package/dist/index.d.mts CHANGED
@@ -2655,6 +2655,7 @@ interface SaveData {
2655
2655
  raccoons: SaveRaccoons;
2656
2656
  perfection: SavePerfection;
2657
2657
  mineProgress: SaveMineProgress;
2658
+ communityCenter: SaveCommunityCenter;
2658
2659
  }
2659
2660
  /** Core player profile including name, money, skills, and mastery progress. */
2660
2661
  interface SavePlayer {
@@ -2673,6 +2674,7 @@ interface SavePlayer {
2673
2674
  skills: SaveSkills;
2674
2675
  mastery: SaveMastery;
2675
2676
  toolLevels: SaveToolLevels;
2677
+ willyBackRoomInvitation: boolean;
2676
2678
  gameVersion: string;
2677
2679
  millisecondsPlayed: number;
2678
2680
  }
@@ -2916,6 +2918,24 @@ interface SavePerfection {
2916
2918
  hasGoldClock: boolean;
2917
2919
  obelisks: string[];
2918
2920
  }
2921
+ /** Community Center completion status including individual room progress. */
2922
+ interface SaveCommunityCenterRooms {
2923
+ boilerRoom: boolean;
2924
+ craftsRoom: boolean;
2925
+ pantry: boolean;
2926
+ fishTank: boolean;
2927
+ vault: boolean;
2928
+ bulletin: boolean;
2929
+ }
2930
+ /** Community Center unlock, completion, and Joja route status. */
2931
+ interface SaveCommunityCenter {
2932
+ unlocked: boolean;
2933
+ bundlesActive: boolean;
2934
+ completed: boolean;
2935
+ ceremonyAttended: boolean;
2936
+ jojaAbandoned: boolean;
2937
+ rooms: SaveCommunityCenterRooms;
2938
+ }
2919
2939
  /** Mine and Skull Cavern progress including deepest levels reached and key ownership. */
2920
2940
  interface SaveMineProgress {
2921
2941
  deepestMineLevel: number;
package/dist/index.d.ts CHANGED
@@ -2655,6 +2655,7 @@ interface SaveData {
2655
2655
  raccoons: SaveRaccoons;
2656
2656
  perfection: SavePerfection;
2657
2657
  mineProgress: SaveMineProgress;
2658
+ communityCenter: SaveCommunityCenter;
2658
2659
  }
2659
2660
  /** Core player profile including name, money, skills, and mastery progress. */
2660
2661
  interface SavePlayer {
@@ -2673,6 +2674,7 @@ interface SavePlayer {
2673
2674
  skills: SaveSkills;
2674
2675
  mastery: SaveMastery;
2675
2676
  toolLevels: SaveToolLevels;
2677
+ willyBackRoomInvitation: boolean;
2676
2678
  gameVersion: string;
2677
2679
  millisecondsPlayed: number;
2678
2680
  }
@@ -2916,6 +2918,24 @@ interface SavePerfection {
2916
2918
  hasGoldClock: boolean;
2917
2919
  obelisks: string[];
2918
2920
  }
2921
+ /** Community Center completion status including individual room progress. */
2922
+ interface SaveCommunityCenterRooms {
2923
+ boilerRoom: boolean;
2924
+ craftsRoom: boolean;
2925
+ pantry: boolean;
2926
+ fishTank: boolean;
2927
+ vault: boolean;
2928
+ bulletin: boolean;
2929
+ }
2930
+ /** Community Center unlock, completion, and Joja route status. */
2931
+ interface SaveCommunityCenter {
2932
+ unlocked: boolean;
2933
+ bundlesActive: boolean;
2934
+ completed: boolean;
2935
+ ceremonyAttended: boolean;
2936
+ jojaAbandoned: boolean;
2937
+ rooms: SaveCommunityCenterRooms;
2938
+ }
2919
2939
  /** Mine and Skull Cavern progress including deepest levels reached and key ownership. */
2920
2940
  interface SaveMineProgress {
2921
2941
  deepestMineLevel: number;
package/dist/index.js CHANGED
@@ -8009,17 +8009,6 @@ var monsters_default = [
8009
8009
  lootIds: ["766"],
8010
8010
  dangerous: false,
8011
8011
  variants: [
8012
- {
8013
- name: "Blue Slime",
8014
- hp: 106,
8015
- damage: 7,
8016
- speed: 0,
8017
- xp: 6,
8018
- image: "images/monsters/Blue Slime.png",
8019
- locations: ["The Mines (Floors 41-79)", "The Farm"],
8020
- lootIds: ["766"],
8021
- dangerous: false
8022
- },
8023
8012
  {
8024
8013
  name: "Red Slime",
8025
8014
  hp: 205,
@@ -8066,6 +8055,19 @@ var monsters_default = [
8066
8055
  }
8067
8056
  ]
8068
8057
  },
8058
+ {
8059
+ id: "Frost Jelly",
8060
+ name: "Frost Jelly",
8061
+ hp: 106,
8062
+ damage: 7,
8063
+ speed: 0,
8064
+ xp: 6,
8065
+ image: "images/monsters/Blue Slime.png",
8066
+ locations: ["The Mines (Floors 41-79)", "The Farm"],
8067
+ lootIds: ["766"],
8068
+ dangerous: false,
8069
+ variants: []
8070
+ },
8069
8071
  {
8070
8072
  id: "Big Slime",
8071
8073
  name: "Big Slime",
@@ -8620,6 +8622,19 @@ var monsters_default = [
8620
8622
  locations: ["Volcano Dungeon"],
8621
8623
  lootIds: [],
8622
8624
  dangerous: false
8625
+ },
8626
+ {
8627
+ id: "Prismatic Slime",
8628
+ name: "Prismatic Slime",
8629
+ hp: 1e3,
8630
+ damage: 35,
8631
+ speed: 2,
8632
+ xp: 10,
8633
+ image: "images/monsters/Prismatic Slime.gif",
8634
+ locations: ["The Mines", "Quarry Mine", "Skull Cavern"],
8635
+ lootIds: ["766", "74"],
8636
+ dangerous: false,
8637
+ variants: []
8623
8638
  }
8624
8639
  ];
8625
8640
 
@@ -8684,7 +8699,7 @@ var monster_slayer_goals_default = [
8684
8699
  id: "Slimes",
8685
8700
  name: "Slime",
8686
8701
  killTarget: 1e3,
8687
- monsters: ["Green Slime", "Frost Jelly", "Sludge", "Tiger Slime"],
8702
+ monsters: ["Green Slime", "Frost Jelly", "Big Slime", "Tiger Slime", "Prismatic Slime"],
8688
8703
  reward: {
8689
8704
  name: "Slime Charmer Ring",
8690
8705
  itemId: "(O)520",
@@ -8695,7 +8710,7 @@ var monster_slayer_goals_default = [
8695
8710
  id: "Shadows",
8696
8711
  name: "Void Spirits",
8697
8712
  killTarget: 150,
8698
- monsters: ["Shadow Guy", "Shadow Shaman", "Shadow Brute", "Shadow Sniper"],
8713
+ monsters: ["Shadow Shaman", "Shadow Brute", "Shadow Sniper"],
8699
8714
  reward: {
8700
8715
  name: "Savage Ring",
8701
8716
  itemId: "(O)523",
@@ -8728,7 +8743,7 @@ var monster_slayer_goals_default = [
8728
8743
  id: "Insects",
8729
8744
  name: "Cave Insects",
8730
8745
  killTarget: 80,
8731
- monsters: ["Grub", "Fly", "Bug"],
8746
+ monsters: ["Grub", "Cave Fly", "Bug"],
8732
8747
  reward: {
8733
8748
  name: "Insect Head",
8734
8749
  itemId: "(W)13",
@@ -40870,6 +40885,25 @@ function parseBundles(root, mail) {
40870
40885
  return { rooms, isJojaRoute, isCCComplete };
40871
40886
  }
40872
40887
 
40888
+ // src/save-file/parsers/v1/community-center.ts
40889
+ function parseCommunityCenter(mail, events2) {
40890
+ return {
40891
+ unlocked: mail.has("ccDoorUnlock"),
40892
+ bundlesActive: mail.has("wizardJunimoNote"),
40893
+ completed: mail.has("ccIsComplete"),
40894
+ ceremonyAttended: events2.has("191393"),
40895
+ jojaAbandoned: mail.has("abandonedJojaMartAccessible"),
40896
+ rooms: {
40897
+ boilerRoom: mail.has("ccBoilerRoom"),
40898
+ craftsRoom: mail.has("ccCraftsRoom"),
40899
+ pantry: mail.has("ccPantry"),
40900
+ fishTank: mail.has("ccFishTank"),
40901
+ vault: mail.has("ccVault"),
40902
+ bulletin: mail.has("ccBulletin")
40903
+ }
40904
+ };
40905
+ }
40906
+
40873
40907
  // src/save-file/parsers/v1/date.ts
40874
40908
  function getStatDaysPlayed(player) {
40875
40909
  const stats = player.stats;
@@ -41265,7 +41299,7 @@ function parseToolLevels(player, root) {
41265
41299
  }
41266
41300
  return levels;
41267
41301
  }
41268
- function parsePlayer(player, root) {
41302
+ function parsePlayer(player, root, mail) {
41269
41303
  return {
41270
41304
  name: str(player.name),
41271
41305
  farmName: str(player.farmName),
@@ -41282,6 +41316,7 @@ function parsePlayer(player, root) {
41282
41316
  skills: parseSkills(player.experiencePoints?.int),
41283
41317
  mastery: parseMastery(player.stats),
41284
41318
  toolLevels: parseToolLevels(player, root),
41319
+ willyBackRoomInvitation: mail.has("willyBackRoomInvitation"),
41285
41320
  gameVersion: str(root.gameVersion),
41286
41321
  millisecondsPlayed: num(player.millisecondsPlayed)
41287
41322
  };
@@ -41477,7 +41512,7 @@ function parseWalnuts(root) {
41477
41512
 
41478
41513
  // src/save-file/parser-registry.ts
41479
41514
  var v1 = (ctx) => ({
41480
- player: parsePlayer(ctx.player, ctx.root),
41515
+ player: parsePlayer(ctx.player, ctx.root, ctx.mailSet),
41481
41516
  farm: { type: ctx.root.whichFarm, name: ctx.player.farmName },
41482
41517
  date: parseDate(ctx.player, ctx.root),
41483
41518
  inventory: parseInventory(ctx.player.items),
@@ -41508,7 +41543,8 @@ var v1 = (ctx) => ({
41508
41543
  powers: parsePowers(ctx.mailSet, ctx.eventsSet),
41509
41544
  raccoons: parseRaccoons(ctx.root, ctx.mailSet),
41510
41545
  perfection: parsePerfection(ctx.root),
41511
- mineProgress: parseMineProgress(ctx.player, ctx.root, ctx.mailSet)
41546
+ mineProgress: parseMineProgress(ctx.player, ctx.root, ctx.mailSet),
41547
+ communityCenter: parseCommunityCenter(ctx.mailSet, ctx.eventsSet)
41512
41548
  });
41513
41549
  var PARSER_SETS = {
41514
41550
  1: v1