mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	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:
		| @@ -10,15 +10,15 @@ class ItemDict(TypedDict): | ||||
| base_id = 82000 | ||||
|  | ||||
| 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": "Golden Feather", "id": base_id + 3, "count": 0, "classification": ItemClassification.progression}, | ||||
|     {"name": "Silver Feather", "id": base_id + 4, "count": 0, "classification": ItemClassification.useful}, | ||||
|     {"name": "Bucket", "id": base_id + 5, "count": 0, "classification": ItemClassification.progression}, | ||||
|     {"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": "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": "Medal", "id": base_id + 11, "count": 3, "classification": ItemClassification.filler}, | ||||
|     {"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": "Running Shoes", "id": base_id + 25, "count": 1, "classification": ItemClassification.useful}, | ||||
|     {"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 | ||||
|     #{"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": "25 Coins", "id": base_id + 32, "count": 7, "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": "33 Coins", "id": base_id + 35, "count": 6, "classification": ItemClassification.filler}, | ||||
|     {"name": "50 Coins", "id": base_id + 36, "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.useful}, | ||||
|     {"name": "50 Coins", "id": base_id + 36, "count": 1, "classification": ItemClassification.useful}, | ||||
|  | ||||
|     # Filler item determined by settings | ||||
|     {"name": "13 Coins", "id": base_id + 37, "count": 0, "classification": ItemClassification.filler}, | ||||
|   | ||||
| @@ -5,7 +5,7 @@ class LocationInfo(TypedDict): | ||||
|     id: int | ||||
|     inGameId: str | ||||
|     needsShovel: bool | ||||
|     purchase: bool | ||||
|     purchase: int | ||||
|     minGoldenFeathers: int | ||||
|     minGoldenFeathersEasy: int | ||||
|     minGoldenFeathersBucket: int | ||||
| @@ -17,311 +17,311 @@ location_table: List[LocationInfo] = [ | ||||
|     {"name": "Start Beach Seashell",  | ||||
|         "id": base_id + 1,  | ||||
|         "inGameId": "PickUps.3",  | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beach Hut Seashell", | ||||
|         "id": base_id + 2, | ||||
|         "inGameId": "PickUps.2", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beach Umbrella Seashell", | ||||
|         "id": base_id + 3, | ||||
|         "inGameId": "PickUps.8", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Sid Beach Mound Seashell", | ||||
|         "id": base_id + 4, | ||||
|         "inGameId": "PickUps.12", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Sid Beach Seashell", | ||||
|         "id": base_id + 5, | ||||
|         "inGameId": "PickUps.11", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Shirley's Point Beach Seashell", | ||||
|         "id": base_id + 6, | ||||
|         "inGameId": "PickUps.18", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Shirley's Point Rock Seashell", | ||||
|         "id": base_id + 7, | ||||
|         "inGameId": "PickUps.17", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Visitor's Center Beach Seashell", | ||||
|         "id": base_id + 8, | ||||
|         "inGameId": "PickUps.19", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "West River Seashell", | ||||
|         "id": base_id + 9, | ||||
|         "inGameId": "PickUps.10", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "West Riverbank Seashell", | ||||
|         "id": base_id + 10, | ||||
|         "inGameId": "PickUps.4", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Stone Tower Riverbank Seashell", | ||||
|         "id": base_id + 11, | ||||
|         "inGameId": "PickUps.23", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "North Beach Seashell", | ||||
|         "id": base_id + 12, | ||||
|         "inGameId": "PickUps.6", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "North Coast Seashell", | ||||
|         "id": base_id + 13, | ||||
|         "inGameId": "PickUps.7", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Boat Cliff Seashell", | ||||
|         "id": base_id + 14, | ||||
|         "inGameId": "PickUps.14", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Boat Isle Mound Seashell", | ||||
|         "id": base_id + 15, | ||||
|         "inGameId": "PickUps.22", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "East Coast Seashell", | ||||
|         "id": base_id + 16, | ||||
|         "inGameId": "PickUps.21", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "House North Beach Seashell", | ||||
|         "id": base_id + 17, | ||||
|         "inGameId": "PickUps.16", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Airstream Island North Seashell", | ||||
|         "id": base_id + 18, | ||||
|         "inGameId": "PickUps.13", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Airstream Island South Seashell", | ||||
|         "id": base_id + 19, | ||||
|         "inGameId": "PickUps.15", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Secret Island Beach Seashell", | ||||
|         "id": base_id + 20, | ||||
|         "inGameId": "PickUps.1", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Meteor Lake Seashell", | ||||
|         "id": base_id + 126, | ||||
|         "inGameId": "PickUps.20", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Good Creek Path Seashell", | ||||
|         "id": base_id + 127, | ||||
|         "inGameId": "PickUps.9", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Visitor's Center Shop | ||||
|     {"name": "Visitor's Center Shop Golden Feather 1", | ||||
|         "id": base_id + 21, | ||||
|         "inGameId": "CampRangerNPC[0]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 40, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Visitor's Center Shop Golden Feather 2", | ||||
|         "id": base_id + 22, | ||||
|         "inGameId": "CampRangerNPC[1]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 40, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Visitor's Center Shop Hat", | ||||
|         "id": base_id + 23, | ||||
|         "inGameId": "CampRangerNPC[9]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Tough Bird Salesman | ||||
|     {"name": "Tough Bird Salesman Golden Feather 1", | ||||
|         "id": base_id + 24, | ||||
|         "inGameId": "ToughBirdNPC (1)[0]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Tough Bird Salesman Golden Feather 2", | ||||
|         "id": base_id + 25, | ||||
|         "inGameId": "ToughBirdNPC (1)[1]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Tough Bird Salesman Golden Feather 3", | ||||
|         "id": base_id + 26, | ||||
|         "inGameId": "ToughBirdNPC (1)[2]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Tough Bird Salesman Golden Feather 4", | ||||
|         "id": base_id + 27, | ||||
|         "inGameId": "ToughBirdNPC (1)[3]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Tough Bird Salesman (400 Coins)", | ||||
|         "id": base_id + 28, | ||||
|         "inGameId": "ToughBirdNPC (1)[9]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 400, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Beachstickball | ||||
|     {"name": "Beachstickball (10 Hits)", | ||||
|         "id": base_id + 29, | ||||
|         "inGameId": "VolleyballOpponent[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beachstickball (20 Hits)", | ||||
|         "id": base_id + 30, | ||||
|         "inGameId": "VolleyballOpponent[1]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beachstickball (30 Hits)", | ||||
|         "id": base_id + 31, | ||||
|         "inGameId": "VolleyballOpponent[2]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Misc Item Locations | ||||
|     {"name": "Shovel Kid Trade", | ||||
|         "id": base_id + 32, | ||||
|         "inGameId": "Frog_StandingNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Compass Guy", | ||||
|         "id": base_id + 33, | ||||
|         "inGameId": "Fox_WalkingNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Hawk Peak Bucket Rock", | ||||
|         "id": base_id + 34, | ||||
|         "inGameId": "Tools.23", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Orange Islands Bucket Rock", | ||||
|         "id": base_id + 35, | ||||
|         "inGameId": "Tools.42", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Bill the Walrus Fisherman", | ||||
|         "id": base_id + 36, | ||||
|         "inGameId": "SittingNPC (1)[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Catch 3 Fish Reward", | ||||
|         "id": base_id + 37, | ||||
|         "inGameId": "FishBuyer[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Catch All Fish Reward", | ||||
|         "id": base_id + 38, | ||||
|         "inGameId": "FishBuyer[1]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7}, | ||||
|     {"name": "Permit Guy Bribe", | ||||
|         "id": base_id + 39, | ||||
|         "inGameId": "CamperNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Catch Fish with Permit", | ||||
|         "id": base_id + 129, | ||||
|         "inGameId": "Player[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Return Camping Permit", | ||||
|         "id": base_id + 130, | ||||
|         "inGameId": "CamperNPC[1]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Pickaxe Locations | ||||
|     {"name": "Blocked Mine Pickaxe 1", | ||||
|         "id": base_id + 40, | ||||
|         "inGameId": "Tools.31", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Blocked Mine Pickaxe 2", | ||||
|         "id": base_id + 41, | ||||
|         "inGameId": "Tools.32", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Blocked Mine Pickaxe 3", | ||||
|         "id": base_id + 42, | ||||
|         "inGameId": "Tools.33", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Toy Shovel Locations | ||||
|     {"name": "Blackwood Trail Lookout Toy Shovel", | ||||
|         "id": base_id + 43, | ||||
|         "inGameId": "PickUps.27", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Shirley's Point Beach Toy Shovel", | ||||
|         "id": base_id + 44, | ||||
|         "inGameId": "PickUps.30", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Visitor's Center Beach Toy Shovel", | ||||
|         "id": base_id + 45, | ||||
|         "inGameId": "PickUps.29", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Blackwood Trail Rock Toy Shovel", | ||||
|         "id": base_id + 46, | ||||
|         "inGameId": "PickUps.26", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beach Hut Cliff Toy Shovel", | ||||
|         "id": base_id + 128, | ||||
|         "inGameId": "PickUps.28", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Stick Locations | ||||
|     {"name": "Secret Island Beach Trail Stick", | ||||
|         "id": base_id + 47, | ||||
|         "inGameId": "PickUps.25", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Below Lighthouse Walkway Stick", | ||||
|         "id": base_id + 48, | ||||
|         "inGameId": "Tools.3", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beach Hut Rocky Pool Sand Stick", | ||||
|         "id": base_id + 49, | ||||
|         "inGameId": "Tools.0", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Cliff Overlooking West River Waterfall Stick", | ||||
|         "id": base_id + 50, | ||||
|         "inGameId": "Tools.2", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Trail to Tough Bird Salesman Stick", | ||||
|         "id": base_id + 51, | ||||
|         "inGameId": "Tools.8", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "North Beach Stick", | ||||
|         "id": base_id + 52, | ||||
|         "inGameId": "Tools.4", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Beachstickball Court Stick", | ||||
|         "id": base_id + 53, | ||||
|         "inGameId": "VolleyballMinigame.4", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Stick Under Sid Beach Umbrella", | ||||
|         "id": base_id + 54, | ||||
|         "inGameId": "Tools.1", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Boating | ||||
| @@ -333,377 +333,377 @@ location_table: List[LocationInfo] = [ | ||||
|     {"name": "Boat Challenge Reward", | ||||
|         "id": base_id + 56, | ||||
|         "inGameId": "DeerKidBoat[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Not a location for now, corresponding with the Boating Manual | ||||
|     # {"name": "Receive Boating Manual", | ||||
|     #   "id": base_id + 133, | ||||
|     #   "inGameId": "DadDeer[1]", | ||||
|     #   "needsShovel": False, "purchase": False, | ||||
|     #   "needsShovel": False, "purchase": 0, | ||||
| 	#	"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Map Locations | ||||
|     {"name": "Outlook Point Dog Gift", | ||||
|         "id": base_id + 57, | ||||
|         "inGameId": "Dog_WalkingNPC_BlueEyed[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Clothes Locations | ||||
|     {"name": "Collect 15 Seashells", | ||||
|         "id": base_id + 58, | ||||
|         "inGameId": "LittleKidNPCVariant (1)[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Return to Shell Kid", | ||||
|         "id": base_id + 132, | ||||
|         "inGameId": "LittleKidNPCVariant (1)[1]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Taylor the Turtle Headband Gift", | ||||
|         "id": base_id + 59, | ||||
|         "inGameId": "Turtle_WalkingNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Sue the Rabbit Shoes Reward", | ||||
|         "id": base_id + 60, | ||||
|         "inGameId": "Bunny_WalkingNPC (1)[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Purchase Sunhat", | ||||
|         "id": base_id + 61, | ||||
|         "inGameId": "SittingNPC[0]", | ||||
|         "needsShovel": False, "purchase": True, | ||||
|         "needsShovel": False, "purchase": 100, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Golden Feather Locations | ||||
|     {"name": "Blackwood Forest Golden Feather", | ||||
|         "id": base_id + 62, | ||||
|         "inGameId": "Feathers.3", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Ranger May Shell Necklace Golden Feather", | ||||
|         "id": base_id + 63, | ||||
|         "inGameId": "AuntMayNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Sand Castle Golden Feather", | ||||
|         "id": base_id + 64, | ||||
|         "inGameId": "SandProvince.3", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Artist Golden Feather", | ||||
|         "id": base_id + 65, | ||||
|         "inGameId": "StandingNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Visitor Camp Rock Golden Feather", | ||||
|         "id": base_id + 66, | ||||
|         "inGameId": "Feathers.8", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Outlook Cliff Golden Feather", | ||||
|         "id": base_id + 67, | ||||
|         "inGameId": "Feathers.2", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Meteor Lake Cliff Golden Feather", | ||||
|         "id": base_id + 68, | ||||
|         "inGameId": "Feathers.7", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Original Silver Feather Locations | ||||
|     {"name": "Secret Island Peak", | ||||
|         "id": base_id + 69, | ||||
|         "inGameId": "PickUps.24", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 5, "minGoldenFeathersEasy": 7, "minGoldenFeathersBucket": 7}, | ||||
|     {"name": "Wristwatch Trade", | ||||
|         "id": base_id + 70, | ||||
|         "inGameId": "Goat_StandingNPC[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
|  | ||||
|     # Golden Chests | ||||
|     {"name": "Lighthouse Golden Chest", | ||||
|         "id": base_id + 71, | ||||
|         "inGameId": "Feathers.0", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Outlook Golden Chest", | ||||
|         "id": base_id + 72, | ||||
|         "inGameId": "Feathers.6", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Stone Tower Golden Chest", | ||||
|         "id": base_id + 73, | ||||
|         "inGameId": "Feathers.5", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "North Cliff Golden Chest", | ||||
|         "id": base_id + 74, | ||||
|         "inGameId": "Feathers.4", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 3, "minGoldenFeathersEasy": 10, "minGoldenFeathersBucket": 10}, | ||||
|  | ||||
|     # Chests | ||||
|     {"name": "Blackwood Cliff Chest", | ||||
|         "id": base_id + 75, | ||||
|         "inGameId": "Coins.22", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "White Coast Trail Chest", | ||||
|         "id": base_id + 76, | ||||
|         "inGameId": "Coins.6", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Sid Beach Chest", | ||||
|         "id": base_id + 77, | ||||
|         "inGameId": "Coins.7", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Sid Beach Buried Treasure Chest", | ||||
|         "id": base_id + 78, | ||||
|         "inGameId": "Coins.46", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Sid Beach Cliff Chest", | ||||
|         "id": base_id + 79, | ||||
|         "inGameId": "Coins.9", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Visitor's Center Buried Chest", | ||||
|         "id": base_id + 80, | ||||
|         "inGameId": "Coins.94", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Visitor's Center Hidden Chest", | ||||
|         "id": base_id + 81, | ||||
|         "inGameId": "Coins.42", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Shirley's Point Chest", | ||||
|         "id": base_id + 82, | ||||
|         "inGameId": "Coins.10", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 1, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 2},  | ||||
|     {"name": "Caravan Cliff Chest", | ||||
|         "id": base_id + 83, | ||||
|         "inGameId": "Coins.12", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Caravan Arch Chest", | ||||
|         "id": base_id + 84, | ||||
|         "inGameId": "Coins.11", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "King Buried Treasure Chest", | ||||
|         "id": base_id + 85, | ||||
|         "inGameId": "Coins.41", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Good Creek Path Buried Chest", | ||||
|         "id": base_id + 86, | ||||
|         "inGameId": "Coins.48", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Good Creek Path West Chest", | ||||
|         "id": base_id + 87, | ||||
|         "inGameId": "Coins.33", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Good Creek Path East Chest", | ||||
|         "id": base_id + 88, | ||||
|         "inGameId": "Coins.62", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "West Waterfall Chest", | ||||
|         "id": base_id + 89, | ||||
|         "inGameId": "Coins.20", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Stone Tower West Cliff Chest", | ||||
|         "id": base_id + 90, | ||||
|         "inGameId": "PickUps.0", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Bucket Path Chest", | ||||
|         "id": base_id + 91, | ||||
|         "inGameId": "Coins.50", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Bucket Cliff Chest", | ||||
|         "id": base_id + 92, | ||||
|         "inGameId": "Coins.49", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},  | ||||
|     {"name": "In Her Shadow Buried Treasure Chest", | ||||
|         "id": base_id + 93, | ||||
|         "inGameId": "Feathers.9", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Meteor Lake Buried Chest", | ||||
|         "id": base_id + 94, | ||||
|         "inGameId": "Coins.86", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Meteor Lake Chest", | ||||
|         "id": base_id + 95, | ||||
|         "inGameId": "Coins.64", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "House North Beach Chest", | ||||
|         "id": base_id + 96, | ||||
|         "inGameId": "Coins.65", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "East Coast Chest", | ||||
|         "id": base_id + 97, | ||||
|         "inGameId": "Coins.98", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Fisherman's Boat Chest 1", | ||||
|         "id": base_id + 99, | ||||
|         "inGameId": "Boat.0", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Fisherman's Boat Chest 2", | ||||
|         "id": base_id + 100, | ||||
|         "inGameId": "Boat.7", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Airstream Island Chest", | ||||
|         "id": base_id + 101, | ||||
|         "inGameId": "Coins.31", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "West River Waterfall Head Chest", | ||||
|         "id": base_id + 102, | ||||
|         "inGameId": "Coins.34", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Old Building Chest", | ||||
|         "id": base_id + 103, | ||||
|         "inGameId": "Coins.104", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Old Building West Chest", | ||||
|         "id": base_id + 104, | ||||
|         "inGameId": "Coins.109", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Old Building East Chest", | ||||
|         "id": base_id + 105, | ||||
|         "inGameId": "Coins.8", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Hawk Peak West Chest", | ||||
|         "id": base_id + 106, | ||||
|         "inGameId": "Coins.21", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},  | ||||
|     {"name": "Hawk Peak East Buried Chest", | ||||
|         "id": base_id + 107, | ||||
|         "inGameId": "Coins.76", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},  | ||||
|     {"name": "Hawk Peak Northeast Chest", | ||||
|         "id": base_id + 108, | ||||
|         "inGameId": "Coins.79", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 3, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 5},  | ||||
|     {"name": "Northern East Coast Chest", | ||||
|         "id": base_id + 109, | ||||
|         "inGameId": "Coins.45", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 2, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "North Coast Chest", | ||||
|         "id": base_id + 110, | ||||
|         "inGameId": "Coins.28", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "North Coast Buried Chest", | ||||
|         "id": base_id + 111, | ||||
|         "inGameId": "Coins.47", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Small South Island Buried Chest", | ||||
|         "id": base_id + 112, | ||||
|         "inGameId": "Coins.87", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Secret Island Bottom Chest", | ||||
|         "id": base_id + 113, | ||||
|         "inGameId": "Coins.88", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Secret Island Treehouse Chest", | ||||
|         "id": base_id + 114, | ||||
|         "inGameId": "Coins.89", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 1},  | ||||
|     {"name": "Sunhat Island Buried Chest", | ||||
|         "id": base_id + 115, | ||||
|         "inGameId": "Coins.112", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands South Buried Chest", | ||||
|         "id": base_id + 116, | ||||
|         "inGameId": "Coins.119", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands West Chest", | ||||
|         "id": base_id + 117, | ||||
|         "inGameId": "Coins.121", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands North Buried Chest", | ||||
|         "id": base_id + 118, | ||||
|         "inGameId": "Coins.117", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 1, "minGoldenFeathersEasy": 1, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands East Chest", | ||||
|         "id": base_id + 119, | ||||
|         "inGameId": "Coins.120", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands South Hidden Chest", | ||||
|         "id": base_id + 120, | ||||
|         "inGameId": "Coins.124", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "A Stormy View Buried Treasure Chest", | ||||
|         "id": base_id + 121, | ||||
|         "inGameId": "Coins.113", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0},  | ||||
|     {"name": "Orange Islands Ruins Buried Chest", | ||||
|         "id": base_id + 122, | ||||
|         "inGameId": "Coins.118", | ||||
|         "needsShovel": True, "purchase": False, | ||||
|         "needsShovel": True, "purchase": 0, | ||||
| 		"minGoldenFeathers": 2, "minGoldenFeathersEasy": 4, "minGoldenFeathersBucket": 0},  | ||||
|  | ||||
|     # Race Rewards | ||||
|     {"name": "Lighthouse Race Reward", | ||||
|         "id": base_id + 123, | ||||
|         "inGameId": "RaceOpponent[0]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 2, "minGoldenFeathersEasy": 3, "minGoldenFeathersBucket": 1}, | ||||
|     {"name": "Old Building Race Reward", | ||||
|         "id": base_id + 124, | ||||
|         "inGameId": "RaceOpponent[1]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 1, "minGoldenFeathersEasy": 5, "minGoldenFeathersBucket": 0}, | ||||
|     {"name": "Hawk Peak Race Reward", | ||||
|         "id": base_id + 125, | ||||
|         "inGameId": "RaceOpponent[2]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 7, "minGoldenFeathersEasy": 9, "minGoldenFeathersBucket": 7}, | ||||
|     {"name": "Lose Race Gift", | ||||
|         "id": base_id + 131, | ||||
|         "inGameId": "RaceOpponent[9]", | ||||
|         "needsShovel": False, "purchase": False, | ||||
|         "needsShovel": False, "purchase": 0, | ||||
| 		"minGoldenFeathers": 0, "minGoldenFeathersEasy": 0, "minGoldenFeathersBucket": 0}, | ||||
| ] | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| 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): | ||||
|     """Choose the end goal. | ||||
| @@ -22,8 +22,10 @@ class CoinsInShops(Toggle): | ||||
|     default = False | ||||
|  | ||||
| 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" | ||||
|     range_start = 0 | ||||
|     range_end = 20 | ||||
| @@ -43,6 +45,20 @@ class Buckets(Range): | ||||
|     range_end = 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): | ||||
|     """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. | ||||
| @@ -76,6 +92,40 @@ class FillerCoinAmount(Choice): | ||||
|     option_50_coins = 9 | ||||
|     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 | ||||
| class ShortHikeOptions(PerGameCommonOptions): | ||||
|     start_inventory_from_pool: StartInventoryPool | ||||
| @@ -84,6 +134,37 @@ class ShortHikeOptions(PerGameCommonOptions): | ||||
|     golden_feathers: GoldenFeathers | ||||
|     silver_feathers: SilverFeathers | ||||
|     buckets: Buckets | ||||
|     sticks: Sticks | ||||
|     toy_shovels: ToyShovels | ||||
|     golden_feather_progression: GoldenFeatherProgression | ||||
|     cost_multiplier: CostMultiplier | ||||
|     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 | ||||
|     ]) | ||||
| ] | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| 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): | ||||
|     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) | ||||
|             add_rule(multiworld.get_location(loc["name"], player), | ||||
|                 lambda state: state.has("Shovel", player)) | ||||
|  | ||||
|         # Shop Rules | ||||
|         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) | ||||
|         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 | ||||
|         if options.golden_feather_progression != 2: | ||||
|         if options.golden_feather_progression != GoldenFeatherProgression.option_hard: | ||||
|             min_feathers = get_min_feathers(self, loc["minGoldenFeathers"], loc["minGoldenFeathersEasy"]) | ||||
|  | ||||
|             if options.buckets > 0 and loc["minGoldenFeathersBucket"] < min_feathers: | ||||
| @@ -32,11 +45,11 @@ def create_rules(self, location_table): | ||||
|  | ||||
|     # Fishing Rules | ||||
|     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), | ||||
|         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), | ||||
|         lambda state: state.has("Fishing Rod", player)) | ||||
|         lambda state: state.has("Progressive Fishing Rod", player, 2)) | ||||
|  | ||||
|     # Misc Rules | ||||
|     add_rule(multiworld.get_location("Return Camping Permit", player), | ||||
| @@ -59,15 +72,34 @@ def create_rules(self, location_table): | ||||
|         lambda state: state.has("Stick", player)) | ||||
|     add_rule(multiworld.get_location("Beachstickball (30 Hits)", 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): | ||||
|     options = self.options | ||||
|  | ||||
|     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 | ||||
|     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 | ||||
|  | ||||
|     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 | ||||
|   | ||||
| @@ -1,12 +1,11 @@ | ||||
| from collections import Counter | ||||
| 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 worlds.AutoWorld import World, WebWorld | ||||
| from .Items import item_table, group_table, base_id | ||||
| from .Locations import location_table | ||||
| from .Rules import create_rules, get_min_feathers | ||||
| from .Options import ShortHikeOptions | ||||
| from .Options import ShortHikeOptions, shorthike_option_groups | ||||
|  | ||||
| class ShortHikeWeb(WebWorld): | ||||
|     theme = "ocean" | ||||
| @@ -18,6 +17,7 @@ class ShortHikeWeb(WebWorld): | ||||
|         "setup/en", | ||||
|         ["Chandler"] | ||||
|     )] | ||||
|     option_groups = shorthike_option_groups | ||||
|  | ||||
| class ShortHikeWorld(World): | ||||
|     """ | ||||
| @@ -47,9 +47,14 @@ class ShortHikeWorld(World): | ||||
|         item_id: int = self.item_name_to_id[name] | ||||
|         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: | ||||
|         itempool = [] | ||||
|         for item in item_table: | ||||
|             count = item["count"] | ||||
|              | ||||
| @@ -57,18 +62,28 @@ class ShortHikeWorld(World): | ||||
|                 continue | ||||
|             else: | ||||
|                 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 | ||||
|         if self.options.goal == 1 or self.options.goal == 3: | ||||
|             if feather_count < 12: | ||||
|                 feather_count = 12 | ||||
|  | ||||
|         junk = 45 - self.options.silver_feathers - feather_count - self.options.buckets | ||||
|         self.multiworld.itempool += [self.create_item(self.get_filler_item_name()) for _ in range(junk)] | ||||
|         self.multiworld.itempool += [self.create_item("Golden Feather") for _ in range(feather_count)] | ||||
|         self.multiworld.itempool += [self.create_item("Silver Feather") for _ in range(self.options.silver_feathers)] | ||||
|         self.multiworld.itempool += [self.create_item("Bucket") for _ in range(self.options.buckets)] | ||||
|         itempool += [self.create_item("Golden Feather") for _ in range(feather_count)] | ||||
|         itempool += [self.create_item("Silver Feather") for _ in range(self.options.silver_feathers)] | ||||
|         itempool += [self.create_item("Bucket") for _ in range(self.options.buckets)] | ||||
|         itempool += [self.create_item("Stick") for _ in range(self.options.sticks)] | ||||
|         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: | ||||
|         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) | ||||
|         elif self.options.goal == "races": | ||||
|             # Races | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, get_min_feathers(self, 7, 9)) | ||||
|                 or (state.has("Bucket", self.player) and state.has("Golden Feather", self.player, 7))) | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: state.can_reach_location("Hawk Peak Race Reward", self.player) | ||||
|         elif self.options.goal == "help_everyone": | ||||
|             # Help Everyone | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, 12) | ||||
|                 and state.has("Toy Shovel", self.player) and state.has("Camping Permit", self.player) | ||||
|                 and state.has("Motorboat Key", self.player) and state.has("Headband", self.player) | ||||
|                 and state.has("Wristwatch", self.player) and state.has("Seashell", self.player, 15) | ||||
|                 and state.has("Shell Necklace", self.player)) | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: (state.can_reach_location("Collect 15 Seashells", self.player) | ||||
|                 and state.has("Golden Feather", self.player, 12) | ||||
|                 and state.can_reach_location("Tough Bird Salesman (400 Coins)", self.player) | ||||
|                 and state.can_reach_location("Ranger May Shell Necklace Golden Feather", 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": | ||||
|             # Fishmonger | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: (state.has("Golden Feather", self.player, get_min_feathers(self, 7, 9)) | ||||
|                 or (state.has("Bucket", self.player) and state.has("Golden Feather", self.player, 7)) | ||||
|                 and state.has("Fishing Rod", self.player)) | ||||
|             self.multiworld.completion_condition[self.player] = lambda state: state.can_reach_location("Catch All Fish Reward", self.player) | ||||
|  | ||||
|     def set_rules(self): | ||||
|         create_rules(self, location_table) | ||||
| @@ -117,6 +135,9 @@ class ShortHikeWorld(World): | ||||
|             "goal": int(options.goal), | ||||
|             "logicLevel": int(options.golden_feather_progression), | ||||
|             "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 = { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 chandler05
					chandler05