394 lines
14 KiB
Lua
394 lines
14 KiB
Lua
|
|
scales[WeaponType.SmartCannon] = {
|
|
{from = 0, to = 28, size = 1.0, usedSlots = 2},
|
|
{from = 29, to = 38, size = 1,5, usedSlots = 3},
|
|
{from = 39, to = 49, size = 2.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 = 6, 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 = 4.0, usedSlots = 6},
|
|
}
|
|
|
|
scales[WeaponType.HiveLauncher] = {
|
|
{from = 0, to = 32, size = 1.0, usedSlots = 2},
|
|
{from = 33, to = 40, size = 1.5, usedSlots = 3},
|
|
{from = 41, 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},
|
|
}
|
|
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},
|
|
}
|
|
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},
|
|
}
|
|
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},
|
|
}
|
|
else
|
|
possibleSpecialties[WeaponType.Hookgun] = {
|
|
Specialty.HighDamage,
|
|
Specialty.HighRange,
|
|
Specialty.FasterRechargeTime,
|
|
}
|
|
end
|
|
|
|
if GameVersion() >= Version(0, 31, 0) then
|
|
possibleSpecialties[WeaponType.HiveLauncher] = {
|
|
{specialty = Specialty.HighShootingTime, probability = 0.2},
|
|
{specialty = Specialty.HighDamage, probability = 0.15},
|
|
{specialty = Specialty.HighFireRate, probability = 0.15},
|
|
{specialty = Specialty.HighRange, probability = 0.25},
|
|
{specialty = Specialty.BurstFire, probability = 0.1},
|
|
}
|
|
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))
|
|
crew:add(requiredCrew, CrewMan(CrewProfessionType.Pilot))
|
|
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
|
|
|
|
local specType = rand:getInt(0, 2)
|
|
if specType == 1 then
|
|
weapon.shieldPenetration = 1
|
|
if rand:getInt(0, 1) then
|
|
weapon.pcolor = ColorHSV(rand:getFloat(180, 210), 0.8, 0.8)
|
|
else
|
|
weapon.pcolor = ColorHSV(rand:getFloat(260, 290), 0.8, 0.8)
|
|
end
|
|
elseif specType == 2 then
|
|
weapon.damageType = DamageType.Plasma
|
|
weapon.damage = weapon.damage * 0.9
|
|
weapon.pcolor = ColorHSV(rand:getFloat(90, 120), 0.7, 1)
|
|
end
|
|
|
|
-- 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 = "Smart-Cannon /* weapon name*/"%_T
|
|
|
|
local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical)
|
|
|
|
if specType == 1 then
|
|
outerAdjective = "Ionized "%_T
|
|
elseif specType == 2 then
|
|
outerAdjective = "Plasmed "%_T
|
|
end
|
|
result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial] */"%_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 * 3, 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
|
|
|
|
local Pen = rand:getInt(0, rarity.value)
|
|
if Pen > 0 then
|
|
weapon.blockPenetration = Pen
|
|
outerAdjective = "Cumulative "%_T
|
|
end
|
|
|
|
if result.size >= 4 then
|
|
weapon.psize = weapon.psize * 1.5
|
|
weapon.speed = weapon.speed * 2
|
|
weapon.reach = weapon.reach * 1.2
|
|
weapon.pcolor = ColorHSV(rand:getFloat(10, 45), 0.7, 0.7)
|
|
end
|
|
|
|
if result.size >= 5 then
|
|
weapon.psize = weapon.psize * 1.5
|
|
weapon.speed = weapon.speed * 2
|
|
weapon.reach = weapon.reach * 1.5
|
|
weapon.pcolor = ColorHSV(rand:getFloat(10, 45), 0.7, 0.9)
|
|
end
|
|
|
|
-- 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 dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical)
|
|
|
|
if result.size >= 4 then
|
|
name = "Mass Driver /* weapon name*/"%_T
|
|
end
|
|
|
|
if result.size >= 5 then
|
|
name = "Mass Warper /* weapon name*/"%_T
|
|
end
|
|
|
|
result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial] */"%_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 = "Diffuser /* 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] */"%_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
|
|
|
|
local spec = rand:getInt(0, 1)
|
|
|
|
if spec then
|
|
weapon.holdingForce = weapon.otherForce * 2
|
|
weapon.otherForce = 0
|
|
end
|
|
|
|
-- 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)
|
|
|
|
if spec then
|
|
outerAdjective = "Stabilizing"%_T
|
|
end
|
|
|
|
result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial] */"%_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
|
|
local positions = {}
|
|
if rand:getBool() then
|
|
table.insert(positions, vec3(0, 0.3, 0))
|
|
else
|
|
table.insert(positions, vec3(0.4, 0.3, 0))
|
|
table.insert(positions, vec3(-0.4, 0.3, 0))
|
|
end
|
|
|
|
-- attach
|
|
for _, position in pairs(positions) do
|
|
weapon.localPosition = position * result.size
|
|
result:addWeapon(weapon)
|
|
end
|
|
|
|
local shootingTime = 20 * 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.RocketLauncher, tech, 0.6, coaxialAllowed)
|
|
local specialties = TurretGenerator.addSpecialties(rand, result, WeaponType.RocketLauncher)
|
|
|
|
result.slotType = TurretSlotType.Armed
|
|
result:updateStaticStats()
|
|
|
|
local name = "Hive-Launcher /* weapon name*/"%_T
|
|
if weapon.shotsFired > 20 then
|
|
name = "Swarm-Launcher /* weapon name*/"%_T
|
|
end
|
|
|
|
local dmgAdjective, outerAdjective, barrel, multishot, coax, serial = makeTitleParts(rand, specialties, result, DamageType.Physical)
|
|
multishot = ""%_T
|
|
result.title = Format("%1%%2%%3%%4%%5%%6%%7% /* [outer-adjective][barrel][coax][dmg-adjective][multishot][name][serial] */"%_T, outerAdjective, barrel, coax, dmgAdjective, multishot, name, serial)
|
|
|
|
return result
|
|
end
|
|
|
|
generatorFunction[WeaponType.HiveLauncher] = TurretGenerator.generateHiveLauncherTurret
|