Skip to content

Commit

Permalink
Merge pull request Ziktofel#326 from itsjustbones/balance-and-bug-fixes
Browse files Browse the repository at this point in the history
Balance and bug fixes
  • Loading branch information
Ziktofel authored Oct 18, 2024
2 parents 0035f48 + 2f3329a commit e519a85
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 9 deletions.
29 changes: 26 additions & 3 deletions worlds/sc2/item_descriptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@
item_names.DESTROYER: (50, 25, 1),
DISPLAY_NAME_WORMS: (50, 75, 0),

#Frightful Fleshwelder
item_names.INFESTED_SIEGE_TANK: (0, 25, 0),
item_names.INFESTED_DIAMONDBACK: (50, 0, 0),
item_names.INFESTED_BANSHEE: (25, 0, 0),
item_names.INFESTED_LIBERATOR: (0, 25, 0),

# War Council
item_names.CENTURION: (0, 50, 0),
item_names.SENTINEL: (60, 0, 1),
Expand Down Expand Up @@ -191,6 +197,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.MISSILE_TURRET_HELLSTORM_BATTERIES: "The Missile Turret unleashes an additional flurry of missiles with each attack.",
item_names.SCV_ADVANCED_CONSTRUCTION: "Multiple SCVs can construct a structure, reducing its construction time.",
item_names.SCV_DUAL_FUSION_WELDERS: "SCVs repair twice as fast.",
item_names.SCV_CONSTRUCTION_JUMP_JETS: "Allows SCVs to jump up and down cliffs.",
item_names.PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM: inspect.cleandoc("""
Level 1: While on low health, Terran structures are repaired to half health instead of burning down.
Level 2: Terran structures are repaired to full health instead of half health.
Expand Down Expand Up @@ -380,6 +387,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.LIBERATOR_RAID_ARTILLERY: "Allows Liberators to attack structures while in Defender Mode.",
item_names.WIDOW_MINE_DRILLING_CLAWS: "Allows Widow Mines to burrow and unburrow faster.",
item_names.WIDOW_MINE_CONCEALMENT: "Burrowed Widow Mines are no longer revealed when the Sentinel Missile is on cooldown.",
item_names.WIDOW_MINE_DEMOLITION_ARMAMENTS: "Allows Widow Mines to attack and damage structures.",
item_names.MEDIVAC_ADVANCED_CLOAKING_FIELD: "Medivacs are permanently cloaked.",
item_names.WRAITH_TRIGGER_OVERRIDE: "Wraith attack speed increases by 10% with each attack, up to a maximum of 100%.",
item_names.WRAITH_INTERNAL_TECH_MODULE: INTERNAL_TECH_MODULE_DESCRIPTION_TEMPLATE.format("Wraiths", "Starport"),
Expand Down Expand Up @@ -659,6 +667,9 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.GUARDIAN_PROLONGED_DISPERSION: "Guardians gain +3 range.",
item_names.GUARDIAN_PRIMAL_ADAPTATION: "Allows Guardians to attack air units with a decreased attack damage.",
item_names.GUARDIAN_SORONAN_ACID: "Guardians deal increased damage to ground targets.",
item_names.GUARDIAN_PROPELLANT_SACS: "Guardians gain increased movement speed.",
item_names.GUARDIAN_EXPLOSIVE_SPORES: "Allows Guardians to launch an explosive spore at ground targets, dealing damage and knocking them back in an area.",
item_names.GUARDIAN_PRIMORDIAL_FURY: "Guardians gain increasing attack speed as they attack.",
item_names.IMPALER_ADAPTIVE_TALONS: "Impalers burrow faster.",
item_names.IMPALER_SECRETION_GLANDS: "Impalers generate creep while standing still or burrowed.",
item_names.IMPALER_HARDENED_TENTACLE_SPINES: "Impalers deal increased damage.",
Expand Down Expand Up @@ -721,13 +732,25 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
"""),
item_names.INFESTED_SIEGE_TANK_ACIDIC_ENZYMES: "Infested Siege Tanks deal an additional 15 damage to armored units and structures in both modes.",
item_names.INFESTED_SIEGE_TANK_DEEP_TUNNEL: _ability_desc("Infested Siege Tanks", "Deep Tunnel", "allows them to burrow to any visible location on the map covered in creep"),
item_names.INFESTED_DIAMONDBACK_SATURATED_CULTURES: "Infested Diamondbacks leave behind a trail of acid when moving that deals 20 damage per second to enemy units.",
item_names.INFESTED_DIAMONDBACK_CAUSTIC_MUCUS: "Reduces the cooldown of the Infested Diamondback's Fungal Snare by 15 seconds.",
item_names.INFESTED_SIEGE_TANK_SEISMIC_SONAR: "Infested Siege Tank Tentacle weapon gains +1 range. Volatile Burst weapon gains +3 range.",
item_names.INFESTED_SIEGE_TANK_BALANCED_ROOTS: "Allows Infested Siege Tank to attack while moving with its Tentacle weapon.",
item_names.INFESTED_DIAMONDBACK_CAUSTIC_MUCUS: "Infested Diamondbacks leave behind a trail of acid when moving that deals 12 damage per second to enemy units.",
item_names.INFESTED_DIAMONDBACK_VIOLENT_ENZYMES: "Infested Diamondbacks deal an additional +8 damage.",
item_names.INFESTED_DIAMONDBACK_CONCENTRATED_SPEW: "Infested Diamondbacks gain +2 weapon range. Fungal Snare gains +2 range.",
item_names.INFESTED_DIAMONDBACK_PROGRESSIVE_FUNGAL_SNARE: inspect.cleandoc("""
Level 1: Infested Diamondbacks gain the Fungal Snare ability, allowing them to temporary ground flying units.
Level 2: Infested Diamondback Fungal Snare ability cooldown reduced by 15 seconds.
"""),
item_names.INFESTED_BANSHEE_BRACED_EXOSKELETON: "Infested Banshees gain +100 life.",
item_names.INFESTED_BANSHEE_RAPID_HIBERNATION: "Infested Banshees regenerate 20 life and energy per second while burrowed.",
item_names.INFESTED_BANSHEE_ADVANCED_TARGETING_OPTICS: "Infested Banshees gain +2 range while cloacked.",
item_names.INFESTED_LIBERATOR_CLOUD_DISPERSAL: "Infested Liberators instantly transform into a cloud of microscopic organisms while attacking, reducing the damage they take by 85%.",
item_names.INFESTED_LIBERATOR_VIRAL_CONTAMINATION: "Increases the damage Infested Liberators deal to their primary target by 100%.",
item_names.FRIGHTFUL_FLESHWELDER: "Reduces infested mechnical unit resource cost by 30%.",
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_SIEGE_TANK: _get_resource_efficiency_desc(item_names.INFESTED_SIEGE_TANK),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_DIAMONDBACK: _get_resource_efficiency_desc(item_names.INFESTED_DIAMONDBACK),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_BANSHEE: _get_resource_efficiency_desc(item_names.INFESTED_BANSHEE),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_LIBERATOR: _get_resource_efficiency_desc(item_names.INFESTED_LIBERATOR),
item_names.ZERG_EXCAVATING_CLAWS: "Increases movement speed of Spore and Spine Crawlers, especially off creep. Also increases root speed.",
item_names.ZERGLING_RAPTOR_STRAIN: "Allows Zerglings to jump up and down cliffs and leap onto enemies. Also increases Zergling attack damage by 2.",
item_names.ZERGLING_SWARMLING_STRAIN: "Zerglings will spawn instantly and with an extra Zergling per egg at no additional cost.",
item_names.ROACH_VILE_STRAIN: "Roach attacks will slow the movement and attack speed of enemies.",
Expand Down
1 change: 0 additions & 1 deletion worlds/sc2/item_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,6 @@ def get_all_group_names(cls) -> typing.Set[str]:
item_names.KERRIGAN_APOCALYPSE,
item_names.KERRIGAN_DROP_PODS,
item_names.KERRIGAN_SPAWN_LEVIATHAN,
item_names.FRIGHTFUL_FLESHWELDER,

