 955a86803f
			
		
	
	955a86803f
	
	
	
		
			
			Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: alchav <alchav@jalchavware.com>
		
			
				
	
	
		
			132 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Based on SML2R enemy and platform randomizer
 | |
| # # https://github.com/slashinfty/sml2r-node/blob/862128c73d336d6cbfbf6290c09f3eff103688e8/src/index.ts#L284
 | |
| 
 | |
| def randomize_enemies(sprite_data, random):
 | |
|     for level, level_sprite_data in sprite_data.items():
 | |
|         shuffle = ()
 | |
|         if level in ("Mushroom Zone", "Macro Zone 4"):
 | |
|             shuffle = ("Koopa Troopa", "Goomba", "Paragoomba (Vertical)", "Paragoomba (Diagonal)")
 | |
|         elif level in ("Scenic Course", "Pumpkin Zone Secret Course 1"):
 | |
|             shuffle = ("Goomba", "Paragoomba (Vertical)", "Paragoomba (Diagonal)")
 | |
|         elif level == "Tree Zone 1":
 | |
|             shuffle = ("Money Bag/Bopping Toady", "Ragumo/Aqua Kuribo", "Pencil/Spikey", "Kyotonbo")
 | |
|         elif level == "Tree Zone 2":
 | |
|             shuffle = ("Noko Bombette/Bear", "No 48/Mogyo")
 | |
|         elif level == "Tree Zone 3":
 | |
|             shuffle = ("Battle Beetle", "Be", "Ant")
 | |
|         elif level == "Tree Zone 5":
 | |
|             shuffle = ("Paragoomba (Diagonal)", "Dondon", "Paragoomba (Vertical)")
 | |
|         elif level == "Pumpkin Zone 2":
 | |
|             shuffle = ("Boo/Bomubomu", "Kyororo", "Honebon/F Boy", "Karakara", "Star (Vertical)/Blurp (Horizontal)",
 | |
|                        "Star (Horizontal)/Blurp (Vertical)")
 | |
|         elif level == "Pumpkin Zone 3":
 | |
|             shuffle = ("Boo/Bomubomu", "Unibo/Terekuribo")
 | |
|         elif level == "Mario Zone 1":
 | |
|             shuffle = ("Koopa Troopa", "Neiji/Buichi", "Tatenoko")
 | |
|         elif level == "Mario Zone 2":
 | |
|             shuffle = ("Paragoomba (Diagonal)", "Goomba", "Paragoomba (Vertical)", "Noko Bombette/Bear",
 | |
|                        "Boo/Bomubomu")
 | |
|         elif level == "Turtle Zone 1":
 | |
|             shuffle = ("Horizontal Blurp", "Shark", "Cheep Cheep (Vertical)", "Paragoomba (Diagonal)", "Goomba",
 | |
|                        "Spiny Cheep Cheep", "Paragoomba (Vertical)",
 | |
|                        "Owl Platform (Horizontal)/Cheep Cheep (Horizontal)")
 | |
|         elif level == "Hippo Zone":
 | |
|             shuffle = ("Horizontal Blurp", "Dondon", "Unibo/Terekuribo", "Toriuo")
 | |
|         elif level == "Space Zone 2":
 | |
|             shuffle = ("Tosenbo/Pikku", "Star (Vertical)/Blurp (Horizontal)", "Star (Horizontal)/Blurp (Vertical)")
 | |
|         elif level == "Macro Zone 1":
 | |
|             shuffle = ("Kyotonbo", "Goronto", "Dokanto", "Chikunto")
 | |
|         elif level == "Macro Zone 2":
 | |
|             shuffle = ("Cheep Cheep (Vertical)", "Battle Beetle", "Be",
 | |
|                        "Owl Platform (Horizontal)/Cheep Cheep (Horizontal)", "Ant")
 | |
|         elif level == "Macro Zone 3":
 | |
|             shuffle = ("Koopa Troopa", "Paragoomba (Diagonal)", "Goomba", "Be", "Paragoomba (Vertical)",
 | |
|                        "Honebon/F Boy")
 | |
|         elif level == "Pumpkin Zone Secret Course 2":
 | |
|             shuffle = ("Koopa Troopa", "Goomba")
 | |
|         for sprite in level_sprite_data:
 | |
|             if level == "Pumpkin Zone 1":
 | |
|                 if sprite["sprite"] == "Falling Spike":
 | |
|                     shuffle = ("Boo/Bomubomu", "Falling Spike", "Kurokyura/Jack-in-the-Box", "Masked Ghoul/Bullet Bill")
 | |
|                 elif sprite["sprite"] == "Falling Spike on Chain":
 | |
|                     shuffle = ("Boo/Bomubomu", "Falling Spike on Chain", "Kurokyura/Jack-in-the-Box",
 | |
|                                "Masked Ghoul/Bullet Bill")
 | |
|                 else:
 | |
|                     shuffle = ("Boo/Bomubomu", "Kurokyura/Jack-in-the-Box", "Masked Ghoul/Bullet Bill")
 | |
|             elif level == "Pumpkin Zone 4":
 | |
|                 if sprite["sprite"] == "Falling Spike on Chain":
 | |
|                     shuffle = ("Boo/Bomubomu", "Falling Spike on Chain", "Masked Ghoul/Bullet Bill", "Rerere/Poro",
 | |
|                                "Tosenbo/Pikku")
 | |
|                 else:
 | |
|                     shuffle = ("Boo/Bomubomu", "Masked Ghoul/Bullet Bill", "Rerere/Poro", "Tosenbo/Pikku")
 | |
|             elif level == "Mario Zone 3":
 | |
|                 if sprite["sprite"] == "Claw Grabber":
 | |
