From b91a627b326d8a1ca6e828543f4c58894a96f3a1 Mon Sep 17 00:00:00 2001 From: Edos512 <30857677+Edos512@users.noreply.github.com> Date: Sat, 24 Oct 2020 02:44:27 +0200 Subject: [PATCH] Added options from Maseya Palette Randomizer (#145) Add remaining palette shuffle options --- Adjuster.py | 8 +- AdjusterMain.py | 16 +- EntranceRandomizer.py | 9 +- Gui.py | 67 ++++- Main.py | 13 +- Mystery.py | 5 + Rom.py | 72 ++++-- WebHostLib/static/static/playerSettings.json | 258 +++++++++++++++++++ WebHostLib/static/static/playerSettings.yaml | 42 +++ playerSettings.yaml | 42 +++ 10 files changed, 499 insertions(+), 33 deletions(-) diff --git a/Adjuster.py b/Adjuster.py index d8118cc7..49b4259d 100755 --- a/Adjuster.py +++ b/Adjuster.py @@ -34,8 +34,12 @@ def main(): ''') parser.add_argument('--heartcolor', default='red', const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow', 'random'], help='Select the color of Link\'s heart meter. (default: %(default)s)') - parser.add_argument('--ow_palettes', default='default', choices=['default', 'random', 'blackout']) - parser.add_argument('--uw_palettes', default='default', choices=['default', 'random', 'blackout']) + parser.add_argument('--ow_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--link_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--shield_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--sword_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--hud_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--uw_palettes', default='default', choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) parser.add_argument('--sprite', help='''\ Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes, diff --git a/AdjusterMain.py b/AdjusterMain.py index 6eac8e7c..28a72d9c 100644 --- a/AdjusterMain.py +++ b/AdjusterMain.py @@ -10,19 +10,27 @@ def adjust(args): start = time.perf_counter() logger = logging.getLogger('Adjuster') logger.info('Patching ROM.') - + vanillaRom = args.baserom if os.path.splitext(args.rom)[-1].lower() == '.bmbp': import Patch meta, args.rom = Patch.create_rom_file(args.rom) if os.stat(args.rom).st_size in (0x200000, 0x400000) and os.path.splitext(args.rom)[-1].lower() == '.sfc': - rom = LocalRom(args.rom, patch=False) + rom = LocalRom(args.rom, patch=False, vanillaRom=vanillaRom) else: raise RuntimeError( 'Provided Rom is not a valid Link to the Past Randomizer Rom. Please provide one for adjusting.') - + palettes_options={} + palettes_options['dungeon']=args.uw_palettes + + palettes_options['overworld']=args.ow_palettes + palettes_options['hud']=args.hud_palettes + palettes_options['sword']=args.sword_palettes + palettes_options['shield']=args.shield_palettes + palettes_options['link']=args.link_palettes + apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic, - args.sprite, args.ow_palettes, args.uw_palettes) + args.sprite, palettes_options) path = output_path(f'{os.path.basename(args.rom)[:-4]}_adjusted.sfc') rom.write_to_file(path) diff --git a/EntranceRandomizer.py b/EntranceRandomizer.py index 2d8b0cf1..042d54bc 100755 --- a/EntranceRandomizer.py +++ b/EntranceRandomizer.py @@ -283,8 +283,13 @@ def parse_arguments(argv, no_defaults=False): ''') parser.add_argument('--heartcolor', default=defval('red'), const='red', nargs='?', choices=['red', 'blue', 'green', 'yellow', 'random'], help='Select the color of Link\'s heart meter. (default: %(default)s)') - parser.add_argument('--ow_palettes', default=defval('default'), choices=['default', 'random', 'blackout']) - parser.add_argument('--uw_palettes', default=defval('default'), choices=['default', 'random', 'blackout']) + parser.add_argument('--ow_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--uw_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--hud_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--shield_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--sword_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--link_palettes', default=defval('default'), choices=['default', 'random', 'blackout','puke','classic','grayscale','negative','dizzy','sick']) + parser.add_argument('--sprite', help='''\ Path to a sprite sheet to use for Link. Needs to be in binary format and have a length of 0x7000 (28672) bytes, diff --git a/Gui.py b/Gui.py index 1b8fb6a6..fba0e930 100755 --- a/Gui.py +++ b/Gui.py @@ -198,7 +198,7 @@ def guiMain(args=None): owPalettesLabel.pack(side=LEFT) owPalettesVar = StringVar() owPalettesVar.set('default') - owPalettesOptionMenu = OptionMenu(owPalettesFrame, owPalettesVar, 'default', 'random', 'blackout') + owPalettesOptionMenu = OptionMenu(owPalettesFrame, owPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') owPalettesOptionMenu.pack(side=LEFT) uwPalettesFrame = Frame(romOptionsFrame) @@ -207,11 +207,41 @@ def guiMain(args=None): uwPalettesLabel.pack(side=LEFT) uwPalettesVar = StringVar() uwPalettesVar.set('default') - uwPalettesOptionMenu = OptionMenu(uwPalettesFrame, uwPalettesVar, 'default', 'random', 'blackout') + uwPalettesOptionMenu = OptionMenu(uwPalettesFrame, uwPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') uwPalettesOptionMenu.pack(side=LEFT) + hudPalettesFrame = Frame(romOptionsFrame) + hudPalettesFrame.grid(row=4, column=0, sticky=E) + hudPalettesLabel = Label(hudPalettesFrame, text='HUD palettes') + hudPalettesLabel.pack(side=LEFT) + hudPalettesVar = StringVar() + hudPalettesVar.set('default') + hudPalettesOptionMenu = OptionMenu(hudPalettesFrame, hudPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + hudPalettesOptionMenu.pack(side=LEFT) + + swordPalettesFrame = Frame(romOptionsFrame) + swordPalettesFrame.grid(row=4, column=1, sticky=E) + swordPalettesLabel = Label(swordPalettesFrame, text='Sword palettes') + swordPalettesLabel.pack(side=LEFT) + swordPalettesVar = StringVar() + swordPalettesVar.set('default') + swordPalettesOptionMenu = OptionMenu(swordPalettesFrame, swordPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + swordPalettesOptionMenu.pack(side=LEFT) + + shieldPalettesFrame = Frame(romOptionsFrame) + shieldPalettesFrame.grid(row=5, column=0, sticky=E) + shieldPalettesLabel = Label(shieldPalettesFrame, text='Shield palettes') + shieldPalettesLabel.pack(side=LEFT) + shieldPalettesVar = StringVar() + shieldPalettesVar.set('default') + shieldPalettesOptionMenu = OptionMenu(shieldPalettesFrame, shieldPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + shieldPalettesOptionMenu.pack(side=LEFT) + + + + romDialogFrame = Frame(romOptionsFrame) - romDialogFrame.grid(row=4, column=0, columnspan=2, sticky=W+E) + romDialogFrame.grid(row=6, column=0, columnspan=2, sticky=W+E) baseRomLabel = Label(romDialogFrame, text='Base Rom: ') romVar = StringVar(value="Zelda no Densetsu - Kamigami no Triforce (Japan).sfc") @@ -538,6 +568,9 @@ def guiMain(args=None): guiargs.disablemusic = bool(disableMusicVar.get()) guiargs.ow_palettes = owPalettesVar.get() guiargs.uw_palettes = uwPalettesVar.get() + guiargs.hud_palettes = hudPalettesVar.get() + guiargs.sword_palettes = swordPalettesVar.get() + guiargs.shield_palettes = shieldPalettesVar.get() guiargs.shuffleganon = bool(shuffleGanonVar.get()) guiargs.hints = bool(hintsVar.get()) guiargs.enemizercli = enemizerCLIpathVar.get() @@ -702,22 +735,43 @@ def guiMain(args=None): fastMenuLabel2.pack(side=LEFT) owPalettesFrame2 = Frame(drowDownFrame2) - owPalettesOptionMenu2 = OptionMenu(owPalettesFrame2, owPalettesVar, 'default', 'random', 'blackout') + owPalettesOptionMenu2 = OptionMenu(owPalettesFrame2, owPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') owPalettesOptionMenu2.pack(side=RIGHT) owPalettesLabel2 = Label(owPalettesFrame2, text='Overworld palettes') owPalettesLabel2.pack(side=LEFT) uwPalettesFrame2 = Frame(drowDownFrame2) - uwPalettesOptionMenu2 = OptionMenu(uwPalettesFrame2, uwPalettesVar, 'default', 'random', 'blackout') + uwPalettesOptionMenu2 = OptionMenu(uwPalettesFrame2, uwPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') uwPalettesOptionMenu2.pack(side=RIGHT) uwPalettesLabel2 = Label(uwPalettesFrame2, text='Dungeon palettes') uwPalettesLabel2.pack(side=LEFT) + hudPalettesFrame2 = Frame(drowDownFrame2) + hudPalettesOptionMenu2 = OptionMenu(hudPalettesFrame2, hudPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + hudPalettesOptionMenu2.pack(side=RIGHT) + hudPalettesLabel2 = Label(hudPalettesFrame2, text='HUD palettes') + hudPalettesLabel2.pack(side=LEFT) + + swordPalettesFrame2 = Frame(drowDownFrame2) + swordPalettesOptionMenu2 = OptionMenu(swordPalettesFrame2, swordPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + swordPalettesOptionMenu2.pack(side=RIGHT) + swordPalettesLabel2 = Label(swordPalettesFrame2, text='Sword palettes') + swordPalettesLabel2.pack(side=LEFT) + + shieldPalettesFrame2 = Frame(drowDownFrame2) + shieldPalettesOptionMenu2 = OptionMenu(shieldPalettesFrame2, shieldPalettesVar, 'default', 'random', 'blackout', 'grayscale', 'negative', 'classic', 'dizzy', 'sick', 'puke') + shieldPalettesOptionMenu2.pack(side=RIGHT) + shieldPalettesLabel2 = Label(shieldPalettesFrame2, text='Shield palettes') + shieldPalettesLabel2.pack(side=LEFT) + heartbeepFrame2.pack(expand=True, anchor=E) heartcolorFrame2.pack(expand=True, anchor=E) fastMenuFrame2.pack(expand=True, anchor=E) owPalettesFrame2.pack(expand=True, anchor=E) uwPalettesFrame2.pack(expand=True, anchor=E) + hudPalettesFrame2.pack(expand=True, anchor=E) + swordPalettesFrame2.pack(expand=True, anchor=E) + shieldPalettesFrame2.pack(expand=True, anchor=E) bottomFrame2 = Frame(topFrame2) @@ -728,6 +782,9 @@ def guiMain(args=None): guiargs.fastmenu = fastMenuVar.get() guiargs.ow_palettes = owPalettesVar.get() guiargs.uw_palettes = uwPalettesVar.get() + guiargs.hud_palettes = hudPalettesVar.get() + guiargs.sword_palettes = swordPalettesVar.get() + guiargs.shield_palettes = shieldPalettesVar.get() guiargs.quickswap = bool(quickSwapVar.get()) guiargs.disablemusic = bool(disableMusicVar.get()) guiargs.rom = romVar2.get() diff --git a/Main.py b/Main.py index dd09b566..e96b4bbc 100644 --- a/Main.py +++ b/Main.py @@ -36,7 +36,7 @@ def main(args, seed=None): if args.outputpath: os.makedirs(args.outputpath, exist_ok=True) output_path.cached_path = args.outputpath - + start = time.perf_counter() # initialize the world @@ -192,9 +192,18 @@ def main(args, seed=None): world.spoiler.hashes[(player, team)] = get_hash_string(rom.hash) + palettes_options={} + palettes_options['dungeon']=args.uw_palettes[player] + palettes_options['overworld']=args.ow_palettes[player] + palettes_options['hud']=args.hud_palettes[player] + palettes_options['sword']=args.sword_palettes[player] + palettes_options['shield']=args.shield_palettes[player] + palettes_options['link']=args.link_palettes[player] + apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player], args.fastmenu[player], args.disablemusic[player], args.sprite[player], - args.ow_palettes[player], args.uw_palettes[player], world, player, True) + palettes_options, world, player, True) + mcsb_name = '' if all([world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player], diff --git a/Mystery.py b/Mystery.py index d8f02072..adedd785 100644 --- a/Mystery.py +++ b/Mystery.py @@ -516,6 +516,11 @@ def roll_settings(weights): ret.heartbeep = convert_to_on_off(get_choice('heartbeep', romweights, "normal")) ret.ow_palettes = get_choice('ow_palettes', romweights, "default") ret.uw_palettes = get_choice('uw_palettes', romweights, "default") + ret.hud_palettes = get_choice('hud_palettes', romweights, "default") + ret.sword_palettes = get_choice('sword_palettes', romweights, "default") + ret.shield_palettes = get_choice('shield_palettes', romweights, "default") + ret.link_palettes = get_choice('link_palettes', romweights, "default") + else: ret.quickswap = True ret.sprite = "Link" diff --git a/Rom.py b/Rom.py index d81bfc8d..21d4e72c 100644 --- a/Rom.py +++ b/Rom.py @@ -37,15 +37,19 @@ except: class LocalRom(object): - def __init__(self, file, patch=True, name=None, hash=None): + def __init__(self, file, patch=True, vanillaRom=None, name=None, hash=None): self.name = name self.hash = hash self.orig_buffer = None + with open(file, 'rb') as stream: self.buffer = read_rom(stream) if patch: self.patch_base_rom() self.orig_buffer = self.buffer.copy() + if vanillaRom: + with open(vanillaRom, 'rb') as vanillaStream: + self.orig_buffer = read_rom(vanillaStream) def read_byte(self, address: int) -> int: return self.buffer[address] @@ -1045,7 +1049,7 @@ def patch_rom(world, rom, player, team, enemized): rom.write_byte(0x180211, gametype) # Game type # assorted fixes - rom.write_byte(0x1800A2, 0x01 if world.fix_fake_world[player] else 0x00) # Toggle whether to be in real/fake dark world when dying in a DW dungeon before killing aga1 + rom.write_byte(0x1800A2, 0x01 if world.fix_fake_world[player] else 0x00) # Toggle whether to be in real/fake dark world when dying in a DW dungeon before killing aga1 rom.write_byte(0x180169, 0x01 if world.lock_aga_door_in_escape else 0x00) # Lock or unlock aga tower door during escape sequence. if world.mode[player] == 'inverted': rom.write_byte(0x180169, 0x02) # lock aga/ganon tower door with crystals in inverted @@ -1507,7 +1511,9 @@ def hud_format_text(text): return output[:32] -def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite, ow_palettes, uw_palettes, world=None, player=1, allow_random_on_event=False): + +def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite, palettes_options, world=None, player=1, allow_random_on_event=False): + local_random = random if not world else world.rom_seeds[player] apply_random_sprite_on_event(rom, sprite, local_random, allow_random_on_event, world.sprite_pool[player] if world else []) @@ -1560,27 +1566,51 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr rom.write_byte(0x6FA30, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color]) rom.write_byte(0x65561, {'red': 0x05, 'blue': 0x0D, 'green': 0x19, 'yellow': 0x09}[color]) - # reset palette if it was adjusted already - default_ow_palettes(rom) - default_uw_palettes(rom) + + # write link sprite if required + if sprite: + sprite.write_to_rom(rom) + + + if z3pr: - options = { - "randomize_dungeon": uw_palettes == 'random', - "randomize_overworld": ow_palettes == 'random' - } - if any(options.values()): + def buildAndRandomize(option_name,mode): + options = { + option_name : True + } + data_dir = local_path("data") if is_bundled() else None offsets_array = build_offset_collections(options, data_dir) - + restore_maseya_colors(rom,offsets_array) + if mode == 'default': + return ColorF = z3pr.ColorF - def next_color_generator(): while True: yield ColorF(local_random.random(), local_random.random(), local_random.random()) + if mode == 'random': + mode = 'maseya' + z3pr.randomize(rom.buffer, mode, offset_collections=offsets_array, random_colors=next_color_generator()) + + uw_palettes=palettes_options['dungeon'] + ow_palettes=palettes_options['overworld'] + hud_palettes=palettes_options['hud'] + sword_palettes=palettes_options['sword'] + shield_palettes=palettes_options['shield'] + link_palettes=palettes_options['link'] + buildAndRandomize("randomize_dungeon", uw_palettes) + buildAndRandomize("randomize_overworld", ow_palettes) + buildAndRandomize("randomize_hud", hud_palettes) + buildAndRandomize("randomize_sword", sword_palettes) + buildAndRandomize("randomize_shield", shield_palettes) + #link palette shuffle does not work very well and it's incompatible with random sprite on event + #buildAndRandomize("randomize_link_sprite", link_palettes) - z3pr.randomize(rom.buffer, "maseya", offset_collections=offsets_array, random_colors=next_color_generator()) else: + # reset palette if it was adjusted already + default_ow_palettes(rom) + default_uw_palettes(rom) logging.warning("Could not find z3pr palette shuffle. " "If you want improved palette shuffling please install the maseya-z3pr package.") if ow_palettes == 'random': @@ -1588,14 +1618,20 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr if uw_palettes == 'random': randomize_uw_palettes(rom, local_random) - if ow_palettes == 'blackout': - blackout_ow_palettes(rom) - if uw_palettes == 'blackout': - blackout_uw_palettes(rom) + if ow_palettes == 'blackout': + blackout_ow_palettes(rom) + if uw_palettes == 'blackout': + blackout_uw_palettes(rom) if isinstance(rom, LocalRom): rom.write_crc() +def restore_maseya_colors(rom,offsets_array): + if not rom.orig_buffer: + return + for offsetC in offsets_array: + for address in offsetC: + rom.write_bytes(address, rom.orig_buffer[address:address+2]) def set_color(rom, address, color, shade): r = round(min(color[0], 0xFF) * pow(0.8, shade) * 0x1F / 0xFF) diff --git a/WebHostLib/static/static/playerSettings.json b/WebHostLib/static/static/playerSettings.json index 28ab3e04..a84f381d 100644 --- a/WebHostLib/static/static/playerSettings.json +++ b/WebHostLib/static/static/playerSettings.json @@ -1469,6 +1469,42 @@ "friendlyName": "Blackout", "description": "Never use this. Makes all overworld palette colors black.", "defaultValue": 0 + }, + "grayscale": { + "keyString": "rom.ow_palettes.grayscale", + "friendlyName": "Grayscale", + "description": "Removes all saturation of colors.", + "defaultValue": 0 + }, + "negative": { + "keyString": "rom.ow_palettes.negative", + "friendlyName": "Negative", + "description": "Invert all colors", + "defaultValue": 0 + }, + "classic": { + "keyString": "rom.ow_palettes.classic", + "friendlyName": "Classic", + "description": "Produces results similar to the website.", + "defaultValue": 0 + }, + "dizzy": { + "keyString": "rom.ow_palettes.dizzy", + "friendlyName": "Dizzy", + "description": "No logic in colors but saturation and lightness are conserved.", + "defaultValue": 0 + }, + "sick": { + "keyString": "rom.ow_palettes.sick", + "friendlyName": "Sick", + "description": "No logic in colors but lightness is conserved.", + "defaultValue": 0 + }, + "puke": { + "keyString": "rom.ow_palettes.Puke", + "friendlyName": "Puke", + "description": "No logic at all.", + "defaultValue": 0 } } }, @@ -1495,6 +1531,228 @@ "friendlyName": "Blackout", "description": "Never use this. Makes all underworld palette colors black.", "defaultValue": 0 + }, + "grayscale": { + "keyString": "rom.uw_palettes.grayscale", + "friendlyName": "Grayscale", + "description": "Removes all saturation of colors.", + "defaultValue": 0 + }, + "negative": { + "keyString": "rom.uw_palettes.negative", + "friendlyName": "Negative", + "description": "Invert all colors", + "defaultValue": 0 + }, + "classic": { + "keyString": "rom.uw_palettes.classic", + "friendlyName": "Classic", + "description": "Produces results similar to the website.", + "defaultValue": 0 + }, + "dizzy": { + "keyString": "rom.uw_palettes.dizzy", + "friendlyName": "Dizzy", + "description": "No logic in colors but saturation and lightness are conserved.", + "defaultValue": 0 + }, + "sick": { + "keyString": "rom.uw_palettes.sick", + "friendlyName": "Sick", + "description": "No logic in colors but lightness is conserved.", + "defaultValue": 0 + }, + "puke": { + "keyString": "rom.uw_palettes.Puke", + "friendlyName": "Puke", + "description": "No logic at all.", + "defaultValue": 0 + } + } + }, + "hud_palettes": { + "keyString": "rom.hud_palettes", + "friendlyName": "Underworld Palettes", + "description": "Randomize the colors of the underworld (caves, dungeons, etc.), within reason.", + "inputType": "range", + "subOptions": { + "default": { + "keyString": "rom.hud_palettes.default", + "friendlyName": "Vanilla", + "description": "Overworld colors will remain unchanged.", + "defaultValue": 50 + }, + "random": { + "keyString": "rom.hud_palettes.random", + "friendlyName": "Random", + "description": "Shuffles the colors of the overworld palette.", + "defaultValue": 0 + }, + "blackout": { + "keyString": "rom.hud_palettes.blackout", + "friendlyName": "Blackout", + "description": "Never use this. Makes all overworld palette colors black.", + "defaultValue": 0 + }, + "grayscale": { + "keyString": "rom.hud_palettes.grayscale", + "friendlyName": "Grayscale", + "description": "Removes all saturation of colors.", + "defaultValue": 0 + }, + "negative": { + "keyString": "rom.hud_palettes.negative", + "friendlyName": "Negative", + "description": "Invert all colors", + "defaultValue": 0 + }, + "classic": { + "keyString": "rom.hud_palettes.classic", + "friendlyName": "Classic", + "description": "Produces results similar to the website.", + "defaultValue": 0 + }, + "dizzy": { + "keyString": "rom.hud_palettes.dizzy", + "friendlyName": "Dizzy", + "description": "No logic in colors but saturation and lightness are conserved.", + "defaultValue": 0 + }, + "sick": { + "keyString": "rom.hud_palettes.sick", + "friendlyName": "Sick", + "description": "No logic in colors but lightness is conserved.", + "defaultValue": 0 + }, + "puke": { + "keyString": "rom.hud_palettes.Puke", + "friendlyName": "Puke", + "description": "No logic at all.", + "defaultValue": 0 + } + } + }, + "shield_palettes": { + "keyString": "rom.shield_palettes", + "friendlyName": "Underworld Palettes", + "description": "Randomize the colors of the underworld (caves, dungeons, etc.), within reason.", + "inputType": "range", + "subOptions": { + "default": { + "keyString": "rom.shield_palettes.default", + "friendlyName": "Vanilla", + "description": "Overworld colors will remain unchanged.", + "defaultValue": 50 + }, + "random": { + "keyString": "rom.shield_palettes.random", + "friendlyName": "Random", + "description": "Shuffles the colors of the overworld palette.", + "defaultValue": 0 + }, + "blackout": { + "keyString": "rom.shield_palettes.blackout", + "friendlyName": "Blackout", + "description": "Never use this. Makes all overworld palette colors black.", + "defaultValue": 0 + }, + "grayscale": { + "keyString": "rom.shield_palettes.grayscale", + "friendlyName": "Grayscale", + "description": "Removes all saturation of colors.", + "defaultValue": 0 + }, + "negative": { + "keyString": "rom.shield_palettes.negative", + "friendlyName": "Negative", + "description": "Invert all colors", + "defaultValue": 0 + }, + "classic": { + "keyString": "rom.shield_palettes.classic", + "friendlyName": "Classic", + "description": "Produces results similar to the website.", + "defaultValue": 0 + }, + "dizzy": { + "keyString": "rom.shield_palettes.dizzy", + "friendlyName": "Dizzy", + "description": "No logic in colors but saturation and lightness are conserved.", + "defaultValue": 0 + }, + "sick": { + "keyString": "rom.shield_palettes.sick", + "friendlyName": "Sick", + "description": "No logic in colors but lightness is conserved.", + "defaultValue": 0 + }, + "puke": { + "keyString": "rom.shield_palettes.Puke", + "friendlyName": "Puke", + "description": "No logic at all.", + "defaultValue": 0 + } + } + }, + "sword_palettes": { + "keyString": "rom.sword_palettes", + "friendlyName": "Underworld Palettes", + "description": "Randomize the colors of the underworld (caves, dungeons, etc.), within reason.", + "inputType": "range", + "subOptions": { + "default": { + "keyString": "rom.sword_palettes.default", + "friendlyName": "Vanilla", + "description": "Overworld colors will remain unchanged.", + "defaultValue": 50 + }, + "random": { + "keyString": "rom.sword_palettes.random", + "friendlyName": "Random", + "description": "Shuffles the colors of the overworld palette.", + "defaultValue": 0 + }, + "blackout": { + "keyString": "rom.sword_palettes.blackout", + "friendlyName": "Blackout", + "description": "Never use this. Makes all overworld palette colors black.", + "defaultValue": 0 + }, + "grayscale": { + "keyString": "rom.sword_palettes.grayscale", + "friendlyName": "Grayscale", + "description": "Removes all saturation of colors.", + "defaultValue": 0 + }, + "negative": { + "keyString": "rom.sword_palettes.negative", + "friendlyName": "Negative", + "description": "Invert all colors", + "defaultValue": 0 + }, + "classic": { + "keyString": "rom.sword_palettes.classic", + "friendlyName": "Classic", + "description": "Produces results similar to the website.", + "defaultValue": 0 + }, + "dizzy": { + "keyString": "rom.sword_palettes.dizzy", + "friendlyName": "Dizzy", + "description": "No logic in colors but saturation and lightness are conserved.", + "defaultValue": 0 + }, + "sick": { + "keyString": "rom.sword_palettes.sick", + "friendlyName": "Sick", + "description": "No logic in colors but lightness is conserved.", + "defaultValue": 0 + }, + "puke": { + "keyString": "rom.sword_palettes.Puke", + "friendlyName": "Puke", + "description": "No logic at all.", + "defaultValue": 0 } } } diff --git a/WebHostLib/static/static/playerSettings.yaml b/WebHostLib/static/static/playerSettings.yaml index ee71ec85..ddd21714 100644 --- a/WebHostLib/static/static/playerSettings.yaml +++ b/WebHostLib/static/static/playerSettings.yaml @@ -355,7 +355,49 @@ rom: default: 50 # No changes random: 0 # Shuffle the colors blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 uw_palettes: # Change the colors of caves and dungeons default: 50 # No changes random: 0 # Shuffle the colors blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + hud_palettes: # Change the colors of the hud + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + sword_palettes: # Change the colors of swords + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + uw_palettes: # Change the colors of shields + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 \ No newline at end of file diff --git a/playerSettings.yaml b/playerSettings.yaml index b9396adb..b6caabf9 100644 --- a/playerSettings.yaml +++ b/playerSettings.yaml @@ -369,7 +369,49 @@ rom: default: 50 # No changes random: 0 # Shuffle the colors blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 uw_palettes: # Change the colors of caves and dungeons default: 50 # No changes random: 0 # Shuffle the colors blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + hud_palettes: # Change the colors of the hud + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + sword_palettes: # Change the colors of swords + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 + uw_palettes: # Change the colors of shields + default: 50 # No changes + random: 0 # Shuffle the colors + blackout: 0 # Never use this + grayscale: 0 + negative: 0 + classic: 0 + dizzy: 0 + sick: 0 + puke: 0 \ No newline at end of file