item_names.REAVER_RESOURCE_EFFICIENCY,
item_names.SOA_TIME_STOP,
Expand Down
18 changes: 16 additions & 2 deletions worlds/sc2/item_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@
SCV_ADVANCED_CONSTRUCTION = "Advanced Construction (SCV)"
SCV_DUAL_FUSION_WELDERS = "Dual-Fusion Welders (SCV)"
SCV_HOSTILE_ENVIRONMENT_ADAPTATION = "Hostile Environment Adaptation (SCV)"
SCV_CONSTRUCTION_JUMP_JETS = "Construction Jump Jets (SCV)"
SIEGE_TANK_ADVANCED_SIEGE_TECH = "Advanced Siege Tech (Siege Tank)"
SIEGE_TANK_GRADUATING_RANGE = "Graduating Range (Siege Tank)"
SIEGE_TANK_INTERNAL_TECH_MODULE = "Internal Tech Module (Siege Tank)"
Expand Down Expand Up @@ -319,6 +320,7 @@
WARHOUND_REINFORCED_PLATING = "Reinforced Plating (Warhound)"
WIDOW_MINE_BLACK_MARKET_LAUNCHERS = "Black Market Launchers (Widow Mine)"
WIDOW_MINE_CONCEALMENT = "Concealment (Widow Mine)"
WIDOW_MINE_DEMOLITION_ARMAMENTS = "Demolition Armaments (Widow Mine)"
WIDOW_MINE_DRILLING_CLAWS = "Drilling Claws (Widow Mine)"
WIDOW_MINE_EXECUTIONER_MISSILES = "Executioner Missiles (Widow Mine)"
WIDOW_MINE_RESOURCE_EFFICIENCY = "Resource Efficiency (Widow Mine)"
Expand Down Expand Up @@ -444,6 +446,9 @@
GUARDIAN_PROLONGED_DISPERSION = "Prolonged Dispersion (Guardian)"
GUARDIAN_PRIMAL_ADAPTATION = "Primal Adaptation (Guardian)"
GUARDIAN_SORONAN_ACID = "Soronan Acid (Guardian)"
GUARDIAN_PROPELLANT_SACS = "Propellant Sacs (Guardian)"
GUARDIAN_EXPLOSIVE_SPORES = "Explosive Spores (Guardian)"
GUARDIAN_PRIMORDIAL_FURY = "Primordial Fury (Guardian)"
IMPALER_ADAPTIVE_TALONS = "Adaptive Talons (Impaler)"
IMPALER_SECRETION_GLANDS = "Secretion Glands (Impaler)"
IMPALER_HARDENED_TENTACLE_SPINES = "Hardened Tentacle Spines (Impaler)"
Expand Down Expand Up @@ -508,12 +513,21 @@
INFESTED_SIEGE_TANK_PROGRESSIVE_AUTOMATED_MITOSIS = "Progressive Automated Mitosis (Infested Siege Tank)"
INFESTED_SIEGE_TANK_ACIDIC_ENZYMES = "Acidic Enzymes (Infested Siege Tank)"
INFESTED_SIEGE_TANK_DEEP_TUNNEL = "Deep Tunnel (Infested Siege Tank)"
INFESTED_DIAMONDBACK_SATURATED_CULTURES = "Saturated Cultures (Infested Diamondback)"
INFESTED_SIEGE_TANK_SEISMIC_SONAR = "Seismic Sonar (Infested Siege Tank)"
INFESTED_SIEGE_TANK_BALANCED_ROOTS = "Balanced Roots (Infested Siege Tank)"
INFESTED_DIAMONDBACK_CAUSTIC_MUCUS = "Caustic Mucus (Infested Diamondback)"
INFESTED_DIAMONDBACK_VIOLENT_ENZYMES = "Violent Enzymes (Infested Diamondback)"
INFESTED_DIAMONDBACK_CONCENTRATED_SPEW = "Concentrated Spew (Infested Diamondback)"
INFESTED_DIAMONDBACK_PROGRESSIVE_FUNGAL_SNARE = "Progressive Fungal Snare (Infested Diamondback)"
INFESTED_BANSHEE_BRACED_EXOSKELETON = "Braced Exoskeleton (Infested Banshee)"
INFESTED_BANSHEE_RAPID_HIBERNATION = "Rapid Hibernation (Infested Banshee)"
INFESTED_BANSHEE_ADVANCED_TARGETING_OPTICS = "Advanced Targeting Optics (Infested Banshee)"
INFESTED_LIBERATOR_CLOUD_DISPERSAL = "Cloud Dispersal (Infested Liberator)"
INFESTED_LIBERATOR_VIRAL_CONTAMINATION = "Viral Contamination (Infested Liberator)"
FRIGHTFUL_FLESHWELDER_INFESTED_SIEGE_TANK = "Frightful Fleshwelder (Infested Siege Tank)"
FRIGHTFUL_FLESHWELDER_INFESTED_DIAMONDBACK = "Frightful Fleshwelder (Infested Diamondback)"
FRIGHTFUL_FLESHWELDER_INFESTED_BANSHEE = "Frightful Fleshwelder (Infested Banshee)"
FRIGHTFUL_FLESHWELDER_INFESTED_LIBERATOR = "Frightful Fleshwelder (Infested Liberator)"

