From 0880b82677739b6f566a7f38a8d416873ac91727 Mon Sep 17 00:00:00 2001 From: Slava Date: Mon, 28 Aug 2023 18:50:20 +0000 Subject: [PATCH] Update 6 files - /data/scripts/lib/galaxy.lua - /data/scripts/lib/inventoryitemprice.lua - /data/scripts/lib/turretgenerator.lua - /data/scripts/lib/turretingredients.lua - /data/scripts/lib/weapongenerator.lua - /data/scripts/lib/weapontype.lua --- data/scripts/lib/galaxy.lua | 11 +- data/scripts/lib/inventoryitemprice.lua | 11 +- data/scripts/lib/turretgenerator.lua | 607 +++++++++++++----------- data/scripts/lib/turretingredients.lua | 101 ++-- data/scripts/lib/weapongenerator.lua | 52 ++ data/scripts/lib/weapontype.lua | 11 +- 6 files changed, 467 insertions(+), 326 deletions(-) diff --git a/data/scripts/lib/galaxy.lua b/data/scripts/lib/galaxy.lua index 6375721..68fc733 100644 --- a/data/scripts/lib/galaxy.lua +++ b/data/scripts/lib/galaxy.lua @@ -1,5 +1,6 @@ - -weaponProbabilities[WeaponType.SmartCannon] = {d = 0.65, p = 2.0} -weaponProbabilities[WeaponType.HeavyCannon] = {d = 0.6, p = 1.0} -weaponProbabilities[WeaponType.Diffuser] = {d = 0.6, p = 1.0} -weaponProbabilities[WeaponType.Hookgun] = {d = 0.6, p = 1.0} \ No newline at end of file + +weaponProbabilities[WeaponType.SmartCannon] = {d = 0.65, p = 2.0} +weaponProbabilities[WeaponType.HeavyCannon] = {d = 0.6, p = 1.0} +weaponProbabilities[WeaponType.Diffuser] = {d = 0.6, p = 1.0} +weaponProbabilities[WeaponType.Hookgun] = {d = 0.6, p = 1.0} +weaponProbabilities[WeaponType.HiveLauncher] = {d = 0.6, p = 1.0} -- TODO Подсмотреть у ванильных ракетниц \ No newline at end of file diff --git a/data/scripts/lib/inventoryitemprice.lua b/data/scripts/lib/inventoryitemprice.lua index d578e56..bcfac24 100644 --- a/data/scripts/lib/inventoryitemprice.lua +++ b/data/scripts/lib/inventoryitemprice.lua @@ -1,5 +1,6 @@ - -valueWeights[WeaponType.SmartCannon ] = 2 -valueWeights[WeaponType.HeavyCannon ] = 2.5 -valueWeights[WeaponType.Diffuser ] = 1.7 -valueWeights[WeaponType.Hookgun ] = 1.5 + +valueWeights[WeaponType.SmartCannon ] = 2 +valueWeights[WeaponType.HeavyCannon ] = 2.5 +valueWeights[WeaponType.Diffuser ] = 1.7 +valueWeights[WeaponType.Hookgun ] = 1.5 +valueWeights[WeaponType.HiveLauncher] = 2 diff --git a/data/scripts/lib/turretgenerator.lua b/data/scripts/lib/turretgenerator.lua index 1464674..57e0487 100644 --- a/data/scripts/lib/turretgenerator.lua +++ b/data/scripts/lib/turretgenerator.lua @@ -1,266 +1,341 @@ - -scales[WeaponType.SmartCannon] = { - {from = 0, to = 28, size = 1.0, usedSlots = 2}, - {from = 29, to = 38, size = 2.0, usedSlots = 3}, - {from = 39, to = 49, size = 3.0, usedSlots = 4}, - --dummy for cooaxial, add 1 to size and level - {from = 50, to = 52, size = 4.0, usedSlots = 5}, -} - -scales[WeaponType.HeavyCannon] = { - {from = 0, to = 28, size = 3.0, usedSlots = 4}, - {from = 29, to = 38, size = 4.0, usedSlots = 5}, - {from = 39, to = 49, size = 5.0, usedSlots = 6}, - --dummy for cooaxial, add 1 to size and level - {from = 50, to = 52, size = 5, usedSlots = 6}, -} - -scales[WeaponType.Diffuser] = { - {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}, -} - -scales[WeaponType.Hookgun] = { - {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.SmartCannon] = { - {specialty = Specialty.HighDamage, probability = 0.2}, - {specialty = Specialty.HighFireRate, probability = 0.3}, - {specialty = Specialty.HighRange, probability = 0.7}, - -- {specialty = Specialty.HighHullDamage, probability = 0.5}, - -- {specialty = Specialty.LessCoolingTime, probability = 0.4}, - } -else - possibleSpecialties[WeaponType.SmartCannon] = { - Specialty.HighDamage, - Specialty.HighFireRate, - Specialty.HighRange, - Specialty.HighHullDamage, - Specialty.LessCoolingTime, - } -end - -if GameVersion() >= Version(0, 31, 0) then - possibleSpecialties[WeaponType.HeavyCannon] = { - {specialty = Specialty.HighDamage, probability = 0.2}, - {specialty = Specialty.HighRange, probability = 0.35}, - {specialty = Specialty.HighFireRate, probability = 0.3}, - -- {specialty = Specialty.HighHullDamage, probability = 0.2}, - -- {specialty = Specialty.HighShieldDamage, probability = 0.2}, - -- {specialty = Specialty.LessCoolingTime, probability = 0.2} - } -else - possibleSpecialties[WeaponType.HeavyCannon] = { - Specialty.HighDamage, - Specialty.HighFireRate, - Specialty.HighRange, - Specialty.HighHullDamage, - Specialty.HighShieldDamage, - Specialty.LessCoolingTime, - } -end - -if GameVersion() >= Version(0, 31, 0) then - possibleSpecialties[WeaponType.Diffuser] = { - {specialty = Specialty.HighDamage, probability = 0.3}, - {specialty = Specialty.HighRange, probability = 0.3}, - -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, - } -else - possibleSpecialties[WeaponType.Diffuser] = { - Specialty.HighDamage, - Specialty.HighRange, - Specialty.FasterRechargeTime, - } -end - -if GameVersion() >= Version(0, 31, 0) then - possibleSpecialties[WeaponType.Hookgun] = { - {specialty = Specialty.HighDamage, probability = 0.3}, - {specialty = Specialty.HighRange, probability = 0.3}, - -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, - } -else - possibleSpecialties[WeaponType.Hookgun] = { - Specialty.HighDamage, - Specialty.HighRange, - Specialty.FasterRechargeTime, - } -end - -function TurretGenerator.generateSmartCannonTurret(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, 4) - - local weapon = WeaponGenerator.generateSmartCannon(rand, dps, tech, material, rarity) - weapon.fireDelay = weapon.fireDelay * numWeapons - - -- attach weapons to turret - TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) - - local shootingTime = 25 * rand:getFloat(0.8, 1.2) - local coolingTime = 15 * rand:getFloat(0.8, 1.2) - TurretGenerator.createStandardCooling(result, coolingTime, shootingTime) - - TurretGenerator.scale(rand, result, WeaponType.SmartCannon, tech, 0.6) - local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.SmartCannon) - - result.slotType = TurretSlotType.Armed - result:updateStaticStats() - - local name = "SmartCannon /* weapon name*/"%_T - - local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) - - result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) - local specType = 1 - if specType > 0 then - weapon.prefix = "Ionized /* Weapon Prefix*/"%_t - weapon.shieldPenetration = 1 - end - - return result -end - -generatorFunction[WeaponType.SmartCannon] = TurretGenerator.generateSmartCannonTurret - - -function TurretGenerator.generateHeavyCannonTurret(rand, dps, tech, material, rarity) - local result = TurretTemplate() - - -- generate turret - local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) - local crew = Crew() - crew:add(requiredCrew*2, CrewMan(CrewProfessionType.Gunner)) - crew:add(requiredCrew, CrewMan(CrewProfessionType.Repair)) - result.crew = crew - - -- generate weapons - local numWeapons = rand:getInt(1, 4) - - local weapon = WeaponGenerator.generateHeavyCannon(rand, dps, tech, material, rarity) - weapon.fireDelay = weapon.fireDelay * numWeapons - - -- attach weapons to turret - TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) - - local shootingTime = 25 * rand:getFloat(0.8, 1.2) - local coolingTime = 20 * rand:getFloat(0.8, 1.2) - TurretGenerator.createStandardCooling(result, coolingTime, shootingTime) - - TurretGenerator.scale(rand, result, WeaponType.HeavyCannon, tech, 0.6) - local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.HeavyCannon) - - result.slotType = TurretSlotType.Armed - result:updateStaticStats() - - local name = "Heavy Cannon /* weapon name*/"%_T - - local Pen = rand:getInt(0, rarity.value) - if Pen > 0 then - weapon.blockPenetration = Pen - weapon.prefix = "Cumulative /* Weapon Prefix*/"%_t - end - - local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) - result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) - - return result -end - -generatorFunction[WeaponType.HeavyCannon] = TurretGenerator.generateHeavyCannonTurret - - -function TurretGenerator.generateDiffuserTurret(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.generateDiffuser(rand, dps, tech, material, rarity) - weapon.damage = weapon.damage / numWeapons - - -- attach weapons to turret - TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) - - local rechargeTime = 20 * rand:getFloat(0.8, 1.2) - local shootingTime = 15 * rand:getFloat(0.8, 1.2) - TurretGenerator.createBatteryChargeCooling(result, rechargeTime, shootingTime) - - - TurretGenerator.scale(rand, result, WeaponType.Diffuser, tech, 0.75) - local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.Diffuser) - - result.slotType = TurretSlotType.Armed - result:updateStaticStats() - - local name = "Diffusor /* weapon name*/"%_T - - local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Energy) - result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) - - return result -end - -generatorFunction[WeaponType.Diffuser] = TurretGenerator.generateDiffuserTurret - - -function TurretGenerator.generateHookgunTurret(rand, dps, tech, material, rarity) - local result = TurretTemplate() - - -- generate turret - local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) - local crew = Crew() - crew:add(requiredCrew*2, CrewMan(CrewProfessionType.Gunner)) - result.crew = crew - - -- generate weapons - local numWeapons = rand:getInt(1, 2) - - local weapon = WeaponGenerator.generateHookgun(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.Hookgun, tech, 0.75) - local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.Hookgun) - - result.slotType = TurretSlotType.Armed - result:updateStaticStats() - - local name = "Hookgun /* weapon name*/"%_T - - local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) - result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) - - return result -end - -generatorFunction[WeaponType.Hookgun] = TurretGenerator.generateHookgunTurret + +scales[WeaponType.SmartCannon] = { + {from = 0, to = 28, size = 1.0, usedSlots = 2}, + {from = 29, to = 38, size = 2.0, usedSlots = 3}, + {from = 39, to = 49, size = 3.0, usedSlots = 4}, + --dummy for cooaxial, add 1 to size and level + {from = 50, to = 52, size = 4.0, usedSlots = 5}, +} + +scales[WeaponType.HeavyCannon] = { + {from = 0, to = 28, size = 3.0, usedSlots = 4}, + {from = 29, to = 38, size = 4.0, usedSlots = 5}, + {from = 39, to = 49, size = 5.0, usedSlots = 6}, + --dummy for cooaxial, add 1 to size and level + {from = 50, to = 52, size = 5, usedSlots = 6}, +} + +scales[WeaponType.Diffuser] = { + {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}, +} + +scales[WeaponType.Hookgun] = { + {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}, +} + +scales[WeaponType.HiveLauncher] = { + {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.SmartCannon] = { + {specialty = Specialty.HighDamage, probability = 0.2}, + {specialty = Specialty.HighFireRate, probability = 0.3}, + {specialty = Specialty.HighRange, probability = 0.7}, + -- {specialty = Specialty.HighHullDamage, probability = 0.5}, + -- {specialty = Specialty.LessCoolingTime, probability = 0.4}, + } +else + possibleSpecialties[WeaponType.SmartCannon] = { + Specialty.HighDamage, + Specialty.HighFireRate, + Specialty.HighRange, + Specialty.HighHullDamage, + Specialty.LessCoolingTime, + } +end + +if GameVersion() >= Version(0, 31, 0) then + possibleSpecialties[WeaponType.HeavyCannon] = { + {specialty = Specialty.HighDamage, probability = 0.2}, + {specialty = Specialty.HighRange, probability = 0.35}, + {specialty = Specialty.HighFireRate, probability = 0.3}, + -- {specialty = Specialty.HighHullDamage, probability = 0.2}, + -- {specialty = Specialty.HighShieldDamage, probability = 0.2}, + -- {specialty = Specialty.LessCoolingTime, probability = 0.2} + } +else + possibleSpecialties[WeaponType.HeavyCannon] = { + Specialty.HighDamage, + Specialty.HighFireRate, + Specialty.HighRange, + Specialty.HighHullDamage, + Specialty.HighShieldDamage, + Specialty.LessCoolingTime, + } +end + +if GameVersion() >= Version(0, 31, 0) then + possibleSpecialties[WeaponType.Diffuser] = { + {specialty = Specialty.HighDamage, probability = 0.3}, + {specialty = Specialty.HighRange, probability = 0.3}, + -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, + } +else + possibleSpecialties[WeaponType.Diffuser] = { + Specialty.HighDamage, + Specialty.HighRange, + Specialty.FasterRechargeTime, + } +end + +if GameVersion() >= Version(0, 31, 0) then + possibleSpecialties[WeaponType.Hookgun] = { + {specialty = Specialty.HighDamage, probability = 0.3}, + {specialty = Specialty.HighRange, probability = 0.3}, + -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, + } +else + possibleSpecialties[WeaponType.Hookgun] = { + Specialty.HighDamage, + Specialty.HighRange, + Specialty.FasterRechargeTime, + } +end + +if GameVersion() >= Version(0, 31, 0) then + possibleSpecialties[WeaponType.HiveLauncher] = { + {specialty = Specialty.HighDamage, probability = 0.3}, + {specialty = Specialty.HighRange, probability = 0.3}, + -- {specialty = Specialty.FasterRechargeTime, probability = 0.6}, + } +else + possibleSpecialties[WeaponType.HiveLauncher] = { + Specialty.HighDamage, + Specialty.HighRange, + Specialty.FasterRechargeTime, + } +end + +function TurretGenerator.generateSmartCannonTurret(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, 4) + + local weapon = WeaponGenerator.generateSmartCannon(rand, dps, tech, material, rarity) + weapon.fireDelay = weapon.fireDelay * numWeapons + + -- attach weapons to turret + TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) + + local shootingTime = 25 * rand:getFloat(0.8, 1.2) + local coolingTime = 15 * rand:getFloat(0.8, 1.2) + TurretGenerator.createStandardCooling(result, coolingTime, shootingTime) + + TurretGenerator.scale(rand, result, WeaponType.SmartCannon, tech, 0.6) + local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.SmartCannon) + + result.slotType = TurretSlotType.Armed + result:updateStaticStats() + + local name = "SmartCannon /* weapon name*/"%_T + + local specType = 1 + if specType > 0 then + name = "Ionized SmartCannon/* weapon name*/"%_T + weapon.shieldPenetration = 1 + end + + local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) + + result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) + + return result +end + +generatorFunction[WeaponType.SmartCannon] = TurretGenerator.generateSmartCannonTurret + + +function TurretGenerator.generateHeavyCannonTurret(rand, dps, tech, material, rarity) + local result = TurretTemplate() + + -- generate turret + local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) + local crew = Crew() + crew:add(requiredCrew*2, CrewMan(CrewProfessionType.Gunner)) + crew:add(requiredCrew, CrewMan(CrewProfessionType.Repair)) + result.crew = crew + + -- generate weapons + local numWeapons = rand:getInt(1, 4) + + local weapon = WeaponGenerator.generateHeavyCannon(rand, dps, tech, material, rarity) + weapon.fireDelay = weapon.fireDelay * numWeapons + + -- attach weapons to turret + TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) + + local shootingTime = 25 * rand:getFloat(0.8, 1.2) + local coolingTime = 20 * rand:getFloat(0.8, 1.2) + TurretGenerator.createStandardCooling(result, coolingTime, shootingTime) + + TurretGenerator.scale(rand, result, WeaponType.HeavyCannon, tech, 0.6) + local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.HeavyCannon) + + result.slotType = TurretSlotType.Armed + result:updateStaticStats() + + local name = "Heavy Cannon /* weapon name*/"%_T + + local Pen = rand:getInt(0, rarity.value) + if Pen > 0 then + weapon.blockPenetration = Pen + name = "Cumulative Heavy Cannon /* weapon name*/"%_T + end + + local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) + result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) + + return result +end + +generatorFunction[WeaponType.HeavyCannon] = TurretGenerator.generateHeavyCannonTurret + + +function TurretGenerator.generateDiffuserTurret(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.generateDiffuser(rand, dps, tech, material, rarity) + weapon.damage = weapon.damage / numWeapons + + -- attach weapons to turret + TurretGenerator.attachWeapons(rand, result, weapon, numWeapons) + + local rechargeTime = 20 * rand:getFloat(0.8, 1.2) + local shootingTime = 15 * rand:getFloat(0.8, 1.2) + TurretGenerator.createBatteryChargeCooling(result, rechargeTime, shootingTime) + + + TurretGenerator.scale(rand, result, WeaponType.Diffuser, tech, 0.75) + local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.Diffuser) + + result.slotType = TurretSlotType.Armed + result:updateStaticStats() + + local name = "Diffusor /* weapon name*/"%_T + + local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Energy) + result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) + + return result +end + +generatorFunction[WeaponType.Diffuser] = TurretGenerator.generateDiffuserTurret + + +function TurretGenerator.generateHookgunTurret(rand, dps, tech, material, rarity) + local result = TurretTemplate() + + -- generate turret + local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) + local crew = Crew() + crew:add(requiredCrew*2, CrewMan(CrewProfessionType.Gunner)) + result.crew = crew + + -- generate weapons + local numWeapons = rand:getInt(1, 2) + + local weapon = WeaponGenerator.generateHookgun(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.Hookgun, tech, 0.75) + local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.Hookgun) + + result.slotType = TurretSlotType.Armed + result:updateStaticStats() + + local name = "Hookgun /* weapon name*/"%_T + + local specType = 0 + if specType >0 then + + else + + end + + local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) + result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) + + return result +end + +generatorFunction[WeaponType.Hookgun] = TurretGenerator.generateHookgunTurret + +function TurretGenerator.generateHiveLauncherTurret(rand, dps, tech, material, rarity) + local result = TurretTemplate() + + -- generate turret + local requiredCrew = TurretGenerator.dpsToRequiredCrew(dps) + local crew = Crew() + crew:add(requiredCrew*2, CrewMan(CrewProfessionType.Gunner)) + result.crew = crew + + -- generate weapons + local numWeapons = rand:getInt(1, 2) + + local weapon = WeaponGenerator.generateHiveLauncher(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.HiveLauncher, tech, 0.75) + local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.HiveLauncher) + + result.slotType = TurretSlotType.Armed + result:updateStaticStats() + + local name = "HiveLauncher /* weapon name*/"%_T + + local specType = 0 + if specType >0 then + + else + + end + + local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical) + result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial], e.g. Enduring Dual Coaxial Plasmatic Tri-R-Mining Laser T-F */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial) + + return result +end + +generatorFunction[WeaponType.HiveLauncher] = TurretGenerator.generateHiveLauncherTurret diff --git a/data/scripts/lib/turretingredients.lua b/data/scripts/lib/turretingredients.lua index a72d8ce..40c91fa 100644 --- a/data/scripts/lib/turretingredients.lua +++ b/data/scripts/lib/turretingredients.lua @@ -1,45 +1,56 @@ - -TurretIngredients[WeaponType.SmartCannon] = -{ - {name = "Servo", amount = 15, investable = 10, minimum = 5, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, - {name = "Warhead", amount = 5, investable = 6, minimum = 1, weaponStat = "damage", }, - {name = "High Pressure Tube", amount = 2, investable = 6, minimum = 1, weaponStat = "reach", }, - {name = "Ammunition M", amount = 2, investable = 4, minimum = 1, weaponStat = "damage", investFactor = 0.5,}, - {name = "Targeting Card", amount = 3, investable = 3, minimum = 0, weaponStat = "seeker", investFactor = 1, changeType = StatChanges.Flat}, - {name = "Steel", amount = 8, investable = 10, minimum = 3,}, - {name = "Steel Tube", amount = 5, investable = 10, minimum = 3,}, - -- {name = "Targeting System", amount = 0, investable = 2, minimum = 0, turretStat = "automatic", investFactor = 1, changeType = StatChanges.Flat}, -} - -TurretIngredients[WeaponType.HeavyCannon] = -{ - {name = "Servo", amount = 8, investable = 8, minimum = 4, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, - {name = "Warhead", amount = 5, investable = 6, minimum = 1, weaponStat = "damage", }, - {name = "High Pressure Tube", amount = 2, investable = 6, minimum = 1, weaponStat = "reach", }, - {name = "Ammunition", amount = 5, investable = 10, minimum = 3, weaponStat = "damage", investFactor = 0.2,}, - {name = "Steel", amount = 20, investable = 10, minimum = 20,}, - {name = "Metal Plate", amount = 8, investable = 10, minimum = 10,}, - -- {name = "Targeting System", amount = 0, investable = 2, minimum = 0, turretStat = "automatic", investFactor = 1, changeType = StatChanges.Flat}, -} - -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.Hookgun] = -{ - {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}, -} \ No newline at end of file + +TurretIngredients[WeaponType.SmartCannon] = +{ + {name = "Servo", amount = 15, investable = 10, minimum = 5, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, + {name = "Warhead", amount = 5, investable = 6, minimum = 1, weaponStat = "damage", }, + {name = "High Pressure Tube", amount = 2, investable = 6, minimum = 1, weaponStat = "reach", }, + {name = "Ammunition M", amount = 2, investable = 4, minimum = 1, weaponStat = "damage", investFactor = 0.5,}, + {name = "Targeting Card", amount = 3, investable = 3, minimum = 0, weaponStat = "seeker", investFactor = 1, changeType = StatChanges.Flat}, + {name = "Steel", amount = 8, investable = 10, minimum = 3,}, + {name = "Steel Tube", amount = 5, investable = 10, minimum = 3,}, + -- {name = "Targeting System", amount = 0, investable = 2, minimum = 0, turretStat = "automatic", investFactor = 1, changeType = StatChanges.Flat}, +} + +TurretIngredients[WeaponType.HeavyCannon] = +{ + {name = "Servo", amount = 8, investable = 8, minimum = 4, weaponStat = "fireRate", investFactor = 1.0, changeType = StatChanges.Percentage}, + {name = "Warhead", amount = 5, investable = 6, minimum = 1, weaponStat = "damage", }, + {name = "High Pressure Tube", amount = 2, investable = 6, minimum = 1, weaponStat = "reach", }, + {name = "Ammunition", amount = 5, investable = 10, minimum = 3, weaponStat = "damage", investFactor = 0.2,}, + {name = "Steel", amount = 20, investable = 10, minimum = 20,}, + {name = "Metal Plate", amount = 8, investable = 10, minimum = 10,}, + -- {name = "Targeting System", amount = 0, investable = 2, minimum = 0, turretStat = "automatic", investFactor = 1, changeType = StatChanges.Flat}, +} + +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.Hookgun] = +{ + {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.HiveLauncher] = +{ + {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}, +} diff --git a/data/scripts/lib/weapongenerator.lua b/data/scripts/lib/weapongenerator.lua index cf1b479..5a9aecb 100644 --- a/data/scripts/lib/weapongenerator.lua +++ b/data/scripts/lib/weapongenerator.lua @@ -192,3 +192,55 @@ function WeaponGenerator.generateHookgun(rand, dps, tech, material, rarity) end generatorFunction[WeaponType.Hookgun] = WeaponGenerator.generateHookgun + +function WeaponGenerator.generateHiveLauncher(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 = "HiveLauncher /* Weapon Name*/"%_t + weapon.prefix = "HiveLauncher /* Weapon Prefix*/"%_t + weapon.icon = "data/textures/icons/hivelauncher.png" + weapon.sound = "cannon" + weapon.accuracy = 0.99 - rand:getFloat(0, 0.02) + + weapon.blockPenetration = rand:getInt(0, rarity.value) + 2 + + + weapon.otherForce = -500 * 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.HiveLauncher] = WeaponGenerator.generateHiveLauncher diff --git a/data/scripts/lib/weapontype.lua b/data/scripts/lib/weapontype.lua index 34c892c..018d79a 100644 --- a/data/scripts/lib/weapontype.lua +++ b/data/scripts/lib/weapontype.lua @@ -1,5 +1,6 @@ - -WeaponTypes.addType("SmartCannon", "Smart Сannon /* Weapon Type */"%_t, armed) -WeaponTypes.addType("HeavyCannon", "Heavy Cannon /* Weapon Type */"%_t, armed) -WeaponTypes.addType("Diffuser", "Diffuser /* Weapon Type */"%_t, armed) -WeaponTypes.addType("Hookgun", "Hookgun /* Weapon Type */"%_t, armed) \ No newline at end of file + +WeaponTypes.addType("SmartCannon", "Smart Сannon /* Weapon Type */"%_t, armed) +WeaponTypes.addType("HeavyCannon", "Heavy Cannon /* Weapon Type */"%_t, armed) +WeaponTypes.addType("Diffuser", "Diffuser /* Weapon Type */"%_t, armed) +WeaponTypes.addType("Hookgun", "Hookgun /* Weapon Type */"%_t, armed) +WeaponTypes.addType("HiveLauncher", "HiveLauncher /* Weapon Type */"%_t, armed) \ No newline at end of file