Skip to content
Merged
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
139 changes: 139 additions & 0 deletions args/advanced_checks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@

def name():
return "Forced Check Rewards"

def parse(parser):
advanced_checks = parser.add_argument_group("Forced Check Rewards")
# check_rewards = advanced_checks.add_mutually_exclusive_group()
# advanced_checks.name = "Check Rewards"
advanced_checks.add_argument("-nfce", "--no-free-characters-espers", action = "store_true",
help = "Remove character/esper rewards from: Auction House, Collapsing House, Figaro Castle Throne, Gau's Father's House, Kohlingen Inn, Mt. Zozo, Narshe Weapon Shop, Sealed Gate, South Figaro Basement, Tzen Thief, Zone Eater")

advanced_checks.add_argument("-firr", "--force-item-rewards", type = str,
help = "Forces list of checks to give an ITEM reward. Maximum of 12 checks.")

advanced_checks.add_argument("-ferr", "--force-esper-rewards", type = str,
help = "Forces list of checks to give an ESPER reward. Maximum of 26 checks")

advanced_checks.add_argument("-feirr", "--force-esper-item-rewards", type = str,
help = "Forces list of checks to give an (ESPER | ITEM) reward. Maximum of 20 checks")


esper_item_title = "Esper+Item Checks"
esper_title = "Esper Checks"
item_title = "Item Checks"

def process(args):
from constants.checks import (
AUCTION1, AUCTION2, COLLAPSING_HOUSE, FIGARO_CASTLE_THRONE,
GAUS_FATHERS_HOUSE,KOHLINGEN_CAFE, MT_ZOZO, NARSHE_WEAPON_SHOP,
SEALED_GATE, SOUTH_FIGARO_PRISONER, TZEN_THIEF, ZONE_EATER
)
args.esper_item_rewards = []
args.esper_rewards = []
args.item_rewards = []

if args.force_esper_item_rewards:
args.esper_item_rewards = [int(check) for check in args.force_esper_item_rewards.split(',')]

if args.force_esper_rewards:
args.esper_rewards = [int(check) for check in args.force_esper_rewards.split(',')]

if args.force_item_rewards:
args.item_rewards = [int(check) for check in args.force_item_rewards.split(',')]
elif args.no_free_characters_espers:
args.item_rewards = [
AUCTION1.bit,
AUCTION2.bit,
COLLAPSING_HOUSE.bit,
FIGARO_CASTLE_THRONE.bit,
GAUS_FATHERS_HOUSE.bit,
KOHLINGEN_CAFE.bit,
MT_ZOZO.bit,
NARSHE_WEAPON_SHOP.bit,
SEALED_GATE.bit,
SOUTH_FIGARO_PRISONER.bit,
TZEN_THIEF.bit,
ZONE_EATER.bit,
]

# assert that no items in item_reward_checks is CHAR | ESPER only reward
assert len(args.item_rewards) < 13

def flags(args):
flags = ""

if args.force_esper_item_rewards:
flags += f" -feir {args.force_esper_item_rewards}"

if args.force_esper_rewards:
flags += f" -fer {args.force_esper_rewards}"

if args.force_item_rewards:
flags += f" -fir {args.force_item_rewards}"


return flags

def options(args):
options = []
if args.esper_item_rewards:
options.append((esper_item_title, args.esper_item_rewards))
if args.esper_rewards:
options.append((esper_title, args.esper_rewards))
if args.item_rewards:
options.append((item_title, args.item_rewards))
return options

def _format_check_log_entries(check_ids):
from constants.checks import check_name
check_entries = []
for check_id in check_ids:
check_entries.append(("", check_name[check_id]))
return check_entries

def menu(args):
from menus.submenu_force_item_reward_checks import FlagsForceEsperItemRewardChecks, FlagsForceEsperRewardChecks, FlagsForceItemRewardChecks