# Zerg Strains
ZERGLING_RAPTOR_STRAIN = "Raptor Strain (Zergling)"
Expand Down Expand Up @@ -574,7 +588,7 @@
MALIGNANT_CREEP = "Malignant Creep (Zerg)"
VESPENE_EFFICIENCY = "Vespene Efficiency (Zerg)"
ZERG_CREEP_STOMACH = "Creep Stomach (Zerg)"
FRIGHTFUL_FLESHWELDER = "Frightful Fleshwelder (Zerg)"
ZERG_EXCAVATING_CLAWS = "Excavating Claws (Zerg)"

# Kerrigan Levels
KERRIGAN_LEVELS_1 = "1 Kerrigan Level"
Expand Down
38 changes: 35 additions & 3 deletions worlds/sc2/items.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class ZergItemType(ItemTypeEnum):
Mutation_3 = "Mutation", 11
Mutation_4 = "Mutation", 12
Progressive = "Progressive Upgrade", 13
Mutation_5 = "Mutation", 14


class ProtossItemType(ItemTypeEnum):
Expand Down Expand Up @@ -1050,6 +1051,11 @@ def get_full_item_list():
item_names.DOMINION_TROOPER_OPTIMIZED_LOGISTICS:
ItemData(761 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Armory_7, 15, SC2Race.TERRAN,
parent_item=item_names.DOMINION_TROOPER, classification=ItemClassification.filler),
item_names.SCV_CONSTRUCTION_JUMP_JETS:
ItemData(762 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Armory_7, 16, SC2Race.TERRAN),
item_names.WIDOW_MINE_DEMOLITION_ARMAMENTS:
ItemData(763 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Armory_7, 17, SC2Race.TERRAN,
parent_item=item_names.WIDOW_MINE, origin={"ext"}),

