Generate: You can now have triggers in a game section that get run after common triggers and after the game is selected. Their format is the same but they can't overwrite game.
This commit is contained in:
		
							parent
							
								
									c8d6250ada
								
							
						
					
					
						commit
						833de94ab0
					
				
							
								
								
									
										18
									
								
								Generate.py
								
								
								
								
							
							
						
						
									
										18
									
								
								Generate.py
								
								
								
								
							|  | @ -359,10 +359,10 @@ def roll_linked_options(weights: dict) -> dict: | |||
|     return weights | ||||
| 
 | ||||
| 
 | ||||
| def roll_triggers(weights: dict) -> dict: | ||||
| def roll_triggers(weights: dict, triggers: list) -> dict: | ||||
|     weights = weights.copy()  # make sure we don't write back to other weights sets in same_settings | ||||
|     weights["_Generator_Version"] = "Archipelago"  # Some means for triggers to know if the seed is on main or doors. | ||||
|     for i, option_set in enumerate(weights["triggers"]): | ||||
|     for i, option_set in enumerate(triggers): | ||||
|         try: | ||||
|             currently_targeted_weights = weights | ||||
|             category = option_set.get("option_category", None) | ||||
|  | @ -455,7 +455,7 @@ def roll_settings(weights: dict, plando_options: typing.Set[str] = frozenset(("b | |||
|         weights = roll_linked_options(weights) | ||||
| 
 | ||||
|     if "triggers" in weights: | ||||
|         weights = roll_triggers(weights) | ||||
|         weights = roll_triggers(weights, weights["triggers"]) | ||||
| 
 | ||||
|     requirements = weights.get("requires", {}) | ||||
|     if requirements: | ||||
|  | @ -480,15 +480,21 @@ def roll_settings(weights: dict, plando_options: typing.Set[str] = frozenset(("b | |||
|         if option_key in weights: | ||||
|             raise Exception(f"Option {option_key} has to be in a game's section, not on its own.") | ||||
| 
 | ||||
|     ret.name = get_choice('name', weights) | ||||
|     for option_key, option in Options.common_options.items(): | ||||
|         setattr(ret, option_key, option.from_any(get_choice(option_key, weights, option.default))) | ||||
|     ret.game = get_choice("game", weights) | ||||
|     if ret.game not in weights: | ||||
|         raise Exception(f"No game options for selected game \"{ret.game}\" found.") | ||||
| 
 | ||||
|     world_type = AutoWorldRegister.world_types[ret.game] | ||||
|     game_weights = weights[ret.game] | ||||
| 
 | ||||
|     if "triggers" in game_weights: | ||||
|         weights = roll_triggers(weights, game_weights["triggers"]) | ||||
|         game_weights = weights[ret.game] | ||||
| 
 | ||||
|     ret.name = get_choice('name', weights) | ||||
|     for option_key, option in Options.common_options.items(): | ||||
|         setattr(ret, option_key, option.from_any(get_choice(option_key, weights, option.default))) | ||||
| 
 | ||||
|     if ret.game in AutoWorldRegister.world_types: | ||||
|         for option_key, option in world_type.options.items(): | ||||
|             handle_option(ret, game_weights, option_key, option) | ||||
|  |  | |||
							
								
								
									
										4
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										4
									
								
								Main.py
								
								
								
								
							|  | @ -92,7 +92,7 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No | |||
|         if not cls.hidden: | ||||
|             logger.info(f"  {name:{longest_name}}: {len(cls.item_names):3} Items | " | ||||
|                         f"{len(cls.location_names):3} Locations") | ||||
|             logger.info(f"  Item IDs: {min(cls.item_id_to_name):{numlength}} - " | ||||
|             logger.info(f"   Item IDs: {min(cls.item_id_to_name):{numlength}} - " | ||||
|                         f"{max(cls.item_id_to_name):{numlength}} | " | ||||
|                         f"Location IDs: {min(cls.location_id_to_name):{numlength}} - " | ||||
|                         f"{max(cls.location_id_to_name):{numlength}}") | ||||
|  | @ -151,7 +151,7 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No | |||
| 
 | ||||
|     AutoWorld.call_all(world, "pre_fill") | ||||
| 
 | ||||
|     logger.info('Fill the world.') | ||||
|     logger.info(f'Filling the world with {len(world.itempool)} items.') | ||||
| 
 | ||||
|     if world.algorithm == 'flood': | ||||
|         flood_items(world)  # different algo, biased towards early game progress items | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue