Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Balance and bug fixes #326

Merged
merged 11 commits into from
Oct 18, 2024
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 @@ -190,6 +196,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 @@ -379,6 +386,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 @@ -658,6 +666,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 @@ -720,13 +731,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 @@ -647,7 +647,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 @@ -271,6 +271,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 @@ -318,6 +319,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 @@ -443,6 +445,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 @@ -507,12 +512,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 @@ -573,7 +587,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 @@ -1047,6 +1048,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 @@ -1573,9 +1579,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 @@ -1585,6 +1591,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 @@ -1639,7 +1670,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 @@ -2151,6 +2182,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
Loading