# Filler items to fill remaining spots
item_names.STARTING_MINERALS:
Expand Down Expand Up @@ -1576,9 +1582,9 @@ def get_full_item_list():
ItemData(360 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 17, SC2Race.ZERG, parent_item=item_names.INFESTED_SIEGE_TANK, origin={"ext"}),
item_names.INFESTED_SIEGE_TANK_DEEP_TUNNEL:
ItemData(361 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 18, SC2Race.ZERG, parent_item=item_names.INFESTED_SIEGE_TANK, origin={"ext"}),
item_names.INFESTED_DIAMONDBACK_SATURATED_CULTURES:
ItemData(362 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 19, SC2Race.ZERG, parent_item=item_names.INFESTED_DIAMONDBACK, origin={"ext"}),
item_names.INFESTED_DIAMONDBACK_CAUSTIC_MUCUS:
ItemData(362 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 19, SC2Race.ZERG, parent_item=item_names.INFESTED_DIAMONDBACK, origin={"ext"}),
item_names.INFESTED_DIAMONDBACK_VIOLENT_ENZYMES:
ItemData(363 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 20, SC2Race.ZERG, parent_item=item_names.INFESTED_DIAMONDBACK, origin={"ext"}),
item_names.INFESTED_BANSHEE_BRACED_EXOSKELETON:
ItemData(364 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 21, SC2Race.ZERG, parent_item=item_names.INFESTED_BANSHEE, origin={"ext"}),
Expand All @@ -1588,6 +1594,31 @@ def get_full_item_list():
ItemData(366 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 23, SC2Race.ZERG, parent_item=item_names.INFESTED_LIBERATOR, origin={"ext"}),
item_names.INFESTED_LIBERATOR_VIRAL_CONTAMINATION:
ItemData(367 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 24, SC2Race.ZERG, parent_item=item_names.INFESTED_LIBERATOR, origin={"ext"}),
item_names.GUARDIAN_PROPELLANT_SACS:
ItemData(368 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 25, SC2Race.ZERG, parent_item=item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT, origin={"ext"}),
item_names.GUARDIAN_EXPLOSIVE_SPORES:
ItemData(369 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 26, SC2Race.ZERG, parent_item=item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT, origin={"ext"}),
item_names.GUARDIAN_PRIMORDIAL_FURY:
ItemData(370 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 27, SC2Race.ZERG, parent_item=item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT, origin={"ext"}),
item_names.INFESTED_SIEGE_TANK_SEISMIC_SONAR:
ItemData(371 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 28, SC2Race.ZERG, parent_item=item_names.INFESTED_SIEGE_TANK, origin={"ext"}),
item_names.INFESTED_BANSHEE_ADVANCED_TARGETING_OPTICS:
ItemData(372 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_4, 29, SC2Race.ZERG, parent_item=item_names.INFESTED_BANSHEE, origin={"ext"}),
item_names.INFESTED_SIEGE_TANK_BALANCED_ROOTS:
ItemData(373 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 0, SC2Race.ZERG, parent_item=item_names.INFESTED_SIEGE_TANK, origin={"ext"}),
item_names.INFESTED_DIAMONDBACK_PROGRESSIVE_FUNGAL_SNARE:
ItemData(374 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Progressive, 2, SC2Race.ZERG,
parent_item=item_names.INFESTED_DIAMONDBACK, quantity=2, origin={"ext"}),
item_names.INFESTED_DIAMONDBACK_CONCENTRATED_SPEW:
ItemData(375 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 1, SC2Race.ZERG, parent_item=item_names.INFESTED_DIAMONDBACK, origin={"ext"}),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_SIEGE_TANK:
ItemData(376 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 2, SC2Race.ZERG, parent_item=item_names.INFESTED_SIEGE_TANK, origin={"ext"}),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_DIAMONDBACK:
ItemData(377 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 3, SC2Race.ZERG, parent_item=item_names.INFESTED_DIAMONDBACK, origin={"ext"}),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_BANSHEE:
ItemData(378 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 4, SC2Race.ZERG, parent_item=item_names.INFESTED_BANSHEE, origin={"ext"}),
item_names.FRIGHTFUL_FLESHWELDER_INFESTED_LIBERATOR:
ItemData(379 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Mutation_5, 5, SC2Race.ZERG, parent_item=item_names.INFESTED_LIBERATOR, origin={"ext"}),

