2018-01-01 18:11:11 +00:00
|
|
|
#!/usr/bin/env python3
|
2017-07-14 12:34:33 +00:00
|
|
|
import argparse
|
2019-12-16 11:52:30 +00:00
|
|
|
import copy
|
2017-07-14 16:24:23 +00:00
|
|
|
import textwrap
|
2019-12-16 11:52:30 +00:00
|
|
|
import shlex
|
2017-07-14 12:34:33 +00:00
|
|
|
|
2021-09-30 17:49:36 +00:00
|
|
|
"""Legacy module, undergoing dismantling."""
|
|
|
|
|
2017-07-14 16:24:23 +00:00
|
|
|
|
|
|
|
class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
|
|
|
|
|
|
|
|
def _get_help_string(self, action):
|
|
|
|
return textwrap.dedent(action.help)
|
|
|
|
|
2021-09-30 17:49:36 +00:00
|
|
|
|
2019-12-15 17:10:01 +00:00
|
|
|
def parse_arguments(argv, no_defaults=False):
|
|
|
|
def defval(value):
|
|
|
|
return value if not no_defaults else None
|
2017-11-04 18:23:57 +00:00
|
|
|
|
2019-12-16 11:52:30 +00:00
|
|
|
# we need to know how many players we have first
|
2019-12-30 19:43:43 +00:00
|
|
|
parser = argparse.ArgumentParser(add_help=False)
|
2021-10-21 06:15:47 +00:00
|
|
|
parser.add_argument('--multi', default=defval(1), type=lambda value: max(int(value), 1))
|
2019-12-16 11:52:30 +00:00
|
|
|
multiargs, _ = parser.parse_known_args(argv)
|
|
|
|
|
2017-07-14 16:24:23 +00:00
|
|
|
parser = argparse.ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
2021-08-09 07:15:41 +00:00
|
|
|
|
2017-07-14 12:34:33 +00:00
|
|
|
parser.add_argument('--seed', help='Define seed number to generate.', type=int)
|
2017-07-14 16:24:23 +00:00
|
|
|
parser.add_argument('--count', help='''\
|
|
|
|
Use to batch generate multiple seeds with same settings.
|
|
|
|
If --seed is provided, it will be used for the first seed, then
|
|
|
|
used to derive the next seed (i.e. generating 10 seeds with
|
|
|
|
--seed given will produce the same 10 (different) roms each
|
2017-11-19 01:43:37 +00:00
|
|
|
time).
|
2017-07-14 16:24:23 +00:00
|
|
|
''', type=int)
|
|
|
|
parser.add_argument('--sprite', help='''\
|
|
|
|
Path to a sprite sheet to use for Link. Needs to be in
|
2017-11-19 01:43:37 +00:00
|
|
|
binary format and have a length of 0x7000 (28672) bytes,
|
2017-07-14 16:24:23 +00:00
|
|
|
or 0x7078 (28792) bytes including palette data.
|
|
|
|
Alternatively, can be a ALttP Rom patched with a Link
|
2017-11-19 01:43:37 +00:00
|
|
|
sprite that will be extracted.
|
2017-07-14 16:24:23 +00:00
|
|
|
''')
|
2020-10-06 20:22:03 +00:00
|
|
|
parser.add_argument('--sprite_pool', help='''\
|
|
|
|
Specifies a colon separated list of sprites used for random/randomonevent. If not specified, the full sprite pool is used.''')
|
2021-10-21 06:15:47 +00:00
|
|
|
parser.add_argument('--multi', default=defval(1), type=lambda value: max(int(value), 1))
|
2019-12-15 17:10:01 +00:00
|
|
|
parser.add_argument('--names', default=defval(''))
|
2019-04-18 09:23:24 +00:00
|
|
|
parser.add_argument('--outputpath')
|
2024-04-18 16:33:16 +00:00
|
|
|
parser.add_argument('--game', default="Archipelago")
|
2019-12-15 17:10:01 +00:00
|
|
|
parser.add_argument('--race', default=defval(False), action='store_true')
|
2019-12-15 16:29:17 +00:00
|
|
|
parser.add_argument('--outputname')
|
2019-12-16 11:52:30 +00:00
|
|
|
if multiargs.multi:
|
|
|
|
for player in range(1, multiargs.multi + 1):
|
|
|
|
parser.add_argument(f'--p{player}', default=defval(''), help=argparse.SUPPRESS)
|
|
|
|
|
|
|
|
ret = parser.parse_args(argv)
|
2021-01-02 11:49:43 +00:00
|
|
|
|
|
|
|
# cannot be set through CLI currently
|
2021-01-02 15:44:58 +00:00
|
|
|
ret.plando_items = []
|
|
|
|
ret.plando_texts = {}
|
2021-01-02 21:41:03 +00:00
|
|
|
ret.plando_connections = []
|
2021-01-02 11:49:43 +00:00
|
|
|
|
2019-12-16 11:52:30 +00:00
|
|
|
if multiargs.multi:
|
|
|
|
defaults = copy.deepcopy(ret)
|
|
|
|
for player in range(1, multiargs.multi + 1):
|
2020-03-04 12:55:03 +00:00
|
|
|
playerargs = parse_arguments(shlex.split(getattr(ret, f"p{player}")), True)
|
2019-12-16 11:52:30 +00:00
|
|
|
|
2024-04-18 16:33:16 +00:00
|
|
|
for name in ["plando_items", "plando_texts", "plando_connections", "game", "sprite", "sprite_pool"]:
|
2019-12-16 11:52:30 +00:00
|
|
|
value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name)
|
|
|
|
if player == 1:
|
|
|
|
setattr(ret, name, {1: value})
|
|
|
|
else:
|
|
|
|
getattr(ret, name)[player] = value
|
|
|
|
|
2024-04-18 16:33:16 +00:00
|
|
|
return ret
|