diff --git a/data/scripts/lib/weapongenerator.lua b/data/scripts/lib/weapongenerator.lua index a655c40..e0ae1cf 100644 --- a/data/scripts/lib/weapongenerator.lua +++ b/data/scripts/lib/weapongenerator.lua @@ -1,201 +1,210 @@ - -function WeaponGenerator.generateSmartCannon(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 = rand:test(1 / 2) - 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 - - 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.SmartCannon] = WeaponGenerator.generateSmartCannon - -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.generateHookgun(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 = "Hookgun /* Weapon Name*/"%_t - weapon.prefix = "Hookgun /* 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.Hookgun] = WeaponGenerator.generateHookgun + +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 diff --git a/weapongenerator.lua b/weapongenerator.lua deleted file mode 100644 index e0ae1cf..0000000 --- a/weapongenerator.lua +++ /dev/null @@ -1,210 +0,0 @@ - -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