Merged in DR v1.2.0.15

This commit is contained in:
codemann8
2023-04-07 13:22:53 -05:00
14 changed files with 106 additions and 63 deletions

View File

@@ -3812,6 +3812,8 @@ logical_connections = [
('GT Blocked Stairs Block Path', 'GT Big Chest'), ('GT Blocked Stairs Block Path', 'GT Big Chest'),
('GT Speed Torch South Path', 'GT Speed Torch'), ('GT Speed Torch South Path', 'GT Speed Torch'),
('GT Speed Torch North Path', 'GT Speed Torch Upper'), ('GT Speed Torch North Path', 'GT Speed Torch Upper'),
('GT Conveyor Cross Hammer Path', 'GT Conveyor Cross Across Pits'),
('GT Conveyor Cross Hookshot Path', 'GT Conveyor Cross'),
('GT Hookshot East-Mid Path', 'GT Hookshot Mid Platform'), ('GT Hookshot East-Mid Path', 'GT Hookshot Mid Platform'),
('GT Hookshot Mid-East Path', 'GT Hookshot East Platform'), ('GT Hookshot Mid-East Path', 'GT Hookshot East Platform'),
('GT Hookshot North-Mid Path', 'GT Hookshot Mid Platform'), ('GT Hookshot North-Mid Path', 'GT Hookshot Mid Platform'),

View File

@@ -1115,6 +1115,8 @@ def create_doors(world, player):
create_door(player, 'GT Invisible Catwalk NE', Nrml).dir(No, 0x9c, Right, High).pos(2), create_door(player, 'GT Invisible Catwalk NE', Nrml).dir(No, 0x9c, Right, High).pos(2),
create_door(player, 'GT Conveyor Cross EN', Nrml).dir(Ea, 0x8b, Top, High).pos(2), create_door(player, 'GT Conveyor Cross EN', Nrml).dir(Ea, 0x8b, Top, High).pos(2),
create_door(player, 'GT Conveyor Cross WN', Intr).dir(We, 0x8b, Top, High).pos(0), create_door(player, 'GT Conveyor Cross WN', Intr).dir(We, 0x8b, Top, High).pos(0),
create_door(player, 'GT Conveyor Cross Hammer Path', Lgcl),
create_door(player, 'GT Conveyor Cross Hookshot Path', Lgcl),
create_door(player, 'GT Hookshot EN', Intr).dir(Ea, 0x8b, Top, High).pos(0), create_door(player, 'GT Hookshot EN', Intr).dir(Ea, 0x8b, Top, High).pos(0),
create_door(player, 'GT Hookshot East-Mid Path', Lgcl), create_door(player, 'GT Hookshot East-Mid Path', Lgcl),
create_door(player, 'GT Hookshot Mid-East Path', Lgcl), create_door(player, 'GT Hookshot Mid-East Path', Lgcl),

View File

@@ -190,10 +190,11 @@ gt_regions = [
'GT Tile Room', 'GT Speed Torch', 'GT Speed Torch Upper', 'GT Pots n Blocks', 'GT Crystal Conveyor', 'GT Tile Room', 'GT Speed Torch', 'GT Speed Torch Upper', 'GT Pots n Blocks', 'GT Crystal Conveyor',
'GT Crystal Conveyor Corner', 'GT Crystal Conveyor Left', 'GT Crystal Conveyor - Ranged Crystal', 'GT Crystal Conveyor Corner', 'GT Crystal Conveyor Left', 'GT Crystal Conveyor - Ranged Crystal',
'GT Crystal Conveyor Corner - Ranged Crystal', 'GT Compass Room', 'GT Invisible Bridges', 'GT Invisible Catwalk', 'GT Crystal Conveyor Corner - Ranged Crystal', 'GT Compass Room', 'GT Invisible Bridges', 'GT Invisible Catwalk',
'GT Conveyor Cross', 'GT Hookshot East Platform', 'GT Hookshot Mid Platform', 'GT Hookshot North Platform', 'GT Conveyor Cross', 'GT Conveyor Cross Across Pits', 'GT Hookshot East Platform', 'GT Hookshot Mid Platform',
'GT Hookshot South Platform', 'GT Hookshot South Entry', 'GT Hookshot South Entry - Ranged Crystal', 'GT Map Room', 'GT Hookshot North Platform', 'GT Hookshot South Platform', 'GT Hookshot South Entry',
'GT Double Switch Entry', 'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners', 'GT Hookshot South Entry - Ranged Crystal', 'GT Map Room', 'GT Double Switch Entry',
'GT Double Switch Left', 'GT Double Switch Left - Crystal', 'GT Double Switch Entry - Ranged Switches', 'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners', 'GT Double Switch Left',
'GT Double Switch Left - Crystal', 'GT Double Switch Entry - Ranged Switches',
'GT Double Switch Exit', 'GT Spike Crystal Left', 'GT Double Switch Exit', 'GT Spike Crystal Left',
'GT Spike Crystal Right', 'GT Warp Maze - Left Section', 'GT Warp Maze - Mid Section', 'GT Spike Crystal Right', 'GT Warp Maze - Left Section', 'GT Warp Maze - Mid Section',
'GT Warp Maze - Right Section', 'GT Warp Maze - Pit Section', 'GT Warp Maze - Pit Exit Warp Spot', 'GT Warp Maze - Right Section', 'GT Warp Maze - Pit Section', 'GT Warp Maze - Pit Exit Warp Spot',
@@ -204,8 +205,9 @@ gt_regions = [
'GT Dash Hall', 'GT Hidden Spikes', 'GT Cannonball Bridge', 'GT Refill', 'GT Gauntlet 1', 'GT Gauntlet 2', 'GT Dash Hall', 'GT Hidden Spikes', 'GT Cannonball Bridge', 'GT Refill', 'GT Gauntlet 1', 'GT Gauntlet 2',
'GT Gauntlet 3', 'GT Gauntlet 4', 'GT Gauntlet 5', 'GT Beam Dash', 'GT Lanmolas 2', 'GT Quad Pot', 'GT Wizzrobes 1', 'GT Gauntlet 3', 'GT Gauntlet 4', 'GT Gauntlet 5', 'GT Beam Dash', 'GT Lanmolas 2', 'GT Quad Pot', 'GT Wizzrobes 1',
'GT Dashing Bridge', 'GT Wizzrobes 2', 'GT Conveyor Bridge', 'GT Torch Cross', 'GT Staredown', 'GT Falling Torches', 'GT Dashing Bridge', 'GT Wizzrobes 2', 'GT Conveyor Bridge', 'GT Torch Cross', 'GT Staredown', 'GT Falling Torches',
'GT Mini Helmasaur Room', 'GT Bomb Conveyor', 'GT Crystal Circles', 'GT Crystal Inner Circle', 'GT Crystal Circles - Ranged Crystal', 'GT Mini Helmasaur Room', 'GT Bomb Conveyor', 'GT Crystal Circles', 'GT Crystal Inner Circle',
'GT Left Moldorm Ledge', 'GT Right Moldorm Ledge', 'GT Moldorm', 'GT Moldorm Pit', 'GT Validation', 'GT Validation Door', 'GT Crystal Circles - Ranged Crystal', 'GT Left Moldorm Ledge', 'GT Right Moldorm Ledge', 'GT Moldorm',
'GT Moldorm Pit', 'GT Validation', 'GT Validation Door',
'GT Frozen Over', 'GT Brightly Lit Hall', 'GT Agahnim 2', 'Ganons Tower Portal' 'GT Frozen Over', 'GT Brightly Lit Hall', 'GT Agahnim 2', 'Ganons Tower Portal'
] ]

View File

@@ -36,7 +36,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new
from source.tools.BPS import create_bps_from_data from source.tools.BPS import create_bps_from_data
from source.classes.CustomSettings import CustomSettings from source.classes.CustomSettings import CustomSettings
version_number = '1.2.0.14' version_number = '1.2.0.15'
version_branch = '-u' version_branch = '-u'
__version__ = f'{version_number}{version_branch}' __version__ = f'{version_number}{version_branch}'

View File

@@ -109,10 +109,9 @@ These are now independent of retro mode and have three options: None, Random, an
# Bug Fixes and Notes # Bug Fixes and Notes
* 1.2.0.14u * 1.2.0.15u
* Small fix for key logic validation (got rid of a false negative)
* Customized doors in ice cross work properly now
* GUI reorganization * GUI reorganization
* Logic fix for pots in GT conveyor cross
* Auto option for pyramid open (trinity or ER + crystals goal) * Auto option for pyramid open (trinity or ER + crystals goal)
* World model refactor (combining inverted and normal world models) * World model refactor (combining inverted and normal world models)
* Partitioned fix for lamp logic and links house * Partitioned fix for lamp logic and links house
@@ -120,6 +119,10 @@ These are now independent of retro mode and have three options: None, Random, an
* Reduced universal keys in pool slightly for non-vanilla dungeons * Reduced universal keys in pool slightly for non-vanilla dungeons
* Fake world fix finally * Fake world fix finally
* Some extra restrictions on links house placement for lite/lean * Some extra restrictions on links house placement for lite/lean
* Collection_rate works in customizer files
* 1.2.0.14u
* Small fix for key logic validation (got rid of a false negative)
* Customized doors in ice cross work properly now
* 1.2.0.13u * 1.2.0.13u
* Allow green/blue potion refills to be customized * Allow green/blue potion refills to be customized
* OW Map showing dungeon entrance at Snitch Lady (West) fixed (instead of @ HC Courtyard) * OW Map showing dungeon entrance at Snitch Lady (West) fixed (instead of @ HC Courtyard)

View File

@@ -909,7 +909,8 @@ def create_dungeon_regions(world, player):
['GT Compass Room EN', 'GT Compass Room Warp']), ['GT Compass Room EN', 'GT Compass Room Warp']),
create_dungeon_region(player, 'GT Invisible Bridges', 'Ganon\'s Tower', None, ['GT Invisible Bridges WS']), create_dungeon_region(player, 'GT Invisible Bridges', 'Ganon\'s Tower', None, ['GT Invisible Bridges WS']),
create_dungeon_region(player, 'GT Invisible Catwalk', 'Ganon\'s Tower', None, ['GT Invisible Catwalk ES', 'GT Invisible Catwalk WS', 'GT Invisible Catwalk NW', 'GT Invisible Catwalk NE']), create_dungeon_region(player, 'GT Invisible Catwalk', 'Ganon\'s Tower', None, ['GT Invisible Catwalk ES', 'GT Invisible Catwalk WS', 'GT Invisible Catwalk NW', 'GT Invisible Catwalk NE']),
create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross WN']), create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross Hammer Path']),
create_dungeon_region(player, 'GT Conveyor Cross Across Pits', 'Ganon\'s Tower', None, ['GT Conveyor Cross Hookshot Path', 'GT Conveyor Cross WN']),
create_dungeon_region(player, 'GT Hookshot East Platform', 'Ganon\'s Tower', None, ['GT Hookshot EN', 'GT Hookshot East-Mid Path']), create_dungeon_region(player, 'GT Hookshot East Platform', 'Ganon\'s Tower', None, ['GT Hookshot EN', 'GT Hookshot East-Mid Path']),
create_dungeon_region(player, 'GT Hookshot Mid Platform', 'Ganon\'s Tower', None, ['GT Hookshot Mid-East Path', 'GT Hookshot Mid-South Path', 'GT Hookshot Mid-North Path']), create_dungeon_region(player, 'GT Hookshot Mid Platform', 'Ganon\'s Tower', None, ['GT Hookshot Mid-East Path', 'GT Hookshot Mid-South Path', 'GT Hookshot Mid-North Path']),
create_dungeon_region(player, 'GT Hookshot North Platform', 'Ganon\'s Tower', None, ['GT Hookshot NW', 'GT Hookshot North-Mid Path']), create_dungeon_region(player, 'GT Hookshot North Platform', 'Ganon\'s Tower', None, ['GT Hookshot NW', 'GT Hookshot North-Mid Path']),

