Skip to content

Commit

Permalink
Add Skylancer, redesign Skylord
Browse files Browse the repository at this point in the history
  • Loading branch information
Ziktofel committed Dec 23, 2024
1 parent eabff00 commit 4536339
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 23 deletions.
11 changes: 7 additions & 4 deletions worlds/sc2/item/item_descriptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -882,8 +882,9 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.MOTHERSHIP: "Ultimate Protoss vessel. Can use the Vortex and Mass Recall abilities.",
item_names.ARBITER: "Army support craft. Has the Stasis Field and Recall abilities. Cloaks nearby units.",
item_names.ORACLE: "Flying caster. Can use the Revelation and Stasis Ward abilities.",
item_names.SKYLORD: "Capital ship. Fires a powerful laser that deals damage in a line. Can use Tactical Jump ability.",
item_names.SKYLORD: "Capital ship. Builds and launches Interceptor that attack enemy targets. Has fewer interceptors those are exceptionally good vs air targets. Can use Tactical Jump ability.",
item_names.TRIREME: "Capital ship. Builds and launches Bombers that attack enemy targets.",
item_names.SKYLANCER: "Capital ship. Fires a powerful laser that deals damage in a line.",
item_names.PROGRESSIVE_PROTOSS_GROUND_WEAPON: GENERIC_UPGRADE_TEMPLATE.format("damage", PROTOSS, "ground units"),
item_names.PROGRESSIVE_PROTOSS_GROUND_ARMOR: GENERIC_UPGRADE_TEMPLATE.format("armor", PROTOSS, "ground units"),
item_names.PROGRESSIVE_PROTOSS_SHIELDS: GENERIC_UPGRADE_TEMPLATE.format("shields", PROTOSS, "units"),
Expand Down Expand Up @@ -915,10 +916,12 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.SCOUT_GRAVITIC_THRUSTERS: "Scouts gain increased movement speed.",
item_names.SCOUT_ADVANCED_PHOTON_BLASTERS: "Scouts gain increased damage against ground targets.",
item_names.SCOUT_RESOURCE_EFFICIENCY: _get_resource_efficiency_desc(item_names.SCOUT),
item_names.TEMPEST_TECTONIC_DESTABILIZERS: "Tempests deal increased damage to buildings.",
item_names.TEMPEST_QUANTIC_REACTOR: "Tempests deal increased damage to massive units.",
item_names.TEMPEST_SKYLANCER_TECTONIC_DESTABILIZERS: "Tempests deal increased damage to buildings.",
item_names.TEMPEST_SKYLANCER_QUANTIC_REACTOR: "Tempests deal increased damage to massive units.",
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.SKYLANCER_BLINK: "Allows Skylancers to teleport over a short distance.",
item_names.SKYLANCER_CAPACITOR_OVERCHARGE: "Doubles Skylancer's attack speed. However, while attacking overheats, and reduces its attack speed back to the original value.",
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.CORSAIR_STEALTH_DRIVE: "Corsairs become permanently cloaked.",
Expand All @@ -934,7 +937,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.ARBITER_SPACETIME_ANCHOR: "Allows Arbiters to use an alternate version of Stasis Field which lasts 50 seconds longer.",
item_names.ARBITER_RESOURCE_EFFICIENCY: _get_resource_efficiency_desc(item_names.ARBITER),
item_names.ARBITER_ENHANCED_CLOAK_FIELD: "Increases Arbiter Cloaking Field range.",
item_names.CARRIER_TRIREME_GRAVITON_CATAPULT: "Carriers and Triremes can launch Interceptors and Bombers more quickly.",
item_names.CARRIER_SKYLORD_TRIREME_GRAVITON_CATAPULT: "Carriers and Triremes can launch Interceptors and Bombers more quickly.",
item_names.CARRIER_SKYLORD_TRIREME_HULL_OF_PAST_GLORIES: "Carrier-class ships gain +2 armour.",
item_names.VOID_RAY_DESTROYER_WARP_RAY_DAWNBRINGER_FLUX_VANES: "Increases movement speed of Void Ray variants.",
item_names.DAWNBRINGER_ANTI_SURFACE_COUNTERMEASURES: "Dawnbringers take reduced damage from non-spell ground sources.",
Expand Down
10 changes: 5 additions & 5 deletions worlds/sc2/item/item_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -641,8 +641,8 @@ def get_all_group_names(cls) -> typing.Set[str]:
item_names.PHOENIX, item_names.MIRAGE, item_names.CORSAIR, item_names.SKIRMISHER,
item_names.VOID_RAY, item_names.DESTROYER, item_names.WARP_RAY, item_names.DAWNBRINGER,
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME,
item_names.SCOUT, item_names.TEMPEST, item_names.MOTHERSHIP,
item_names.ARBITER, item_names.ORACLE,
item_names.SCOUT, item_names.TEMPEST, item_names.SKYLANCER,
item_names.ARBITER, item_names.ORACLE, item_names.MOTHERSHIP,
]
item_name_groups[ItemGroupNames.PROTOSS_GENERIC_UPGRADES] = protoss_generic_upgrades = [
item_name for item_name, item_data in item_tables.item_table.items()
Expand Down Expand Up @@ -686,8 +686,8 @@ def get_all_group_names(cls) -> typing.Set[str]:
item_names.PHOENIX, item_names.SKIRMISHER, item_names.MIRAGE, item_names.CORSAIR,
item_names.VOID_RAY, item_names.DESTROYER, item_names.WARP_RAY, item_names.DAWNBRINGER,
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME,
item_names.TEMPEST, item_names.SCOUT, item_names.MOTHERSHIP,
item_names.ARBITER, item_names.ORACLE,
item_names.TEMPEST, item_names.SCOUT, item_names.SKYLANCER,
item_names.ARBITER, item_names.ORACLE, item_names.MOTHERSHIP,
]
item_name_groups[ItemGroupNames.PROTOSS_BUILDINGS] = protoss_buildings = [
item_name for item_name, item_data in item_tables.item_table.items()
Expand All @@ -706,7 +706,7 @@ def get_all_group_names(cls) -> typing.Set[str]:
item_name_groups[ItemGroupNames.TAL_DARIM_UNITS] = [
item_names.SUPPLICANT, item_names.SLAYER, item_names.HAVOC, item_names.BLOOD_HUNTER, item_names.ASCENDANT,
item_names.VANGUARD, item_names.WRATHWALKER,
item_names.SKIRMISHER, item_names.DESTROYER, item_names.SKYLORD, item_names.MOTHERSHIP,
item_names.SKIRMISHER, item_names.DESTROYER, item_names.SKYLORD, item_names.SKYLANCER, item_names.MOTHERSHIP,
]
item_name_groups[ItemGroupNames.PURIFIER_UNITS] = [
item_names.SENTINEL, item_names.ADEPT, item_names.INSTIGATOR, item_names.ENERGIZER,
Expand Down
9 changes: 6 additions & 3 deletions worlds/sc2/item/item_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,7 @@
DAWNBRINGER = "Dawnbringer"
SCOUT = "Scout"
TEMPEST = "Tempest"
SKYLANCER = "Skylancer"
MOTHERSHIP = "Mothership"
ARBITER = "Arbiter"
ORACLE = "Oracle"
Expand Down Expand Up @@ -713,10 +714,11 @@
SCOUT_GRAVITIC_THRUSTERS = "Gravitic Thrusters (Scout)"
SCOUT_ADVANCED_PHOTON_BLASTERS = "Advanced Photon Blasters (Scout)"
SCOUT_RESOURCE_EFFICIENCY = "Resource Efficiency (Scout)"
TEMPEST_TECTONIC_DESTABILIZERS = "Tectonic Destabilizers (Tempest)"
TEMPEST_QUANTIC_REACTOR = "Quantic Reactor (Tempest)"
TEMPEST_SKYLANCER_TECTONIC_DESTABILIZERS = "Tectonic Destabilizers (Tempest/Skylancer)"
TEMPEST_SKYLANCER_QUANTIC_REACTOR = "Quantic Reactor (Tempest/Skylancer)"
TEMPEST_GRAVITY_SLING = "Gravity Sling (Tempest)"
TEMPEST_INTERPLANETARY_RANGE = "Interplanetary Range (Tempest)"
SKYLANCER_BLINK = "Blink (Skylancer)"
PHOENIX_CLASS_IONIC_WAVELENGTH_FLUX = "Ionic Wavelength Flux (Phoenix/Mirage/Skirmisher)"
PHOENIX_CLASS_ANION_PULSE_CRYSTALS = "Anion Pulse-Crystals (Phoenix/Mirage/Skirmisher)"
CORSAIR_STEALTH_DRIVE = "Stealth Drive (Corsair)"
Expand All @@ -732,7 +734,7 @@
ARBITER_SPACETIME_ANCHOR = "Spacetime Anchor (Arbiter)"
ARBITER_RESOURCE_EFFICIENCY = "Resource Efficiency (Arbiter)"
ARBITER_ENHANCED_CLOAK_FIELD = "Enhanced Cloak Field (Arbiter)"
CARRIER_TRIREME_GRAVITON_CATAPULT = "Graviton Catapult (Carrier/Trireme)"
CARRIER_SKYLORD_TRIREME_GRAVITON_CATAPULT = "Graviton Catapult (Carrier/Skylord/Trireme)"
CARRIER_SKYLORD_TRIREME_HULL_OF_PAST_GLORIES = "Hull of Past Glories (Carrier/Skylord/Trireme)"
VOID_RAY_DESTROYER_WARP_RAY_DAWNBRINGER_FLUX_VANES = "Flux Vanes (Void Ray/Destroyer/Warp Ray/Dawnbringer)"
DAWNBRINGER_ANTI_SURFACE_COUNTERMEASURES = "Anti-Surface Countermeasures (Dawnbringer)"
Expand Down Expand Up @@ -835,6 +837,7 @@
SKYLORD_HYPERJUMP = "Hyperjump (Skylord)"
TRIREME_SOLAR_BEAM = "Solar Beam (Trieme)"
TEMPEST_DISINTEGRATION = "Disintegration (Tempest)"
SKYLANCER_CAPACITOR_OVERCHARGE = "Capacitor Overcharge (Skylancer)"
# Scout
ARBITER_ABILITY_EFFICIENCY = "Ability Efficiency (Arbiter)"
# Oracle
Expand Down
4 changes: 4 additions & 0 deletions worlds/sc2/item/item_parents.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ def parent_items(self) -> List[str]:
(item_names.CARRIER, item_names.TRIREME, item_names.SKYLORD),
main_item=item_names.CARRIER,
)
parent_present[parent_names.TEMPEST_CLASS] = AnyOf(
(item_names.TEMPEST, item_names.SKYLANCER),
main_item=item_names.TEMPEST,
)
parent_present[parent_names.CARRIER_OR_TRIREME] = AnyOf(
(item_names.CARRIER, item_names.TRIREME),
main_item=item_names.CARRIER,
Expand Down
13 changes: 9 additions & 4 deletions worlds/sc2/item/item_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -1770,6 +1770,9 @@ def get_full_item_list():
item_names.SKIRMISHER:
ItemData(35 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Unit_2, 14, SC2Race.PROTOSS,
classification=ItemClassification.progression),
item_names.SKYLANCER:
ItemData(36 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Unit_2, 15, SC2Race.PROTOSS,
classification=ItemClassification.progression),

# Protoss Upgrades
item_names.PROGRESSIVE_PROTOSS_GROUND_WEAPON: ItemData(100 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Upgrade, 0, SC2Race.PROTOSS, classification=ItemClassification.progression, quantity=WEAPON_ARMOR_UPGRADE_MAX_LEVEL),
Expand Down Expand Up @@ -1806,8 +1809,8 @@ def get_full_item_list():
item_names.SCOUT_APIAL_SENSORS: ItemData(313 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 13, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.SCOUT),
item_names.SCOUT_GRAVITIC_THRUSTERS: ItemData(314 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 14, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.SCOUT),
item_names.SCOUT_ADVANCED_PHOTON_BLASTERS: ItemData(315 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 15, SC2Race.PROTOSS, parent=item_names.SCOUT),
item_names.TEMPEST_TECTONIC_DESTABILIZERS: ItemData(316 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 16, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.TEMPEST),
item_names.TEMPEST_QUANTIC_REACTOR: ItemData(317 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 17, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.TEMPEST),
item_names.TEMPEST_SKYLANCER_TECTONIC_DESTABILIZERS: ItemData(316 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 16, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=parent_names.TEMPEST_CLASS),
item_names.TEMPEST_SKYLANCER_QUANTIC_REACTOR: ItemData(317 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 17, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=parent_names.TEMPEST_CLASS),
item_names.TEMPEST_GRAVITY_SLING: ItemData(318 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 18, SC2Race.PROTOSS, parent=item_names.TEMPEST),
item_names.PHOENIX_CLASS_IONIC_WAVELENGTH_FLUX: ItemData(319 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 19, SC2Race.PROTOSS, parent=parent_names.PHOENIX_CLASS),
item_names.PHOENIX_CLASS_ANION_PULSE_CRYSTALS: ItemData(320 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_1, 20, SC2Race.PROTOSS, parent=parent_names.PHOENIX_CLASS),
Expand All @@ -1823,8 +1826,8 @@ def get_full_item_list():
item_names.ARBITER_SPACETIME_ANCHOR: ItemData(330 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 0, SC2Race.PROTOSS, parent=item_names.ARBITER),
item_names.ARBITER_RESOURCE_EFFICIENCY: ItemData(331 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 1, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.ARBITER),
item_names.ARBITER_ENHANCED_CLOAK_FIELD: ItemData(332 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 2, SC2Race.PROTOSS, classification=ItemClassification.filler, parent=item_names.ARBITER),
item_names.CARRIER_TRIREME_GRAVITON_CATAPULT:
ItemData(333 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 3, SC2Race.PROTOSS, parent=parent_names.CARRIER_OR_TRIREME),
item_names.CARRIER_SKYLORD_TRIREME_GRAVITON_CATAPULT:
ItemData(333 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 3, SC2Race.PROTOSS, parent=parent_names.CARRIER_CLASS),
item_names.CARRIER_SKYLORD_TRIREME_HULL_OF_PAST_GLORIES:
ItemData(334 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_2, 4, SC2Race.PROTOSS, parent=parent_names.CARRIER_CLASS),
item_names.VOID_RAY_DESTROYER_WARP_RAY_DAWNBRINGER_FLUX_VANES:
Expand Down Expand Up @@ -1892,6 +1895,7 @@ def get_full_item_list():
item_names.ARCHON_ERADICATE: ItemData(393 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_4, 3, SC2Race.PROTOSS, parent=parent_names.ARCHON_SOURCE),
item_names.ARCHON_OBLITERATE: ItemData(394 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_4, 4, SC2Race.PROTOSS, parent=parent_names.ARCHON_SOURCE),
item_names.SUPPLICANT_ZENITH_PITCH: ItemData(395 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_4, 5, SC2Race.PROTOSS, parent=item_names.SUPPLICANT),
item_names.SKYLANCER_BLINK: ItemData(396 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Forge_4, 6, SC2Race.PROTOSS, parent=item_names.SKYLANCER),

# War Council
item_names.ZEALOT_WHIRLWIND: ItemData(500 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.War_Council, 0, SC2Race.PROTOSS, classification=ItemClassification.progression, parent=item_names.ZEALOT),
Expand Down Expand Up @@ -1940,6 +1944,7 @@ def get_full_item_list():
item_names.ARBITER_ABILITY_EFFICIENCY: ItemData(543 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.War_Council_2, 13, SC2Race.PROTOSS, parent=item_names.ARBITER),
# 544 reserved for Oracle
item_names.MOTHERSHIP_INTEGRATED_POWER: ItemData(545 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.War_Council_2, 15, SC2Race.PROTOSS, parent=item_names.MOTHERSHIP),
item_names.SKYLANCER_CAPACITOR_OVERCHARGE: ItemData(546 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.War_Council_2, 16, SC2Race.PROTOSS, parent=item_names.SKYLANCER),

# SoA Calldown powers
item_names.SOA_CHRONO_SURGE: ItemData(700 + SC2LOTV_ITEM_ID_OFFSET, ProtossItemType.Spear_Of_Adun, 0, SC2Race.PROTOSS),
Expand Down
1 change: 1 addition & 0 deletions worlds/sc2/item/parent_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

# Protoss
ARCHON_SOURCE = "Any Archon Source"
TEMPEST_CLASS = "Tempest Class"
CARRIER_CLASS = "Carrier Class"
CARRIER_OR_TRIREME = "Carrier | Trireme"
DARK_ARCHON_SOURCE = "Dark Archon Source"
Expand Down
14 changes: 7 additions & 7 deletions worlds/sc2/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@ def all_in_p_requirement(self, state: CollectionState):
defense_rating >= 9 and beats_kerrigan
and self.protoss_anti_light_anti_air(state)
and state.has_any(
{item_names.TEMPEST, item_names.SKYLORD, item_names.VOID_RAY},
{item_names.TEMPEST, item_names.SKYLANCER, item_names.VOID_RAY},
self.player)
)

Expand Down Expand Up @@ -1336,7 +1336,7 @@ def protoss_basic_anti_air(self, state: CollectionState) -> bool:
return (
self.protoss_competent_anti_air(state)
or state.has_any({
item_names.PHOENIX, item_names.MIRAGE, item_names.CORSAIR, item_names.CARRIER, item_names.SKYLORD,
item_names.PHOENIX, item_names.MIRAGE, item_names.CORSAIR, item_names.CARRIER,
item_names.SCOUT, item_names.DARK_ARCHON, item_names.MOTHERSHIP
}, self.player)
or state.has_all({item_names.TRIREME, item_names.TRIREME_SOLAR_BEAM}, self.player)
Expand Down Expand Up @@ -1378,7 +1378,7 @@ def protoss_competent_anti_air(self, state: CollectionState) -> bool:
return (
state.has_any({
item_names.STALKER, item_names.SLAYER, item_names.INSTIGATOR, item_names.DRAGOON, item_names.ADEPT,
item_names.VOID_RAY, item_names.DESTROYER, item_names.TEMPEST, item_names.SKYLORD,
item_names.VOID_RAY, item_names.DESTROYER, item_names.TEMPEST, item_names.SKYLORD, item_names.SKYLANCER,
}, self.player)
or ((
state.has_any({
Expand Down Expand Up @@ -1410,7 +1410,7 @@ def protoss_has_blink(self, state: CollectionState) -> bool:
def protoss_can_attack_behind_chasm(self, state: CollectionState) -> bool:
return (
state.has_any({
item_names.SCOUT, item_names.TEMPEST,
item_names.SCOUT, item_names.TEMPEST, item_names.SKYLANCER,
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME,
item_names.VOID_RAY, item_names.DESTROYER, item_names.WARP_RAY, item_names.DAWNBRINGER,
item_names.MOTHERSHIP,
Expand All @@ -1431,7 +1431,7 @@ def protoss_respond_to_colony_infestations(self, state: CollectionState) -> bool
and self.protoss_competent_anti_air(state)
and (
state.has_any({
item_names.CARRIER, item_names.SKYLORD,
item_names.CARRIER, item_names.SKYLORD, item_names.SKYLANCER,
}, self.player)
# handle mutas
or (state.has_any({
Expand All @@ -1452,8 +1452,8 @@ def protoss_respond_to_colony_infestations(self, state: CollectionState) -> bool

def protoss_fleet(self, state: CollectionState) -> bool:
return state.has_any({
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME, item_names.TEMPEST, item_names.VOID_RAY,
item_names.DESTROYER, item_names.WARP_RAY, item_names.DAWNBRINGER
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME, item_names.TEMPEST, item_names.SKYLANCER,
item_names.VOID_RAY, item_names.DESTROYER, item_names.WARP_RAY, item_names.DAWNBRINGER
}, self.player)

def templars_return_phase_2_requirement(self, state: CollectionState) -> bool:
Expand Down

0 comments on commit 4536339

Please sign in to comment.