| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | from BaseClasses import Item, Tutorial | 
					
						
							|  |  |  | from worlds.AutoWorld import WebWorld, World | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  | from typing import Dict, Any | 
					
						
							|  |  |  | from . import events, items, locations, regions, rules | 
					
						
							|  |  |  | from .options import NoitaOptions | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NoitaWeb(WebWorld): | 
					
						
							|  |  |  |     tutorials = [Tutorial( | 
					
						
							|  |  |  |         "Multiworld Setup Guide", | 
					
						
							|  |  |  |         "A guide to setting up the Noita integration for Archipelago multiworld games.", | 
					
						
							|  |  |  |         "English", | 
					
						
							|  |  |  |         "setup_en.md", | 
					
						
							|  |  |  |         "setup/en", | 
					
						
							|  |  |  |         ["Heinermann", "ScipioWright", "DaftBrit"] | 
					
						
							|  |  |  |     )] | 
					
						
							|  |  |  |     theme = "partyTime" | 
					
						
							|  |  |  |     bug_report_page = "https://github.com/DaftBrit/NoitaArchipelago/issues" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Keeping World slim so that it's easier to comprehend | 
					
						
							|  |  |  | class NoitaWorld(World): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Noita is a magical action roguelite set in a world where every pixel is physically simulated. Fight, explore, melt, | 
					
						
							|  |  |  |     burn, freeze, and evaporate your way through the procedurally generated world using wands you've created yourself. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     game = "Noita" | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |     options: NoitaOptions | 
					
						
							|  |  |  |     options_dataclass = NoitaOptions | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |     item_name_to_id = items.item_name_to_id | 
					
						
							|  |  |  |     location_name_to_id = locations.location_name_to_id | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |     item_name_groups = items.item_name_groups | 
					
						
							|  |  |  |     location_name_groups = locations.location_name_groups | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     web = NoitaWeb() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-13 19:21:20 -04:00
										 |  |  |     def generate_early(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-12-28 08:21:54 -05:00
										 |  |  |         if not self.multiworld.get_player_name(self.player).isascii(): | 
					
						
							|  |  |  |             raise Exception("Noita yaml's slot name has invalid character(s).") | 
					
						
							| 
									
										
										
										
											2024-06-01 06:07:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  |     # Returned items will be sent over to the client | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |     def fill_slot_data(self) -> Dict[str, Any]: | 
					
						
							|  |  |  |         return self.options.as_dict("death_link", "victory_condition", "path_option", "hidden_chests", | 
					
						
							|  |  |  |                                     "pedestal_checks", "orbs_as_checks", "bosses_as_checks", "extra_orbs", "shop_price") | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def create_regions(self) -> None: | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |         regions.create_all_regions_and_connections(self) | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def create_item(self, name: str) -> Item: | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |         return items.create_item(self.player, name) | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def create_items(self) -> None: | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |         items.create_all_items(self) | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def set_rules(self) -> None: | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |         rules.create_all_rules(self) | 
					
						
							| 
									
										
										
										
											2023-04-19 20:21:56 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get_filler_item_name(self) -> str: | 
					
						
							| 
									
										
										
										
											2024-01-19 15:31:45 -05:00
										 |  |  |         return self.random.choice(items.filler_items) |