View File

@@ -209,22 +209,19 @@ def global_rules(world, player):
set_rule(world.get_entrance('Flute Spot 8', player), lambda state: state.can_flute(player)) set_rule(world.get_entrance('Flute Spot 8', player), lambda state: state.can_flute(player))
# overworld location rules # overworld location rules
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player)) set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
set_rule(world.get_location('Old Man', player), lambda state: state.has('Return Old Man', player)) set_rule(world.get_location('Old Man', player), lambda state: state.has('Return Old Man', player))
set_rule(world.get_location('Old Man Drop Off', player), lambda state: state.has('Escort Old Man', player)) set_rule(world.get_location('Old Man Drop Off', player), lambda state: state.has('Escort Old Man', player))
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player))
set_rule(world.get_location('Middle Aged Man', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest set_rule(world.get_location('Middle Aged Man', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest
set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Deliver Purple Chest', player)) # Can S&Q with chest set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Deliver Purple Chest', player)) # Can S&Q with chest
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
set_rule(world.get_location('Turtle Medallion Pad', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player)) # sword required to cast magic (!)
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
set_rule(world.get_location('Big Bomb', player), lambda state: state.has('Crystal 5', player) and state.has('Crystal 6', player)) set_rule(world.get_location('Big Bomb', player), lambda state: state.has('Crystal 5', player) and state.has('Crystal 6', player))
set_rule(world.get_location('Pyramid Crack', player), lambda state: state.has('Pick Up Big Bomb', player))
set_rule(world.get_entrance('Pyramid Crack', player), lambda state: state.has('Detonate Big Bomb', player))
set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player)) set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player))
set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player)) set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player))
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player))
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
set_rule(world.get_location('Turtle Medallion Pad', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player)) # sword required to cast magic (!)
# bonk items # bonk items
if world.shuffle_bonk_drops[player]: if world.shuffle_bonk_drops[player]:
@@ -243,12 +240,12 @@ def global_rules(world, player):
# underworld location rules # underworld location rules
set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player)) set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player))
set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and state.can_reach('Potion Shop Area', 'Region', player)) set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and state.can_reach('Potion Shop Area', 'Region', player))
set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player))
set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player))
set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player)) set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player))
set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player)) set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player))
set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player)) set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player))
set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player))
set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player)) set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player))
set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player))
set_rule(world.get_location('Spike Cave', player), lambda state: set_rule(world.get_location('Spike Cave', player), lambda state:
state.has('Hammer', player) and state.can_lift_rocks(player) and state.has('Hammer', player) and state.can_lift_rocks(player) and
((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or ((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or
@@ -340,6 +337,8 @@ def global_rules(world, player):
set_rule(world.get_entrance('20 Rupee Cave', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('20 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
set_rule(world.get_entrance('Hookshot Cave', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Hookshot Cave', player), lambda state: state.can_lift_rocks(player))
set_rule(world.get_location('Pyramid Crack', player), lambda state: state.has('Pick Up Big Bomb', player))
set_rule(world.get_entrance('Pyramid Crack', player), lambda state: state.has('Detonate Big Bomb', player))
set_rule(world.get_entrance('Hammer Peg Cave', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('Hammer Peg Cave', player), lambda state: state.has('Hammer', player))
set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player)) set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player))
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
@@ -546,8 +545,8 @@ def global_rules(world, player):
set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player)) set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player))
set_rule(world.get_entrance('GT Hope Room EN', player), lambda state: state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Hope Room EN', player), lambda state: state.has('Cane of Somaria', player))
set_rule(world.get_entrance('GT Conveyor Cross WN', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('GT Conveyor Cross Hammer Path', player), lambda state: state.has('Hammer', player))
set_rule(world.get_entrance('GT Conveyor Cross EN', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('GT Conveyor Cross Hookshot Path', player), lambda state: state.has('Hookshot', player))
if not world.get_door('GT Speed Torch SE', player).entranceFlag: if not world.get_door('GT Speed Torch SE', player).entranceFlag:
set_rule(world.get_entrance('GT Speed Torch SE', player), lambda state: state.has('Fire Rod', player)) set_rule(world.get_entrance('GT Speed Torch SE', player), lambda state: state.has('Fire Rod', player))
set_rule(world.get_entrance('GT Hookshot South-Mid Path', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('GT Hookshot South-Mid Path', player), lambda state: state.has('Hookshot', player))

View File

@@ -253,6 +253,7 @@
"randomizer.item.worldstate.open": "Open", "randomizer.item.worldstate.open": "Open",
"randomizer.item.worldstate.inverted": "Inverted", "randomizer.item.worldstate.inverted": "Inverted",
"randomizer.item.worldstate.retro": "Retro", "randomizer.item.worldstate.retro": "Retro",
"randomizer.item.retro": "Enable Retro",
"randomizer.item.logiclevel": "Logic Level", "randomizer.item.logiclevel": "Logic Level",
"randomizer.item.logiclevel.noglitches": "No Glitches", "randomizer.item.logiclevel.noglitches": "No Glitches",
@@ -347,7 +348,7 @@
"randomizer.item.potshuffle": "Pot Shuffle (Legacy)", "randomizer.item.potshuffle": "Pot Shuffle (Legacy)",
"randomizer.item.dropshuffle": "Shuffle Enemy Key Drops", "randomizer.item.dropshuffle": "Shuffle Enemy Key Drops",
"randomizer.item.keydropshuffle": "Key Drop Shuffle (Legacy)", "randomizer.item.keydropshuffle": "Enable Key Drop Shuffle (Legacy)",
"randomizer.item.take_any": "Take Any Caves", "randomizer.item.take_any": "Take Any Caves",
"randomizer.item.take_any.none": "None", "randomizer.item.take_any.none": "None",

View File

@@ -11,12 +11,8 @@
"options": [ "options": [
"standard", "standard",
"open", "open",
"inverted", "inverted"
"retro" ]
],
"config": {
"command": "worldstate"
}
}, },
"logiclevel": { "logiclevel": {
"type": "selectbox", "type": "selectbox",
@@ -65,6 +61,12 @@
} }
}, },
"rightItemFrame": { "rightItemFrame": {
"retro": {
"type": "button",
"config": {
"command": "retro"
}
},
"sortingalgo": { "sortingalgo": {
"type": "selectbox", "type": "selectbox",
"default": "balanced", "default": "balanced",
@@ -155,9 +157,11 @@
}, },
"dropshuffle": { "dropshuffle": {
"type": "checkbox" "type": "checkbox"
}, }
},
"leftPoolFrame2": {
"keydropshuffle": { "keydropshuffle": {
"type": "checkbox", "type": "button",
"config": { "config": {
"command": "keydropshuffle" "command": "keydropshuffle"
} }

View File

@@ -124,6 +124,7 @@ class CustomSettings(object):
args.crystals_gt[p] = get_setting(settings['crystals_gt'], args.crystals_gt[p]) args.crystals_gt[p] = get_setting(settings['crystals_gt'], args.crystals_gt[p])
args.crystals_ganon[p] = get_setting(settings['crystals_ganon'], args.crystals_ganon[p]) args.crystals_ganon[p] = get_setting(settings['crystals_ganon'], args.crystals_ganon[p])
args.experimental[p] = get_setting(settings['experimental'], args.experimental[p]) args.experimental[p] = get_setting(settings['experimental'], args.experimental[p])
args.collection_rate[p] = get_setting(settings['collection_rate'], args.collection_rate[p])
args.openpyramid[p] = get_setting(settings['openpyramid'], args.openpyramid[p]) args.openpyramid[p] = get_setting(settings['openpyramid'], args.openpyramid[p])
args.bigkeyshuffle[p] = get_setting(settings['bigkeyshuffle'], args.bigkeyshuffle[p]) args.bigkeyshuffle[p] = get_setting(settings['bigkeyshuffle'], args.bigkeyshuffle[p])
args.keyshuffle[p] = get_setting(settings['keyshuffle'], args.keyshuffle[p]) args.keyshuffle[p] = get_setting(settings['keyshuffle'], args.keyshuffle[p])
@@ -257,6 +258,7 @@ class CustomSettings(object):
settings_dict[p]['crystals_gt'] = world.crystals_gt_orig[p] settings_dict[p]['crystals_gt'] = world.crystals_gt_orig[p]
settings_dict[p]['crystals_ganon'] = world.crystals_ganon_orig[p] settings_dict[p]['crystals_ganon'] = world.crystals_ganon_orig[p]
settings_dict[p]['experimental'] = world.experimental[p] settings_dict[p]['experimental'] = world.experimental[p]
settings_dict[p]['collection_rate'] = world.collection_rate[p]
settings_dict[p]['openpyramid'] = world.open_pyramid[p] settings_dict[p]['openpyramid'] = world.open_pyramid[p]
settings_dict[p]['bigkeyshuffle'] = world.bigkeyshuffle[p] settings_dict[p]['bigkeyshuffle'] = world.bigkeyshuffle[p]
settings_dict[p]['keyshuffle'] = world.keyshuffle[p] settings_dict[p]['keyshuffle'] = world.keyshuffle[p]

View File

@@ -66,6 +66,7 @@ SETTINGSTOPROCESS = {
"crystals_ganon": "crystals_ganon", "crystals_ganon": "crystals_ganon",
"weapons": "swords", "weapons": "swords",
"retro": "retro",
"sortingalgo": "algorithm", "sortingalgo": "algorithm",
"accessibility": "accessibility", "accessibility": "accessibility",
"restrict_boss_items": "restrict_boss_items", "restrict_boss_items": "restrict_boss_items",

View File

@@ -57,7 +57,10 @@ def loadcliargs(gui, args, settings=None):
pagewidgets[widget].selectbox.options = theseOptions pagewidgets[widget].selectbox.options = theseOptions
elif thisType == "spinbox": elif thisType == "spinbox":
pagewidgets[widget].label.configure(text=label) pagewidgets[widget].label.configure(text=label)
pagewidgets[widget].storageVar.set(args[arg]) elif thisType == 'button':
pagewidgets[widget].button.configure(text=label)
if hasattr(pagewidgets[widget], 'storageVar'):
pagewidgets[widget].storageVar.set(args[arg])
# If we're on the Game Options page and it's not about Hints # If we're on the Game Options page and it's not about Hints
if subpage == "gameoptions" and widget not in ["hints", "collection_rate"]: if subpage == "gameoptions" and widget not in ["hints", "collection_rate"]:
# Check if we've got settings # Check if we've got settings

View File

@@ -43,7 +43,10 @@ def item_page(parent):
self.frames["leftPoolHeader"].pack(side=TOP, anchor=W) self.frames["leftPoolHeader"].pack(side=TOP, anchor=W)
self.frames["leftPoolFrame"] = Frame(self.frames["leftPoolContainer"]) self.frames["leftPoolFrame"] = Frame(self.frames["leftPoolContainer"])
self.frames["leftPoolFrame"].pack(side=LEFT, fill=Y) self.frames["leftPoolFrame"].pack(side=TOP, fill=Y)
self.frames["leftPoolFrame2"] = Frame(self.frames["leftPoolContainer"])
self.frames["leftPoolFrame2"].pack(side=LEFT, fill=Y)
self.frames["rightPoolFrame"] = Frame(self.frames["poolFrame"]) self.frames["rightPoolFrame"] = Frame(self.frames["poolFrame"])
self.frames["rightPoolFrame"].pack(side=RIGHT) self.frames["rightPoolFrame"].pack(side=RIGHT)
@@ -62,14 +65,16 @@ def item_page(parent):
for key in dictWidgets: for key in dictWidgets:
self.widgets[key] = dictWidgets[key] self.widgets[key] = dictWidgets[key]
packAttrs = {"anchor":E} packAttrs = {"anchor":E}
if self.widgets[key].type == "checkbox" or framename == "leftPoolFrame": if key == "retro":
packAttrs["side"] = RIGHT
if self.widgets[key].type == "checkbox" or framename.startswith("leftPoolFrame"):
packAttrs["anchor"] = W packAttrs["anchor"] = W
if framename == "checkboxes": if framename == "checkboxes":
packAttrs["side"] = LEFT packAttrs["side"] = LEFT
packAttrs["padx"] = (10,0) packAttrs["padx"] = (10, 0)
elif framename == "leftPoolHeader": elif framename == "leftPoolHeader":
packAttrs["side"] = LEFT packAttrs["side"] = LEFT
packAttrs["padx"] = (0,20) packAttrs["padx"] = (0, 20)
packAttrs = widgets.add_padding_from_config(packAttrs, theseWidgets[key]) packAttrs = widgets.add_padding_from_config(packAttrs, theseWidgets[key])
self.widgets[key].pack(packAttrs) self.widgets[key].pack(packAttrs)

View File

@@ -1,4 +1,5 @@
from tkinter import messagebox, Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, LEFT, RIGHT, X from tkinter import messagebox, Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, LEFT, RIGHT, X
from tkinter import Button
from source.classes.Empty import Empty from source.classes.Empty import Empty
# Override Spinbox to include mousewheel support for changing value # Override Spinbox to include mousewheel support for changing value
@@ -172,6 +173,22 @@ def make_textbox(self, parent, label, storageVar, manager, managerAttrs):
widget.textbox.pack(managerAttrs["textbox"] if managerAttrs is not None and "textbox" in managerAttrs else None) widget.textbox.pack(managerAttrs["textbox"] if managerAttrs is not None and "textbox" in managerAttrs else None)
return widget return widget
def make_button(self, parent, label, manager, managerAttrs, config):
self = Frame(parent)
if config and "command" in config:
self.command = config["command"]
else:
self.command = lambda: None
self.button = Button(parent, text=label, command=lambda: widget_command(self, self.command))
if managerAttrs is not None:
self.button.pack(managerAttrs)
else:
self.button.pack(anchor='w')
return self
# Make a generic widget # Make a generic widget
def make_widget(self, type, parent, label, storageVar=None, manager=None, managerAttrs=dict(), def make_widget(self, type, parent, label, storageVar=None, manager=None, managerAttrs=dict(),
options=None, config=None): options=None, config=None):
@@ -201,6 +218,8 @@ def make_widget(self, type, parent, label, storageVar=None, manager=None, manage
if thisStorageVar is None: if thisStorageVar is None:
thisStorageVar = StringVar() thisStorageVar = StringVar()
widget = make_textbox(self, parent, label, thisStorageVar, manager, managerAttrs) widget = make_textbox(self, parent, label, thisStorageVar, manager, managerAttrs)
elif type == 'button':
widget = make_button(self, parent, label, manager, managerAttrs, config)
widget.type = type widget.type = type
return widget return widget
@@ -243,36 +262,35 @@ def add_padding_from_config(packAttrs, defn):
def widget_command(widget, command=""): def widget_command(widget, command=""):
root = widget.winfo_toplevel() root = widget.winfo_toplevel()
text_output = "" text_output = ""
if command == "worldstate": if command == "retro":
if widget.storageVar.get() == 'retro': temp_widget = root.pages["randomizer"].pages["dungeon"].widgets["smallkeyshuffle"]
temp_widget = root.pages["randomizer"].pages["dungeon"].widgets["smallkeyshuffle"] text_output += f'\n {temp_widget.label.cget("text")}'
text_output += f'\n {temp_widget.label.cget("text")}' temp_widget.storageVar.set('universal')
temp_widget.storageVar.set('universal')
temp_widget = root.pages["randomizer"].pages["item"].widgets["bow_mode"] temp_widget = root.pages["randomizer"].pages["item"].widgets["bow_mode"]
text_output += f'\n {temp_widget.label.cget("text")}' text_output += f'\n {temp_widget.label.cget("text")}'
if temp_widget.storageVar.get() == 'progressive': if temp_widget.storageVar.get() == 'progressive':
temp_widget.storageVar.set('retro') temp_widget.storageVar.set('retro')
elif temp_widget.storageVar.get() == 'silvers': elif temp_widget.storageVar.get() == 'silvers':
temp_widget.storageVar.set('retro_silvers') temp_widget.storageVar.set('retro_silvers')
temp_widget = root.pages["randomizer"].pages["item"].widgets["take_any"] temp_widget = root.pages["randomizer"].pages["item"].widgets["take_any"]
text_output += f'\n {temp_widget.label.cget("text")}' text_output += f'\n {temp_widget.label.cget("text")}'
if temp_widget.storageVar.get() == 'none': if temp_widget.storageVar.get() == 'none':
temp_widget.storageVar.set('random') temp_widget.storageVar.set('random')
widget.storageVar.set('open') messagebox.showinfo('', f'The following settings were changed:{text_output}')
messagebox.showinfo('', f'The following settings were changed:{text_output}')
elif command == "keydropshuffle": elif command == "keydropshuffle":
if widget.storageVar.get() > 0: temp_widget = root.pages["randomizer"].pages["item"].widgets["pottery"]
temp_widget = root.pages["randomizer"].pages["item"].widgets["pottery"] text_output += f'\n {temp_widget.label.cget("text")}'
text_output += f'\n {temp_widget.label.cget("text")}' if temp_widget.storageVar.get() == 'none':
if temp_widget.storageVar.get() == 'none': temp_widget.storageVar.set('keys')
temp_widget.storageVar.set('keys')
temp_widget = root.pages["randomizer"].pages["item"].widgets["dropshuffle"] temp_widget = root.pages["randomizer"].pages["item"].widgets["dropshuffle"]
text_output += f'\n {temp_widget.checkbox.cget("text")}'
if temp_widget.storageVar.get() == 0:
temp_widget.storageVar.set(1) temp_widget.storageVar.set(1)
text_output += f'\n {temp_widget.checkbox.cget("text")}'
widget.storageVar.set(0) if text_output:
messagebox.showinfo('', f'The following settings were changed:{text_output}') messagebox.showinfo('', f'The following settings were changed:{text_output}')