entries = options(args)
for index, entry in enumerate(entries):
key, value = entry
if key == esper_item_title:
if value:
entries[index] = (esper_item_title, FlagsForceEsperItemRewardChecks(esper_item_title, value, False)) # flags sub-menu
else:
entries[index] = (esper_item_title, "None")

if key == esper_title:
if value:
entries[index] = (esper_title, FlagsForceEsperRewardChecks(esper_title, value, False)) # flags sub-menu
else:
entries[index] = (esper_title, "None")

if key == item_title:
if value:
entries[index] = (item_title, FlagsForceItemRewardChecks(item_title, value, args.no_free_characters_espers)) # flags sub-menu
else:
entries[index] = (item_title, "None")

return (name(), entries)

def log(args):
from log import format_option
log = [name()]

entries = options(args)
for entry in entries:
key, value = entry
if key == esper_item_title or key == esper_title or key == item_title:
if len(value) == 0:
entry = (key, "None")
else:
entry = (key, "") # The entries will show up on subsequent lines
log.append(format_option(*entry))
for check_entry in _format_check_log_entries(value):
log.append(format_option(*check_entry))
else:
log.append(format_option(*entry))

return log
1 change: 1 addition & 0 deletions args/arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ def __init__(self):
"starting_gold_items", "items", "shops", "chests",
"graphics",
"coliseum", "auction_house", "challenges", "bug_fixes", "misc",
"advanced_checks",
]
self.group_modules = {}
for group in self.groups:
Expand Down
8 changes: 3 additions & 5 deletions args/challenges.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from constants.checks import FIGARO_CASTLE_THRONE, KOHLINGEN_CAFE
from data.npc_bit import WEAPON_ELDER_NARSHE

def name():
return "Challenges"

Expand All @@ -18,8 +21,6 @@ def parse(parser):
help = "Ultima costs 254 MP")
challenges.add_argument("-nfps", "--no-free-paladin-shields", action = "store_true",
help = "Paladin/Cursed Shields will not appear in coliseum/auction/shops/chests/events (Narshe WOR exclusive)")
challenges.add_argument("-nfce", "--no-free-characters-espers", action = "store_true",
help = "Remove character/esper rewards from: Auction House, Collapsing House, Figaro Castle Throne, Gau's Father's House, Kohlingen Inn, Narshe Weapon Shop, Sealed Gate, South Figaro Basement")
challenges.add_argument("-pd", "--permadeath", action = "store_true",
help = "Life spells cannot be learned. Fenix Downs unavailable (except from starting items). Buckets/inns/tents/events do not revive characters. Phoenix casts Life 3 on party instead of Life")
challenges.add_argument("-np", "--no-peeking", action = "store_true",
Expand Down Expand Up @@ -82,8 +83,6 @@ def flags(args):

if args.no_free_paladin_shields:
flags += " -nfps"
if args.no_free_characters_espers:
flags += " -nfce"
if args.permadeath:
flags += " -pd"
if args.no_peeking:
Expand All @@ -107,7 +106,6 @@ def options(args):
("No Sprint Shoes", args.no_sprint_shoes),
("Ultima", ultima),
("No Free Paladin Shields", args.no_free_paladin_shields),
("No Free Characters/Espers", args.no_free_characters_espers),
("Permadeath", args.permadeath),
("No Peeking", args.no_peeking),
("Remove Learnable Spells", args.remove_learnable_spell_ids),
Expand Down
3 changes: 2 additions & 1 deletion args/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ def log():
_log_tab("Magic", ["espers", "misc_magic"], ["natural_magic"])
_log_tab("Items", ["starting_gold_items", "items"], ["shops", "chests"])
args.group_modules["graphics"].log(args)
_log_tab("Other", ["coliseum", "auction_house", "misc"], ["challenges", "bug_fixes"])
_log_tab("Other", ["coliseum", "misc", "challenges"], ["auction_house", "bug_fixes"])
_log_tab("Advanced", ["advanced_checks"], [])
Loading