item_names.KERRIGAN_KINETIC_BLAST: ItemData(400 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 0, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_HEROIC_FORTITUDE: ItemData(401 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 1, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
Expand Down Expand Up @@ -1642,7 +1673,7 @@ def get_full_item_list():
item_names.OVERLORD_GENERATE_CREEP: ItemData(701 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 7, SC2Race.ZERG, origin={"ext"}),
item_names.OVERLORD_ANTENNAE: ItemData(702 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 8, SC2Race.ZERG, origin={"ext"}, classification=ItemClassification.filler),
item_names.OVERLORD_PNEUMATIZED_CARAPACE: ItemData(703 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 9, SC2Race.ZERG, origin={"ext"}),
item_names.FRIGHTFUL_FLESHWELDER: ItemData(704 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 11, SC2Race.ZERG, origin={"ext"}),
item_names.ZERG_EXCAVATING_CLAWS: ItemData(704 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 11, SC2Race.ZERG, origin={"ext"}),

# Morphs
item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT: ItemData(800 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 6, SC2Race.ZERG, origin={"bw"}),
Expand Down Expand Up @@ -2154,6 +2185,7 @@ def get_item_table():
# General Terran upgrades without any dependencies
item_names.SCV_ADVANCED_CONSTRUCTION,
item_names.SCV_DUAL_FUSION_WELDERS,
item_names.SCV_CONSTRUCTION_JUMP_JETS,
item_names.PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM,
item_names.PROGRESSIVE_ORBITAL_COMMAND,
item_names.ULTRA_CAPACITORS,
Expand Down

0 comments on commit e519a85

Please sign in to comment.