diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index ef26aba4d..db0058b66 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -120,7 +120,7 @@ public class ClickHandler { || stack.is(ModItems.MONITOR.get()) || stack.is(ModItems.LUNGE_MINE.get()) || (player.getVehicle() instanceof ICannonEntity) - || (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player) && stack.is(ItemStack.EMPTY.getItem())) + || (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player)) || (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) { if (button == ModKeyMappings.FIRE.getKey().getValue()) { handleWeaponFirePress(player, stack); @@ -256,7 +256,7 @@ public class ClickHandler { if ((stack.is(ModTags.Items.GUN) && !(player.getVehicle() instanceof ICannonEntity)) || stack.is(ModItems.MONITOR.get()) || (player.getVehicle() instanceof ICannonEntity) - || (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player) && stack.is(ItemStack.EMPTY.getItem())) + || (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player)) || (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) { if (key == ModKeyMappings.FIRE.getKey().getValue()) { handleWeaponFirePress(player, stack); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java index b460e612d..db207f51b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java @@ -1,9 +1,13 @@ package com.atsuishio.superbwarfare.client.overlay; import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.client.RenderHelper; import com.atsuishio.superbwarfare.entity.IHelicopterEntity; import com.atsuishio.superbwarfare.entity.MobileVehicleEntity; +import com.atsuishio.superbwarfare.entity.VehicleEntity; +import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.network.ModVariables; +import com.atsuishio.superbwarfare.tools.HudUtil; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -15,12 +19,15 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RenderGuiEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import org.joml.Matrix4f; +import org.joml.Vector4f; import java.text.DecimalFormat; @@ -77,22 +84,81 @@ public class HelicopterHudOverlay { event.getGuiGraphics().blit(ModUtils.loc("textures/screens/helicopter/heli_power_ruler.png"), w / 2 + 100, h / 2 - 64, 0, 0, 64, 128, 64, 128); + double height = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(0, -1, 0).scale(100)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos()))); + double blockInWay = mobileVehicle.position().distanceTo((Vec3.atLowerCornerOf(mobileVehicle.level().clip(new ClipContext(mobileVehicle.position(), mobileVehicle.position().add(new Vec3(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z).normalize().scale(100)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.ANY, mobileVehicle)).getBlockPos()))); + float power = iHelicopterEntity.getPower(); lerpPower = Mth.lerp(0.001f * event.getPartialTick(), lerpPower, power); preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_power.png"), (float) w / 2 + 130f, ((float) h / 2 - 64 + 124 - power * 980), 0, 0, 4, power * 980, 4, power * 980); lerpVy = (float) Mth.lerp(0.021f * event.getPartialTick(), lerpVy, mobileVehicle.getDeltaMovement().y() + 0.06f); - preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_vy_move.png"), (float) w / 2 + 100, ((float) h / 2 - 64 - Math.max(lerpVy, 0) * 100f), 0, 0, 64, 128, 64, 128); + preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/heli_vy_move.png"), (float) w / 2 + 138, ((float) h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5f), 0, 0, 8, 8, 8, 8); + event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(lerpVy * 20) + "m/s"), + w / 2 + 146, (int)(h / 2 - 3 - Math.max(lerpVy * 20, -24) * 2.5), (((lerpVy < -20 || lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36) || (length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72) ? -65536 : 0x66FF00), false); event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(mobileVehicle.getY())), w / 2 + 104, h / 2, 0x66FF00, false); preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/helicopter/speed_frame.png"), (float) w / 2 - 144, (float) h / 2 - 6, 0, 0, 50, 18, 50, 18); event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal(new DecimalFormat("##").format(length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72) + "KM/H"), w / 2 - 140, h / 2, 0x66FF00, false); + + if (((lerpVy * 20 < -5 || (lerpVy * 20 < -1 && length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 100)) && height < 36) + ||(length(mobileVehicle.getDeltaMovement().x, mobileVehicle.getDeltaMovement().y + 0.06, mobileVehicle.getDeltaMovement().z) * 72 > 40 && blockInWay < 72)) { + event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal( "TERRAIN TERRAIN"), + w / 2 - 42, h / 2 + 24, -65536, false); + } else if (lerpVy * 20 < -20) { + event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.literal( "SINK RATE,PULL UP!"), + w / 2 - 53, h / 2 + 24, -65536, false); + } + + Matrix4f transform = getVehicleTransform(mobileVehicle); + float x0 = 0f; + float y0 = 0.65f; + float z0 = 0.8f; + + Vector4f worldPosition = transformPosition(transform, x0, y0, z0); + + float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1; + double zoom = 0.96 * 3 + 0.06 * fovAdjust2; + + Vec3 pos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500)); + Vec3 lookAngle = player.getLookAngle().normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom)); + + var cPos = cameraPos.add(lookAngle); + + Vec3 p = RenderHelper.worldToScreen(new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(event.getPartialTick()).scale(500)),ClientEventHandler.zoom ? cPos : cameraPos); + + if (p == null) return; + + poseStack.pushPose(); + + int x = (int) p.x; + int y = (int) p.y; + + HudUtil.blit(poseStack, ModUtils.loc("textures/screens/helicopter/crosshair_ind.png"), x-8, y-8, 0, 0, 16, 16, 16, 16, 0x66FF00); + + poseStack.popPose(); + + } else { scopeScale = 0.7f; } } } + public static Matrix4f getVehicleTransform(VehicleEntity vehicle) { + Matrix4f transform = new Matrix4f(); + transform.translate((float) vehicle.getX(), (float) vehicle.getY(), (float) vehicle.getZ()); + transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYRot())); + transform.rotate(Axis.XP.rotationDegrees(vehicle.getXRot())); + transform.rotate(Axis.ZP.rotationDegrees(vehicle.getRoll())); + return transform; + } + + public static Vector4f transformPosition(Matrix4f transform, float x, float y, float z) { + return transform.transform(new Vector4f(x, y, z, 1)); + } + public static double length(double x, double y,double z) { return Math.sqrt(x * x + y * y + z * z); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/Ah6Entity.java index a5793ec7b..29e7c0eb4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/Ah6Entity.java @@ -1,13 +1,15 @@ package com.atsuishio.superbwarfare.entity; +import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig; +import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity; import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModSounds; +import com.atsuishio.superbwarfare.network.message.ShakeClientMessage; import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; -import com.mojang.math.Axis; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -15,6 +17,7 @@ import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; @@ -24,8 +27,10 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PlayMessages; import org.jetbrains.annotations.NotNull; import org.joml.Math; @@ -37,6 +42,8 @@ import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache import software.bernie.geckolib.core.animation.AnimatableManager; import software.bernie.geckolib.util.GeckoLibUtil; +import java.util.Comparator; + public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelicopterEntity { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -247,7 +254,7 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico Matrix4f transform = getVehicleTransform(); - float x = 0.45f; + float x = 0.6f; float y = 1.2f; float z = 1f; y += (float) passenger.getMyRidingOffset(); @@ -282,20 +289,6 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico return 4; } - // From Immersive_Aircraft - public Matrix4f getVehicleTransform() { - Matrix4f transform = new Matrix4f(); - transform.translate((float) getX(), (float) getY(), (float) getZ()); - transform.rotate(Axis.YP.rotationDegrees(-getYRot())); - transform.rotate(Axis.XP.rotationDegrees(getXRot())); - transform.rotate(Axis.ZP.rotationDegrees(getRoll())); - return transform; - } - - protected Vector4f transformPosition(Matrix4f transform, float x, float y, float z) { - return transform.transform(new Vector4f(x, y, z, 1)); - } - @Override public void destroy() { if (level() instanceof ServerLevel) { @@ -332,6 +325,56 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico @Override public void vehicleShoot(Player player) { + + Matrix4f transform = getVehicleTransform(); + float x = 1f; + float y = 0.62f; + float z = 0.8f; + + Vector4f worldPositionRight = transformPosition(transform, -x, y, z); + ProjectileEntity projectileRight = new ProjectileEntity(player.level()) + .shooter(player) + .damage(20) + .headShot(2f) + .zoom(false); + + projectileRight.heBullet(true, 8); + projectileRight.bypassArmorRate(1); + projectileRight.setPos(worldPositionRight.x, worldPositionRight.y, worldPositionRight.z); + projectileRight.shoot(player, this.getLookAngle().x, this.getLookAngle().y+ 0.03, this.getLookAngle().z, 20, + (float) 0.2); + this.level().addFreshEntity(projectileRight); + + Vector4f worldPositionLeft = transformPosition(transform, x, y, z); + ProjectileEntity projectileLeft = new ProjectileEntity(player.level()) + .shooter(player) + .damage(20) + .headShot(2f) + .zoom(false); + + projectileLeft.heBullet(true, 8); + projectileLeft.bypassArmorRate(1); + projectileLeft.setPos(worldPositionLeft.x, worldPositionLeft.y, worldPositionLeft.z); + projectileLeft.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.03, this.getLookAngle().z, 20, + (float) 0.2); + this.level().addFreshEntity(projectileLeft); + + if (!player.level().isClientSide) { + if (player instanceof ServerPlayer serverPlayer) { + serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_FIRE_3P.get(), 4, 1); + serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_FAR.get(), 12, 1); + serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_VERYFAR.get(), 24, 1); + } + } + + Level level = player.level(); + final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + + for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(6), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { + if (target instanceof ServerPlayer serverPlayer) { + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(6, 5, 7, this.getX(), this.getEyeY(), this.getZ())); + } + } } @Override @@ -341,12 +384,12 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico @Override public int mainGunRpm() { - return 360; + return 300; } @Override public boolean canShoot(Player player) { - return false; + return true; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java index fd840c84e..5e006d059 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java @@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.entity; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import com.mojang.math.Axis; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -24,6 +25,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; import org.joml.Math; +import org.joml.Matrix4f; +import org.joml.Vector4f; public class VehicleEntity extends Entity { @@ -239,6 +242,20 @@ public class VehicleEntity extends Entity { public void travel() { } + // From Immersive_Aircraft + public Matrix4f getVehicleTransform() { + Matrix4f transform = new Matrix4f(); + transform.translate((float) getX(), (float) getY(), (float) getZ()); + transform.rotate(Axis.YP.rotationDegrees(-getYRot())); + transform.rotate(Axis.XP.rotationDegrees(getXRot())); + transform.rotate(Axis.ZP.rotationDegrees(getRoll())); + return transform; + } + + public Vector4f transformPosition(Matrix4f transform, float x, float y, float z) { + return transform.transform(new Vector4f(x, y, z, 1)); + } + protected void handleClientSync() { if (isControlledByLocalInstance()) { interpolationSteps = 0; diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index a1cfbc49c..15cf2fcb4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -600,6 +600,11 @@ public class ClientEventHandler { if (player == null) return; if (level == null) return; + if (player.getMainHandItem().getItem() instanceof GunItem) { + clientTimerVehicle.stop(); + return; + } + if (notInGame()) { clientTimerVehicle.stop(); holdFire = false; @@ -643,6 +648,9 @@ public class ClientEventHandler { player.playSound(ModSounds.M_2_FIRE_1P.get(), 1f, pitch); player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); } + if (iVehicle instanceof Ah6Entity ah6Entity) { + player.playSound(ModSounds.HELICOPTER_CANNON_FIRE_1P.get(), 1f, 1); + } } @SubscribeEvent diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index 8c3f61778..6593c9f10 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -359,5 +359,9 @@ public class ModSounds { public static final RegistryObject HELICOPTER_ENGINE_START = REGISTRY.register("helicopter_engine_start", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("helicopter_engine_start"))); public static final RegistryObject HELICOPTER_ENGINE = REGISTRY.register("helicopter_engine", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("helicopter_engine"))); + public static final RegistryObject HELICOPTER_CANNON_FIRE_1P = REGISTRY.register("heli_cannon_fire_1p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("heli_cannon_fire_1p"))); + public static final RegistryObject HELICOPTER_CANNON_FIRE_3P = REGISTRY.register("heli_cannon_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("heli_cannon_fire_3p"))); + public static final RegistryObject HELICOPTER_CANNON_FAR = REGISTRY.register("heli_cannon_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("heli_cannon_far"))); + public static final RegistryObject HELICOPTER_CANNON_VERYFAR = REGISTRY.register("heli_cannon_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("heli_cannon_veryfar"))); } diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 49945b353..091110cf1 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2521,5 +2521,37 @@ "name": "superbwarfare:helicopter/heli_engine" } ] + }, + "heli_cannon_fire_1p": { + "sounds": [ + { + "name": "superbwarfare:helicopter/heli_cannon_fire_1p", + "stream": false + } + ] + }, + "heli_cannon_fire_3p": { + "sounds": [ + { + "name": "superbwarfare:helicopter/heli_cannon_fire_3p", + "stream": false + } + ] + }, + "heli_cannon_far": { + "sounds": [ + { + "name": "superbwarfare:helicopter/heli_cannon_far", + "stream": false + } + ] + }, + "heli_cannon_veryfar": { + "sounds": [ + { + "name": "superbwarfare:helicopter/heli_cannon_veryfar", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_far.ogg b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_far.ogg new file mode 100644 index 000000000..89e93056f Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_far.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_1p.ogg new file mode 100644 index 000000000..178472ce8 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_1p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_3p.ogg new file mode 100644 index 000000000..22e142b0f Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_fire_3p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_veryfar.ogg b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_veryfar.ogg new file mode 100644 index 000000000..125c36f2b Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/helicopter/heli_cannon_veryfar.ogg differ diff --git a/src/main/resources/assets/superbwarfare/textures/screens/helicopter/crosshair_ind.png b/src/main/resources/assets/superbwarfare/textures/screens/helicopter/crosshair_ind.png new file mode 100644 index 000000000..c0eb263f6 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/screens/helicopter/crosshair_ind.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/screens/helicopter/heli_vy_move.png b/src/main/resources/assets/superbwarfare/textures/screens/helicopter/heli_vy_move.png index 148c60fb0..3a0b6b034 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/screens/helicopter/heli_vy_move.png and b/src/main/resources/assets/superbwarfare/textures/screens/helicopter/heli_vy_move.png differ