|                     shuffle = ("Koopa Troopa", "Diagonal Ball on Chain", "Kiddokatto", "Claw Grabber",
 | |
|                                "Masked Ghoul/Bullet Bill")
 | |
|                 elif sprite["sprite"] in ("Koopa Troopa", "Diagonal Ball on Chain", "Kiddokatto"):
 | |
|                     shuffle = ("Koopa Troopa", "Diagonal Ball on Chain", "Kiddokatto", "Masked Ghoul/Bullet Bill")
 | |
|                 else:
 | |
|                     shuffle = ()
 | |
|             elif level == "Mario Zone 4":
 | |
|                 if sprite["sprite"] == "Spinning Spike/Tamara":
 | |
|                     shuffle = ("Goomba", "Spinning Spike/Tamara", "Boo/Bomubomu", "Masked Ghoul/Bullet Bill")
 | |
|                 elif sprite["sprite"] == "Moving Saw (Floor)":
 | |
|                     shuffle = ("Goomba", "Moving Saw (Floor)", "Boo/Bomubomu", "Masked Ghoul/Bullet Bill")
 | |
|                 else:
 | |
|                     shuffle = ("Goomba", "Boo/Bomubomu", "Masked Ghoul/Bullet Bill")
 | |
|             elif level == "Turtle Zone 3":
 | |
|                 if sprite["sprite"] == "Pencil/Spikey":
 | |
|                     shuffle = ("Koopa Troopa", "Paragoomba (Diagonal)", "Ragumo/Aqua Kuribo", "Pencil/Spikey",
 | |
|                                "Paragoomba (Vertical)", "Honebon/F Boy")
 | |
|                 else:
 | |
|                     shuffle = ("Koopa Troopa", "Paragoomba (Diagonal)", "Ragumo/Aqua Kuribo",
 | |
|                                "Paragoomba (Vertical)", "Honebon/F Boy")
 | |
|             elif level == "Space Zone 1":
 | |
|                 if sprite["sprite"] == "Boo/Bomubomu":
 | |
|                     shuffle = ("Boo/Bomubomu", "No 48/Mogyo")
 | |
|                 else:
 | |
|                     shuffle = ("Boo/Bomubomu", "No 48/Mogyo", "Rerere/Poro")
 | |
|             elif level == "Mario's Castle":
 | |
|                 if sprite["sprite"] in ("Fire Pakkun Zo (Large)", "Fire Pakkun Zo (Left)"):
 | |
|                     shuffle = ("Fire Pakkun Zo (Large)", "Fire Pakkun Zo (Left)")
 | |
|                 else:
 | |
|                     shuffle = ("Spike Ball (Large)", "Spike Ball (Small)")
 | |
|             elif level == "Tree Zone 4":
 | |
|                 # Deviation from SML2R: No Buichis placed into non-Buichi locations, as they can place under the
 | |
|                 # underground question mark blocks. Potentially could make a list of which ones are allowed to become
 | |
|                 # Buichis?
 | |
|                 if sprite["sprite"] in ("Runaway Heart Block/Bibi", "Piranha Plant (Downward)/Grubby",
 | |
|                                         "Spinning Platform (Horizontal)/Skeleton Bee",
 | |
|                                         "Spinning Spike (Horizontal)/Unera"):
 | |
|                     shuffle = ("Runaway Heart Block/Bibi", "Piranha Plant (Downward)/Grubby",
 | |
|                                "Spinning Platform (Horizontal)/Skeleton Bee", "Spinning Spike (Horizontal)/Unera")
 | |
|                 elif sprite["sprite"] == "Neiji/Buichi":
 | |
|                     shuffle = ("Runaway Heart Block/Bibi", "Neiji/Buichi", "Piranha Plant (Downward)/Grubby",
 | |
|                                "Spinning Platform (Horizontal)/Skeleton Bee", "Spinning Spike (Horizontal)/Unera")
 | |
|                 else:
 | |
|                     shuffle = ()
 | |
|             if sprite["sprite"] in ("Piranha Plant", "Fire Piranha Plant"):
 | |
|                 if level not in ("Pumpkin Zone 2", "Pumpkin Zone 4", "Macro Zone 3"):
 | |
|                     shuffle = ("Piranha Plant", "Fire Piranha Plant")
 | |
|             if sprite["sprite"] in shuffle:
 | |
|                 sprite["sprite"] = random.choice(shuffle)
 | |
|             elif level == "Mario's Castle" and sprite["sprite"] == "Karamenbo" and not random.randint(0, 9):
 | |
|                 sprite["y"] += 1
 | |
| 
 | |
| 
 | |
| def randomize_platforms(sprite_data, random):
 | |
|     shuffle = ("Moving Platform (Small, Vertical)", "Moving Platform (Large, Vertical)",
 | |
|                "Moving Platform (Small, Horizontal)", "Moving Platform (Large, Horizontal)",
 | |
|                "Moving Platform (Large, Diagonal)", "Falling Platform")
 | |
|     for sprite in sprite_data["Tree Zone 3"]:
 | |
|         if sprite["sprite"] in shuffle:
 | |
|             sprite["sprite"] = random.choice(shuffle)
 | |
|     shuffle = ("Cloud Platform (Horizontal)", "Owl Platform (Horizontal)/Cheep Cheep (Horizontal)")
 | |
|     for sprite in sprite_data["Tree Zone 5"]:
 | |
|         if sprite["sprite"] in shuffle:
 | |
|             sprite["sprite"] = random.choice(shuffle)
 | |
|     shuffle = ("Falling Bone Platform", "Rising Bone Platform", "Skull Platform")
 | |
|     for sprite in sprite_data["Mario's Castle"]:
 | |
|         if sprite["sprite"] in shuffle:
 | |
|             sprite["sprite"] = random.choice(shuffle)
 |