diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/M98bItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/M98bItemModel.java index beea95a77..98b4815ed 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/M98bItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/M98bItemModel.java @@ -35,6 +35,9 @@ public class M98bItemModel extends GeoModel { public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) { CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone shen = getAnimationProcessor().getBone("shen"); + CoreGeoBone camera = getAnimationProcessor().getBone("camera"); + CoreGeoBone main = getAnimationProcessor().getBone("0"); + CoreGeoBone scope = getAnimationProcessor().getBone("scope2"); Player player = Minecraft.getInstance().player; if (player == null) return; @@ -68,14 +71,12 @@ public class M98bItemModel extends GeoModel { shen.setRotX(0.15f * (float) (0.18f * fp + fr)); shen.setRotZ(-0.01f * (float) (fp + 1.3 * fr)); } + scope.setPosZ(75.2f * (float) (fp + 0.54f * fr)); shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp)); gun.setPosX(2.245f * (float) zp); - gun.setPosY(0.3f * (float) zp - (float) (0.2f * zpz)); - gun.setPosZ(4.2f * (float) zp + (float) (0.3f * zpz)); - gun.setRotZ((float) (0.02f * zpz)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); @@ -99,10 +100,6 @@ public class M98bItemModel extends GeoModel { move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY); move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ); - CoreGeoBone camera = getAnimationProcessor().getBone("camera"); - CoreGeoBone main = getAnimationProcessor().getBone("0"); - CoreGeoBone scope = getAnimationProcessor().getBone("scope2"); - float numR = (float) (1 - 0.88 * zt); float numP = (float) (1 - 0.68 * zt); diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CannonHudOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CannonHudOverlay.java index a5a667eac..9ed8fd704 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CannonHudOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CannonHudOverlay.java @@ -91,7 +91,6 @@ public class CannonHudOverlay { preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * 5 * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * 5 * j / 1.4f, 0, 0.0F, i, j, i, j); } else { preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/cannon_crosshair_notzoom.png"), k, l, 0, 0.0F, i, j, i, j); - preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * j / 1.4f, 0, 0.0F, i, j, i, j); } } RenderSystem.depthMask(true); diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java index 0e22eb3e9..e7a637fd2 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java @@ -12,6 +12,7 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; @@ -28,6 +29,7 @@ public class CrossHairOverlay { public static int HIT_INDICATOR = 0; public static int HEAD_INDICATOR = 0; public static int KILL_INDICATOR = 0; + private static float scopeScale = 1f; @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { @@ -39,6 +41,9 @@ public class CrossHairOverlay { } ItemStack stack = player.getMainHandItem(); double spread = ClientEventHandler.gunSpread + 3 * ClientEventHandler.firePos; + float deltaFrame = Minecraft.getInstance().getDeltaFrameTime(); + float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX); + float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos); RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); @@ -47,16 +52,42 @@ public class CrossHairOverlay { RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.setShaderColor(1, 1, 1, 1); - float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX); - float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos); + scopeScale = (float) Mth.lerp(0.5F * deltaFrame, scopeScale, 1 + 1.5f * spread); + float f = (float)Math.min(w, h); + float f1 = Math.min((float)w / f, (float)h / f) * 0.012f * scopeScale; + float i = Mth.floor(f * f1); + float j = Mth.floor(f * f1); + float k = ((w - i) / 2) + moveX; + float l = ((h - j) / 2) + moveY; - if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get()) || (stack.is(ModItems.BOCEK.get()) && stack.getOrCreateTag().getBoolean("HoloHidden"))) { + if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get())) { preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) { - preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); - preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); - preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); - preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); + if (stack.is(ModTags.Items.SHOTGUN)) { + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j); + } else { + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); + } + } + } + + if (stack.is(ModItems.BOCEK.get())) { + + if (stack.getOrCreateTag().getBoolean("HoloHidden")) { + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); + if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) { + if (ClientEventHandler.zoomTime < 0.1) { + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j); + } else { + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); + preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); + } + } } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 870545467..9864936a2 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -411,7 +411,7 @@ public class ClientEventHandler { fireSpread += 0.2; } - fireSpread = Mth.clamp(fireSpread - 0.1 * (Math.pow(fireSpread, 2) * times), 0, 100); + fireSpread = Mth.clamp(fireSpread - 0.6 * (Math.pow(fireSpread, 2) * times), 0, 100); firePosZ = Mth.clamp(firePosZ - 0.02 * times, 0, 0.6); if (0 < firePosTimer) { @@ -527,7 +527,13 @@ public class ClientEventHandler { return; } - double p = zoomPos; + double p; + if (stack.is(ModItems.BOCEK.get())) { + p = (pullPos + 0.25) * zoomTime; + } else { + p = zoomPos; + } + double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom"); event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime)); diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index e889f6d80..2ab272717 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -256,7 +256,6 @@ public class GunEventHandler { //启动换弹 if (tag.getBoolean("start_reload")) { MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack)); - if (stack.is(ModTags.Items.OPEN_BOLT)) { if (tag.getInt("ammo") == 0) { tag.putInt("gun_reloading_time", (int) tag.getDouble("empty_reload_time") + 2); @@ -272,6 +271,9 @@ public class GunEventHandler { stack.getOrCreateTag().putBoolean("is_empty_reloading", true); playGunEmptyReloadSounds(player); } + if (stack.getItem() == ModItems.DEVOTION.get()) { + tag.putInt("customRpm", 0); + } tag.putBoolean("start_reload", false); } diff --git a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java index d26379211..0a3efc982 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java @@ -280,7 +280,7 @@ public class PlayerEventHandler { * 判断玩家是否在奔跑 */ private static void handlePlayerSprint(Player player) { - if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0) { + if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) { player.getPersistentData().putDouble("noRun", 20); } @@ -383,8 +383,10 @@ public class PlayerEventHandler { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.bowPull = true; + capability.tacticalSprint = false; capability.syncPlayerVariables(player); }); + player.setSprinting(false); } if (tag.getDouble("power") == 1) { if (!player.level().isClientSide() && player instanceof ServerPlayer serverPlayer) { @@ -401,6 +403,14 @@ public class PlayerEventHandler { capability.syncPlayerVariables(player); }); } + + if (tag.getDouble("power") > 0) { + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.tacticalSprint = false; + capability.syncPlayerVariables(player); + }); + player.setSprinting(false); + } } private static void handleGunRecoil(Player player) { diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java index d552745fa..e8d2e0618 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/M98bItem.java @@ -75,17 +75,13 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState fireAnimPredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (this.animationProcedure.equals("empty")) { - if (stack.getOrCreateTag().getInt("draw_time") < 16) { - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw")); - } - if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift")); } @@ -102,7 +98,25 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal")); } - if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle")); + } + return PlayState.STOP; + } + + private PlayState idlePredicate(AnimationState event) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; + ItemStack stack = player.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; + + if (this.animationProcedure.equals("empty")) { + if (stack.getOrCreateTag().getInt("draw_time") < 16) { + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw")); + } + + if (player.isSprinting() && player.onGround() + && player.getPersistentData().getDouble("noRun") == 0 + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) { return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast")); } else { @@ -115,25 +129,10 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { - if (transformType != null && transformType.firstPerson()) { - if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { - event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); - if (event.getController().getAnimationState() == AnimationController.State.STOPPED) { - this.animationProcedure = "empty"; - event.getController().forceAnimationReset(); - } - } else if (this.animationProcedure.equals("empty")) { - return PlayState.STOP; - } - } - return PlayState.CONTINUE; - } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate); - data.add(procedureController); + var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); + data.add(fireAnimController); var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate); data.add(idleController); } diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java index 02dabf298..789a046c2 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java @@ -188,7 +188,7 @@ public class ShootMessage { stack.getOrCreateTag().putBoolean("shoot", true); for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { - gunShoot(player, 2 * stack.getOrCreateTag().getDouble("spread")); + gunShoot(player, spared); } player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 6a2348100..8527e3f2b 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -40,6 +40,7 @@ public class TooltipTool { addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); addPerkTips(tooltip, stack); + addRpmTips(tooltip, stack); } public static void addShotgunTips(List tooltip, ItemStack stack, int count) { @@ -55,6 +56,13 @@ public class TooltipTool { addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); addPerkTips(tooltip, stack); + addRpmTips(tooltip, stack); + } + + private static void addRpmTips(List tooltip, ItemStack stack) { + tooltip.add(Component.translatable("des.superbwarfare.tips.rpm").withStyle(ChatFormatting.GRAY) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal(new DecimalFormat("##").format(ItemNBTTool.getDouble(stack, "rpm", 0) + ItemNBTTool.getDouble(stack, "customRpm", 0))).withStyle(ChatFormatting.GREEN))); } private static void addLevelTips(List tooltip, ItemStack stack) { @@ -186,6 +194,7 @@ public class TooltipTool { addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); addPerkTips(tooltip, stack); + addRpmTips(tooltip, stack); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) @@ -202,7 +211,11 @@ public class TooltipTool { .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN))); - addLevelTips(tooltip, stack); + int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0)); + + tooltip.add(Component.translatable("des.superbwarfare.tips.upgradepoint").withStyle(ChatFormatting.GRAY) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.BOLD))); addPerkTips(tooltip, stack); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( diff --git a/src/main/resources/assets/superbwarfare/animations/m98b.animation.json b/src/main/resources/assets/superbwarfare/animations/m98b.animation.json index ec9e9c1ec..7aa8f686c 100644 --- a/src/main/resources/assets/superbwarfare/animations/m98b.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/m98b.animation.json @@ -243,61 +243,96 @@ }, "animation.m98b.shift": { "loop": "hold_on_last_frame", - "animation_length": 1, + "animation_length": 1.1, "override_previous_animation": true, "bones": { "0": { "rotation": { "0.0": { - "vector": [0, 0, 0] - }, - "0.05": { - "vector": [-1, 0, -3], - "easing": "easeInOutSine" - }, - "0.15": { - "vector": [-5.06695, -0.89397, 0.2229], - "easing": "easeInSine" - }, - "0.3": { - "vector": [-4.64234, 4.23541, 7.63209], - "easing": "easeInOutSine" - }, - "0.5": { - "vector": [-3.1436, -1.5688, -3.26245], - "easing": "easeInOutSine" - }, - "0.6": { - "vector": [-0.70997, -1.32962, -4.26107], - "easing": "easeInOutSine" - }, - "0.7": { "vector": [0, 0, 0], "easing": "easeInOutSine" + }, + "0.2": { + "vector": [-0.2, 0, -1], + "easing": "easeInElastic" + }, + "0.3": { + "vector": [-0.2584, -0.4688, 5.16075], + "easing": "easeInSine" + }, + "0.35": { + "vector": [-0.1745, -0.1155, 4.6568], + "easing": "easeInElastic" + }, + "0.45": { + "vector": [-0.6993, -0.252, -1.4861], + "easing": "easeInElastic" + }, + "0.6": { + "vector": [-2.25, -1, 4.82] + }, + "0.65": { + "vector": [-0.25, -0.5, 4.82] + }, + "0.7": { + "vector": [0.53655, 1.56915, 2.11954] + }, + "0.75": { + "vector": [0.9659, 0.52169, -2.4819], + "easing": "easeInOutSine" + }, + "0.85": { + "vector": [0.7935, 0.19563, -2.80573] + }, + "0.9": { + "vector": [0.49, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] } }, "position": { "0.0": { - "vector": [0, 0, 0] - }, - "0.1": { - "vector": [0, -0.1, -0.2], - "easing": "easeInOutSine" - }, - "0.3": { - "vector": [0, 0, 1.7], - "easing": "easeInElastic" - }, - "0.5": { - "vector": [-0.02, -0.1, -0.5], - "easing": "easeInElastic" - }, - "0.6": { - "vector": [-0.03, 0.1, 0.3] - }, - "0.7": { "vector": [0, 0, 0], "easing": "easeInOutSine" + }, + "0.15": { + "vector": [0, 0, 0], + "easing": "linear" + }, + "0.3": { + "vector": [-0.41, -0.23, 0.32] + }, + "0.45": { + "vector": [-0.1, -0.5, 0.3], + "easing": "easeInElastic" + }, + "0.55": { + "vector": [-0.1, -0.5, 0.6] + }, + "0.6": { + "vector": [-0.3, -0.5, -0.6] + }, + "0.65": { + "vector": [-0.3, -0.5, -0.6] + }, + "0.7": { + "vector": [-0.1, -0.2, 0.1], + "easing": "easeInElastic" + }, + "0.8": { + "vector": [0.2, -0.3, -0.1] + }, + "0.85": { + "vector": [0.14, -0.05, 0.2], + "easing": "easeInSine" + }, + "0.9": { + "vector": [0.04, 0.1, 0.24478] + }, + "1.0": { + "vector": [0, 0, 0], + "easing": "easeOutSine" } } }, @@ -395,6 +430,12 @@ }, "0.6": { "vector": [-15.7, -8.7, 13.8] + }, + "0.65": { + "vector": [-3072.7, -8.7, 13.8] + }, + "0.7": { + "vector": [0, 0, 0] } } }, diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index cfbc3aa15..aa06b2460 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -51,6 +51,7 @@ "des.superbwarfare.tips.bypass": "Armor Piercing: ", "des.superbwarfare.tips.distance": "Drone Distance: ", "des.superbwarfare.tips.upgradepoint": "Upgrade Point: ", + "des.superbwarfare.tips.rpm": "Rpm: ", "item.superbwarfare.vector_blueprint": "VECTOR Blueprint", "item.superbwarfare.m_60_blueprint": "M60 Blueprint", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index d040fbf71..3765eb2c6 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -51,6 +51,7 @@ "des.superbwarfare.tips.level": "等级: ", "des.superbwarfare.tips.bypass": "护甲穿透: ", "des.superbwarfare.tips.distance": "无人机距离你: ", + "des.superbwarfare.tips.rpm": "射速: ", "item.superbwarfare.vector_blueprint": "短剑冲锋枪蓝图", "item.superbwarfare.m_60_blueprint": "M60通用机枪蓝图", diff --git a/src/main/resources/assets/superbwarfare/textures/screens/shotgun_hud.png b/src/main/resources/assets/superbwarfare/textures/screens/shotgun_hud.png new file mode 100644 index 000000000..1cc61f3f4 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/screens/shotgun_hud.png differ diff --git a/src/main/resources/data/superbwarfare/guns/aa_12.json b/src/main/resources/data/superbwarfare/guns/aa_12.json index 90ffdf270..185ae0a5a 100644 --- a/src/main/resources/data/superbwarfare/guns/aa_12.json +++ b/src/main/resources/data/superbwarfare/guns/aa_12.json @@ -19,5 +19,5 @@ "empty_reload_time": 85, "BypassesArmor": 0.05, "SoundRadius": 18, - "rpm": 400 + "rpm": 360 } diff --git a/src/main/resources/data/superbwarfare/guns/bocek.json b/src/main/resources/data/superbwarfare/guns/bocek.json index 008f8eb8d..2d78c7752 100644 --- a/src/main/resources/data/superbwarfare/guns/bocek.json +++ b/src/main/resources/data/superbwarfare/guns/bocek.json @@ -6,7 +6,7 @@ "recoil_x": 0.005, "recoil_y": 0.003, "headshot": 2.5, - "damage": 24, + "damage": 36, "weight": 1, "BypassesArmor": 0.25 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/devotion.json b/src/main/resources/data/superbwarfare/guns/devotion.json index b9a9c5a6b..45176b3a3 100644 --- a/src/main/resources/data/superbwarfare/guns/devotion.json +++ b/src/main/resources/data/superbwarfare/guns/devotion.json @@ -5,7 +5,7 @@ "bipod": 1, "recoil_x": 0.0018, "recoil_y": 0.01, - "damage": 7, + "damage": 9.5, "headshot": 2, "velocity": 25, "mag": 55, diff --git a/src/main/resources/data/superbwarfare/guns/glock_17.json b/src/main/resources/data/superbwarfare/guns/glock_17.json index 573c9e9fd..85c824543 100644 --- a/src/main/resources/data/superbwarfare/guns/glock_17.json +++ b/src/main/resources/data/superbwarfare/guns/glock_17.json @@ -19,5 +19,5 @@ "empty_reload_time": 35, "BypassesArmor": 0.15, "SoundRadius": 10, - "rpm": 600 + "rpm": 400 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/glock_18.json b/src/main/resources/data/superbwarfare/guns/glock_18.json index a0bcfd071..d2bfe8c18 100644 --- a/src/main/resources/data/superbwarfare/guns/glock_18.json +++ b/src/main/resources/data/superbwarfare/guns/glock_18.json @@ -19,5 +19,5 @@ "empty_reload_time": 35, "BypassesArmor": 0.15, "SoundRadius": 16, - "rpm": 1200 + "rpm": 1300 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/hk_416.json b/src/main/resources/data/superbwarfare/guns/hk_416.json index ffb14fd31..83c7bc6c9 100644 --- a/src/main/resources/data/superbwarfare/guns/hk_416.json +++ b/src/main/resources/data/superbwarfare/guns/hk_416.json @@ -19,5 +19,5 @@ "empty_reload_time": 64, "BypassesArmor": 0.25, "SoundRadius": 14, - "rpm": 800 + "rpm": 900 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/hunting_rifle.json b/src/main/resources/data/superbwarfare/guns/hunting_rifle.json index ef0ac9568..b98fc0bb6 100644 --- a/src/main/resources/data/superbwarfare/guns/hunting_rifle.json +++ b/src/main/resources/data/superbwarfare/guns/hunting_rifle.json @@ -17,5 +17,6 @@ "burst_size": 1, "empty_reload_time": 64, "BypassesArmor": 0.7, - "SoundRadius": 20 + "SoundRadius": 20, + "rpm": 120 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/k_98.json b/src/main/resources/data/superbwarfare/guns/k_98.json index a0ead803a..d1b6948cc 100644 --- a/src/main/resources/data/superbwarfare/guns/k_98.json +++ b/src/main/resources/data/superbwarfare/guns/k_98.json @@ -23,5 +23,5 @@ "finish_time": 18, "BypassesArmor": 0.5, "SoundRadius": 18, - "rpm": 100 + "rpm": 240 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_1911.json b/src/main/resources/data/superbwarfare/guns/m_1911.json index db0843b15..b590fa35d 100644 --- a/src/main/resources/data/superbwarfare/guns/m_1911.json +++ b/src/main/resources/data/superbwarfare/guns/m_1911.json @@ -18,5 +18,6 @@ "normal_reload_time": 30, "empty_reload_time": 35, "BypassesArmor": 0.2, - "SoundRadius": 10 + "SoundRadius": 10, + "rpm": 400 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_4.json b/src/main/resources/data/superbwarfare/guns/m_4.json index ca8d47d70..5c2abb36d 100644 --- a/src/main/resources/data/superbwarfare/guns/m_4.json +++ b/src/main/resources/data/superbwarfare/guns/m_4.json @@ -19,5 +19,5 @@ "empty_reload_time": 64, "BypassesArmor": 0.25, "SoundRadius": 14, - "rpm": 800 + "rpm": 850 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_98b.json b/src/main/resources/data/superbwarfare/guns/m_98b.json index 3f14b301c..9ff5faa3e 100644 --- a/src/main/resources/data/superbwarfare/guns/m_98b.json +++ b/src/main/resources/data/superbwarfare/guns/m_98b.json @@ -22,5 +22,5 @@ "empty_reload_time": 86, "BypassesArmor": 0.6, "SoundRadius": 18, - "rpm": 90 + "rpm": 240 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/mk_14.json b/src/main/resources/data/superbwarfare/guns/mk_14.json index 879d2abcf..d19fc9371 100644 --- a/src/main/resources/data/superbwarfare/guns/mk_14.json +++ b/src/main/resources/data/superbwarfare/guns/mk_14.json @@ -22,5 +22,5 @@ "empty_reload_time": 81, "BypassesArmor": 0.4, "SoundRadius": 16, - "rpm": 600 + "rpm": 700 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json index 9270eb9bf..67d6bc4c2 100644 --- a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json +++ b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json @@ -22,5 +22,5 @@ "finish_time": 18, "BypassesArmor": 0.54, "SoundRadius": 18, - "rpm": 90 + "rpm": 240 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/ntw_20.json b/src/main/resources/data/superbwarfare/guns/ntw_20.json index 02d0496ea..45c10ebc1 100644 --- a/src/main/resources/data/superbwarfare/guns/ntw_20.json +++ b/src/main/resources/data/superbwarfare/guns/ntw_20.json @@ -23,5 +23,5 @@ "empty_reload_time": 87, "BypassesArmor": 1, "SoundRadius": 22, - "rpm": 40 + "rpm": 180 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/qbz_95.json b/src/main/resources/data/superbwarfare/guns/qbz_95.json index 826bd08b9..9bb100496 100644 --- a/src/main/resources/data/superbwarfare/guns/qbz_95.json +++ b/src/main/resources/data/superbwarfare/guns/qbz_95.json @@ -4,7 +4,7 @@ "spread": 3.7, "recoil_x": 0.0013, "recoil_y": 0.009, - "damage": 7.5, + "damage": 8.25, "headshot": 2, "velocity": 27, "mag": 30, @@ -19,5 +19,5 @@ "empty_reload_time": 74, "BypassesArmor": 0.28, "SoundRadius": 13, - "rpm": 750 + "rpm": 650 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/sentinel.json b/src/main/resources/data/superbwarfare/guns/sentinel.json index c90e4b834..63f5e24cd 100644 --- a/src/main/resources/data/superbwarfare/guns/sentinel.json +++ b/src/main/resources/data/superbwarfare/guns/sentinel.json @@ -20,5 +20,5 @@ "empty_reload_time": 89, "BypassesArmor": 0.8, "SoundRadius": 20, - "rpm": 90 + "rpm": 240 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/vector.json b/src/main/resources/data/superbwarfare/guns/vector.json index 7713bc807..da7bdbda7 100644 --- a/src/main/resources/data/superbwarfare/guns/vector.json +++ b/src/main/resources/data/superbwarfare/guns/vector.json @@ -19,5 +19,5 @@ "empty_reload_time": 64, "BypassesArmor": 0.15, "SoundRadius": 4, - "rpm": 1100 + "rpm": 1200 } \ No newline at end of file