Files
Grinch-AP/worlds/marioland2/sprite_randomizer.py
2025-05-21 11:02:30 -04:00

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)