| 
									
										
										
										
											2022-04-01 03:23:52 +02:00
										 |  |  | from typing import Dict, Set, NamedTuple | 
					
						
							|  |  |  | from .ExtractedData import items, logic_items, item_effects | 
					
						
							| 
									
										
										
										
											2021-02-21 20:17:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 03:23:52 +02:00
										 |  |  | item_table = {} | 
					
						
							| 
									
										
										
										
											2021-02-24 06:02:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 03:23:52 +02:00
										 |  |  | class HKItemData(NamedTuple): | 
					
						
							|  |  |  |     advancement: bool | 
					
						
							|  |  |  |     id: int | 
					
						
							|  |  |  |     type: str | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for i, (item_name, item_type) in enumerate(items.items(), start=0x1000000): | 
					
						
							|  |  |  |     item_table[item_name] = HKItemData(advancement=item_name in logic_items or item_name in item_effects, | 
					
						
							|  |  |  |                                        id=i, type=item_type) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | lookup_id_to_name: Dict[int, str] = {data.id: item_name for item_name, data in item_table.items()} | 
					
						
							|  |  |  | lookup_type_to_names: Dict[str, Set[str]] = {} | 
					
						
							| 
									
										
										
										
											2021-02-26 21:03:16 +01:00
										 |  |  | for item, item_data in item_table.items(): | 
					
						
							| 
									
										
										
										
											2022-04-01 03:23:52 +02:00
										 |  |  |     lookup_type_to_names.setdefault(item_data.type, set()).add(item) | 
					
						
							| 
									
										
										
										
											2022-04-04 00:15:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | item_name_groups = {group: lookup_type_to_names[group] for group in ("Skill", "Charm", "Mask", "Vessel", | 
					
						
							|  |  |  |                                                                      "Relic", "Root", "Map", "Stag", "Cocoon", | 
					
						
							|  |  |  |                                                                      "Soul", "DreamWarrior", "DreamBoss")} | 
					
						
							| 
									
										
											  
											
												Hollow Knight updates (goals, WP/POP, etc.) (#438)
* Hollow Knight updates:
- Add configurable goals (Any, THK, Siblings, Radiance)
  - Change base logic to require Opened_Black_Egg_Temple instead of
    requiring 3 dreamers.  This is future-proof for transition rando,
    where Black Egg might not have been located yet.
  - Add combat logic for THK and Radiance on par with Rando4's boss logic,
    so itemless HK shouldn't be required.
- Existing completion logic now uses Black_Egg_te
- Add White Palace options
  (Exclude, King Fragment Only, No Path of Pain, Include)
  - Excluded WP may still be required for King Fragment if Charms are
    not randomized
  - Simply don't place WP locations that are excluded
  - Distinguish between POP locations (required for POP), WP checks (
    actual item locations), WP transitions (relevant for future transition
    rando), and WP events (logically required to reach King Fragment)
  - Many transitions were listed twice.  Remove duplicates.
  - Sort transitions by scene
- For randomizable locations that have no logical significance when not
    randomized, simply skip adding them to the pool entirely for
    theoretically faster generation.
* Hollow Knight updates
  - Support random starting geo up to 1000 geo.
  - Always include locations rather than dropping unrandomized "logicless"
    ones, as it is required to best support same-slot coop.
											
										 
											2022-06-12 23:23:03 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | directionals = ('', 'Left_', 'Right_') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | item_name_groups.update({ | 
					
						
							| 
									
										
										
										
											2023-01-18 15:45:48 +01:00
										 |  |  |     "Dreamers": {"Herrah", "Monomon", "Lurien"}, | 
					
						
							| 
									
										
											  
											
												Hollow Knight updates (goals, WP/POP, etc.) (#438)
* Hollow Knight updates:
- Add configurable goals (Any, THK, Siblings, Radiance)
  - Change base logic to require Opened_Black_Egg_Temple instead of
    requiring 3 dreamers.  This is future-proof for transition rando,
    where Black Egg might not have been located yet.
  - Add combat logic for THK and Radiance on par with Rando4's boss logic,
    so itemless HK shouldn't be required.
- Existing completion logic now uses Black_Egg_te
- Add White Palace options
  (Exclude, King Fragment Only, No Path of Pain, Include)
  - Excluded WP may still be required for King Fragment if Charms are
    not randomized
  - Simply don't place WP locations that are excluded
  - Distinguish between POP locations (required for POP), WP checks (
    actual item locations), WP transitions (relevant for future transition
    rando), and WP events (logically required to reach King Fragment)
  - Many transitions were listed twice.  Remove duplicates.
  - Sort transitions by scene
- For randomizable locations that have no logical significance when not
    randomized, simply skip adding them to the pool entirely for
    theoretically faster generation.
* Hollow Knight updates
  - Support random starting geo up to 1000 geo.
  - Always include locations rather than dropping unrandomized "logicless"
    ones, as it is required to best support same-slot coop.
											
										 
											2022-06-12 23:23:03 -07:00
										 |  |  |     "Cloak": {x + 'Mothwing_Cloak' for x in directionals} | {'Shade_Cloak', 'Split_Shade_Cloak'}, | 
					
						
							|  |  |  |     "Claw": {x + 'Mantis_Claw' for x in directionals}, | 
					
						
							|  |  |  |     "CDash": {x + 'Crystal_Heart' for x in directionals}, | 
					
						
							|  |  |  |     "Fragments": {"Queen_Fragment", "King_Fragment", "Void_Heart"}, | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | item_name_groups['Horizontal'] = item_name_groups['Cloak'] | item_name_groups['CDash'] | 
					
						
							|  |  |  | item_name_groups['Vertical'] = item_name_groups['Claw'] | {'Monarch_Wings'} |