function WeaponGenerator.generateSmartCannon(rand, dps, tech, material, rarity) local weapon = Weapon() weapon:setProjectile() dps = dps * 0.9 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)*4 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/smartcannon.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(20, 45), 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.5 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(1.2, 1.5) weapon.pmaximumTime = existingTime weapon.pvelocity = speed weapon.pcolor = ColorHSV(rand:getFloat(10, 45), 0.7, 0.4) 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/hookgun.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 weapon.bouterColor = ColorHSV(rand:getInt(255, 260), 0,75, rand:getFloat(0.2, 0.25)) weapon.binnerColor = ColorHSV(rand:getInt(255, 260), 0,75, rand:getFloat(0.2, 0.25)) -- TODO WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) return weapon end generatorFunction[WeaponType.Hookgun] = WeaponGenerator.generateHookgun function WeaponGenerator.generateHiveLauncher(rand, dps, tech, material, rarity) local weapon = Weapon() weapon:setProjectile() local fireDelay = rand:getFloat(2.2, 3) local reach = rand:getFloat(1300, 1800) local damage = dps * fireDelay local speed = rand:getFloat(200, 250) local existingTime = reach / speed weapon.fireDelay = fireDelay weapon.reach = reach weapon.appearanceSeed = rand:getInt() weapon.seeker = true weapon.appearance = WeaponAppearance.RocketLauncher weapon.name = "Hive-Launcher /* Weapon Name*/"%_t weapon.prefix = "Hive-Launcher /* Weapon Prefix*/"%_t weapon.icon = "data/textures/icons/hivelauncher.png" weapon.sound = "cannon" weapon.accuracy = 0.5 - rand:getFloat(0, 0.02) weapon.damage = damage weapon.damageType = DamageType.Physical weapon.impactParticles = ImpactParticles.Explosion weapon.impactSound = 1 weapon.impactExplosion = true weapon.psize = rand:getFloat(0.2, 0.4) weapon.pmaximumTime = existingTime weapon.pvelocity = speed weapon.pcolor = ColorHSV(rand:getFloat(20, 40), 0.8, rand:getFloat(0.25, 0.75)) weapon.pshape = ProjectileShape.Rocket if rand:test(1) then local shots = {6, 10, 14, 18, 22, 26, 30} weapon.shotsFired = shots[rand:getInt(1, #shots)] weapon.damage = (weapon.damage * 1.5) / weapon.shotsFired end WeaponGenerator.adaptWeapon(rand, weapon, tech, material, rarity) weapon.recoil = weapon.damage * 2 weapon.explosionRadius = math.sqrt(weapon.damage * 5) return weapon end generatorFunction[WeaponType.HiveLauncher] = WeaponGenerator.generateHiveLauncher