From 9415f265c2a286f5b4f0719d7c9096ba07ea0abe Mon Sep 17 00:00:00 2001 From: bacon Date: Thu, 24 Aug 2023 23:28:03 +0300 Subject: [PATCH] Added Harpoon --- data/scripts/lib/galaxy.lua | 3 +- data/scripts/lib/inventoryitemprice.lua | 1 + data/scripts/lib/turretgenerator.lua | 54 ++++++++++++++++++++++++ data/scripts/lib/turretingredients.lua | 11 +++++ data/scripts/lib/weapongenerator.lua | 52 +++++++++++++++++++++++ data/scripts/lib/weapontype.lua | 3 +- data/textures/icons/harpoon.png | Bin 0 -> 19847 bytes 7 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 data/textures/icons/harpoon.png diff --git a/data/scripts/lib/galaxy.lua b/data/scripts/lib/galaxy.lua index 4f2a38c..00367dd 100644 --- a/data/scripts/lib/galaxy.lua +++ b/data/scripts/lib/galaxy.lua @@ -1,4 +1,5 @@ weaponProbabilities[WeaponType.AutoCannon] = {d = 0.65, p = 2.0} weaponProbabilities[WeaponType.HeavyCannon] = {d = 0.6, p = 1.0} -weaponProbabilities[WeaponType.Diffuser] = {d = 0.6, p = 1.0} \ No newline at end of file +weaponProbabilities[WeaponType.Diffuser] = {d = 0.6, p = 1.0} +weaponProbabilities[WeaponType.Harpoon] = {d = 0.6, p = 1.0} \ No newline at end of file diff --git a/data/scripts/lib/inventoryitemprice.lua b/data/scripts/lib/inventoryitemprice.lua index ad0af2c..fd1372b 100644 --- a/data/scripts/lib/inventoryitemprice.lua +++ b/data/scripts/lib/inventoryitemprice.lua @@ -2,3 +2,4 @@ valueWeights[WeaponType.AutoCannon ] = 2 valueWeights[WeaponType.HeavyCannon ] = 1.7 valueWeights[WeaponType.Diffuser ] = 2.1 +valueWeights[WeaponType.Harpoon ] = 2.1 diff --git a/data/scripts/lib/turretgenerator.lua b/data/scripts/lib/turretgenerator.lua index 420118a..4b45cba 100644 --- a/data/scripts/lib/turretgenerator.lua +++ b/data/scripts/lib/turretgenerator.lua @@ -22,6 +22,13 @@ scales[WeaponType.Diffuser] = { {from = 51, to = 52, size = 3.0, usedSlots = 6}, } +scales[WeaponType.Harpoon] = { + {from = 0, to = 46, size = 1.0, usedSlots = 2}, + {from = 47, to = 50, size = 2.0, usedSlots = 4}, + --dummy for cooaxial, add 1 to size and level + {from = 51, to = 52, size = 3.0, usedSlots = 6}, +} + if GameVersion() >= Version(0, 31, 0) then possibleSpecialties[WeaponType.AutoCannon] = { {specialty = Specialty.HighDamage, probability = 0.2}, @@ -74,6 +81,19 @@ else } end +if GameVersion() >= Version(0, 31, 0) then + possibleSpecialties[WeaponType.Harpoon] = { + {specialty = Specialty.HighDamage, probability = 0.3}, + {specialty = Specialty.HighRange, probability = 0.3}, + -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, + } +else + possibleSpecialties[WeaponType.Harpoon] = { + Specialty.HighDamage, + Specialty.HighRange, + Specialty.FasterRechargeTime, + } +end function TurretGenerator.generateAutoCannonTurret(rand, dps, tech, material, rarity) local result = TurretTemplate() @@ -174,3 +194,37 @@ function TurretGenerator.generateDiffuserTurret(rand, dps, tech, material, rarit end generatorFunction[WeaponType.Diffuser] = TurretGenerator.generateDiffuserTurret + + +function TurretGenerator.generateHarpoonTurret(rand, dps, tech, material, rarity) + local result = TurretTemplate() + + -- generate turret + local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) + local crew = Crew() + crew:add(requiredCrew, CrewMan(CrewProfessionType.Gunner)) + result.crew = crew + + -- generate weapons + local numWeapons = rand:getInt(1, 2) + + local weapon = WeaponGenerator.generateHarpoon(rand, dps, tech, material, rarity) + weapon.damage = weapon.damage / numWeapons + + -- attach weapons to turret + TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) + + local rechargeTime = 4 * rand:getFloat(0.8, 1.2) + local shootingTime = 2 * rand:getFloat(0.8, 1.2) + TurretGenerator.createBatteryChargeCooling(result, rechargeTime, shootingTime) + + + TurretGenerator.scale(rand, result, WeaponType.Harpoon, tech, 0.75) + TurretGenerator.addSpecialties(rand, result, WeaponType.Harpoon) + + result:updateStaticStats() + + return result +end + +generatorFunction[WeaponType.Harpoon] = TurretGenerator.generateHarpoonTurret diff --git a/data/scripts/lib/turretingredients.lua b/data/scripts/lib/turretingredients.lua index 84278d2..f48ab5b 100644 --- a/data/scripts/lib/turretingredients.lua +++ b/data/scripts/lib/turretingredients.lua @@ -23,6 +23,17 @@ TurretIngredients[WeaponType.HeavyCannon] = } TurretIngredients[WeaponType.Diffuser] = +{ + {name = "Plasma Cell", amount = 10, investable = 10, minimum = 10, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, + {name = "High Capacity Lens", amount = 5, investable = 6, minimum = 1, weaponStat = "reach", }, + {name = "Energy Tube", amount = 2, investable = 6, minimum = 1, weaponStat = "damage", }, + {name = "Steel", amount = 20, investable = 0, minimum = 20,}, + {name = "Copper", amount = 10, investable = 0, minimum = 10,}, + {name = "Silver", amount = 5, investable = 0, minimum = 5,}, + -- {name = "Targeting System", amount = 0, investable = 2, minimum = 0, turretStat = "automatic", investFactor = 1, changeType = StatChanges.Flat}, +} + +TurretIngredients[WeaponType.Harpoon] = { {name = "Plasma Cell", amount = 10, investable = 10, minimum = 10, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, {name = "High Capacity Lens", amount = 5, investable = 6, minimum = 1, weaponStat = "reach", }, diff --git a/data/scripts/lib/weapongenerator.lua b/data/scripts/lib/weapongenerator.lua index f522aed..455337f 100644 --- a/data/scripts/lib/weapongenerator.lua +++ b/data/scripts/lib/weapongenerator.lua @@ -146,3 +146,55 @@ function WeaponGenerator.generateDiffuser(rand, dps, tech, material, rarity) end generatorFunction[WeaponType.Diffuser] = WeaponGenerator.generateDiffuser + + + +function WeaponGenerator.generateHarpoon(rand, dps, tech, material, rarity) + local weapon = Weapon() + weapon:setBeam() + + local fireDelay = rand:getFloat(0.2, 0.5) + local reach = rand:getFloat(500, 900) + local damage = dps * fireDelay + + weapon.fireDelay = fireDelay + weapon.appearanceSeed = rand:getInt() + weapon.reach = reach + weapon.continuousBeam = true + weapon.appearance = WeaponAppearance.Cannon + weapon.name = "Harpoon /* Weapon Name*/"%_t + weapon.prefix = "Harpoon /* Weapon Prefix*/"%_t + weapon.icon = "data/textures/icons/harpoon.png" + weapon.sound = "cannon" + weapon.accuracy = 0.99 - rand:getFloat(0, 0.02) + + + weapon.otherForce = -400 * dps * rarity.value + + weapon.damage = damage + weapon.damageType = DamageType.Physical + weapon.impactParticles = ImpactParticles.Physical + weapon.shieldDamageMultiplicator = 0.75 + weapon.stoneDamageMultiplicator = 1.2 + weapon.hullDamageMultiplicator = 1 + weapon.impactSound = 1 + + weapon.blength = weapon.reach + weapon.bshape = BeamShape.Swirly + weapon.bwidth = 0.5 + weapon.bauraWidth = 3 + weapon.banimationSpeed = 0 + weapon.banimationAcceleration = 0 + weapon.bshapeSize = 13 + + -- shades of blue + weapon.bouterColor = ColorHSV(0, 0, rand:getFloat(0.35, 0.65)) + weapon.binnerColor = ColorHSV(1, 1, rand:getFloat(0.35, 0.65)) + + WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) + + + return weapon +end + +generatorFunction[WeaponType.Harpoon] = WeaponGenerator.generateHarpoon diff --git a/data/scripts/lib/weapontype.lua b/data/scripts/lib/weapontype.lua index 1620cb1..46c2532 100644 --- a/data/scripts/lib/weapontype.lua +++ b/data/scripts/lib/weapontype.lua @@ -1,4 +1,5 @@ WeaponTypes.addType("AutoCannon", "Auto Сannon /* Weapon Type */"%_t, armed) WeaponTypes.addType("HeavyCannon", "Heavy Cannon /* Weapon Type */"%_t, armed) -WeaponTypes.addType("Diffuser", "Diffuser /* Weapon Type */"%_t, armed) \ No newline at end of file +WeaponTypes.addType("Diffuser", "Diffuser /* Weapon Type */"%_t, armed) +WeaponTypes.addType("Harpoon", "Harpoon /* Weapon Type */"%_t, armed) \ No newline at end of file diff --git a/data/textures/icons/harpoon.png b/data/textures/icons/harpoon.png new file mode 100644 index 0000000000000000000000000000000000000000..a70d78ec426f81e43618b47ea694478eb68827b4 GIT binary patch literal 19847 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 H?-2TbespeV literal 0 HcmV?d00001