A Short Hike: Add new options and option groups (#3410)

* A Short Hike: New options and stuff

* Add to slot data for poptracker

* Address concerns

* Address concerns

* Fix indentations

* Update option description

* Address all issues

* Group "or"s
This commit is contained in:
chandler05 2024-06-05 17:50:30 -05:00 committed by GitHub
parent be03dca774
commit c554c3fdae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 302 additions and 168 deletions

View File

@ -10,15 +10,15 @@ class ItemDict(TypedDict):
base_id = 82000 base_id = 82000
item_table: List[ItemDict] = [ item_table: List[ItemDict] = [
{"name": "Stick", "id": base_id + 1, "count": 8, "classification": ItemClassification.progression_skip_balancing}, {"name": "Stick", "id": base_id + 1, "count": 0, "classification": ItemClassification.progression_skip_balancing},
{"name": "Seashell", "id": base_id + 2, "count": 23, "classification": ItemClassification.progression_skip_balancing}, {"name": "Seashell", "id": base_id + 2, "count": 23, "classification": ItemClassification.progression_skip_balancing},
{"name": "Golden Feather", "id": base_id + 3, "count": 0, "classification": ItemClassification.progression}, {"name": "Golden Feather", "id": base_id + 3, "count": 0, "classification": ItemClassification.progression},
{"name": "Silver Feather", "id": base_id + 4, "count": 0, "classification": ItemClassification.useful}, {"name": "Silver Feather", "id": base_id + 4, "count": 0, "classification": ItemClassification.useful},
{"name": "Bucket", "id": base_id + 5, "count": 0, "classification": ItemClassification.progression}, {"name": "Bucket", "id": base_id + 5, "count": 0, "classification": ItemClassification.progression},
{"name": "Bait", "id": base_id + 6, "count": 2, "classification": ItemClassification.filler}, {"name": "Bait", "id": base_id + 6, "count": 2, "classification": ItemClassification.filler},
{"name": "Fishing Rod", "id": base_id + 7, "count": 2, "classification": ItemClassification.progression}, {"name": "Progressive Fishing Rod", "id": base_id + 7, "count": 2, "classification": ItemClassification.progression},
{"name": "Shovel", "id": base_id + 8, "count": 1, "classification": ItemClassification.progression}, {"name": "Shovel", "id": base_id + 8, "count": 1, "classification": ItemClassification.progression},
{"name": "Toy Shovel", "id": base_id + 9, "count": 5, "classification": ItemClassification.progression_skip_balancing}, {"name": "Toy Shovel", "id": base_id + 9, "count": 0, "classification": ItemClassification.progression_skip_balancing},
{"name": "Compass", "id": base_id + 10, "count": 1, "classification": ItemClassification.useful}, {"name": "Compass", "id": base_id + 10, "count": 1, "classification": ItemClassification.useful},
{"name": "Medal", "id": base_id + 11, "count": 3, "classification": ItemClassification.filler}, {"name": "Medal", "id": base_id + 11, "count": 3, "classification": ItemClassification.filler},
{"name": "Shell Necklace", "id": base_id + 12, "count": 1, "classification": ItemClassification.progression}, {"name": "Shell Necklace", "id": base_id + 12, "count": 1, "classification": ItemClassification.progression},
@ -36,7 +36,7 @@ item_table: List[ItemDict] = [
{"name": "Headband", "id": base_id + 24, "count": 1, "classification": ItemClassification.progression}, {"name": "Headband", "id": base_id + 24, "count": 1, "classification": ItemClassification.progression},
{"name": "Running Shoes", "id": base_id + 25, "count": 1, "classification": ItemClassification.useful}, {"name": "Running Shoes", "id": base_id + 25, "count": 1, "classification": ItemClassification.useful},
{"name": "Camping Permit", "id": base_id + 26, "count": 1, "classification": ItemClassification.progression}, {"name": "Camping Permit", "id": base_id + 26, "count": 1, "classification": ItemClassification.progression},
{"name": "Walkie Talkie", "id": base_id + 27, "count": 1, "classification": ItemClassification.useful}, {"name": "Walkie Talkie", "id": base_id + 27, "count": 0, "classification": ItemClassification.useful},
# Not in the item pool for now # Not in the item pool for now
#{"name": "Boating Manual", "id": base_id + ~, "count": 1, "classification": ItemClassification.filler}, #{"name": "Boating Manual", "id": base_id + ~, "count": 1, "classification": ItemClassification.filler},
@ -48,9 +48,9 @@ item_table: List[ItemDict] = [
{"name": "21 Coins", "id": base_id + 31, "count": 2, "classification": ItemClassification.filler}, {"name": "21 Coins", "id": base_id + 31, "count": 2, "classification": ItemClassification.filler},
{"name": "25 Coins", "id": base_id + 32, "count": 7, "classification": ItemClassification.filler}, {"name": "25 Coins", "id": base_id + 32, "count": 7, "classification": ItemClassification.filler},
{"name": "27 Coins", "id": base_id + 33, "count": 1, "classification": ItemClassification.filler}, {"name": "27 Coins", "id": base_id + 33, "count": 1, "classification": ItemClassification.filler},
{"name": "32 Coins", "id": base_id + 34, "count": 1, "classification": ItemClassification.filler}, {"name": "32 Coins", "id": base_id + 34, "count": 1, "classification": ItemClassification.useful},
{"name": "33 Coins", "id": base_id + 35, "count": 6, "classification": ItemClassification.filler}, {"name": "33 Coins", "id": base_id + 35, "count": 6, "classification": ItemClassification.useful},
{"name": "50 Coins", "id": base_id + 36, "count": 1, "classification": ItemClassification.filler}, {"name": "50 Coins", "id": base_id + 36, "count": 1, "classification": ItemClassification.useful},
# Filler item determined by settings # Filler item determined by settings
{"name": "13 Coins", "id": base_id + 37, "count": 0, "classification": ItemClassification.filler}, {"name": "13 Coins", "id": base_id + 37, "count": 0, "classification": ItemClassification.filler},

View File

@ -5,7 +5,7 @@ class LocationInfo(TypedDict):
id: int id: int
inGameId: str inGameId: str
needsShovel: bool needsShovel: bool
purchase: bool purchase: int
minGoldenFeathers: int minGoldenFeathers: int
minGoldenFeathersEasy: int minGoldenFeathersEasy: int
minGoldenFeathersBucket: int minGoldenFeathersBucket: int
@ -17,311 +17,311 @@ location_table: List[LocationInfo] = [
{"name": "Start Beach Seashell", {"name": "Start Beach Seashell",
"id": base_id + 1, "id": base_id + 1,
"inGameId": "PickUps.3", "inGameId": "PickUps.3",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Beach Hut Seashell", {"name": "Beach Hut Seashell",
"id": base_id + 2, "id": base_id + 2,
"inGameId": "PickUps.2", "inGameId": "PickUps.2",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Beach Umbrella Seashell", {"name": "Beach Umbrella Seashell",
"id": base_id + 3, "id": base_id + 3,
"inGameId": "PickUps.8", "inGameId": "PickUps.8",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sid Beach Mound Seashell", {"name": "Sid Beach Mound Seashell",
"id": base_id + 4, "id": base_id + 4,
"inGameId": "PickUps.12", "inGameId": "PickUps.12",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sid Beach Seashell", {"name": "Sid Beach Seashell",
"id": base_id + 5, "id": base_id + 5,
"inGameId": "PickUps.11", "inGameId": "PickUps.11",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Shirley's Point Beach Seashell", {"name": "Shirley's Point Beach Seashell",
"id": base_id + 6, "id": base_id + 6,
"inGameId": "PickUps.18", "inGameId": "PickUps.18",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Shirley's Point Rock Seashell", {"name": "Shirley's Point Rock Seashell",
"id": base_id + 7, "id": base_id + 7,
"inGameId": "PickUps.17", "inGameId": "PickUps.17",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Beach Seashell", {"name": "Visitor's Center Beach Seashell",
"id": base_id + 8, "id": base_id + 8,
"inGameId": "PickUps.19", "inGameId": "PickUps.19",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "West River Seashell", {"name": "West River Seashell",
"id": base_id + 9, "id": base_id + 9,
"inGameId": "PickUps.10", "inGameId": "PickUps.10",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "West Riverbank Seashell", {"name": "West Riverbank Seashell",
"id": base_id + 10, "id": base_id + 10,
"inGameId": "PickUps.4", "inGameId": "PickUps.4",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Stone Tower Riverbank Seashell", {"name": "Stone Tower Riverbank Seashell",
"id": base_id + 11, "id": base_id + 11,
"inGameId": "PickUps.23", "inGameId": "PickUps.23",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "North Beach Seashell", {"name": "North Beach Seashell",
"id": base_id + 12, "id": base_id + 12,
"inGameId": "PickUps.6", "inGameId": "PickUps.6",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "North Coast Seashell", {"name": "North Coast Seashell",
"id": base_id + 13, "id": base_id + 13,
"inGameId": "PickUps.7", "inGameId": "PickUps.7",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Boat Cliff Seashell", {"name": "Boat Cliff Seashell",
"id": base_id + 14, "id": base_id + 14,
"inGameId": "PickUps.14", "inGameId": "PickUps.14",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Boat Isle Mound Seashell", {"name": "Boat Isle Mound Seashell",
"id": base_id + 15, "id": base_id + 15,
"inGameId": "PickUps.22", "inGameId": "PickUps.22",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "East Coast Seashell", {"name": "East Coast Seashell",
"id": base_id + 16, "id": base_id + 16,
"inGameId": "PickUps.21", "inGameId": "PickUps.21",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "House North Beach Seashell", {"name": "House North Beach Seashell",
"id": base_id + 17, "id": base_id + 17,
"inGameId": "PickUps.16", "inGameId": "PickUps.16",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Airstream Island North Seashell", {"name": "Airstream Island North Seashell",
"id": base_id + 18, "id": base_id + 18,
"inGameId": "PickUps.13", "inGameId": "PickUps.13",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Airstream Island South Seashell", {"name": "Airstream Island South Seashell",
"id": base_id + 19, "id": base_id + 19,
"inGameId": "PickUps.15", "inGameId": "PickUps.15",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Secret Island Beach Seashell", {"name": "Secret Island Beach Seashell",
"id": base_id + 20, "id": base_id + 20,
"inGameId": "PickUps.1", "inGameId": "PickUps.1",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Meteor Lake Seashell", {"name": "Meteor Lake Seashell",
"id": base_id + 126, "id": base_id + 126,
"inGameId": "PickUps.20", "inGameId": "PickUps.20",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Good Creek Path Seashell", {"name": "Good Creek Path Seashell",
"id": base_id + 127, "id": base_id + 127,
"inGameId": "PickUps.9", "inGameId": "PickUps.9",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
# Visitor's Center Shop # Visitor's Center Shop
{"name": "Visitor's Center Shop Golden Feather 1", {"name": "Visitor's Center Shop Golden Feather 1",
"id": base_id + 21, "id": base_id + 21,
"inGameId": "CampRangerNPC[0]", "inGameId": "CampRangerNPC[0]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 40,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Shop Golden Feather 2", {"name": "Visitor's Center Shop Golden Feather 2",
"id": base_id + 22, "id": base_id + 22,
"inGameId": "CampRangerNPC[1]", "inGameId": "CampRangerNPC[1]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 40,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Shop Hat", {"name": "Visitor's Center Shop Hat",
"id": base_id + 23, "id": base_id + 23,
"inGameId": "CampRangerNPC[9]", "inGameId": "CampRangerNPC[9]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Tough Bird Salesman # Tough Bird Salesman
{"name": "Tough Bird Salesman Golden Feather 1", {"name": "Tough Bird Salesman Golden Feather 1",
"id": base_id + 24, "id": base_id + 24,
"inGameId": "ToughBirdNPC (1)[0]", "inGameId": "ToughBirdNPC (1)[0]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Tough Bird Salesman Golden Feather 2", {"name": "Tough Bird Salesman Golden Feather 2",
"id": base_id + 25, "id": base_id + 25,
"inGameId": "ToughBirdNPC (1)[1]", "inGameId": "ToughBirdNPC (1)[1]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Tough Bird Salesman Golden Feather 3", {"name": "Tough Bird Salesman Golden Feather 3",
"id": base_id + 26, "id": base_id + 26,
"inGameId": "ToughBirdNPC (1)[2]", "inGameId": "ToughBirdNPC (1)[2]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Tough Bird Salesman Golden Feather 4", {"name": "Tough Bird Salesman Golden Feather 4",
"id": base_id + 27, "id": base_id + 27,
"inGameId": "ToughBirdNPC (1)[3]", "inGameId": "ToughBirdNPC (1)[3]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Tough Bird Salesman (400 Coins)", {"name": "Tough Bird Salesman (400 Coins)",
"id": base_id + 28, "id": base_id + 28,
"inGameId": "ToughBirdNPC (1)[9]", "inGameId": "ToughBirdNPC (1)[9]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 400,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
# Beachstickball # Beachstickball
{"name": "Beachstickball (10 Hits)", {"name": "Beachstickball (10 Hits)",
"id": base_id + 29, "id": base_id + 29,
"inGameId": "VolleyballOpponent[0]", "inGameId": "VolleyballOpponent[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Beachstickball (20 Hits)", {"name": "Beachstickball (20 Hits)",
"id": base_id + 30, "id": base_id + 30,
"inGameId": "VolleyballOpponent[1]", "inGameId": "VolleyballOpponent[1]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Beachstickball (30 Hits)", {"name": "Beachstickball (30 Hits)",
"id": base_id + 31, "id": base_id + 31,
"inGameId": "VolleyballOpponent[2]", "inGameId": "VolleyballOpponent[2]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Misc Item Locations # Misc Item Locations
{"name": "Shovel Kid Trade", {"name": "Shovel Kid Trade",
"id": base_id + 32, "id": base_id + 32,
"inGameId": "Frog_StandingNPC[0]", "inGameId": "Frog_StandingNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Compass Guy", {"name": "Compass Guy",
"id": base_id + 33, "id": base_id + 33,
"inGameId": "Fox_WalkingNPC[0]", "inGameId": "Fox_WalkingNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Hawk Peak Bucket Rock", {"name": "Hawk Peak Bucket Rock",
"id": base_id + 34, "id": base_id + 34,
"inGameId": "Tools.23", "inGameId": "Tools.23",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands Bucket Rock", {"name": "Orange Islands Bucket Rock",
"id": base_id + 35, "id": base_id + 35,
"inGameId": "Tools.42", "inGameId": "Tools.42",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Bill the Walrus Fisherman", {"name": "Bill the Walrus Fisherman",
"id": base_id + 36, "id": base_id + 36,
"inGameId": "SittingNPC (1)[0]", "inGameId": "SittingNPC (1)[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Catch 3 Fish Reward", {"name": "Catch 3 Fish Reward",
"id": base_id + 37, "id": base_id + 37,
"inGameId": "FishBuyer[0]", "inGameId": "FishBuyer[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Catch All Fish Reward", {"name": "Catch All Fish Reward",
"id": base_id + 38, "id": base_id + 38,
"inGameId": "FishBuyer[1]", "inGameId": "FishBuyer[1]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7}, "minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7},
{"name": "Permit Guy Bribe", {"name": "Permit Guy Bribe",
"id": base_id + 39, "id": base_id + 39,
"inGameId": "CamperNPC[0]", "inGameId": "CamperNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Catch Fish with Permit", {"name": "Catch Fish with Permit",
"id": base_id + 129, "id": base_id + 129,
"inGameId": "Player[0]", "inGameId": "Player[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Return Camping Permit", {"name": "Return Camping Permit",
"id": base_id + 130, "id": base_id + 130,
"inGameId": "CamperNPC[1]", "inGameId": "CamperNPC[1]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
# Original Pickaxe Locations # Original Pickaxe Locations
{"name": "Blocked Mine Pickaxe 1", {"name": "Blocked Mine Pickaxe 1",
"id": base_id + 40, "id": base_id + 40,
"inGameId": "Tools.31", "inGameId": "Tools.31",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Blocked Mine Pickaxe 2", {"name": "Blocked Mine Pickaxe 2",
"id": base_id + 41, "id": base_id + 41,
"inGameId": "Tools.32", "inGameId": "Tools.32",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Blocked Mine Pickaxe 3", {"name": "Blocked Mine Pickaxe 3",
"id": base_id + 42, "id": base_id + 42,
"inGameId": "Tools.33", "inGameId": "Tools.33",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Original Toy Shovel Locations # Original Toy Shovel Locations
{"name": "Blackwood Trail Lookout Toy Shovel", {"name": "Blackwood Trail Lookout Toy Shovel",
"id": base_id + 43, "id": base_id + 43,
"inGameId": "PickUps.27", "inGameId": "PickUps.27",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Shirley's Point Beach Toy Shovel", {"name": "Shirley's Point Beach Toy Shovel",
"id": base_id + 44, "id": base_id + 44,
"inGameId": "PickUps.30", "inGameId": "PickUps.30",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Beach Toy Shovel", {"name": "Visitor's Center Beach Toy Shovel",
"id": base_id + 45, "id": base_id + 45,
"inGameId": "PickUps.29", "inGameId": "PickUps.29",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Blackwood Trail Rock Toy Shovel", {"name": "Blackwood Trail Rock Toy Shovel",
"id": base_id + 46, "id": base_id + 46,
"inGameId": "PickUps.26", "inGameId": "PickUps.26",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Beach Hut Cliff Toy Shovel", {"name": "Beach Hut Cliff Toy Shovel",
"id": base_id + 128, "id": base_id + 128,
"inGameId": "PickUps.28", "inGameId": "PickUps.28",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Original Stick Locations # Original Stick Locations
{"name": "Secret Island Beach Trail Stick", {"name": "Secret Island Beach Trail Stick",
"id": base_id + 47, "id": base_id + 47,
"inGameId": "PickUps.25", "inGameId": "PickUps.25",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Below Lighthouse Walkway Stick", {"name": "Below Lighthouse Walkway Stick",
"id": base_id + 48, "id": base_id + 48,
"inGameId": "Tools.3", "inGameId": "Tools.3",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Beach Hut Rocky Pool Sand Stick", {"name": "Beach Hut Rocky Pool Sand Stick",
"id": base_id + 49, "id": base_id + 49,
"inGameId": "Tools.0", "inGameId": "Tools.0",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Cliff Overlooking West River Waterfall Stick", {"name": "Cliff Overlooking West River Waterfall Stick",
"id": base_id + 50, "id": base_id + 50,
"inGameId": "Tools.2", "inGameId": "Tools.2",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0},
{"name": "Trail to Tough Bird Salesman Stick", {"name": "Trail to Tough Bird Salesman Stick",
"id": base_id + 51, "id": base_id + 51,
"inGameId": "Tools.8", "inGameId": "Tools.8",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "North Beach Stick", {"name": "North Beach Stick",
"id": base_id + 52, "id": base_id + 52,
"inGameId": "Tools.4", "inGameId": "Tools.4",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Beachstickball Court Stick", {"name": "Beachstickball Court Stick",
"id": base_id + 53, "id": base_id + 53,
"inGameId": "VolleyballMinigame.4", "inGameId": "VolleyballMinigame.4",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Stick Under Sid Beach Umbrella", {"name": "Stick Under Sid Beach Umbrella",
"id": base_id + 54, "id": base_id + 54,
"inGameId": "Tools.1", "inGameId": "Tools.1",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Boating # Boating
@ -333,377 +333,377 @@ location_table: List[LocationInfo] = [
{"name": "Boat Challenge Reward", {"name": "Boat Challenge Reward",
"id": base_id + 56, "id": base_id + 56,
"inGameId": "DeerKidBoat[0]", "inGameId": "DeerKidBoat[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Not a location for now, corresponding with the Boating Manual # Not a location for now, corresponding with the Boating Manual
# {"name": "Receive Boating Manual", # {"name": "Receive Boating Manual",
# "id": base_id + 133, # "id": base_id + 133,
# "inGameId": "DadDeer[1]", # "inGameId": "DadDeer[1]",
# "needsShovel": False, "purchase": False, # "needsShovel": False, "purchase": 0,
# "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, # "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Original Map Locations # Original Map Locations
{"name": "Outlook Point Dog Gift", {"name": "Outlook Point Dog Gift",
"id": base_id + 57, "id": base_id + 57,
"inGameId": "Dog_WalkingNPC_BlueEyed[0]", "inGameId": "Dog_WalkingNPC_BlueEyed[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
# Original Clothes Locations # Original Clothes Locations
{"name": "Collect 15 Seashells", {"name": "Collect 15 Seashells",
"id": base_id + 58, "id": base_id + 58,
"inGameId": "LittleKidNPCVariant (1)[0]", "inGameId": "LittleKidNPCVariant (1)[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Return to Shell Kid", {"name": "Return to Shell Kid",
"id": base_id + 132, "id": base_id + 132,
"inGameId": "LittleKidNPCVariant (1)[1]", "inGameId": "LittleKidNPCVariant (1)[1]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Taylor the Turtle Headband Gift", {"name": "Taylor the Turtle Headband Gift",
"id": base_id + 59, "id": base_id + 59,
"inGameId": "Turtle_WalkingNPC[0]", "inGameId": "Turtle_WalkingNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Sue the Rabbit Shoes Reward", {"name": "Sue the Rabbit Shoes Reward",
"id": base_id + 60, "id": base_id + 60,
"inGameId": "Bunny_WalkingNPC (1)[0]", "inGameId": "Bunny_WalkingNPC (1)[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Purchase Sunhat", {"name": "Purchase Sunhat",
"id": base_id + 61, "id": base_id + 61,
"inGameId": "SittingNPC[0]", "inGameId": "SittingNPC[0]",
"needsShovel": False, "purchase": True, "needsShovel": False, "purchase": 100,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Original Golden Feather Locations # Original Golden Feather Locations
{"name": "Blackwood Forest Golden Feather", {"name": "Blackwood Forest Golden Feather",
"id": base_id + 62, "id": base_id + 62,
"inGameId": "Feathers.3", "inGameId": "Feathers.3",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Ranger May Shell Necklace Golden Feather", {"name": "Ranger May Shell Necklace Golden Feather",
"id": base_id + 63, "id": base_id + 63,
"inGameId": "AuntMayNPC[0]", "inGameId": "AuntMayNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sand Castle Golden Feather", {"name": "Sand Castle Golden Feather",
"id": base_id + 64, "id": base_id + 64,
"inGameId": "SandProvince.3", "inGameId": "SandProvince.3",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Artist Golden Feather", {"name": "Artist Golden Feather",
"id": base_id + 65, "id": base_id + 65,
"inGameId": "StandingNPC[0]", "inGameId": "StandingNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Visitor Camp Rock Golden Feather", {"name": "Visitor Camp Rock Golden Feather",
"id": base_id + 66, "id": base_id + 66,
"inGameId": "Feathers.8", "inGameId": "Feathers.8",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Outlook Cliff Golden Feather", {"name": "Outlook Cliff Golden Feather",
"id": base_id + 67, "id": base_id + 67,
"inGameId": "Feathers.2", "inGameId": "Feathers.2",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Meteor Lake Cliff Golden Feather", {"name": "Meteor Lake Cliff Golden Feather",
"id": base_id + 68, "id": base_id + 68,
"inGameId": "Feathers.7", "inGameId": "Feathers.7",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0},
# Original Silver Feather Locations # Original Silver Feather Locations
{"name": "Secret Island Peak", {"name": "Secret Island Peak",
"id": base_id + 69, "id": base_id + 69,
"inGameId": "PickUps.24", "inGameId": "PickUps.24",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 5, "minGoldenFeathersEasy": 7, "minGoldenFeathersBucket": 7}, "minGoldenFeathers": 5, "minGoldenFeathersEasy": 7, "minGoldenFeathersBucket": 7},
{"name": "Wristwatch Trade", {"name": "Wristwatch Trade",
"id": base_id + 70, "id": base_id + 70,
"inGameId": "Goat_StandingNPC[0]", "inGameId": "Goat_StandingNPC[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
# Golden Chests # Golden Chests
{"name": "Lighthouse Golden Chest", {"name": "Lighthouse Golden Chest",
"id": base_id + 71, "id": base_id + 71,
"inGameId": "Feathers.0", "inGameId": "Feathers.0",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 0},
{"name": "Outlook Golden Chest", {"name": "Outlook Golden Chest",
"id": base_id + 72, "id": base_id + 72,
"inGameId": "Feathers.6", "inGameId": "Feathers.6",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Stone Tower Golden Chest", {"name": "Stone Tower Golden Chest",
"id": base_id + 73, "id": base_id + 73,
"inGameId": "Feathers.5", "inGameId": "Feathers.5",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "North Cliff Golden Chest", {"name": "North Cliff Golden Chest",
"id": base_id + 74, "id": base_id + 74,
"inGameId": "Feathers.4", "inGameId": "Feathers.4",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 3, "minGoldenFeathersEasy": 10, "minGoldenFeathersBucket": 10}, "minGoldenFeathers": 3, "minGoldenFeathersEasy": 10, "minGoldenFeathersBucket": 10},
# Chests # Chests
{"name": "Blackwood Cliff Chest", {"name": "Blackwood Cliff Chest",
"id": base_id + 75, "id": base_id + 75,
"inGameId": "Coins.22", "inGameId": "Coins.22",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "White Coast Trail Chest", {"name": "White Coast Trail Chest",
"id": base_id + 76, "id": base_id + 76,
"inGameId": "Coins.6", "inGameId": "Coins.6",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sid Beach Chest", {"name": "Sid Beach Chest",
"id": base_id + 77, "id": base_id + 77,
"inGameId": "Coins.7", "inGameId": "Coins.7",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sid Beach Buried Treasure Chest", {"name": "Sid Beach Buried Treasure Chest",
"id": base_id + 78, "id": base_id + 78,
"inGameId": "Coins.46", "inGameId": "Coins.46",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Sid Beach Cliff Chest", {"name": "Sid Beach Cliff Chest",
"id": base_id + 79, "id": base_id + 79,
"inGameId": "Coins.9", "inGameId": "Coins.9",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Buried Chest", {"name": "Visitor's Center Buried Chest",
"id": base_id + 80, "id": base_id + 80,
"inGameId": "Coins.94", "inGameId": "Coins.94",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Visitor's Center Hidden Chest", {"name": "Visitor's Center Hidden Chest",
"id": base_id + 81, "id": base_id + 81,
"inGameId": "Coins.42", "inGameId": "Coins.42",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Shirley's Point Chest", {"name": "Shirley's Point Chest",
"id": base_id + 82, "id": base_id + 82,
"inGameId": "Coins.10", "inGameId": "Coins.10",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 1, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 2}, "minGoldenFeathers": 1, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 2},
{"name": "Caravan Cliff Chest", {"name": "Caravan Cliff Chest",
"id": base_id + 83, "id": base_id + 83,
"inGameId": "Coins.12", "inGameId": "Coins.12",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Caravan Arch Chest", {"name": "Caravan Arch Chest",
"id": base_id + 84, "id": base_id + 84,
"inGameId": "Coins.11", "inGameId": "Coins.11",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "King Buried Treasure Chest", {"name": "King Buried Treasure Chest",
"id": base_id + 85, "id": base_id + 85,
"inGameId": "Coins.41", "inGameId": "Coins.41",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Good Creek Path Buried Chest", {"name": "Good Creek Path Buried Chest",
"id": base_id + 86, "id": base_id + 86,
"inGameId": "Coins.48", "inGameId": "Coins.48",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Good Creek Path West Chest", {"name": "Good Creek Path West Chest",
"id": base_id + 87, "id": base_id + 87,
"inGameId": "Coins.33", "inGameId": "Coins.33",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Good Creek Path East Chest", {"name": "Good Creek Path East Chest",
"id": base_id + 88, "id": base_id + 88,
"inGameId": "Coins.62", "inGameId": "Coins.62",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "West Waterfall Chest", {"name": "West Waterfall Chest",
"id": base_id + 89, "id": base_id + 89,
"inGameId": "Coins.20", "inGameId": "Coins.20",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Stone Tower West Cliff Chest", {"name": "Stone Tower West Cliff Chest",
"id": base_id + 90, "id": base_id + 90,
"inGameId": "PickUps.0", "inGameId": "PickUps.0",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Bucket Path Chest", {"name": "Bucket Path Chest",
"id": base_id + 91, "id": base_id + 91,
"inGameId": "Coins.50", "inGameId": "Coins.50",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Bucket Cliff Chest", {"name": "Bucket Cliff Chest",
"id": base_id + 92, "id": base_id + 92,
"inGameId": "Coins.49", "inGameId": "Coins.49",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5}, "minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},
{"name": "In Her Shadow Buried Treasure Chest", {"name": "In Her Shadow Buried Treasure Chest",
"id": base_id + 93, "id": base_id + 93,
"inGameId": "Feathers.9", "inGameId": "Feathers.9",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Meteor Lake Buried Chest", {"name": "Meteor Lake Buried Chest",
"id": base_id + 94, "id": base_id + 94,
"inGameId": "Coins.86", "inGameId": "Coins.86",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Meteor Lake Chest", {"name": "Meteor Lake Chest",
"id": base_id + 95, "id": base_id + 95,
"inGameId": "Coins.64", "inGameId": "Coins.64",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "House North Beach Chest", {"name": "House North Beach Chest",
"id": base_id + 96, "id": base_id + 96,
"inGameId": "Coins.65", "inGameId": "Coins.65",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "East Coast Chest", {"name": "East Coast Chest",
"id": base_id + 97, "id": base_id + 97,
"inGameId": "Coins.98", "inGameId": "Coins.98",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Fisherman's Boat Chest 1", {"name": "Fisherman's Boat Chest 1",
"id": base_id + 99, "id": base_id + 99,
"inGameId": "Boat.0", "inGameId": "Boat.0",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Fisherman's Boat Chest 2", {"name": "Fisherman's Boat Chest 2",
"id": base_id + 100, "id": base_id + 100,
"inGameId": "Boat.7", "inGameId": "Boat.7",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Airstream Island Chest", {"name": "Airstream Island Chest",
"id": base_id + 101, "id": base_id + 101,
"inGameId": "Coins.31", "inGameId": "Coins.31",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "West River Waterfall Head Chest", {"name": "West River Waterfall Head Chest",
"id": base_id + 102, "id": base_id + 102,
"inGameId": "Coins.34", "inGameId": "Coins.34",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Old Building Chest", {"name": "Old Building Chest",
"id": base_id + 103, "id": base_id + 103,
"inGameId": "Coins.104", "inGameId": "Coins.104",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Old Building West Chest", {"name": "Old Building West Chest",
"id": base_id + 104, "id": base_id + 104,
"inGameId": "Coins.109", "inGameId": "Coins.109",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Old Building East Chest", {"name": "Old Building East Chest",
"id": base_id + 105, "id": base_id + 105,
"inGameId": "Coins.8", "inGameId": "Coins.8",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Hawk Peak West Chest", {"name": "Hawk Peak West Chest",
"id": base_id + 106, "id": base_id + 106,
"inGameId": "Coins.21", "inGameId": "Coins.21",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5}, "minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},
{"name": "Hawk Peak East Buried Chest", {"name": "Hawk Peak East Buried Chest",
"id": base_id + 107, "id": base_id + 107,
"inGameId": "Coins.76", "inGameId": "Coins.76",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5}, "minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},
{"name": "Hawk Peak Northeast Chest", {"name": "Hawk Peak Northeast Chest",
"id": base_id + 108, "id": base_id + 108,
"inGameId": "Coins.79", "inGameId": "Coins.79",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5}, "minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},
{"name": "Northern East Coast Chest", {"name": "Northern East Coast Chest",
"id": base_id + 109, "id": base_id + 109,
"inGameId": "Coins.45", "inGameId": "Coins.45",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0},
{"name": "North Coast Chest", {"name": "North Coast Chest",
"id": base_id + 110, "id": base_id + 110,
"inGameId": "Coins.28", "inGameId": "Coins.28",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "North Coast Buried Chest", {"name": "North Coast Buried Chest",
"id": base_id + 111, "id": base_id + 111,
"inGameId": "Coins.47", "inGameId": "Coins.47",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Small South Island Buried Chest", {"name": "Small South Island Buried Chest",
"id": base_id + 112, "id": base_id + 112,
"inGameId": "Coins.87", "inGameId": "Coins.87",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Secret Island Bottom Chest", {"name": "Secret Island Bottom Chest",
"id": base_id + 113, "id": base_id + 113,
"inGameId": "Coins.88", "inGameId": "Coins.88",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Secret Island Treehouse Chest", {"name": "Secret Island Treehouse Chest",
"id": base_id + 114, "id": base_id + 114,
"inGameId": "Coins.89", "inGameId": "Coins.89",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 1}, "minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 1},
{"name": "Sunhat Island Buried Chest", {"name": "Sunhat Island Buried Chest",
"id": base_id + 115, "id": base_id + 115,
"inGameId": "Coins.112", "inGameId": "Coins.112",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands South Buried Chest", {"name": "Orange Islands South Buried Chest",
"id": base_id + 116, "id": base_id + 116,
"inGameId": "Coins.119", "inGameId": "Coins.119",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands West Chest", {"name": "Orange Islands West Chest",
"id": base_id + 117, "id": base_id + 117,
"inGameId": "Coins.121", "inGameId": "Coins.121",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands North Buried Chest", {"name": "Orange Islands North Buried Chest",
"id": base_id + 118, "id": base_id + 118,
"inGameId": "Coins.117", "inGameId": "Coins.117",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands East Chest", {"name": "Orange Islands East Chest",
"id": base_id + 119, "id": base_id + 119,
"inGameId": "Coins.120", "inGameId": "Coins.120",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands South Hidden Chest", {"name": "Orange Islands South Hidden Chest",
"id": base_id + 120, "id": base_id + 120,
"inGameId": "Coins.124", "inGameId": "Coins.124",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "A Stormy View Buried Treasure Chest", {"name": "A Stormy View Buried Treasure Chest",
"id": base_id + 121, "id": base_id + 121,
"inGameId": "Coins.113", "inGameId": "Coins.113",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
{"name": "Orange Islands Ruins Buried Chest", {"name": "Orange Islands Ruins Buried Chest",
"id": base_id + 122, "id": base_id + 122,
"inGameId": "Coins.118", "inGameId": "Coins.118",
"needsShovel": True, "purchase": False, "needsShovel": True, "purchase": 0,
"minGoldenFeathers": 2, "minGoldenFeathersEasy": 4, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 2, "minGoldenFeathersEasy": 4, "minGoldenFeathersBucket": 0},
# Race Rewards # Race Rewards
{"name": "Lighthouse Race Reward", {"name": "Lighthouse Race Reward",
"id": base_id + 123, "id": base_id + 123,
"inGameId": "RaceOpponent[0]", "inGameId": "RaceOpponent[0]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 1}, "minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 1},
{"name": "Old Building Race Reward", {"name": "Old Building Race Reward",
"id": base_id + 124, "id": base_id + 124,
"inGameId": "RaceOpponent[1]", "inGameId": "RaceOpponent[1]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 1, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 1, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0},
{"name": "Hawk Peak Race Reward", {"name": "Hawk Peak Race Reward",
"id": base_id + 125, "id": base_id + 125,
"inGameId": "RaceOpponent[2]", "inGameId": "RaceOpponent[2]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7}, "minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7},
{"name": "Lose Race Gift", {"name": "Lose Race Gift",
"id": base_id + 131, "id": base_id + 131,
"inGameId": "RaceOpponent[9]", "inGameId": "RaceOpponent[9]",
"needsShovel": False, "purchase": False, "needsShovel": False, "purchase": 0,
"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, "minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},
] ]

View File

@ -1,5 +1,5 @@
from dataclasses import dataclass from dataclasses import dataclass
from Options import Choice, PerGameCommonOptions, Range, StartInventoryPool, Toggle from Options import Choice, OptionGroup, PerGameCommonOptions, Range, StartInventoryPool, Toggle, DefaultOnToggle
class Goal(Choice): class Goal(Choice):
"""Choose the end goal. """Choose the end goal.
@ -22,8 +22,10 @@ class CoinsInShops(Toggle):
default = False default = False
class GoldenFeathers(Range): class GoldenFeathers(Range):
"""Number of Golden Feathers in the item pool. """
(Note that for the Photo and Help Everyone goals, a minimum of 12 Golden Feathers is enforced)""" Number of Golden Feathers in the item pool.
(Note that for the Photo and Help Everyone goals, a minimum of 12 Golden Feathers is enforced)
"""
display_name = "Golden Feathers" display_name = "Golden Feathers"
range_start = 0 range_start = 0
range_end = 20 range_end = 20
@ -43,6 +45,20 @@ class Buckets(Range):
range_end = 2 range_end = 2
default = 2 default = 2
class Sticks(Range):
"""Number of Sticks in the item pool."""
display_name = "Sticks"
range_start = 1
range_end = 8
default = 8
class ToyShovels(Range):
"""Number of Toy Shovels in the item pool."""
display_name = "Toy Shovels"
range_start = 1
range_end = 5
default = 5
class GoldenFeatherProgression(Choice): class GoldenFeatherProgression(Choice):
"""Determines which locations are considered in logic based on the required amount of golden feathers to reach them. """Determines which locations are considered in logic based on the required amount of golden feathers to reach them.
Easy: Locations will be considered inaccessible until the player has enough golden feathers to easily reach them. A minimum of 10 golden feathers is recommended for this setting. Easy: Locations will be considered inaccessible until the player has enough golden feathers to easily reach them. A minimum of 10 golden feathers is recommended for this setting.
@ -76,6 +92,40 @@ class FillerCoinAmount(Choice):
option_50_coins = 9 option_50_coins = 9
default = 1 default = 1
class RandomWalkieTalkie(DefaultOnToggle):
"""
When enabled, the Walkie Talkie item will be placed into the item pool. Otherwise, it will be placed in its vanilla location.
This item usually allows the player to locate Avery around the map or restart a race.
"""
display_name = "Randomize Walkie Talkie"
class EasierRaces(Toggle):
"""When enabled, the Running Shoes will be added as a logical requirement for beating any of the races."""
display_name = "Easier Races"
class ShopCheckLogic(Choice):
"""Determines which items will be added as logical requirements to making certain purchases in shops."""
display_name = "Shop Check Logic"
option_nothing = 0
option_fishing_rod = 1
option_shovel = 2
option_fishing_rod_and_shovel = 3
option_golden_fishing_rod = 4
option_golden_fishing_rod_and_shovel = 5
default = 1
class MinShopCheckLogic(Choice):
"""
Determines the minimum cost of a shop item that will have the shop check logic applied to it.
If the cost of a shop item is less than this value, no items will be required to access it.
This is based on the vanilla prices of the shop item. The set cost multiplier will not affect this value.
"""
display_name = "Minimum Shop Check Logic Application"
option_40_coins = 0
option_100_coins = 1
option_400_coins = 2
default = 1
@dataclass @dataclass
class ShortHikeOptions(PerGameCommonOptions): class ShortHikeOptions(PerGameCommonOptions):
start_inventory_from_pool: StartInventoryPool start_inventory_from_pool: StartInventoryPool
@ -84,6 +134,37 @@ class ShortHikeOptions(PerGameCommonOptions):
golden_feathers: GoldenFeathers golden_feathers: GoldenFeathers
silver_feathers: SilverFeathers silver_feathers: SilverFeathers
buckets: Buckets buckets: Buckets
sticks: Sticks
toy_shovels: ToyShovels
golden_feather_progression: GoldenFeatherProgression golden_feather_progression: GoldenFeatherProgression
cost_multiplier: CostMultiplier cost_multiplier: CostMultiplier
filler_coin_amount: FillerCoinAmount filler_coin_amount: FillerCoinAmount
random_walkie_talkie: RandomWalkieTalkie
easier_races: EasierRaces
shop_check_logic: ShopCheckLogic
min_shop_check_logic: MinShopCheckLogic
shorthike_option_groups = [
OptionGroup("General Options", [
Goal,
FillerCoinAmount,
RandomWalkieTalkie
]),
OptionGroup("Logic Options", [
GoldenFeatherProgression,
EasierRaces
]),
OptionGroup("Item Pool Options", [
GoldenFeathers,
SilverFeathers,
Buckets,
Sticks,
ToyShovels
]),
OptionGroup("Shop Options", [
CoinsInShops,
CostMultiplier,
ShopCheckLogic,
MinShopCheckLogic
])
]

View File

@ -1,4 +1,5 @@
from worlds.generic.Rules import forbid_items_for_player, add_rule from worlds.generic.Rules import forbid_items_for_player, add_rule
from worlds.shorthike.Options import Goal, GoldenFeatherProgression, MinShopCheckLogic, ShopCheckLogic
def create_rules(self, location_table): def create_rules(self, location_table):
multiworld = self.multiworld multiworld = self.multiworld
@ -11,11 +12,23 @@ def create_rules(self, location_table):
forbid_items_for_player(multiworld.get_location(loc["name"], player), self.item_name_groups['Maps'], player) forbid_items_for_player(multiworld.get_location(loc["name"], player), self.item_name_groups['Maps'], player)
add_rule(multiworld.get_location(loc["name"], player), add_rule(multiworld.get_location(loc["name"], player),
lambda state: state.has("Shovel", player)) lambda state: state.has("Shovel", player))
# Shop Rules
if loc["purchase"] and not options.coins_in_shops: if loc["purchase"] and not options.coins_in_shops:
forbid_items_for_player(multiworld.get_location(loc["name"], player), self.item_name_groups['Coins'], player) forbid_items_for_player(multiworld.get_location(loc["name"], player), self.item_name_groups['Coins'], player)
if loc["purchase"] >= get_min_shop_logic_cost(self) and options.shop_check_logic != ShopCheckLogic.option_nothing:
if options.shop_check_logic in {ShopCheckLogic.option_fishing_rod, ShopCheckLogic.option_fishing_rod_and_shovel}:
add_rule(multiworld.get_location(loc["name"], player),
lambda state: state.has("Progressive Fishing Rod", player))
if options.shop_check_logic in {ShopCheckLogic.option_golden_fishing_rod, ShopCheckLogic.option_golden_fishing_rod_and_shovel}:
add_rule(multiworld.get_location(loc["name"], player),
lambda state: state.has("Progressive Fishing Rod", player, 2))
if options.shop_check_logic in {ShopCheckLogic.option_shovel, ShopCheckLogic.option_fishing_rod_and_shovel, ShopCheckLogic.option_golden_fishing_rod_and_shovel}:
add_rule(multiworld.get_location(loc["name"], player),
lambda state: state.has("Shovel", player))
# Minimum Feather Rules # Minimum Feather Rules
if options.golden_feather_progression != 2: if options.golden_feather_progression != GoldenFeatherProgression.option_hard:
min_feathers = get_min_feathers(self, loc["minGoldenFeathers"], loc["minGoldenFeathersEasy"]) min_feathers = get_min_feathers(self, loc["minGoldenFeathers"], loc["minGoldenFeathersEasy"])
if options.buckets > 0 and loc["minGoldenFeathersBucket"] < min_feathers: if options.buckets > 0 and loc["minGoldenFeathersBucket"] < min_feathers:
@ -32,11 +45,11 @@ def create_rules(self, location_table):
# Fishing Rules # Fishing Rules
add_rule(multiworld.get_location("Catch 3 Fish Reward", player), add_rule(multiworld.get_location("Catch 3 Fish Reward", player),
lambda state: state.has("Fishing Rod", player)) lambda state: state.has("Progressive Fishing Rod", player))
add_rule(multiworld.get_location("Catch Fish with Permit", player), add_rule(multiworld.get_location("Catch Fish with Permit", player),
lambda state: state.has("Fishing Rod", player)) lambda state: state.has("Progressive Fishing Rod", player))
add_rule(multiworld.get_location("Catch All Fish Reward", player), add_rule(multiworld.get_location("Catch All Fish Reward", player),
lambda state: state.has("Fishing Rod", player)) lambda state: state.has("Progressive Fishing Rod", player, 2))
# Misc Rules # Misc Rules
add_rule(multiworld.get_location("Return Camping Permit", player), add_rule(multiworld.get_location("Return Camping Permit", player),
@ -60,14 +73,33 @@ def create_rules(self, location_table):
add_rule(multiworld.get_location("Beachstickball (30 Hits)", player), add_rule(multiworld.get_location("Beachstickball (30 Hits)", player),
lambda state: state.has("Stick", player)) lambda state: state.has("Stick", player))
# Race Rules
if options.easier_races:
add_rule(multiworld.get_location("Lighthouse Race Reward", player),
lambda state: state.has("Running Shoes", player))
add_rule(multiworld.get_location("Old Building Race Reward", player),
lambda state: state.has("Running Shoes", player))
add_rule(multiworld.get_location("Hawk Peak Race Reward", player),
lambda state: state.has("Running Shoes", player))
def get_min_feathers(self, min_golden_feathers, min_golden_feathers_easy): def get_min_feathers(self, min_golden_feathers, min_golden_feathers_easy):
options = self.options options = self.options
min_feathers = min_golden_feathers min_feathers = min_golden_feathers
if options.golden_feather_progression == 0: if options.golden_feather_progression == GoldenFeatherProgression.option_easy:
min_feathers = min_golden_feathers_easy min_feathers = min_golden_feathers_easy
if min_feathers > options.golden_feathers: if min_feathers > options.golden_feathers:
if options.goal != 1 and options.goal != 3: if options.goal not in {Goal.option_help_everyone, Goal.option_photo}:
min_feathers = options.golden_feathers min_feathers = options.golden_feathers
return min_feathers return min_feathers
def get_min_shop_logic_cost(self):
options = self.options
if options.min_shop_check_logic == MinShopCheckLogic.option_40_coins:
return 40
elif options.min_shop_check_logic == MinShopCheckLogic.option_100_coins:
return 100
elif options.min_shop_check_logic == MinShopCheckLogic.option_400_coins:
return 400

View File

@ -1,12 +1,11 @@
from collections import Counter
from typing import ClassVar, Dict, Any, Type from typing import ClassVar, Dict, Any, Type
from BaseClasses import Region, Location, Item, Tutorial from BaseClasses import ItemClassification, Region, Location, Item, Tutorial
from Options import PerGameCommonOptions from Options import PerGameCommonOptions
from worlds.AutoWorld import World, WebWorld from worlds.AutoWorld import World, WebWorld
from .Items import item_table, group_table, base_id from .Items import item_table, group_table, base_id
from .Locations import location_table from .Locations import location_table
from .Rules import create_rules, get_min_feathers from .Rules import create_rules, get_min_feathers
from .Options import ShortHikeOptions from .Options import ShortHikeOptions, shorthike_option_groups
class ShortHikeWeb(WebWorld): class ShortHikeWeb(WebWorld):
theme = "ocean" theme = "ocean"
@ -18,6 +17,7 @@ class ShortHikeWeb(WebWorld):
"setup/en", "setup/en",
["Chandler"] ["Chandler"]
)] )]
option_groups = shorthike_option_groups
class ShortHikeWorld(World): class ShortHikeWorld(World):
""" """
@ -47,9 +47,14 @@ class ShortHikeWorld(World):
item_id: int = self.item_name_to_id[name] item_id: int = self.item_name_to_id[name]
id = item_id - base_id - 1 id = item_id - base_id - 1
return ShortHikeItem(name, item_table[id]["classification"], item_id, player=self.player) classification = item_table[id]["classification"]
if self.options.easier_races and name == "Running Shoes":
classification = ItemClassification.progression
return ShortHikeItem(name, classification, item_id, player=self.player)
def create_items(self) -> None: def create_items(self) -> None:
itempool = []
for item in item_table: for item in item_table:
count = item["count"] count = item["count"]
@ -57,18 +62,28 @@ class ShortHikeWorld(World):
continue continue
else: else:
for i in range(count): for i in range(count):
self.multiworld.itempool.append(self.create_item(item["name"])) itempool.append(self.create_item(item["name"]))
feather_count = self.options.golden_feathers feather_count = self.options.golden_feathers
if self.options.goal == 1 or self.options.goal == 3: if self.options.goal == 1 or self.options.goal == 3:
if feather_count < 12: if feather_count < 12:
feather_count = 12 feather_count = 12
junk = 45 - self.options.silver_feathers - feather_count - self.options.buckets itempool += [self.create_item("Golden Feather") for _ in range(feather_count)]
self.multiworld.itempool += [self.create_item(self.get_filler_item_name()) for _ in range(junk)] itempool += [self.create_item("Silver Feather") for _ in range(self.options.silver_feathers)]
self.multiworld.itempool += [self.create_item("Golden Feather") for _ in range(feather_count)] itempool += [self.create_item("Bucket") for _ in range(self.options.buckets)]
self.multiworld.itempool += [self.create_item("Silver Feather") for _ in range(self.options.silver_feathers)] itempool += [self.create_item("Stick") for _ in range(self.options.sticks)]
self.multiworld.itempool += [self.create_item("Bucket") for _ in range(self.options.buckets)] itempool += [self.create_item("Toy Shovel") for _ in range(self.options.toy_shovels)]
if self.options.random_walkie_talkie:
itempool.append(self.create_item("Walkie Talkie"))
else:
self.multiworld.get_location("Lose Race Gift", self.player).place_locked_item(self.create_item("Walkie Talkie"))
junk = len(self.multiworld.get_unfilled_locations(self.player)) - len(itempool)
itempool += [self.create_item(self.get_filler_item_name()) for _ in range(junk)]
self.multiworld.itempool += itempool
def create_regions(self) -> None: def create_regions(self) -> None:
menu_region = Region("Menu", self.player, self.multiworld) menu_region = Region("Menu", self.player, self.multiworld)
@ -92,20 +107,23 @@ class ShortHikeWorld(World):
self.multiworld.completion_condition[self.player] = lambda state: state.has("Golden Feather", self.player, 12) self.multiworld.completion_condition[self.player] = lambda state: state.has("Golden Feather", self.player, 12)
elif self.options.goal == "races": elif self.options.goal == "races":
# Races # Races
self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, get_min_feathers(self, 7, 9)) self.multiworld.completion_condition[self.player] = lambda state: state.can_reach_location("Hawk Peak Race Reward", self.player)
or (state.has("Bucket", self.player) and state.has("Golden Feather", self.player, 7)))
elif self.options.goal == "help_everyone": elif self.options.goal == "help_everyone":
# Help Everyone # Help Everyone
self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, 12) self.multiworld.completion_condition[self.player] = lambda state: (state.can_reach_location("Collect 15 Seashells", self.player)
and state.has("Toy Shovel", self.player) and state.has("Camping Permit", self.player) and state.has("Golden Feather", self.player, 12)
and state.has("Motorboat Key", self.player) and state.has("Headband", self.player) and state.can_reach_location("Tough Bird Salesman (400 Coins)", self.player)
and state.has("Wristwatch", self.player) and state.has("Seashell", self.player, 15) and state.can_reach_location("Ranger May Shell Necklace Golden Feather", self.player)
and state.has("Shell Necklace", self.player)) and state.can_reach_location("Sue the Rabbit Shoes Reward", self.player)
and state.can_reach_location("Wristwatch Trade", self.player)
and state.can_reach_location("Return Camping Permit", self.player)
and state.can_reach_location("Boat Challenge Reward", self.player)
and state.can_reach_location("Shovel Kid Trade", self.player)
and state.can_reach_location("Purchase Sunhat", self.player)
and state.can_reach_location("Artist Golden Feather", self.player))
elif self.options.goal == "fishmonger": elif self.options.goal == "fishmonger":
# Fishmonger # Fishmonger
self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, get_min_feathers(self, 7, 9)) self.multiworld.completion_condition[self.player] = lambda state: state.can_reach_location("Catch All Fish Reward", self.player)
or (state.has("Bucket", self.player) and state.has("Golden Feather", self.player, 7))
and state.has("Fishing Rod", self.player))
def set_rules(self): def set_rules(self):
create_rules(self, location_table) create_rules(self, location_table)
@ -117,6 +135,9 @@ class ShortHikeWorld(World):
"goal": int(options.goal), "goal": int(options.goal),
"logicLevel": int(options.golden_feather_progression), "logicLevel": int(options.golden_feather_progression),
"costMultiplier": int(options.cost_multiplier), "costMultiplier": int(options.cost_multiplier),
"shopCheckLogic": int(options.shop_check_logic),
"minShopCheckLogic": int(options.min_shop_check_logic),
"easierRaces": bool(options.easier_races),
} }
slot_data = { slot_data = {