Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 42 additions & 5 deletions args/bosses.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
from data.bosses import BossLocations


DEFAULT_DRAGON_PROTOCOL = BossLocations.SHUFFLE
DEFAULT_STATUE_PROTOCOL = BossLocations.MIX
def name():
return "Bosses"

Expand All @@ -9,8 +14,17 @@ def parse(parser):
help = "Boss battles shuffled")
bosses_battles.add_argument("-bbr", "--boss-battles-random", action = "store_true",
help = "Boss battles randomized")
bosses.add_argument("-bmbd", "--mix-bosses-dragons", action = "store_true",

dragons = bosses.add_mutually_exclusive_group()
dragons.add_argument("-drloc", "--dragon-boss-location", default = DEFAULT_DRAGON_PROTOCOL, type = str.lower, choices = BossLocations.ALL,
help = "Decides which locations the eight dragon encounters can be fought")
dragons.add_argument("-bmbd", "--mix-bosses-dragons", action = "store_true",
help = "Shuffle/randomize bosses and dragons together")

statues = bosses.add_mutually_exclusive_group()
statues.add_argument("-stloc", "--statue-boss-location", default = DEFAULT_STATUE_PROTOCOL, type = str.lower, choices = BossLocations.ALL,
help = "Decides which locations the three statue encounters can be fought")

bosses.add_argument("-srp3", "--shuffle-random-phunbaba3", action = "store_true",
help = "Apply Shuffle/Random to Phunbaba 3 (otherwise he will only appear in Mobliz WOR)")
bosses.add_argument("-bnds", "--boss-normalize-distort-stats", action = "store_true",
Expand All @@ -21,7 +35,15 @@ def parse(parser):
help = "Undead status removed from bosses")

def process(args):
pass
if args.mix_bosses_dragons:
args.dragon_boss_location = BossLocations.MIX
args.mix_bosses_dragons = None
# if neither shuffling or randomizing bosses, and we try to mix the dragons/statues, simply shuffle them instead
vanilla_locations = not (args.boss_battles_shuffle or args.boss_battles_random)
if vanilla_locations and args.dragon_boss_location == BossLocations.MIX:
args.dragon_boss_location = BossLocations.SHUFFLE
if vanilla_locations and args.statue_boss_location == BossLocations.MIX:
args.statue_boss_location = BossLocations.SHUFFLE

def flags(args):
flags = ""
Expand All @@ -31,8 +53,14 @@ def flags(args):
elif args.boss_battles_random:
flags += " -bbr"

if args.mix_bosses_dragons:
flags += " -bmbd"
if args.dragon_boss_location:
flags += f" -drloc {args.dragon_boss_location}"
elif args.mix_bosses_dragons:
flags += f" -drloc {BossLocations.MIX}"

if args.statue_boss_location:
flags += f" -stloc {args.statue_boss_location}"

if args.shuffle_random_phunbaba3:
flags += " -srp3"
if args.boss_normalize_distort_stats:
Expand All @@ -51,9 +79,18 @@ def options(args):
elif args.boss_battles_random:
boss_battles = "Random"

dragon_battles = DEFAULT_DRAGON_PROTOCOL
if args.dragon_boss_location:
dragon_battles = args.dragon_boss_location.capitalize()

statue_battles = DEFAULT_DRAGON_PROTOCOL
if args.statue_boss_location:
statue_battles = args.statue_boss_location.capitalize()

return [
("Boss Battles", boss_battles),
("Mix Bosses & Dragons", args.mix_bosses_dragons),
("Dragons", dragon_battles),
("Statues", statue_battles),
("Shuffle/Random Phunbaba 3", args.shuffle_random_phunbaba3),
("Normalize & Distort Stats", args.boss_normalize_distort_stats),
("Boss Experience", args.boss_experience),
Expand Down
8 changes: 8 additions & 0 deletions constants/objectives/condition_bits.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@
NameBit("Zozo Tower", event_bit.GOT_ZOZO_REWARD),
]

check_bit += [ # Index
NameBit("Kefka's Tower Ambush", event_bit.DEFEATED_INFERNO), # 59
NameBit("Kefka's Tower Guardian", event_bit.DEFEATED_GUARDIAN), # 60
NameBit("KT Left Triad Statue", event_bit.DEFEATED_DOOM), # 61
NameBit("KT Mid Triad Statue", event_bit.DEFEATED_POLTERGEIST), # 62
NameBit("KT Right Triad Statue", event_bit.DEFEATED_GODDESS), # 63
]

quest_bit = [
NameBit("Defeat Sealed Cave Ninja", event_bit.DEFEATED_NINJA_CAVE_TO_SEALED_GATE),
NameBit("Help Injured Lad", event_bit.HELPED_INJURED_LAD),
Expand Down
26 changes: 26 additions & 0 deletions data/bosses.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,25 @@
396 : "Guardian", # defeatable guardian in kefka's tower
401 : "MagiMaster",
}

# These ids are repeated in normal_pack_name as well
# This is intentional as they are used to iterate over ALL bosses for things like objective conditions
statue_pack_name = {
354 : "Doom",
355 : "Goddess",
356 : "Poltrgeist",
}
statue_formation_name = {
468 : "Doom",
469 : "Goddess",
470 : "Poltrgeist",
}
statue_enemy_name = {
295 : "Doom",
296 : "Goddess",
297 : "Poltrgeist",
}

normal_formation_name = {
79 : "Rizopas",
354 : "MagiMaster",
Expand Down Expand Up @@ -255,3 +274,10 @@
enemy_name.update(removed_enemy_name)

name_enemy = {v: k for k, v in enemy_name.items()}

class BossLocations:
MIX = "mix"
ORIGINAL = "original"
SHUFFLE = "shuffle"

ALL = [MIX, ORIGINAL, SHUFFLE]
6 changes: 4 additions & 2 deletions data/enemy_formations.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ class EnemyFormations():
ENEMIES_END = 0xf83bf
ENEMIES_SIZE = 15

PHUNBABA3 = 422
DOOM_GAZE = 463
PHUNBABA3 = bosses.name_formation["Phunbaba 3"]
DOOM_GAZE = bosses.name_formation["Doom Gaze"]
ALL_STATUES = list(bosses.statue_formation_name)
ALL_DRAGONS = list(bosses.dragon_formation_name)
PRESENTER = 433
COLISEUM = 575

Expand Down
Loading