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)
 |