diff --git a/weapongenerator.lua b/weapongenerator.lua new file mode 100644 index 0000000..e0ae1cf --- /dev/null +++ b/weapongenerator.lua @@ -0,0 +1,210 @@ + +function WeaponGenerator.generateAutoCannon(rand, dps, tech, material, rarity) + local weapon = Weapon() + weapon:setProjectile() + + dps = dps * 0.75 + local fireDelay = rand:getFloat(1.5, 2.5)*0.5 + local reach = rand:getFloat(1100, 1500)*0.7 + local damage = dps * fireDelay + local speed = rand:getFloat(300, 400)*2 + local existingTime = (reach / speed)*1.2 + + weapon.fireDelay = fireDelay + weapon.reach = reach + weapon.appearanceSeed = rand:getInt() + weapon.seeker = 1 + weapon.appearance = WeaponAppearance.Cannon + weapon.name = "Smart-Cannon /* Weapon Name*/"%_t + weapon.prefix = "Smart-Cannon /* Weapon Prefix*/"%_t + weapon.icon = "data/textures/icons/autocannon.png" + weapon.sound = "cannon" + weapon.accuracy = 0.99 - rand:getFloat(0, 0.03) + + weapon.damage = damage + weapon.damageType = DamageType.Physical + weapon.impactParticles = ImpactParticles.Explosion + weapon.shieldDamageMultiplicator=1.1 + rarity.value * 0.1 + weapon.impactSound = 1 + weapon.impactExplosion = true + + local specType = rand:getInt(0, 1) + if specType > 0 then + weapon.prefix = "Ionized Smart-Cannon /* Weapon Prefix*/"%_t + weapon.shieldPenetration = 1 + else + weapon.prefix = "Smart-Cannon /* Weapon Prefix*/"%_t + end + + weapon.psize = rand:getFloat(0.2, 0.5) + weapon.pmaximumTime = existingTime + weapon.pvelocity = speed + weapon.pcolor = ColorHSV(rand:getFloat(10, 60), 0.7, 1) + + WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) + + -- these have to be assigned after the weapon was adjusted since the damage might be changed + weapon.recoil = weapon.damage * 20 * 0.75 + weapon.explosionRadius = math.sqrt(weapon.damage * 6) + + return weapon +end + +generatorFunction[WeaponType.AutoCannon] = WeaponGenerator.generateAutoCannon + + +function WeaponGenerator.generateHeavyCannon(rand, dps, tech, material, rarity) + local weapon = Weapon() + weapon:setProjectile() + + dps = dps * 1.85 + local fireDelay = rand:getFloat(1.5, 2.0)*1.7 + local reach = rand:getFloat(1100, 1500)*1.2 + local damage = dps * fireDelay + local speed = rand:getFloat(600, 1000)*1.4 + local existingTime = (reach / speed)*1.1 + + weapon.fireDelay = fireDelay + weapon.reach = reach + weapon.appearanceSeed = rand:getInt() + weapon.appearance = WeaponAppearance.Bolter + weapon.name = "Heavy Cannon /* Weapon Name*/"%_t + weapon.icon = "data/textures/icons/heavycannon.png" + weapon.sound = "cannon" + weapon.accuracy = 0.95 - rand:getFloat(0, 0.02) + + weapon.damage = damage + weapon.damageType = DamageType.Physical + weapon.impactParticles = ImpactParticles.Explosion + weapon.impactSound = 1 + weapon.impactExplosion = true + weapon.otherForce = dps*math.max(1, rarity.value)*89*5 + + + weapon.psize = rand:getFloat(0.2, 0.5) + weapon.pmaximumTime = existingTime + weapon.pvelocity = speed + weapon.pcolor = ColorHSV(rand:getFloat(10, 60), 0.7, 1) + + local Pen = rand:getInt(0, rarity.value) + if Pen > 0 then + weapon.blockPenetration = Pen + weapon.prefix = "Cumulative Heavy Cannon /* Weapon Prefix*/"%_t + else + weapon.prefix = "Heavy Cannon /* Weapon Prefix*/"%_t + end + + + WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) + + -- these have to be assigned after the weapon was adjusted since the damage might be changed + weapon.recoil = weapon.damage * 50 + weapon.explosionRadius = math.sqrt(weapon.damage * 7) + + return weapon +end + +generatorFunction[WeaponType.HeavyCannon] = WeaponGenerator.generateHeavyCannon + + +function WeaponGenerator.generateDiffuser(rand, dps, tech, material, rarity) + local weapon = Weapon() + weapon:setBeam() + + local fireDelay = rand:getFloat(1, 2.5)*0.5 + local reach = rand:getFloat(950, 1400) + local damage = dps * fireDelay + + weapon.fireDelay = fireDelay + weapon.appearanceSeed = rand:getInt() + weapon.reach = reach + weapon.continuousBeam = false + weapon.appearance = WeaponAppearance.Tesla + weapon.name = "Diffuser /* Weapon Name*/"%_t + weapon.prefix = "Diffuser /* Weapon Prefix*/"%_t + weapon.icon = "data/textures/icons/diffuser.png" + weapon.sound = "railgun" + weapon.accuracy = 0.99 - rand:getFloat(0, 0.02) + + weapon.damage = damage + weapon.damageType = DamageType.Energy + weapon.impactParticles = ImpactParticles.Energy + weapon.shieldDamageMultiplicator = 20 + rand:getFloat(0, 4) + rarity.value * 3 + weapon.stoneDamageMultiplicator = 0 + weapon.hullDamageMultiplicator = 0 + weapon.impactSound = 1 + + weapon.blength = weapon.reach + weapon.bshape = BeamShape.Lightning + weapon.bwidth = 0.5 + weapon.bauraWidth = 3 + weapon.banimationSpeed = 0 + weapon.banimationAcceleration = 0 + weapon.bshapeSize = 13 + + -- shades of blue + weapon.bouterColor = ColorHSV(rand:getFloat(180, 260), rand:getFloat(0.5, 1), rand:getFloat(0.1, 0.5)) + weapon.binnerColor = ColorHSV(rand:getFloat(180, 260), rand:getFloat(0.1, 0.5), 1) + + WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) + + weapon.recoil = weapon.damage * 5 + + return weapon +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.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.Harpoon] = WeaponGenerator.generateHarpoon