From f74ce297f856a76de2e89d92d1d897bfcb261475 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 8 Feb 2025 23:19:33 +0100 Subject: [PATCH] chromatic aberration --- .../sedna/factory/GunFactoryClient.java | 5 + .../weapon/sedna/factory/LegoClient.java | 3 + .../weapon/sedna/factory/Orchestras.java | 19 ++ .../weapon/sedna/factory/XFactory35800.java | 45 +++- .../java/com/hbm/main/ResourceManager.java | 2 + .../weapon/sedna/ItemRenderAberrator.java | 240 ++++++++++++++++++ .../weapon/sedna/ItemRenderGreasegun.java | 1 - src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../{_yellowwood.obj => aberrator.obj} | 0 src/main/resources/assets/hbm/sounds.json | 1 + .../hbm/sounds/weapon/fire/aberrator.ogg | Bin 0 -> 25409 bytes .../textures/models/weapons/_yellowwood.png | Bin 2373 -> 0 bytes .../hbm/textures/models/weapons/aberrator.png | Bin 0 -> 3642 bytes 14 files changed, 314 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAberrator.java rename src/main/resources/assets/hbm/models/weapons/{_yellowwood.obj => aberrator.obj} (100%) create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/aberrator.ogg delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/_yellowwood.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/aberrator.png diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 600dfbd19..5dd8785c6 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -5,6 +5,7 @@ import static com.hbm.items.weapon.sedna.factory.XFactory10ga.*; import static com.hbm.items.weapon.sedna.factory.XFactory12ga.*; import static com.hbm.items.weapon.sedna.factory.XFactory22lr.*; import static com.hbm.items.weapon.sedna.factory.XFactory357.*; +import static com.hbm.items.weapon.sedna.factory.XFactory35800.*; import static com.hbm.items.weapon.sedna.factory.XFactory40mm.*; import static com.hbm.items.weapon.sedna.factory.XFactory44.*; import static com.hbm.items.weapon.sedna.factory.XFactory50.*; @@ -82,6 +83,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_hangman, new ItemRenderHangman()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter, new ItemRenderBolter()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_folly, new ItemRenderFolly()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_aberrator, new ItemRenderAberrator()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_double_barrel, new ItemRenderDoubleBarrel(ResourceManager.double_barrel_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_double_barrel_sacred_dragon, new ItemRenderDoubleBarrel(ResourceManager.double_barrel_sacred_dragon_tex)); //PROJECTILES @@ -189,6 +191,8 @@ public class GunFactoryClient { folly_sm.setRendererBeam(LegoClient.RENDER_FOLLY); folly_nuke.setRenderer(LegoClient.RENDER_BIG_NUKE); + + p35800.setRendererBeam(LegoClient.RENDER_LASER_WHITE); setRendererBulk(LegoClient.RENDER_GRENADE, shell_normal, shell_explosive, shell_ap, shell_du, shell_w9); //TODO: change the sabots @@ -236,6 +240,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_hangman) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_bolter) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_folly) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_aberrator) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel_sacred_dragon) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index 10f124031..d59fc4960 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -328,6 +328,9 @@ public class LegoClient { public static BiConsumer RENDER_LASER_PURPLE = (bullet, interp) -> { renderStandardLaser(bullet, interp, 0x60, 0x15, 0x80); }; + public static BiConsumer RENDER_LASER_WHITE = (bullet, interp) -> { + renderStandardLaser(bullet, interp, 0x15, 0x15, 0x15); + }; public static void renderStandardLaser(EntityBulletBeamBase bullet, float interp, int r, int g, int b) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 998181543..04b141e9c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -1284,5 +1284,24 @@ public class Orchestras { if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); + + if(type == AnimType.RELOAD) { + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 0.75F); + if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 0.75F); + if(timer == 42) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F); + } + + if(type == AnimType.CYCLE) { + if(timer == 1) { + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D, -0.075, 0.25, 0, 0.01, casing.getName()); + } + } + + if(type == AnimType.CYCLE_DRY) { + if(timer == 1) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); + if(timer == 9) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F); + } }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java index 665562be5..0954416eb 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java @@ -11,9 +11,12 @@ import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.particle.SpentCasing; +import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.item.ItemStack; @@ -23,21 +26,51 @@ public class XFactory35800 { public static void init() { - p35800 = new BulletConfig().setItem(EnumAmmoSecret.P35_800).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + p35800 = new BulletConfig().setItem(EnumAmmoSecret.P35_800).setArmorPiercing(0.5F).setThresholdNegation(50F).setBeam().setSpread(0.0F).setLife(3).setRenderRotations(false) + .setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xCEB78E).register("35-800")).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); ModItems.gun_aberrator = new ItemGunBaseNT(WeaponQuality.SECRET, new GunConfig() - .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE) + .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(50F).delay(8).reload(44).jam(36).sound("hbm:weapon.fire.laser", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 24).addConfigs(p35800)) + .dmg(50F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 5).addConfigs(p35800)) .offset(0.75, -0.0625 * 1.5, -0.1875) - .setupStandardFire()) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE)) .setupStandardConfiguration() .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR) ).setUnlocalizedName("gun_aberrator"); } @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ABERRATOR = (stack, type) -> { + boolean aim = ItemGunBaseNT.getIsAiming(stack); + int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null); + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(360, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("RISE", new BusAnimationSequence().addPos(0, -3, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); + case CYCLE: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(aim ? -15 : -25, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("SIGHT", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(aim ? 5 : 15, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -1.125, 50, IType.SIN_DOWN).addPos(0, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)) + .addBus(ammo <= 1 ? "NULL" : "BULLET", new BusAnimationSequence().addPos(0, 0, 0, 150).addPos(0, 0.375, 1.125, 150, IType.SIN_UP)) + .addBus("HAMMER", new BusAnimationSequence().addPos(45, 0, 0, 50).addPos(-45, 0, -1.125, 50, IType.SIN_DOWN).addPos(-20, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)); + case CYCLE_DRY: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 700).addPos(-5, 0, 0, 100, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 550).addPos(0, 0, -1.125, 150, IType.SIN_FULL).addPos(0, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)) + .addBus("HAMMER", new BusAnimationSequence().addPos(45, 0, 0, 50).addPos(45, 0, 0, 500).addPos(-45, 0, -1.125, 150, IType.SIN_FULL).addPos(-20, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)); + case RELOAD: return new BusAnimation() + .addBus("ROLL", new BusAnimationSequence().addPos(0, 0, 20, 150, IType.SIN_FULL).addPos(0, 0, 20, 50).addPos(0, 0, -45, 150, IType.SIN_UP).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("MAG", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, -2, 0, 0).addPos(-15, -5, 0, 350).addPos(-15, 0, 0, 0).addPos(-15, 0, 0, 700).addPos(3, 3, 0, 0).addPos(0, -2, 0, 250, IType.SIN_DOWN).addPos(0, -2, 0, 50).addPos(0, 0, 0, 150, IType.SIN_DOWN)) + .addBus("MAGROLL", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, -180, 250).addPos(0, 0, 0, 0)) + .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 750).addPos(5, 0, 0, 150, IType.SIN_FULL).addPos(-190, 0, 0, 500, IType.SIN_FULL).addPos(-190, 0, 0, 450).addPos(-360, 0, 0, 350, IType.SIN_DOWN).addPos(0, 0, 0, 0)) + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 2350).addPos(-5, 0, 0, 100, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 2200).addPos(0, 0, -1.125, 150, IType.SIN_FULL).addPos(0, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)) + .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 0, 2250).addPos(-45, 0, -1.125, 100, IType.SIN_FULL).addPos(-20, 0, -1.125, 50).addPos(0, 0, 0, 150, IType.SIN_UP)) + .addBus("BULLET", new BusAnimationSequence().addPos(ammo > 0 ? 0 : -100, 0, 0, 0).addPos(ammo > 0 ? 0 : -100, 0, 0, 2400).addPos(0, 0, 0, 0).addPos(0, 0.375, 1.125, 150, IType.SIN_UP)); + case INSPECT: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 0).addPos(-720, 0, 0, 1000, IType.SIN_FULL).addPos(-720, 0, 0, 250).addPos(0, 0, 0, 1000, IType.SIN_FULL)); + } + return null; }; } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 010e5e9bf..2decbf76b 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -886,6 +886,7 @@ public class ResourceManager { public static final IModelCustom hangman = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/hangman.obj")).asVBO(); public static final IModelCustom folly = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/folly.obj")).asVBO(); public static final IModelCustom double_barrel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/sacred_dragon.obj")).asVBO(); + public static final IModelCustom aberrator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/aberrator.obj")).asVBO(); public static final HashMap python_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/python.json")); public static final HashMap cursed_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/cursed.json")); @@ -1034,6 +1035,7 @@ public class ResourceManager { public static final ResourceLocation folly_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/moonlight.png"); public static final ResourceLocation double_barrel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel.png"); public static final ResourceLocation double_barrel_sacred_dragon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel_sacred_dragon.png"); + public static final ResourceLocation aberrator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/aberrator.png"); public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAberrator.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAberrator.java new file mode 100644 index 000000000..307f6fe35 --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAberrator.java @@ -0,0 +1,240 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +public class ItemRenderAberrator extends ItemRenderWeaponBase { + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * 0.33F); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 1); + + float offset = 0.8F; + standardAimingTransform(stack, + -1.0F * offset, -1.25F * offset, 1.25F * offset, + 0, -5.25 / 8D, 0.125); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.aberrator_tex); + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] rise = HbmAnimations.getRelevantTransformation("RISE"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] slide = HbmAnimations.getRelevantTransformation("SLIDE"); + double[] bullet = HbmAnimations.getRelevantTransformation("BULLET"); + double[] hammer = HbmAnimations.getRelevantTransformation("HAMMER"); + double[] roll = HbmAnimations.getRelevantTransformation("ROLL"); + double[] mag = HbmAnimations.getRelevantTransformation("MAG"); + double[] magroll = HbmAnimations.getRelevantTransformation("MAGROLL"); + double[] sight = HbmAnimations.getRelevantTransformation("SIGHT"); + + GL11.glTranslated(0, rise[1], 0); + + GL11.glTranslated(0, 1, -2.25); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, -1, 2.25); + + GL11.glTranslated(0, -1, -4); + GL11.glRotated(recoil[0], 1, 0, 0); + GL11.glTranslated(0, 1, 4); + + GL11.glTranslated(0, 1, 0); + GL11.glRotated(roll[2], 0, 0, 1); + GL11.glTranslated(0, -1, 0); + + GL11.glShadeModel(GL11.GL_SMOOTH); + + ResourceManager.aberrator.renderPart("Gun"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.4375, -1.9375); + GL11.glRotated(sight[0], 1, 0, 0); + GL11.glTranslated(0, -2.4375, 1.9375); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + + GL11.glTranslated(0, 1, 0); + GL11.glRotated(magroll[2], 0, 0, 1); + GL11.glTranslated(0, -1, 0); + + ResourceManager.aberrator.renderPart("Magazine"); + GL11.glTranslated(bullet[0], bullet[1], bullet[2]); + ResourceManager.aberrator.renderPart("Bullet"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, slide[2]); + ResourceManager.aberrator.renderPart("Slide"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.25, -3.625); + GL11.glRotated(-45 + hammer[0], 1, 0, 0); + GL11.glTranslated(0, -1.25, 3.625); + ResourceManager.aberrator.renderPart("Hammer"); + GL11.glPopMatrix(); + + double smokeScale = 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 4); + GL11.glRotated(recoil[0], -1, 0, 0); + GL11.glRotated(roll[2], 0, 0, -1); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.5D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 4); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * gun.shotRand, 1, 0, 0); + GL11.glScaled(0.75, 0.75, 0.75); + this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, -1.5); + GL11.glScaled(0.5, 0.5, 0.5); + this.renderFireball(gun.lastShot[0]); + GL11.glPopMatrix(); + + Minecraft.getMinecraft().renderEngine.bindTexture(Minecraft.getMinecraft().getTextureManager().getResourceLocation(Items.golden_sword.getSpriteNumber())); + IIcon icon = Items.golden_sword.getIconFromDamage(0); + + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + GL11.glTranslated(0, 2, 4.5); + GL11.glRotated(roll[2], 0, 0, -1); + GL11.glRotated(recoil[0], -1, 0, 0); + GL11.glRotated(equip[0], -1, 0, 0); + GL11.glRotated(System.currentTimeMillis() / 50D % 360D, 0, 0, 1); + + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + aimingProgress = Math.min(1F, aimingProgress * 2); + + Tessellator tess = Tessellator.instance; + GL11.glPushMatrix(); + int amount = 16; + for(int i = 0; i < amount; i++) { + GL11.glPushMatrix(); + GL11.glTranslated(0, -1.5 - aimingProgress, 0); + GL11.glRotated(90 * aimingProgress, 1, 0, 0); + GL11.glRotated(-45, 0, 0, 1); + tess.startDrawingQuads(); + tess.setNormal(0F, 1F, 0F); + tess.addVertexWithUV(-0.5, -0.5F, -0.5, maxU, maxV); + tess.addVertexWithUV(0.5F, -0.5F, -0.5, minU, maxV); + tess.addVertexWithUV(0.5F, 0.5F, -0.5, minU, minV); + tess.addVertexWithUV(-0.5, 0.5F, -0.5, maxU, minV); + tess.draw(); + GL11.glPopMatrix(); + GL11.glRotated(360D / amount, 0, 0, 1); + } + GL11.glPopMatrix(); + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + GL11.glTranslated(0, -1, 4); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void setupInv(ItemStack stack) { + super.setupInv(stack); + double scale = 2.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-0.5,-1, 0); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glAlphaFunc(GL11.GL_GREATER, 0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.aberrator_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glShadeModel(GL11.GL_FLAT); + } + + public static void renderFireball(long lastShot) { + Tessellator tess = Tessellator.instance; + + int flash = 150; + + if(System.currentTimeMillis() - lastShot < flash) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + + double fire = (System.currentTimeMillis() - lastShot) / (double) flash; + double height = 5 * fire; + double length = 10 * fire; + double offset = 1 * fire; + double lengthOffset = -1.125; + Minecraft.getMinecraft().renderEngine.bindTexture(flash_plume); + tess.startDrawingQuads(); + tess.setNormal(0F, 1F, 0F); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + + tess.addVertexWithUV(height, -offset, 0, 0, 1); + tess.addVertexWithUV(-height, -offset, 0, 1, 1); + tess.addVertexWithUV(-height, -offset + length, -lengthOffset, 1, 0); + tess.addVertexWithUV(height, -offset + length, -lengthOffset, 0 ,0); + + tess.addVertexWithUV(height, -offset, 0, 0, 1); + tess.addVertexWithUV(-height, -offset, 0, 1, 1); + tess.addVertexWithUV(-height, -offset + length, lengthOffset, 1, 0); + tess.addVertexWithUV(height, -offset + length, lengthOffset, 0 ,0); + + tess.draw(); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_BLEND); + } + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreasegun.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreasegun.java index 41c7f287d..a04e1de80 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreasegun.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreasegun.java @@ -121,7 +121,6 @@ public class ItemRenderGreasegun extends ItemRenderWeaponBase { public void setupThirdPerson(ItemStack stack) { super.setupThirdPerson(stack); GL11.glTranslated(0, 1, 3); - } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d9999ea1c..7e274fdf0 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1197,11 +1197,13 @@ item.ammo_shell.name=240mm Geschoss item.ammo_shell_apfsds_du.name=240mm APFSDS-DU item.ammo_shell_apfsds_t.name=240mm APFSDS-T item.ammo_shell_explosive.name=240mm HE-Geschoss +item.ammo_shell_w9.name=240mm W9-Atomgeschoss item.ammo_secret.bmg50_equestrian.name=.50 BMG Zerstörer item.ammo_secret.folly_nuke.name=Silberne Kugel, Atomar item.ammo_secret.folly_sm.name=Silberne Kugel item.ammo_secret.g12_equestrian.name=Kaliber 12 Gleisnägel item.ammo_secret.m44_equestrian.name=.44 Magnum Schädelsprenger +item.ammo_secret.p35_800.name=.35-800 V9 item.ammo_standard.b75.name=.75 Bolzen item.ammo_standard.b75_exp.name=.75 Bolzen (Explosiv) item.ammo_standard.b75_inc.name=.75 Bolzen (Brand) @@ -2197,6 +2199,7 @@ item.grenade_smart.name=Smart-Granate item.grenade_strong.name=Verbesserte Handgranate item.grenade_tau.name=Taugranate item.grenade_zomg.name=Negativenergie-Paarvernichtungsgranate +item.gun_aberrator.name=Aberrator item.gun_am180.name=Schallgedämpfte Maschinenpistole item.gun_ar15.name=Josh item.gun_autoshotgun.name=Auto-Flinte diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e57d4d3c8..9c4e78f98 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1927,6 +1927,7 @@ item.ammo_secret.folly_nuke.name=Silver Bullet, Nuclear item.ammo_secret.folly_sm.name=Silver Bullet item.ammo_secret.g12_equestrian.name=12 Gauge Railway Spike Shot item.ammo_secret.m44_equestrian.name=.44 Magnum Head-Exploder +item.ammo_secret.p35_800.name=.35-800 V9 item.ammo_standard.b75.name=.75 Bolt item.ammo_standard.b75_exp.name=.75 Bolt (Explosive) item.ammo_standard.b75_inc.name=.75 Bolt (Incendiary) @@ -3005,6 +3006,7 @@ item.grenade_tau.name=Tau Grenade item.grenade_zomg.name=Negative Energy Pair Annihilation Grenade item.glyphid_gland.name= Gland item.glyphid_gland_empty.name= Glyphid's Fluid Gland +item.gun_aberrator.name=Aberrator item.gun_am180.name=Silenced Submachine Gun item.gun_ar15.name=Josh item.gun_autoshotgun.name=Auto Shotgun diff --git a/src/main/resources/assets/hbm/models/weapons/_yellowwood.obj b/src/main/resources/assets/hbm/models/weapons/aberrator.obj similarity index 100% rename from src/main/resources/assets/hbm/models/weapons/_yellowwood.obj rename to src/main/resources/assets/hbm/models/weapons/aberrator.obj diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 7bb46ab65..46a6d1429 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -249,6 +249,7 @@ "weapon.fire.greaseGun": {"category": "player", "sounds": ["weapon/fire/greaseGun"]}, "weapon.fire.uzi": {"category": "player", "sounds": ["weapon/fire/uzi"]}, "weapon.fire.tesla": {"category": "player", "sounds": ["weapon/fire/tesla"]}, + "weapon.fire.aberrator": {"category": "player", "sounds": ["weapon/fire/aberrator"]}, "weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]}, "weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/aberrator.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/aberrator.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e57ca00534449f432b657a4e5617bd19f42853aa GIT binary patch literal 25409 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 z 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

