diff --git a/core/assets/sounds/plasmaboom.ogg b/core/assets/sounds/plasmaboom.ogg new file mode 100644 index 0000000000..fab2f3471d Binary files /dev/null and b/core/assets/sounds/plasmaboom.ogg differ diff --git a/core/assets/sounds/plasmadrop.ogg b/core/assets/sounds/plasmadrop.ogg new file mode 100644 index 0000000000..57bd0b8e27 Binary files /dev/null and b/core/assets/sounds/plasmadrop.ogg differ diff --git a/core/assets/sounds/sap.ogg b/core/assets/sounds/sap.ogg index d84c282d02..9e73a8d516 100644 Binary files a/core/assets/sounds/sap.ogg and b/core/assets/sounds/sap.ogg differ diff --git a/core/src/mindustry/audio/LoopControl.java b/core/src/mindustry/audio/LoopControl.java index 2419406176..a01aad5e85 100644 --- a/core/src/mindustry/audio/LoopControl.java +++ b/core/src/mindustry/audio/LoopControl.java @@ -10,6 +10,12 @@ import mindustry.*; public class LoopControl{ private ObjectMap sounds = new ObjectMap<>(); + public void play(Sound sound, float volume){ + if(Vars.headless) return; + + play(sound, Core.camera.position, volume); + } + public void play(Sound sound, Position pos, float volume){ if(Vars.headless) return; diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 2c86834608..30ed08a97f 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -728,7 +728,7 @@ public class Blocks implements ContentList{ hasItems = hasPower = true; drawer = new DrawRotator(); ambientSound = Sounds.grinding; - ambientSoundVolume = 0.02f; + ambientSoundVolume = 0.025f; consumes.item(Items.scrap, 1); consumes.power(0.50f); @@ -1229,7 +1229,7 @@ public class Blocks implements ContentList{ thoriumReactor = new NuclearReactor("thorium-reactor"){{ requirements(Category.power, with(Items.lead, 300, Items.silicon, 200, Items.graphite, 150, Items.thorium, 150, Items.metaglass, 50)); ambientSound = Sounds.hum; - ambientSoundVolume = 0.2f; + ambientSoundVolume = 0.24f; size = 3; health = 700; itemDuration = 360f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 37d59bf84b..db52be3b6b 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1309,6 +1309,9 @@ public class UnitTypes implements ContentList{ reload = 55f; minShootVelocity = 0.01f; + soundPitchMin = 1f; + shootSound = Sounds.plasmadrop; + bullet = new BasicBulletType(){{ sprite = "large-bomb"; width = height = 120/4f; @@ -1320,9 +1323,10 @@ public class UnitTypes implements ContentList{ frontColor = Color.white; mixColorTo = Color.white; + hitSound = Sounds.plasmaboom; + shootCone = 180f; ejectEffect = Fx.none; - shootSound = Sounds.none; despawnShake = 4f; collidesAir = false; diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 055b6c71b5..cc572fdfd3 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -365,6 +365,7 @@ public class NetClient implements ApplicationListener{ @Remote(variants = Variant.one) public static void setPosition(float x, float y){ + player.unit().set(x, y); player.set(x, y); } diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index c883cbd5ba..d4c20eaf5e 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -199,11 +199,14 @@ public class LExecutor{ //bind to the next unit exec.setconst(varUnit, seq.get(index)); } - index ++; + index++; }else{ //no units of this type found exec.setconst(varUnit, null); } + }else if(exec.obj(type) instanceof Unit u && u.team == exec.team){ + //bind to specific unit object + exec.setconst(varUnit, u); }else{ exec.setconst(varUnit, null); } diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index ed6145ceae..8e724a7ecb 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -89,9 +89,9 @@ public abstract class Weather extends UnlockableContent{ } } - if(sound != Sounds.none){ + if(!headless && sound != Sounds.none){ float noise = soundVolOscMag > 0 ? (float)Math.abs(Noise.rawNoise(Time.time() / soundVolOscScl)) * soundVolOscMag : 0; - loops.play(sound, Core.camera.position, Math.max((soundVol + noise) * state.opacity, soundVolMin)); + loops.play(sound, Math.max((soundVol + noise) * state.opacity, soundVolMin)); } } diff --git a/core/src/mindustry/world/blocks/production/Drill.java b/core/src/mindustry/world/blocks/production/Drill.java index eb4bb4588e..cc0c14b278 100644 --- a/core/src/mindustry/world/blocks/production/Drill.java +++ b/core/src/mindustry/world/blocks/production/Drill.java @@ -67,7 +67,7 @@ public class Drill extends Block{ liquidCapacity = 5f; hasItems = true; ambientSound = Sounds.drill; - ambientSoundVolume = 0.015f; + ambientSoundVolume = 0.018f; } @Override @@ -209,6 +209,11 @@ public class Drill extends Block{ return efficiency() > 0.01f && items.total() < itemCapacity; } + @Override + public float ambientVolume(){ + return efficiency() * (size * size) / 4f; + } + @Override public void drawSelect(){ if(dominantItem != null){ diff --git a/core/src/mindustry/world/blocks/production/Fracker.java b/core/src/mindustry/world/blocks/production/Fracker.java index d2dbd5bf69..0ce66cd54c 100644 --- a/core/src/mindustry/world/blocks/production/Fracker.java +++ b/core/src/mindustry/world/blocks/production/Fracker.java @@ -2,6 +2,7 @@ package mindustry.world.blocks.production; import arc.graphics.g2d.*; import mindustry.annotations.Annotations.*; +import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.meta.*; @@ -15,6 +16,8 @@ public class Fracker extends SolidPump{ public Fracker(String name){ super(name); hasItems = true; + ambientSound = Sounds.drill; + ambientSoundVolume = 0.03f; } @Override diff --git a/core/src/mindustry/world/meta/values/AmmoListValue.java b/core/src/mindustry/world/meta/values/AmmoListValue.java index 2d3688cc72..9cd89b18d9 100644 --- a/core/src/mindustry/world/meta/values/AmmoListValue.java +++ b/core/src/mindustry/world/meta/values/AmmoListValue.java @@ -46,11 +46,13 @@ public class AmmoListValue implements StatValue{ sep(bt, Core.bundle.format("bullet.splashdamage", (int)type.splashDamage, Strings.fixed(type.splashDamageRadius / tilesize, 1))); } - //ammo multiplyers do not make sense for units - if(!(t instanceof UnitType) && !Mathf.equal(type.ammoMultiplier, 1f)) + if(!(t instanceof UnitType) && !Mathf.equal(type.ammoMultiplier, 1f) && !(type instanceof LiquidBulletType)){ sep(bt, Core.bundle.format("bullet.multiplier", (int)type.ammoMultiplier)); - if(!Mathf.equal(type.reloadMultiplier, 1f)) + } + + if(!Mathf.equal(type.reloadMultiplier, 1f)){ sep(bt, Core.bundle.format("bullet.reload", Strings.fixed(type.reloadMultiplier, 1))); + } if(type.knockback > 0){ sep(bt, Core.bundle.format("bullet.knockback", Strings.fixed(type.knockback, 1))); diff --git a/fastlane/metadata/android/en-US/changelogs/29697.txt b/fastlane/metadata/android/en-US/changelogs/29697.txt new file mode 100644 index 0000000000..d187e2042e --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29697.txt @@ -0,0 +1,3 @@ +- Fixed server weather-related crash +- Fixed music not loading on certain systems +- Added sounds for quad unit diff --git a/fastlane/metadata/android/en-US/changelogs/29699.txt b/fastlane/metadata/android/en-US/changelogs/29699.txt new file mode 100644 index 0000000000..d187e2042e --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29699.txt @@ -0,0 +1,3 @@ +- Fixed server weather-related crash +- Fixed music not loading on certain systems +- Added sounds for quad unit