forked from mirror/Archipelago
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45994e344e | ||
|
|
51d5e1afae | ||
|
|
577b958c4d | ||
|
|
ce38d8ced6 | ||
|
|
d65fcf286d | ||
|
|
5a6a0b37d6 |
11
Launcher.py
11
Launcher.py
@@ -218,12 +218,17 @@ def launch(exe, in_terminal=False):
|
||||
|
||||
def create_shortcut(button: Any, component: Component) -> None:
|
||||
from pyshortcuts import make_shortcut
|
||||
script = sys.argv[0]
|
||||
wkdir = Utils.local_path()
|
||||
env = os.environ
|
||||
if "APPIMAGE" in env:
|
||||
script = env["ARGV0"]
|
||||
wkdir = None # defaults to ~ on Linux
|
||||
else:
|
||||
script = sys.argv[0]
|
||||
wkdir = Utils.local_path()
|
||||
|
||||
script = f"{script} \"{component.display_name}\""
|
||||
make_shortcut(script, name=f"Archipelago {component.display_name}", icon=local_path("data", "icon.ico"),
|
||||
startmenu=False, terminal=False, working_dir=wkdir)
|
||||
startmenu=False, terminal=False, working_dir=wkdir, noexe=Utils.is_frozen())
|
||||
button.menu.dismiss()
|
||||
|
||||
|
||||
|
||||
11
kvui.py
11
kvui.py
@@ -35,6 +35,17 @@ Config.set("input", "mouse", "mouse,disable_multitouch")
|
||||
Config.set("kivy", "exit_on_escape", "0")
|
||||
Config.set("graphics", "multisamples", "0") # multisamples crash old intel drivers
|
||||
|
||||
# Workaround for Kivy issue #9226.
|
||||
# caused by kivy by default using probesysfs,
|
||||
# which assumes all multi touch deviecs are touch screens.
|
||||
# workaround provided by Snu of the kivy commmunity c:
|
||||
from kivy.utils import platform
|
||||
if platform == "linux":
|
||||
options = Config.options("input")
|
||||
for option in options:
|
||||
if Config.get("input", option) == "probesysfs":
|
||||
Config.remove_option("input", option)
|
||||
|
||||
# Workaround for an issue where importing kivy.core.window before loading sounds
|
||||
# will hang the whole application on Linux once the first sound is loaded.
|
||||
# kivymd imports kivy.core.window, so we have to do this before the first kivymd import.
|
||||
|
||||
@@ -2,7 +2,7 @@ import unittest
|
||||
|
||||
from BaseClasses import PlandoOptions
|
||||
from worlds import AutoWorldRegister
|
||||
from Options import OptionCounter, NamedRange, NumericOption, OptionList, OptionSet
|
||||
from Options import OptionCounter, NamedRange, NumericOption, OptionList, OptionSet, Visibility
|
||||
|
||||
|
||||
class TestOptionPresets(unittest.TestCase):
|
||||
@@ -19,6 +19,9 @@ class TestOptionPresets(unittest.TestCase):
|
||||
# pass in all plando options in case a preset wants to require certain plando options
|
||||
# for some reason
|
||||
option.verify(world_type, "Test Player", PlandoOptions(sum(PlandoOptions)))
|
||||
if not (Visibility.complex_ui in option.visibility or Visibility.simple_ui in option.visibility):
|
||||
self.fail(f"'{option_name}' in preset '{preset_name}' for game '{game_name}' is not "
|
||||
f"visible in any supported UI.")
|
||||
supported_types = [NumericOption, OptionSet, OptionList, OptionCounter]
|
||||
if not any([issubclass(option.__class__, t) for t in supported_types]):
|
||||
self.fail(f"'{option_name}' in preset '{preset_name}' for game '{game_name}' "
|
||||
|
||||
@@ -17,7 +17,7 @@ class GenericWeb(WebWorld):
|
||||
'A guide detailing the commands available to the user when participating in an Archipelago session.',
|
||||
'English', 'commands_en.md', 'commands/en', ['jat2980', 'Ijwu'])
|
||||
mac = Tutorial('Archipelago Setup Guide for Mac', 'A guide detailing how to run Archipelago clients on macOS.',
|
||||
'English', 'mac_en.md','mac/en', ['Bicoloursnake'])
|
||||
'English', 'mac_en.md','mac/en', ['Bicoloursnake', 'silasary'])
|
||||
plando = Tutorial('Archipelago Plando Guide', 'A guide to understanding and using plando for your game.',
|
||||
'English', 'plando_en.md', 'plando/en', ['alwaysintreble', 'Alchav'])
|
||||
setup = Tutorial('Getting Started',
|
||||
|
||||
@@ -7,7 +7,7 @@ all_random = {
|
||||
"game_language": "random",
|
||||
"goal": "random",
|
||||
"goal_speed": "random",
|
||||
"total_heart_stars": "random",
|
||||
"max_heart_stars": "random",
|
||||
"heart_stars_required": "random",
|
||||
"filler_percentage": "random",
|
||||
"trap_percentage": "random",
|
||||
@@ -34,7 +34,7 @@ all_random = {
|
||||
beginner = {
|
||||
"goal": "zero",
|
||||
"goal_speed": "normal",
|
||||
"total_heart_stars": 50,
|
||||
"max_heart_stars": 50,
|
||||
"heart_stars_required": 30,
|
||||
"filler_percentage": 25,
|
||||
"trap_percentage": 0,
|
||||
|
||||
@@ -951,14 +951,14 @@ item_descriptions = {
|
||||
item_names.TEMPEST_GRAVITY_SLING: "Tempests gain +8 range against air targets and +8 cast range.",
|
||||
item_names.TEMPEST_INTERPLANETARY_RANGE: "Tempests gain +8 weapon range against all targets.",
|
||||
item_names.PHOENIX_CLASS_IONIC_WAVELENGTH_FLUX: "Increases Phoenix, Mirage, and Skirmisher weapon damage by +2.",
|
||||
item_names.PHOENIX_CLASS_ANION_PULSE_CRYSTALS: "Increases Phoenix, Mirage, and Skirmiser range by +2.",
|
||||
item_names.PHOENIX_CLASS_ANION_PULSE_CRYSTALS: "Increases Phoenix, Mirage, and Skirmisher range by +2.",
|
||||
item_names.CORSAIR_STEALTH_DRIVE: "Corsairs become permanently cloaked.",
|
||||
item_names.CORSAIR_ARGUS_JEWEL: "Corsairs can store 2 charges of disruption web.",
|
||||
item_names.CORSAIR_SUSTAINING_DISRUPTION: "Corsair disruption webs last longer.",
|
||||
item_names.CORSAIR_NEUTRON_SHIELDS: "Increases corsair maximum shields by +20.",
|
||||
item_names.ORACLE_STEALTH_DRIVE: "Oracles become permanently cloaked.",
|
||||
item_names.ORACLE_SKYWARD_CHRONOANOMALY: "The Oracle's Stasis Ward can affect air units.",
|
||||
item_names.ORACLE_TEMPORAL_ACCELERATION_BEAM: "Oracles no longer need to to spend energy to attack.",
|
||||
item_names.ORACLE_TEMPORAL_ACCELERATION_BEAM: "Oracles no longer need to spend energy to attack.",
|
||||
item_names.ORACLE_BOSONIC_CORE: "Increases starting energy by 150 and maximum energy by 50.",
|
||||
item_names.ARBITER_CHRONOSTATIC_REINFORCEMENT: "Arbiters gain +50 maximum life and +1 armor.",
|
||||
item_names.ARBITER_KHAYDARIN_CORE: _get_start_and_max_energy_desc("Arbiters"),
|
||||
|
||||
@@ -1309,7 +1309,7 @@ class MaximumSupplyReductionPerItem(Range):
|
||||
class LowestMaximumSupply(Range):
|
||||
"""Controls how far max supply reduction traps can reduce maximum supply."""
|
||||
display_name = "Lowest Maximum Supply"
|
||||
range_start = 100
|
||||
range_start = 50
|
||||
range_end = 200
|
||||
default = 180
|
||||
|
||||
|
||||
@@ -1168,11 +1168,7 @@ class SC2Logic:
|
||||
def two_kerrigan_actives(self, state: CollectionState, story_tech_available=True) -> bool:
|
||||
if story_tech_available and self.grant_story_tech == GrantStoryTech.option_grant:
|
||||
return True
|
||||
count = 0
|
||||
for i in range(7):
|
||||
if state.has_any(kerrigan_logic_active_abilities, self.player):
|
||||
count += 1
|
||||
return count >= 2
|
||||
return state.count_from_list(item_groups.kerrigan_logic_active_abilities, self.player) >= 2
|
||||
|
||||
# Global Protoss
|
||||
def protoss_power_rating(self, state: CollectionState) -> int:
|
||||
|
||||
Reference in New Issue
Block a user