9aW@d8oYZ;K0 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/_yellowwood.png b/src/main/resources/assets/hbm/textures/models/weapons/_yellowwood.png deleted file mode 100644 index f8cdc0127a86b0577f1c4ccabc7102d8447ba237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2373 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%0D2`cUir2vO z2imG^#0Vt6KV-q%l(4ZpSJg(_j1%d+pC<%f7`o7Giq36H`2Id(1(7_`)Xz3i zHy6<`g2f|7bHqYx3Tw0Tbog4UA&bWKyRo1OCgT4k^!L{JXBZ@DdBiU*hN^XN=Spjt zoil%M57`f`Yuoz@H%0Q?eMZo(0ybTsin#e&9#znwl~6T+Tu3J2uwya-VHSFJ53~ys zNn&Gp0PKf5poOY+R>pA5*sfIxh#*|Bu{@mw3}k+esyXEYFCa|%*lZ)*vCT99uoqB} zcvQ)Tv8=;ba?nidLd#B{p-N(lujP^XP$y~Uk4_h-5V7p@1P&(^U#J2*J%~24Np3_E_18-rT-?+Q~?q5|uz&H1A#r1ix zvvgAdE5iWu_hHv;16h+erT-5Wyybx#A2p7-_V+l8$CNAP!Y-2*y#EX&3Z zW(o|5=leGMd}_HN`T)MT{1zBVo<71-jV#6LDD7N4lgXs9J)6yHaUVc4`o9oac6*dHCvW_TkBc z;0pF~y*Zd0yZ7QD+9TEZ+H437638rG@5R&Ce?8`YKpN z8DKUcB}WzHljPknUVN{tvZ)4 z+^R}jc8-{_ZhLQjN@f){=g1)OI52h#Z4$`Xpk);a!V?k?VGUWECL|uh8VZ&)A@LA| zCnO$%@Pwjm4p2W&_=3(ug2dy&*ab9p(J-jlMi8Em_ZQ~*FI576YLYAiq`8)*S35kawJR$KA)=*Qe35kawJfVPr161=~Lo1V$ zc$}b6HNivTaeyq(HDq~6JVXFuWx{XU9Me@s;yJSQUTv@Gb3YsY4}=)ob>e8kk^lez M07*qoM6N<$g5L)HF#rGn literal 0 HcmV?d00001