From 7e01544c191d24a7aa3ba27e8590bfbcbb7148e5 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 31 Aug 2025 15:35:43 +0200 Subject: [PATCH] fresh from the juice, fresh from the juice! don't get it on your shoese --- changelog | 11 ++++++++ gradle.properties | 2 +- .../blocks/machine/MachinePWRController.java | 2 +- .../projectile/EntityBulletBeamBase.java | 4 +-- .../java/com/hbm/itempool/ItemPoolsC130.java | 17 +++++++------ .../com/hbm/itempool/ItemPoolsRedRoom.java | 3 +++ .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 2 +- .../weapon/sedna/factory/GunFactory.java | 3 ++- .../items/weapon/sedna/impl/ItemGunNI4NI.java | 10 ++++++-- .../weapon/sedna/mods/WeaponModManager.java | 4 +++ .../weapon/sedna/mods/WeaponModNickel.java | 13 ++++++++++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../item/weapon/sedna/ItemRenderNI4NI.java | 10 ++++---- .../hbm/render/tileentity/RenderBobble.java | 24 ++++++++++++------ src/main/resources/assets/hbm/lang/de_DE.lang | 2 ++ src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ .../hbm/textures/items/weapon_mod_sheet.png | Bin 3528 -> 3703 bytes .../items/weapon_mod_special.doubloons.png | Bin 0 -> 307 bytes .../items/weapon_mod_special.nickel.png | Bin 0 -> 302 bytes .../hbm/textures/models/trinkets/frizzle.png | Bin 1707 -> 2732 bytes 20 files changed, 81 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModNickel.java create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.doubloons.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.nickel.png diff --git a/changelog b/changelog index 191a7880f..5d4eaf7ab 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,14 @@ +## Added +* N I 4 N I + * It's that one gun from that one game, you throw coins and your shots bounce around + * Needs no introduction + * Can be upgraded with nickels or gold doubloons for more pocket change to yeet + * Found in airdrop supply crates, about 10x rarer than a double barrel shotgun +* More structures + * I haven't even looked at them so it's a surprise for everyone +* PWR printer + * Using it on a PWR controller will cause the game to generate images of each layer of the reactor + ## Changed * Updated ukrainian, chinese and russian localization, including QMAW * Some previously hardcoded lang strings are now affected by translations diff --git a/gradle.properties b/gradle.properties index 03457ea9b..cb0e42305 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5426 +mod_build_number=5439 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java index 68007db4d..61b9930dc 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java @@ -56,7 +56,7 @@ public class MachinePWRController extends BlockContainer implements ITooltipProv @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { - return metadata == 0 && side != 0 && side != 1 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); + return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); } @Override diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java index b14a5f80b..c72958aa0 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java @@ -266,13 +266,13 @@ public class EntityBulletBeamBase extends Entity implements IEntityAdditionalSpa newBeam.setPosition(coinHit.hitVec.xCoord, coinHit.hitVec.yCoord, coinHit.hitVec.zCoord); Vec3 delta = Vec3.createVectorHelper(target.posX - newBeam.posX, (target.posY + target.height / 2D) - newBeam.posY, target.posZ - newBeam.posZ); newBeam.setRotationsFromVector(delta); - newBeam.performHitscanExternal(delta.lengthVector()); + newBeam.performHitscanExternal(250D); worldObj.spawnEntityInWorld(newBeam); } else { EntityBulletBeamBase newBeam = new EntityBulletBeamBase(hitCoin.getThrower() != null ? hitCoin.getThrower() : this.thrower, this.config, this.damage * 1.25F); newBeam.setPosition(coinHit.hitVec.xCoord, coinHit.hitVec.yCoord, coinHit.hitVec.zCoord); newBeam.setRotationsFromVector(Vec3.createVectorHelper(rand.nextGaussian() * 0.5, -1, rand.nextGaussian() * 0.5)); - newBeam.performHitscanExternal(100); + newBeam.performHitscanExternal(250D); worldObj.spawnEntityInWorld(newBeam); } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsC130.java b/src/main/java/com/hbm/itempool/ItemPoolsC130.java index c39fa9dbe..480a46c18 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsC130.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsC130.java @@ -33,14 +33,15 @@ public class ItemPoolsC130 { new ItemPool(POOL_WEAPONS) {{ this.pool = new WeightedRandomChestContent[] { - weighted(ModItems.gun_light_revolver, 0, 1, 1, 10), - weighted(ModItems.gun_henry, 0, 1, 1, 10), - weighted(ModItems.gun_maresleg, 0, 1, 1, 10), - weighted(ModItems.gun_greasegun, 0, 1, 1, 10), - weighted(ModItems.gun_carbine, 0, 1, 1, 5), - weighted(ModItems.gun_heavy_revolver, 0, 1, 1, 5), - weighted(ModItems.gun_panzerschreck, 0, 1, 1, 2), - weighted(ModItems.gun_double_barrel, 0, 1, 1, 1), + weighted(ModItems.gun_light_revolver, 0, 1, 1, 100), + weighted(ModItems.gun_henry, 0, 1, 1, 100), + weighted(ModItems.gun_maresleg, 0, 1, 1, 100), + weighted(ModItems.gun_greasegun, 0, 1, 1, 100), + weighted(ModItems.gun_carbine, 0, 1, 1, 50), + weighted(ModItems.gun_heavy_revolver, 0, 1, 1, 50), + weighted(ModItems.gun_panzerschreck, 0, 1, 1, 20), + weighted(ModItems.gun_double_barrel, 0, 1, 1, 10), + weighted(ModItems.gun_n_i_4_n_i, 0, 1, 1, 1), }; }}; diff --git a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java index e4a85d34a..ea6c81ef1 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java @@ -4,6 +4,7 @@ import static com.hbm.lib.HbmChestContents.weighted; import com.hbm.blocks.ModBlocks; import com.hbm.items.ItemEnums.EnumSecretType; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModSpecial; import com.hbm.items.ModItems; import net.minecraft.util.WeightedRandomChestContent; @@ -44,6 +45,8 @@ public class ItemPoolsRedRoom { weighted(ModItems.gun_hangman, 0, 1, 1, 1), weighted(ModItems.gun_mas36, 0, 1, 1, 1), weighted(ModItems.item_secret, EnumSecretType.FOLLY.ordinal(), 1, 1, 1), + weighted(ModItems.weapon_mod_special, EnumModSpecial.NICKEL.ordinal(), 1, 1, 1), + weighted(ModItems.weapon_mod_special, EnumModSpecial.DOUBLOONS.ordinal(), 1, 1, 1), }; }}; diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index f950c9590..2506d5d84 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -209,7 +209,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I } if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable && !this.recognizedMods.isEmpty()) { - list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.accepts" + ":")); + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.accepts") + ":"); for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName()); } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index bbf976df7..d2daf744c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -164,7 +164,8 @@ public class GunFactory { SPEEDUP, CHOKE, SPEEDLOADER, FURNITURE_GREEN, FURNITURE_BLACK, BAYONET, STACK_MAG, SKIN_SATURNITE, LAS_SHOTGUN, - LAS_CAPACITOR, LAS_AUTO + LAS_CAPACITOR, LAS_AUTO, + NICKEL, DOUBLOONS } public static enum EnumModCaliber { diff --git a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunNI4NI.java b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunNI4NI.java index 71619f721..3212d04a1 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunNI4NI.java +++ b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunNI4NI.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.items.ICustomizable; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.util.ChatBuilder; import cpw.mods.fml.relauncher.Side; @@ -27,7 +28,12 @@ public class ItemGunNI4NI extends ItemGunBaseNT implements ICustomizable { super.onUpdate(stack, world, entity, slot, isHeld); if(!world.isRemote) { - if(this.getCoinCount(stack) < 4) { + + int maxCoin = 4; + if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NI4NI_NICKEL)) maxCoin += 2; + if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NI4NI_DOUBLOONS)) maxCoin += 2; + + if(this.getCoinCount(stack) < maxCoin) { this.setCoinCharge(stack, this.getCoinCharge(stack) + 1); if(this.getCoinCharge(stack) >= 80) { @@ -36,7 +42,7 @@ public class ItemGunNI4NI extends ItemGunBaseNT implements ICustomizable { this.setCoinCount(stack, newCount); if(isHeld) { - world.playSoundAtEntity(entity, "hbm:item.techBoop", 1.0F, 1.25F + newCount * 0.125F); + world.playSoundAtEntity(entity, "hbm:item.techBoop", 1.0F, 1F + newCount / (float) maxCoin); } } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index fbee99b2b..da52d93ab 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -149,6 +149,8 @@ public class WeaponModManager { new WeaponModDefinition(EnumModSpecial.LAS_SHOTGUN).addMod(new Item[] {ModItems.gun_lasrifle}, new WeaponModLasShotgun(ID_LAS_SHOTGUN)); new WeaponModDefinition(EnumModSpecial.LAS_CAPACITOR).addMod(new Item[] {ModItems.gun_lasrifle}, new WeaponModLasCapacitor(ID_LAS_CAPACITOR)); new WeaponModDefinition(EnumModSpecial.LAS_AUTO).addMod(new Item[] {ModItems.gun_lasrifle}, new WeaponModLasAuto(ID_LAS_AUTO)); + new WeaponModDefinition(EnumModSpecial.NICKEL).addMod(new Item[] {ModItems.gun_n_i_4_n_i}, new WeaponModNickel(ID_NI4NI_NICKEL, "COIN1")); + new WeaponModDefinition(EnumModSpecial.DOUBLOONS).addMod(new Item[] {ModItems.gun_n_i_4_n_i}, new WeaponModNickel(ID_NI4NI_DOUBLOONS, "COIN2")); BulletConfig[] p9 = new BulletConfig[] {XFactory9mm.p9_sp, XFactory9mm.p9_fmj, XFactory9mm.p9_jhp, XFactory9mm.p9_ap}; BulletConfig[] p45 = new BulletConfig[] {XFactory45.p45_sp, XFactory45.p45_fmj, XFactory45.p45_jhp, XFactory45.p45_ap, XFactory45.p45_du}; @@ -202,6 +204,8 @@ public class WeaponModManager { public static final int ID_LAS_CAPACITOR = 217; public static final int ID_LAS_AUTO = 218; public static final int ID_CARBINE_BAYONET = 219; + public static final int ID_NI4NI_NICKEL = 220; + public static final int ID_NI4NI_DOUBLOONS = 221; public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) { if(!stack.hasTagCompound()) return new ItemStack[0]; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModNickel.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModNickel.java new file mode 100644 index 000000000..b41ef3f6c --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModNickel.java @@ -0,0 +1,13 @@ +package com.hbm.items.weapon.sedna.mods; + +import net.minecraft.item.ItemStack; + +public class WeaponModNickel extends WeaponModBase { + + public WeaponModNickel(int id, String name) { + super(id, name); + this.setPriority(PRIORITY_SET); + } + + @Override public T eval(T base, ItemStack gun, String key, Object parent) { return base; } +} diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index b5f8b7af2..2a5cc3b4c 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5426)"; + public static final String VERSION = "1.0.27 BETA (5439)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderNI4NI.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderNI4NI.java index ce4f8a846..c38aefa5f 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderNI4NI.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderNI4NI.java @@ -94,12 +94,12 @@ public class ItemRenderNI4NI extends ItemRenderWeaponBase { ResourceManager.n_i_4_n_i.renderPart("Barrel"); GL11.glDisable(GL11.GL_TEXTURE_2D); - GL11.glColor3f(0F, 1F, 0F); int coinCount = ItemGunNI4NI.getCoinCount(stack); - if(coinCount > 3) ResourceManager.n_i_4_n_i.renderPart("Coin1"); - if(coinCount > 2) ResourceManager.n_i_4_n_i.renderPart("Coin2"); - if(coinCount > 1) ResourceManager.n_i_4_n_i.renderPart("Coin3"); - if(coinCount > 0) ResourceManager.n_i_4_n_i.renderPart("Coin4"); + if(coinCount > 3) { GL11.glColor3f(coinCount > 7 ? 1F : 0F, 1F, 0F); ResourceManager.n_i_4_n_i.renderPart("Coin1"); } + if(coinCount > 2) { GL11.glColor3f(coinCount > 6 ? 1F : 0F, 1F, 0F); ResourceManager.n_i_4_n_i.renderPart("Coin2"); } + if(coinCount > 1) { GL11.glColor3f(coinCount > 5 ? 1F : 0F, 1F, 0F); ResourceManager.n_i_4_n_i.renderPart("Coin3"); } + if(coinCount > 0) { GL11.glColor3f(coinCount > 4 ? 1F : 0F, 1F, 0F); ResourceManager.n_i_4_n_i.renderPart("Coin4"); } + GL11.glEnable(GL11.GL_TEXTURE_2D); RenderArcFurnace.fullbright(false); diff --git a/src/main/java/com/hbm/render/tileentity/RenderBobble.java b/src/main/java/com/hbm/render/tileentity/RenderBobble.java index 58e8ee850..fe3c9142f 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBobble.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBobble.java @@ -6,6 +6,7 @@ import org.lwjgl.opengl.GL12; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModSpecial; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; @@ -201,6 +202,8 @@ public class RenderBobble extends TileEntitySpecialRenderer { case FRIZZLE: rotLeftArm = new double[]{0, 15, 45}; rotRightArm = new double[]{0, 0, 80}; + rotLeftLeg = new double[]{0, 0, 2}; + rotRightLeg = new double[]{0, 0, -2}; break; case ADAM29: rotRightArm = new double[]{0, 0, 60}; @@ -410,19 +413,24 @@ public class RenderBobble extends TileEntitySpecialRenderer { break; case FRIZZLE: GL11.glPushMatrix(); - GL11.glTranslated(0.7, 1.7, 0.4); - GL11.glScaled(0.5, 0.5, 0.5); - GL11.glRotated(-90, 0, 1, 0); - GL11.glRotated(-10, 1, 0, 0); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_gun_dark); ResourceManager.ff_nightmare.renderPart("Grip"); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_gun_normal); ResourceManager.ff_nightmare.renderPart("Dark"); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_gun_bright); ResourceManager.ff_nightmare.renderPart("Light"); + GL11.glTranslated(0.8, 1.6, 0.4); + GL11.glScaled(0.125, 0.125, 0.125); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(10, 1, 0, 0); + this.bindTexture(ResourceManager.n_i_4_n_i_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.n_i_4_n_i.renderPart("FrameDark"); + ResourceManager.n_i_4_n_i.renderPart("Grip"); + ResourceManager.n_i_4_n_i.renderPart("FrameLight"); + ResourceManager.n_i_4_n_i.renderPart("Cylinder"); + ResourceManager.n_i_4_n_i.renderPart("Barrel"); + GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); GL11.glTranslated(0.3, 1.4, -0.2); GL11.glRotated(-100, 1, 0, 0); GL11.glScaled(0.5, 0.5, 0.5); - renderItem(new ItemStack(ModItems.coin_maskman, 1, 5)); + renderItem(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.DOUBLOONS.ordinal())); break; case ADAM29: GL11.glTranslated(0.4, 1.15, 0.4); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b59ad8b12..7599e7e9e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3647,12 +3647,14 @@ item.weapon_mod_generic.wsteel_damage.name=Optimierter Waffenstahl-Verschluss item.weapon_mod_generic.wsteel_dura.name=Langlebige Waffenstahl-Teile item.weapon_mod_special.bayonet.name=Bayonet item.weapon_mod_special.choke.name=Choke +item.weapon_mod_special.doubloons.name=Zwei Golddublonen item.weapon_mod_special.furniture_black.name=Polymergriff (Schwarz) item.weapon_mod_special.furniture_green.name=Polymergriff (Grün) item.weapon_mod_special.greasegun.name=Grease Gun Modernisierungskit item.weapon_mod_special.las_auto.name=Lasergewehr - Autommatischer Verschluss item.weapon_mod_special.las_capacitor.name=Lasergewehr - Erweiterter Kondensator item.weapon_mod_special.las_shotgun.name=Lasergewehr - Strahlteiler +item.weapon_mod_special.nickel.name=10 Cent item.weapon_mod_special.saw.name=Bügelsäge item.weapon_mod_special.scope.name=Ziehlvorrichtung item.weapon_mod_special.silencer.name=Schalldämpfer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 76c36d64d..b3448d753 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4791,12 +4791,14 @@ item.weapon_mod_generic.wsteel_damage.name=Optimized Weapon Steel Receiver item.weapon_mod_generic.wsteel_dura.name=High-Durability Weapon Steel Parts item.weapon_mod_special.bayonet.name=Bayonet item.weapon_mod_special.choke.name=Choke +item.weapon_mod_special.doubloons.name=Two Gold Doubloons item.weapon_mod_special.furniture_black.name=Polymer Furniture (Black) item.weapon_mod_special.furniture_green.name=Polymer Furniture (Green) item.weapon_mod_special.greasegun.name=Grease Gun Modernization Kit item.weapon_mod_special.las_auto.name=Laser Rifle Automatic Receiver item.weapon_mod_special.las_capacitor.name=Laser Rifle Extended Capacitor item.weapon_mod_special.las_shotgun.name=Laser Rifle Beam Splitter +item.weapon_mod_special.nickel.name=Two Nickels item.weapon_mod_special.saw.name=Hacksaw item.weapon_mod_special.scope.name=Scope item.weapon_mod_special.silencer.name=Silencer diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png index 20774b196ff159d47c818c6011d0c0b3e0e9133a..3bad2cfdaf8cef7b0bb55979cb5a40ad0d4cb8bd 100644 GIT binary patch delta 3687 zcmV-t4w&)C8}}TLGk*>)Nkl)=>u~CRc;>3wT{OF3_{;T8`D?ZZ6=ezs7yMOzB-uu3H-|xNC*fuZ} zpuGeQGN@xZhyDC2!UAP}%EOT;gu^#ytuntx(qTtf2`l{XB8C{P!*xGvy-{qZn)iUB$G)c5zIB1jA*E} z9NyIO_VaqZZ0F9M7#kbI+}s={CMK}8@)a~bb;Xgtgn#~!@d4-}`2BvV<{1nI*&~1M z#>aEBxbWeqZhXFsa5yY1OJsZiIDY)Nmd$3N)f#g|t*EgTWPgMrghC>+I~*c5GhB;(wPu z(~U23KQbT@!r`z+owf|fh;E zZqb2lZEeis@ffxx5(#AySk}v;+hUlx2>i0&t0V#$QZ*MqTpA{mp+(!w@Or(hwY3#% z*RI9b*cf85m{LBVwY3$u+;R)%=H~E=ubwo79HjCAK)&XCJRT$x3B!_3r_t8dCf!v1 zem}dMm`3xV1b*4?#l(q(Qh#n?XlMvSLqp2B03a_~MMZ^P78zgW`GbtlhoWW98H>fV zQ>RYp#+MCQ0D!>-4Gs>1YJWPNMomqPzAuqT$dqR^T5fCp2@ueqp6!f4#^+H=dX$h# zr2t$FC^|tHipB_Q)Qp)eQ7#}Bi)q~}VytpwJ^)vTJQo1$_=XnH)PK~Zuh-PnfOkb^ zx8#Hep1DI`f8^*-mAC*5=~1WFBWfuW{-!5+vk2xgW3ial*Vm^T-<(vDxn_Fmoj8%e zQqOWUbjRiM0pw!H1@TCy)0mx|#lsIj?AR$&$QZa9vY=2lVC{nmWXx15B^?Uq&q-W! z?!kPFRe7rMd=aRO6@ME&j-l)&z*XN5K==9lLakwHY6>2Y$F@JXc=4ja@N}~Pq(Z@z z9tG4gbJ=WGUqmj4M5KkvHp3i1d-AaXsmzuLGNJ4xK;HKg$l$ZHv-)pSQxiNM4 zRHvNF<&e#0kxHeIOeT@b<)n;HP>sS;2TKcJbTPqTkflDQq%&vE2yY;p&En)=Cb87>4K639k-0Pp*X>u3xipDKj=G($+ki+UqNg}X1SiAs zP#p!C(b5ZT0DqGV8-dXm&ZGGyuTn^w=eqzb^>89yIL}&op&2^ibUJM)pr)qA(BZbV zwJ{RJ>ZFa0jcnDbRd^$mXV885$^rQ{Q5SC}3k_Bde;a(tqECn3b%g9DgIfZ7Ki&2n6gy(IUPuA0Wc-wr^$taA5!ICHcbj>(?^?ID7W2kUyUgw7DEU zptokt8l+MweGqUhu%P(>E3|jq%Wkb+j!!42(c5!c*+}*E^~~jRA(P2qWMrg>@ALUs zd3iZXnG?W+hMW|7pph8hJP5E#$f)K6hKGlx`F~|VzIJ~)IgMMZmm3bCZ3p(huJ!hu z)~FSg(&7Sp@!}tCZO>JaV}l_`sVi zs3wn%jR6WZITnj)09b2lD~5-MacFx2yX(uCOz^G@$Q%08$?2k<=56%fygif2Ad|@y z@qf+R=)dS#U|~fl6?{S_5D2iozCQh3ey4l@0Cspw0!uv}wR`~8W)gxI#O!WFLQ!od zA$UQ|HQmbigh(W!Q83RcBPN?&Qw5(BSg~S-QdW%kd_JIVL%m}FPw#{yr{8z1ZFast zlgT*pMZRAIyOuDY44Dk5CIiqDGjY7b8h@XH7n z?gXn*5czi}SdD^2uhKk$^4|6AN zhLd|SchXL{jKSm56SO zNw)x=Yn53m+${m z>yV`F1jy?Qkr!tC+^JillZ^hN5T<^9_2yIw%Xr~b~rBbM^twk^x z1OT>Y*B@-pNyewIr07qqlJf%qu?3?F>7TL0z2zo5&16@{NjO|W{8)a`a78jYg4xqrE6AGw{{+FD%% z9^|4#?uegYaXB$93>ye9$W+EaJ6PqN`PfgxJ#k!q*Pg!w0LK5Zzi8(dsf&ii4&&qF z7#|_9xw#qPa9A&+P^;OdO`8C~&;mlC5PUu#064lMnE;yXeaW;W!!WcEKm!1{ zj{TGI+wD$t+wxCvtp5tu-Tftw^& delta 3511 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 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.doubloons.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.doubloons.png new file mode 100644 index 0000000000000000000000000000000000000000..f7300bd1da07d7c11a4493c64216f84970732187 GIT binary patch literal 307 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 P00000NkvXXu0mjf+;T35 delta 1676 zcmV;726OqW6{`)9Gk*qRNklMo!Qw<*4@DUz;MsK=Xd`6&iS41{oPU6gnw@yEJ^^!bukTtunged z)Hr=&eq#G`@BK^JY>eGRoyN#zOSF0YpQ}OPYH)e{V3E8fZ+(V4%%&004|gFDLI7YI26@ZsABj7eO&1{Qq^hcT zzCUsl?qsI&#D5h6&kxRfcFJA9e!aW>S$%~}r2(GrlQj$+->2ug*jUFW9b(eosls^WXz$RJ@J0mLFF%p-OaUDtFR#|JfV zKoTs3?FfXBsH(!bpFf3Vm}E0E^g3&xsjOcAKQF!cE}fo(>j`vCK@uDnUkHS+V4502 z%Bk{*-G4&$d=FJsu{1rHyze1_jHzRq24|mo65%S`SZ%Yke1pZMWrQneuCMXa@1Ddo z4Kk*V1bp8^+vqEJWqNx)j|g6aijONi98chSlBXZOpJyLELEhBJSr(_B{~hQ5ayJ>* z;ZUv0@BdWenOELsrt&rNrpB|6p5W<+@5l9I(0_;UKncQoujdhc5kzVTAuvsoAARdE z`--!yxi_g~i`4F#L$_vm`~CL;_~G{+;@bZ%@pR7E*CpTxuYMpi(XYV7m@kD?_{IW4jJg0o}AP3dVjAYjI93Y?=Qr%ntw0;Bvyan!iC8@wy+?7 z`TR49Rp);5I=uYyveeK5iksX{myF~sm-w1SOehfsWXAil`HWX96AKK z+~9sAYs9vL>!+V4+gny(GhBcCc>Ml}CnlapHFSPE6tZ(cq0tC_^Yc(DK`zJHQ)lAN zm&?H~YTsxKoC$x!L~UWv2SB$Qw}06N{UZ?W@Rk`KIO4?FQ)j?+<2yXTe&o4rL#-BX zW7~r^URf+AJ5sF%I~3kWor>DS;JgoGS-f)jul?KBCm(UQxEB@&CjY(gAAd?YGq}0@ z85OY<>*Dk#z9mLLyLT<-=tPZ(I#V3_TP*5WsWfU6mRqgSe#b2eu(CEt%S$D6Id1Yqv zyg-Lr5I_h-Dyck;eaJW=9DgEQh;fd!x(<~I^+`;v0aFw1{xC^SMi(R6E}@S}kudK0 zH0Y(;hrs}i2PPVZcK6&DKbwE15)?vbqGDGn4PIyCb~$Qat;R*vwkJAQnaQ)#j10G7 zyRy~^>c$+ADE$Z+=b-)Z#}hj^{>OE?_BuH$N7rs}c>mEztq*jAjDPWk!Skc<1)7nw za#Z&f`hxqxuLgQ?^2LjR-rSQsZs=qf8IvMp61VkZXxvdLWal{f;zb}>uwmOmb}q2_ zZIIMF_J_iV*hY6ZWcY26l9G~=l9G~=l9G~=l9G~=l9G~=l9G~=l9G~=l9G~=#Fu&T Wt~hGc;UoY6002ovP6b4+LSTXxy-6Ja