diff --git a/core/assets/contributors b/core/assets/contributors index e66b9c2ce4..abba64c04b 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -107,6 +107,8 @@ jalastram (freesound.org) newlocknew (freesound.org) dsmolenaers (freesound.org) Headphaze (freesound.org) +Michel Baradari (opengameart.org) +Michael Klier (opengameart.org) Neoqueto (Darktech LDR Font) Nikolass VolasYouKnow diff --git a/core/assets/sounds/cannon.ogg b/core/assets/sounds/cannon.ogg new file mode 100644 index 0000000000..c8ee4264ff Binary files /dev/null and b/core/assets/sounds/cannon.ogg differ diff --git a/core/assets/sounds/glow.ogg b/core/assets/sounds/glow.ogg new file mode 100644 index 0000000000..1d4764ead8 Binary files /dev/null and b/core/assets/sounds/glow.ogg differ diff --git a/core/assets/sounds/laserbeam.ogg b/core/assets/sounds/laserbeam.ogg new file mode 100644 index 0000000000..30cfe4f9a4 Binary files /dev/null and b/core/assets/sounds/laserbeam.ogg differ diff --git a/core/assets/sounds/malignShoot.ogg b/core/assets/sounds/malignShoot.ogg new file mode 100644 index 0000000000..1debfea2ea Binary files /dev/null and b/core/assets/sounds/malignShoot.ogg differ diff --git a/core/assets/sounds/missileLaunch.ogg b/core/assets/sounds/missileLaunch.ogg new file mode 100644 index 0000000000..f8a0765989 Binary files /dev/null and b/core/assets/sounds/missileLaunch.ogg differ diff --git a/core/assets/sounds/missileTrail.ogg b/core/assets/sounds/missileTrail.ogg new file mode 100644 index 0000000000..68ad990341 Binary files /dev/null and b/core/assets/sounds/missileTrail.ogg differ diff --git a/core/assets/sounds/shootAlt.ogg b/core/assets/sounds/shootAlt.ogg new file mode 100644 index 0000000000..8afdde63da Binary files /dev/null and b/core/assets/sounds/shootAlt.ogg differ diff --git a/core/assets/sounds/shootAltLong.ogg b/core/assets/sounds/shootAltLong.ogg new file mode 100644 index 0000000000..f0936a6683 Binary files /dev/null and b/core/assets/sounds/shootAltLong.ogg differ diff --git a/core/assets/sounds/shootSmite.ogg b/core/assets/sounds/shootSmite.ogg new file mode 100644 index 0000000000..6a24bb748c Binary files /dev/null and b/core/assets/sounds/shootSmite.ogg differ diff --git a/core/assets/sounds/spellLoop.ogg b/core/assets/sounds/spellLoop.ogg new file mode 100644 index 0000000000..b148ef3888 Binary files /dev/null and b/core/assets/sounds/spellLoop.ogg differ diff --git a/core/assets/sounds/torch.ogg b/core/assets/sounds/torch.ogg new file mode 100644 index 0000000000..cd59e9f7b8 Binary files /dev/null and b/core/assets/sounds/torch.ogg differ diff --git a/core/src/mindustry/audio/SoundLoop.java b/core/src/mindustry/audio/SoundLoop.java index d10eb02214..5b1baff79c 100644 --- a/core/src/mindustry/audio/SoundLoop.java +++ b/core/src/mindustry/audio/SoundLoop.java @@ -19,11 +19,15 @@ public class SoundLoop{ } public void update(float x, float y, boolean play){ + update(x, y, play, 1f); + } + + public void update(float x, float y, boolean play, float volumeScl){ if(baseVolume <= 0) return; if(id < 0){ if(play){ - id = sound.loop(sound.calcVolume(x, y) * volume * baseVolume, 1f, sound.calcPan(x, y)); + id = sound.loop(sound.calcVolume(x, y) * volume * baseVolume * volumeScl, 1f, sound.calcPan(x, y)); } }else{ //fade the sound in or out @@ -38,7 +42,7 @@ public class SoundLoop{ } } - Core.audio.set(id, sound.calcPan(x, y), sound.calcVolume(x, y) * volume * baseVolume); + Core.audio.set(id, sound.calcPan(x, y), sound.calcVolume(x, y) * volume * baseVolume * volumeScl); } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index ed897ec81c..0735032072 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3892,6 +3892,7 @@ public class Blocks{ ); coolantMultiplier = 6f; + shootSound = Sounds.shootAlt; shake = 1f; ammoPerShot = 2; @@ -3944,6 +3945,8 @@ public class Blocks{ maxAmmo = 30; consumeAmmoOnce = true; + shootSound = Sounds.shootAltLong; + drawer = new DrawTurret("reinforced-"){{ parts.add(new RegionPart("-front"){{ progress = PartProgress.warmup; @@ -4012,6 +4015,10 @@ public class Blocks{ float r = range = 130f; + loopSound = Sounds.torch; + shootSound = Sounds.none; + loopSoundVolume = 1f; + //TODO balance, set up, where is liquid/sec displayed? status effects maybe? ammo( Liquids.ozone, new ContinuousFlameBulletType(){{ @@ -4247,6 +4254,9 @@ public class Blocks{ waveRad = 40f; }}; + //TODO shoot sound + shootSound = Sounds.cannon; + fragBullet = intervalBullet = new BasicBulletType(3f, 30){{ width = 9f; hitSize = 5f; @@ -4368,6 +4378,10 @@ public class Blocks{ }}); }}; + shootSound = Sounds.none; + loopSoundVolume = 1f; + loopSound = Sounds.laserbeam; + shootWarmupSpeed = 0.08f; shootCone = 360f; @@ -4410,6 +4424,8 @@ public class Blocks{ missileAccelTime = 50f; lowAltitude = true; //targetAir = false; + loopSound = Sounds.missileTrail; + loopSoundVolume = 0.6f; fogRadius = 6f; @@ -4517,6 +4533,7 @@ public class Blocks{ recoil = 0.5f; coolantMultiplier = 6f; + shootSound = Sounds.missileLaunch; minWarmup = 0.94f; shootWarmupSpeed = 0.03f; @@ -4614,6 +4631,7 @@ public class Blocks{ mag = 3f; }}); + shootSound = Sounds.shootSmite; minWarmup = 0.99f; coolantMultiplier = 6f; @@ -4803,6 +4821,9 @@ public class Blocks{ coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f)); limitRange(); + + loopSound = Sounds.glow; + loopSoundVolume = 0.8f; }}; malign = new PowerTurret("malign"){{ @@ -4816,6 +4837,10 @@ public class Blocks{ var circleColor = haloColor; float circleY = 25f, circleRad = 11f, circleRotSpeed = 3.5f, circleStroke = 1.6f; + shootSound = Sounds.malignShoot; + loopSound = Sounds.spellLoop; + loopSoundVolume = 1.3f; + shootType = new FlakBulletType(8f, 80f){{ sprite = "missile-large"; diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 59b6623585..9fc259d4d7 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1098,6 +1098,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, return false; } + /** @return volume cale of active sound. */ + public float activeSoundVolume(){ + return 1f; + } + /** @return whether this block should play its idle sound.*/ public boolean shouldAmbientSound(){ return shouldConsume(); @@ -1954,7 +1959,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, //TODO separate system for sound? AudioSource, etc if(!headless){ if(sound != null){ - sound.update(x, y, shouldActiveSound()); + sound.update(x, y, shouldActiveSound(), activeSoundVolume()); } if(block.ambientSound != Sounds.none && shouldAmbientSound()){ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 43fa80e2c7..4011e88b1f 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -437,6 +437,10 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I healTime -= Time.delta / 20f; wasHealed = false; + if(!headless && type.loopSound != Sounds.none){ + control.sound.loop(type.loopSound, this, type.loopSoundVolume); + } + //check if environment is unsupported if(!type.supportsEnv(state.rules.env) && !dead){ Call.unitEnvDeath(self()); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index a9fbf5d68a..3ffa005310 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -246,6 +246,10 @@ public class UnitType extends UnlockableContent{ public Color lightColor = Pal.powerLight; /** sound played when this unit explodes (*not* when it is shot down) */ public Sound deathSound = Sounds.bang; + /** sound played on loop when this unit is around. */ + public Sound loopSound = Sounds.none; + /** volume of loop sound */ + public float loopSoundVolume = 0.5f; /** effect that this unit emits when falling */ public Effect fallEffect = Fx.fallSmoke; /** effect created at engine when unit falls. */ diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java index c68c45121e..61d6770bb2 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java @@ -151,6 +151,11 @@ public class ContinuousTurret extends Turret{ return bullets.any(); } + @Override + public float activeSoundVolume(){ + return 1f; + } + @Override public byte version(){ return 3; diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 49d0766ce5..95addae14a 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -581,6 +581,16 @@ public class Turret extends ReloadTurret{ } + @Override + public float activeSoundVolume(){ + return shootWarmup; + } + + @Override + public boolean shouldActiveSound(){ + return shootWarmup > 0.01f && loopSound != Sounds.none; + } + @Override public void write(Writes write){ super.write(write);