the foxes have taken over, torex tweaks

This commit is contained in:
Bob 2024-01-21 20:16:10 +01:00
parent aa8e492610
commit 52825d9d9e
26 changed files with 223 additions and 115 deletions

View File

@ -3,6 +3,7 @@
* The final missing door from 1.12, remade from scratch * The final missing door from 1.12, remade from scratch
* Comes with a brand-new model that fits perfectly over 3x3 missile launch tubes * Comes with a brand-new model that fits perfectly over 3x3 missile launch tubes
* Has a 5x5 frame * Has a 5x5 frame
* Can be opened and closed with a detonator
* Molysite * Molysite
* Found in basalt from volcanos * Found in basalt from volcanos
* Can be combination-smelted into iron and chlorine * Can be combination-smelted into iron and chlorine
@ -21,6 +22,15 @@
* Removed the "nerve agent" hazard class because no gas used it * Removed the "nerve agent" hazard class because no gas used it
* Fissures now continuously spawn volcanic lava, making basalt renewable without having an entire volcano * Fissures now continuously spawn volcanic lava, making basalt renewable without having an entire volcano
* Volcanic lava now turns diamond ore into gem-rich basalt * Volcanic lava now turns diamond ore into gem-rich basalt
* Mushroom clouds have been tweaked
* Their scale no longer scales linearly, but rather with a square root function, this prevents tsar clouds from being so huge that the top fails to render due to clipping through the skybox
* Their default scale is now somewhat larger
* The flash scale has been increased
* Their general scaling is now consistent, larger clouds will no longer be chubby with a comically small ring
* Shockwave particles now have momentum, making them sweep over the landscape, as well as being 1.5x denser and slightly larger
* Effect shamelessly stolen from NTM-EE
* Outer condensation rings' spawning is no longer fixed, the time now scales with the size
* The inner condensation ring's spawn time is also now based on scale, which means larger clouds will no longer end up with comically thin rings due to not spawning enough cloudlets
## Fixed ## Fixed
* Fixed sellafite emerald ore being oredicted as emerald dust * Fixed sellafite emerald ore being oredicted as emerald dust
@ -38,3 +48,4 @@
* Fixed fallout layers being able to generate below roofs * Fixed fallout layers being able to generate below roofs
* Fixed exposure chamber not saving anything to NBT besides slots * Fixed exposure chamber not saving anything to NBT besides slots
* Fixed crash caused by wearing the full PaA set and then putting on an HEV helmet (why would anyone ever do this??) * Fixed crash caused by wearing the full PaA set and then putting on an HEV helmet (why would anyone ever do this??)
* Fixed large doors only being lockable by clicking on the core block

View File

@ -1,6 +1,6 @@
mod_version=1.0.27 mod_version=1.0.27
# Empty build number makes a release type # Empty build number makes a release type
mod_build_number=4845 mod_build_number=4851
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\

View File

@ -1235,10 +1235,8 @@ public class ModBlocks {
public static Block volcanic_lava_block; public static Block volcanic_lava_block;
public static Fluid volcanic_lava_fluid; public static Fluid volcanic_lava_fluid;
public static final Material fluidvolcanic = (new MaterialLiquid(MapColor.redColor));
public static Block rad_lava_block; public static Block rad_lava_block;
public static Fluid rad_lava_fluid; public static Fluid rad_lava_fluid;
public static final Material fluidradlava = (new MaterialLiquid(MapColor.redColor));
public static Block sulfuric_acid_block; public static Block sulfuric_acid_block;
public static Fluid sulfuric_acid_fluid; public static Fluid sulfuric_acid_fluid;

View File

@ -4,12 +4,17 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.util.ContaminationUtil;
import com.hbm.util.ContaminationUtil.ContaminationType;
import com.hbm.util.ContaminationUtil.HazardType;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -37,6 +42,11 @@ public class RadBlock extends VolcanicBlock {
return (side == 0 || side == 1) ? stillIconRad : flowingIconRad; return (side == 0 || side == 1) ? stillIconRad : flowingIconRad;
} }
@Override
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
if(entity instanceof EntityLivingBase) ContaminationUtil.contaminate((EntityLivingBase) entity, HazardType.RADIATION, ContaminationType.CREATIVE, 5F);
}
@Override @Override
public void onSolidify(World world, int x, int y, int z, int lavaCount, int basaltCount, Random rand) { public void onSolidify(World world, int x, int y, int z, int lavaCount, int basaltCount, Random rand) {
int r = rand.nextInt(400); int r = rand.nextInt(400);

View File

@ -3,7 +3,9 @@ package com.hbm.blocks.generic;
import java.util.List; import java.util.List;
import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.BlockDummyable;
import com.hbm.interfaces.IBomb;
import com.hbm.items.special.ItemDoorSkin; import com.hbm.items.special.ItemDoorSkin;
import com.hbm.items.tool.ItemLock;
import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.DoorDecl;
import com.hbm.tileentity.TileEntityDoorGeneric; import com.hbm.tileentity.TileEntityDoorGeneric;
import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.BlockPos;
@ -20,7 +22,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class BlockDoorGeneric extends BlockDummyable { public class BlockDoorGeneric extends BlockDummyable implements IBomb {
public DoorDecl type; public DoorDecl type;
@ -46,6 +48,22 @@ public class BlockDoorGeneric extends BlockDummyable {
return type.getBlockOffset(); return type.getBlockOffset();
} }
@Override
public BombReturnCode explode(World world, int x, int y, int z) {
int[] pos1 = findCore(world, x, y, z);
if(pos1 == null) return BombReturnCode.ERROR_INCOMPATIBLE;
TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]);
if(door != null) {
DoorDecl decl = door.getDoorType();
if(!decl.remoteControllable()) return BombReturnCode.ERROR_INCOMPATIBLE;
if(door.tryToggle(null)) {
return BombReturnCode.TRIGGERED;
}
}
return BombReturnCode.ERROR_INCOMPATIBLE;
}
@Override @Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer playerIn, int side, float hitX, float hitY, float hitZ){ public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer playerIn, int side, float hitX, float hitY, float hitZ){
if(!world.isRemote && !playerIn.isSneaking()) { if(!world.isRemote && !playerIn.isSneaking()) {
@ -148,5 +166,4 @@ public class BlockDoorGeneric extends BlockDummyable {
} }
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
} }
} }

View File

@ -101,6 +101,7 @@ public class BlockGlyphidSpawner extends BlockContainer implements IBlockMulti {
if(initialSpawn || worldObj.getTotalWorldTime() % MobConfig.swarmCooldown == 0) { if(initialSpawn || worldObj.getTotalWorldTime() % MobConfig.swarmCooldown == 0) {
initialSpawn = false;
int count = 0; int count = 0;
for(Object e : worldObj.loadedEntityList) { for(Object e : worldObj.loadedEntityList) {
@ -126,8 +127,6 @@ public class BlockGlyphidSpawner extends BlockContainer implements IBlockMulti {
if(this.getBlockMetadata() == 1) scout.getDataWatcher().updateObject(EntityGlyphid.DW_SUBTYPE, (byte) EntityGlyphid.TYPE_INFECTED); if(this.getBlockMetadata() == 1) scout.getDataWatcher().updateObject(EntityGlyphid.DW_SUBTYPE, (byte) EntityGlyphid.TYPE_INFECTED);
trySpawnEntity(scout); trySpawnEntity(scout);
} }
initialSpawn = false;
} }
} }
} }

View File

@ -232,6 +232,8 @@ public class BlockKeyhole extends BlockStone {
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wd40), 10)); pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wd40), 10));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.scrumpy), 10)); pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.scrumpy), 10));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wild_p), 5)); pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wild_p), 5));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.card_aos), 5));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.card_qos), 5));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.starmetal_sword), 5)); pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.starmetal_sword), 5));
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.radaway_flush), 5)); pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.radaway_flush), 5));

View File

@ -2,6 +2,7 @@ package com.hbm.entity.effect;
import java.util.ArrayList; import java.util.ArrayList;
import com.hbm.util.BobMathUtil;
import com.hbm.util.TrackerUtil; import com.hbm.util.TrackerUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -53,7 +54,7 @@ public class EntityNukeTorex extends Entity {
@Override @Override
public void onUpdate() { public void onUpdate() {
double s = this.getScale(); double s = 1.5; //this.getScale();
double cs = 1.5; double cs = 1.5;
int maxAge = this.getMaxAge(); int maxAge = this.getMaxAge();
@ -84,61 +85,61 @@ public class EntityNukeTorex extends Entity {
double x = posX + rand.nextGaussian() * range; double x = posX + rand.nextGaussian() * range;
double z = posZ + rand.nextGaussian() * range; double z = posZ + rand.nextGaussian() * range;
Cloudlet cloud = new Cloudlet(x, lastSpawnY, z, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime); Cloudlet cloud = new Cloudlet(x, lastSpawnY, z, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime);
cloud.setScale(1F + this.ticksExisted * 0.005F * (float) s, 5F * (float) cs); cloud.setScale(1F + this.ticksExisted * 0.005F * (float) cs, 5F * (float) cs);
cloudlets.add(cloud); cloudlets.add(cloud);
} }
// spawn shock clouds // spawn shock clouds
if(ticksExisted < 100) { if(ticksExisted < 150) {
int cloudCount = ticksExisted * 5; int cloudCount = ticksExisted * 5;
int shockLife = Math.max(300 - ticksExisted * 20, 50); int shockLife = Math.max(300 - ticksExisted * 20, 50);
for(int i = 0; i < cloudCount; i++) { for(int i = 0; i < cloudCount; i++) {
Vec3 vec = Vec3.createVectorHelper((ticksExisted * 2 + rand.nextDouble()) * 2, 0, 0); Vec3 vec = Vec3.createVectorHelper((ticksExisted * 1.5 + rand.nextDouble()) * 1.5, 0, 0);
float rot = (float) (Math.PI * 2 * rand.nextDouble()); float rot = (float) (Math.PI * 2 * rand.nextDouble());
vec.rotateAroundY(rot); vec.rotateAroundY(rot);
this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 1, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0, shockLife) this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 1, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0, shockLife, TorexType.SHOCK)
.setScale(5F, 2F) .setScale(7F, 2F)
.setMotion(0)); .setMotion(ticksExisted > 15 ? 0.75 : 0));
} }
} }
// spawn ring clouds // spawn ring clouds
if(ticksExisted < 200) { if(ticksExisted < 130 * s) {
lifetime *= s; lifetime *= s;
for(int i = 0; i < 2; i++) { for(int i = 0; i < 2; i++) {
Cloudlet cloud = new Cloudlet(posX, posY + coreHeight, posZ, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime, TorexType.RING); Cloudlet cloud = new Cloudlet(posX, posY + coreHeight, posZ, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime, TorexType.RING);
cloud.setScale(1F + this.ticksExisted * 0.0025F * (float) (cs * s), 3F * (float) (cs * s)); cloud.setScale(1F + this.ticksExisted * 0.0025F * (float) (cs * cs), 3F * (float) (cs * cs));
cloudlets.add(cloud); cloudlets.add(cloud);
} }
} }
// spawn condensation clouds // spawn condensation clouds
if(ticksExisted > 200 && ticksExisted < 600) { if(ticksExisted > 130 * s && ticksExisted < 600 * s) {
for(int i = 0; i < 20; i++) { for(int i = 0; i < 20; i++) {
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
float angle = (float) (Math.PI * 2 * rand.nextDouble()); float angle = (float) (Math.PI * 2 * rand.nextDouble());
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * 3, 0, 0); Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (3 + rand.nextDouble()), 0, 0);
vec.rotateAroundZ((float) (Math.PI / 45 * j)); vec.rotateAroundZ((float) (Math.PI / 45 * j));
vec.rotateAroundY(angle); vec.rotateAroundY(angle);
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight - 5 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION); Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight - 5 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
cloud.setScale(0.125F * (float) (cs * s), 3F * (float) (cs * s)); cloud.setScale(0.125F * (float) (cs), 3F * (float) (cs));
cloudlets.add(cloud); cloudlets.add(cloud);
} }
} }
} }
if(ticksExisted > 300 && ticksExisted < 600) { if(ticksExisted > 200 * s && ticksExisted < 600 * s) {
for(int i = 0; i < 20; i++) { for(int i = 0; i < 20; i++) {
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
float angle = (float) (Math.PI * 2 * rand.nextDouble()); float angle = (float) (Math.PI * 2 * rand.nextDouble());
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * 2, 0, 0); Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (3 + rand.nextDouble() * 0.5), 0, 0);
vec.rotateAroundZ((float) (Math.PI / 45 * j)); vec.rotateAroundZ((float) (Math.PI / 45 * j));
vec.rotateAroundY(angle); vec.rotateAroundY(angle);
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight + 25 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION); Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight + 25 + j * cs, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
cloud.setScale(0.125F * (float) (cs * s), 3F * (float) (cs * s)); cloud.setScale(0.125F * (float) (cs), 3F * (float) (cs));
cloudlets.add(cloud); cloudlets.add(cloud);
} }
} }
@ -147,12 +148,12 @@ public class EntityNukeTorex extends Entity {
for(Cloudlet cloud : cloudlets) { for(Cloudlet cloud : cloudlets) {
cloud.update(); cloud.update();
} }
coreHeight += 0.15/* * s*/; coreHeight += 0.15 / s;
torusWidth += 0.05/* * s*/; torusWidth += 0.05 / s;
rollerSize = torusWidth * 0.35; rollerSize = torusWidth * 0.35;
convectionHeight = coreHeight + rollerSize; convectionHeight = coreHeight + rollerSize;
int maxHeat = (int) (50 * s); int maxHeat = (int) (50 * cs);
heat = maxHeat - Math.pow((maxHeat * this.ticksExisted) / maxAge, 1); heat = maxHeat - Math.pow((maxHeat * this.ticksExisted) / maxAge, 1);
cloudlets.removeIf(x -> x.isDead); cloudlets.removeIf(x -> x.isDead);
@ -298,6 +299,14 @@ public class EntityNukeTorex extends Entity {
this.motionX = convection.xCoord * factor + lift.xCoord * (1D - factor); this.motionX = convection.xCoord * factor + lift.xCoord * (1D - factor);
this.motionY = convection.yCoord * factor + lift.yCoord * (1D - factor); this.motionY = convection.yCoord * factor + lift.yCoord * (1D - factor);
this.motionZ = convection.zCoord * factor + lift.zCoord * (1D - factor); this.motionZ = convection.zCoord * factor + lift.zCoord * (1D - factor);
} else if(this.type == TorexType.SHOCK) {
double factor = MathHelper.clamp_double((this.posY - EntityNukeTorex.this.posY) / EntityNukeTorex.this.coreHeight, 0, 1);
Vec3 motion = Vec3.createVectorHelper(1, 0, 0);
motion.rotateAroundY(this.angle);
this.motionX = motion.xCoord * factor;
this.motionY = motion.yCoord * factor;
this.motionZ = motion.zCoord * factor;
} else if(this.type == TorexType.RING) { } else if(this.type == TorexType.RING) {
Vec3 motion = getRingMotion(simPosX, simPosZ); Vec3 motion = getRingMotion(simPosX, simPosZ);
this.motionX = motion.xCoord; this.motionX = motion.xCoord;
@ -321,30 +330,14 @@ public class EntityNukeTorex extends Entity {
private Vec3 getCondensationMotion() { private Vec3 getCondensationMotion() {
Vec3 delta = Vec3.createVectorHelper(posX - EntityNukeTorex.this.posX, 0, posZ - EntityNukeTorex.this.posZ); Vec3 delta = Vec3.createVectorHelper(posX - EntityNukeTorex.this.posX, 0, posZ - EntityNukeTorex.this.posZ);
double speed = 0.00002 * EntityNukeTorex.this.getScale() * EntityNukeTorex.this.ticksExisted; double speed = 0.00002 * EntityNukeTorex.this.ticksExisted;
delta.xCoord *= speed; delta.xCoord *= speed;
//delta.yCoord *= speed * 0.75 * EntityNukeTorex.this.getScale();
delta.zCoord *= speed; delta.zCoord *= speed;
return delta; return delta;
} }
private Vec3 getRingMotion(double simPosX, double simPosZ) { private Vec3 getRingMotion(double simPosX, double simPosZ) {
/*Vec3 targetPos = Vec3.createVectorHelper(
(EntityNukeTorex.this.posX + torusWidth * 1),
(EntityNukeTorex.this.posY + coreHeight * 0.5),
EntityNukeTorex.this.posZ);
Vec3 delta = Vec3.createVectorHelper(targetPos.xCoord - simPosX, targetPos.yCoord - this.posY, targetPos.zCoord - simPosZ);
double speed = 0.125D;
delta.xCoord *= speed;
delta.yCoord *= speed;
delta.zCoord *= speed;
delta.rotateAroundY(this.angle);
return delta;*/
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2) if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
return Vec3.createVectorHelper(0, 0, 0); return Vec3.createVectorHelper(0, 0, 0);
@ -392,9 +385,6 @@ public class EntityNukeTorex extends Entity {
/* simulated on a 2D-plane along the X/Y axis */ /* simulated on a 2D-plane along the X/Y axis */
private Vec3 getConvectionMotion(double simPosX, double simPosZ) { private Vec3 getConvectionMotion(double simPosX, double simPosZ) {
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
return Vec3.createVectorHelper(0, 0, 0);
/* the position of the torus' outer ring center */ /* the position of the torus' outer ring center */
Vec3 torusPos = Vec3.createVectorHelper( Vec3 torusPos = Vec3.createVectorHelper(
(EntityNukeTorex.this.posX + torusWidth), (EntityNukeTorex.this.posX + torusWidth),
@ -480,10 +470,19 @@ public class EntityNukeTorex extends Entity {
} }
public Vec3 getInterpPos(float interp) { public Vec3 getInterpPos(float interp) {
return Vec3.createVectorHelper( float scale = (float) EntityNukeTorex.this.getScale();
Vec3 base = Vec3.createVectorHelper(
prevPosX + (posX - prevPosX) * interp, prevPosX + (posX - prevPosX) * interp,
prevPosY + (posY - prevPosY) * interp, prevPosY + (posY - prevPosY) * interp,
prevPosZ + (posZ - prevPosZ) * interp); prevPosZ + (posZ - prevPosZ) * interp);
if(this.type != TorexType.SHOCK) { //no rescale for the shockwave as this messes with the positions
base.xCoord = ((base.xCoord) - EntityNukeTorex.this.posX) * scale + EntityNukeTorex.this.posX;
base.yCoord = ((base.yCoord) - EntityNukeTorex.this.posY) * scale + EntityNukeTorex.this.posY;
base.zCoord = ((base.zCoord) - EntityNukeTorex.this.posZ) * scale + EntityNukeTorex.this.posZ;
}
return base;
} }
public Vec3 getInterpColor(float interp) { public Vec3 getInterpColor(float interp) {
@ -514,7 +513,9 @@ public class EntityNukeTorex extends Entity {
private float growingScale = 5F; private float growingScale = 5F;
public float getScale() { public float getScale() {
return startingScale + ((float)age / (float)cloudletLife) * growingScale; float base = startingScale + ((float)age / (float)cloudletLife) * growingScale;
if(this.type != TorexType.SHOCK) base *= (float) EntityNukeTorex.this.getScale();
return base;
} }
public Cloudlet setScale(float start, float grow) { public Cloudlet setScale(float start, float grow) {
@ -533,6 +534,7 @@ public class EntityNukeTorex extends Entity {
public static enum TorexType { public static enum TorexType {
STANDARD, STANDARD,
SHOCK,
RING, RING,
CONDENSATION CONDENSATION
} }
@ -548,14 +550,14 @@ public class EntityNukeTorex extends Entity {
} }
public static void statFac(World world, double x, double y, double z, float scale) { public static void statFac(World world, double x, double y, double z, float scale) {
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F)); EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F));
torex.setPosition(x, y, z); torex.setPosition(x, y, z);
world.spawnEntityInWorld(torex); world.spawnEntityInWorld(torex);
TrackerUtil.setTrackingRange(world, torex, 1000); TrackerUtil.setTrackingRange(world, torex, 1000);
} }
public static void statFacBale(World world, double x, double y, double z, float scale) { public static void statFacBale(World world, double x, double y, double z, float scale) {
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F)).setType(1); EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)).setType(1);
torex.setPosition(x, y, z); torex.setPosition(x, y, z);
world.spawnEntityInWorld(torex); world.spawnEntityInWorld(torex);
TrackerUtil.setTrackingRange(world, torex, 1000); TrackerUtil.setTrackingRange(world, torex, 1000);

View File

@ -224,6 +224,9 @@ public class HazardRegistry {
HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 4), makeData(RADIATION, 5F)); HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 4), makeData(RADIATION, 5F));
HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 5), makeData(RADIATION, 10F)); HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 5), makeData(RADIATION, 10F));
HazardSystem.register(new ItemStack(ModBlocks.ore_sellafield_radgem), makeData(RADIATION, 25F));
HazardSystem.register(new ItemStack(ModItems.gem_rad), makeData(RADIATION, 25F));
registerOtherFuel(rod_zirnox, EnumZirnoxType.NATURAL_URANIUM_FUEL.ordinal(), u * rod_dual, wst * rod_dual * 11.5F, false); registerOtherFuel(rod_zirnox, EnumZirnoxType.NATURAL_URANIUM_FUEL.ordinal(), u * rod_dual, wst * rod_dual * 11.5F, false);
registerOtherFuel(rod_zirnox, EnumZirnoxType.URANIUM_FUEL.ordinal(), uf * rod_dual, wst * rod_dual * 10F, false); registerOtherFuel(rod_zirnox, EnumZirnoxType.URANIUM_FUEL.ordinal(), uf * rod_dual, wst * rod_dual * 10F, false);
registerOtherFuel(rod_zirnox, EnumZirnoxType.TH232.ordinal(), th232 * rod_dual, thf * rod_dual, false); registerOtherFuel(rod_zirnox, EnumZirnoxType.TH232.ordinal(), th232 * rod_dual, thf * rod_dual, false);

View File

@ -2207,6 +2207,8 @@ public class ModItems {
public static Item defuser_gold; public static Item defuser_gold;
public static Item ballistic_gauntlet; public static Item ballistic_gauntlet;
public static Item night_vision; public static Item night_vision;
public static Item card_aos;
public static Item card_qos;
public static Item hazmat_helmet; public static Item hazmat_helmet;
public static Item hazmat_plate; public static Item hazmat_plate;
@ -3452,6 +3454,8 @@ public class ModItems {
defuser_gold = new ItemModDefuser().setUnlocalizedName("defuser_gold").setTextureName(RefStrings.MODID + ":defuser_gold"); defuser_gold = new ItemModDefuser().setUnlocalizedName("defuser_gold").setTextureName(RefStrings.MODID + ":defuser_gold");
ballistic_gauntlet = new ItemModTwoKick().setUnlocalizedName("ballistic_gauntlet").setTextureName(RefStrings.MODID + ":ballistic_gauntlet"); ballistic_gauntlet = new ItemModTwoKick().setUnlocalizedName("ballistic_gauntlet").setTextureName(RefStrings.MODID + ":ballistic_gauntlet");
night_vision = new ItemModNightVision().setUnlocalizedName("night_vision").setTextureName(RefStrings.MODID + ":night_vision"); night_vision = new ItemModNightVision().setUnlocalizedName("night_vision").setTextureName(RefStrings.MODID + ":night_vision");
card_aos = new ItemModCard().setUnlocalizedName(null).setTextureName(RefStrings.MODID + ":card_aos");
card_qos = new ItemModCard().setUnlocalizedName(null).setTextureName(RefStrings.MODID + ":card_qos");
cap_nuka = new Item().setUnlocalizedName("cap_nuka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_nuka"); cap_nuka = new Item().setUnlocalizedName("cap_nuka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_nuka");
cap_quantum = new Item().setUnlocalizedName("cap_quantum").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_quantum"); cap_quantum = new Item().setUnlocalizedName("cap_quantum").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_quantum");
@ -7726,6 +7730,8 @@ public class ModItems {
GameRegistry.registerItem(defuser_gold, defuser_gold.getUnlocalizedName()); GameRegistry.registerItem(defuser_gold, defuser_gold.getUnlocalizedName());
GameRegistry.registerItem(ballistic_gauntlet, ballistic_gauntlet.getUnlocalizedName()); GameRegistry.registerItem(ballistic_gauntlet, ballistic_gauntlet.getUnlocalizedName());
GameRegistry.registerItem(night_vision, night_vision.getUnlocalizedName()); GameRegistry.registerItem(night_vision, night_vision.getUnlocalizedName());
GameRegistry.registerItem(card_aos, card_aos.getUnlocalizedName());
GameRegistry.registerItem(card_qos, card_qos.getUnlocalizedName());
//Chaos //Chaos
GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName()); GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName());

View File

@ -0,0 +1,48 @@
package com.hbm.items.armor;
import java.util.List;
import com.hbm.extprop.HbmPlayerProps;
import com.hbm.handler.ArmorModHandler;
import com.hbm.items.ModItems;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
public class ItemModCard extends ItemArmorMod {
public ItemModCard() {
super(ArmorModHandler.helmet_only, true, false, false, false);
}
@Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
if(this == ModItems.card_aos) {
list.add(EnumChatFormatting.RED + "Top of the line!");
list.add(EnumChatFormatting.RED + "Guns now have a 33% chance to not consume ammo.");
}
if(this == ModItems.card_qos) {
list.add(EnumChatFormatting.RED + "Power!");
list.add(EnumChatFormatting.RED + "Adds a 33% chance to tank damage with no cap.");
}
list.add("");
super.addInformation(itemstack, player, list, bool);
}
@Override
public void addDesc(List list, ItemStack stack, ItemStack armor) {
list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName()));
}
@Override
public void modDamage(LivingHurtEvent event, ItemStack armor) {
if(this == ModItems.card_qos && event.entityLiving.getRNG().nextInt(3) == 0 && event.entityLiving instanceof EntityPlayer) {
HbmPlayerProps.plink((EntityPlayer) event.entityLiving, "random.break", 0.5F, 1.0F + event.entityLiving.getRNG().nextFloat() * 0.5F);
event.ammount = 0;
event.setCanceled(true);
}
}
}

View File

@ -12,30 +12,30 @@ import net.minecraft.util.EnumChatFormatting;
import java.util.List; import java.util.List;
public class ItemModNightVision extends ItemArmorMod { public class ItemModNightVision extends ItemArmorMod {
public ItemModNightVision() { public ItemModNightVision() {
super(ArmorModHandler.helmet_only, true, false, false, false); super(ArmorModHandler.helmet_only, true, false, false, false);
} }
@Override @Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
list.add(EnumChatFormatting.AQUA + I18n.format("item.night_vision.description.item")); list.add(EnumChatFormatting.AQUA + I18n.format("item.night_vision.description.item"));
list.add(""); list.add("");
super.addInformation(itemstack, player, list, bool); super.addInformation(itemstack, player, list, bool);
} }
@Override @Override
public void addDesc(List list, ItemStack stack, ItemStack armor) { public void addDesc(List list, ItemStack stack, ItemStack armor) {
list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName())); list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName()));
} }
@Override @Override
public void modUpdate(EntityLivingBase entity, ItemStack armor) { public void modUpdate(EntityLivingBase entity, ItemStack armor) {
if(!entity.worldObj.isRemote && entity instanceof EntityPlayer && armor.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmor((EntityPlayer)entity)) { if(!entity.worldObj.isRemote && entity instanceof EntityPlayer && armor.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmor((EntityPlayer) entity)) {
entity.addPotionEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0)); entity.addPotionEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0));
if(entity.getRNG().nextInt(50) == 0) { if(entity.getRNG().nextInt(50) == 0) {
armor.damageItem(1, entity); armor.damageItem(1, entity);
} }
} }
} }
} }

View File

@ -1,7 +1,7 @@
package com.hbm.items.tool; package com.hbm.items.tool;
import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.util.CompatExternal;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -17,13 +17,13 @@ public class ItemLock extends ItemKeyPin {
} }
@Override @Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) {
{
if(this.getPins(stack) != 0) { if(this.getPins(stack) != 0) {
TileEntity te = world.getTileEntity(x, y, z); TileEntity te = CompatExternal.getCoreFromPos(world, x, y, z);
if(te != null && te instanceof TileEntityLockableBase) { if(te != null && te instanceof TileEntityLockableBase) {
TileEntityLockableBase tile = (TileEntityLockableBase)te; TileEntityLockableBase tile = (TileEntityLockableBase) te;
if(tile.isLocked()) if(tile.isLocked())
return false; return false;
@ -32,36 +32,14 @@ public class ItemLock extends ItemKeyPin {
tile.lock(); tile.lock();
tile.setMod(lockMod); tile.setMod(lockMod);
world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F); world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F);
stack.stackSize--; stack.stackSize--;
return true; return true;
} }
if(te != null && te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
TileEntity target = world.getTileEntity(dummy.targetX, dummy.targetY, dummy.targetZ);
if(target != null && target instanceof TileEntityLockableBase) {
TileEntityLockableBase tile = (TileEntityLockableBase)target;
if(tile.isLocked())
return false;
tile.setPins(this.getPins(stack));
tile.lock();
tile.setMod(lockMod);
world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F);
stack.stackSize--;
return true;
}
}
} }
return false; return false;
} }
} }

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.util.BobMathUtil;
import com.hbm.util.TrackerUtil; import com.hbm.util.TrackerUtil;
import com.hbm.world.WorldUtil; import com.hbm.world.WorldUtil;
import com.hbm.world.biome.BiomeGenCraterBase; import com.hbm.world.biome.BiomeGenCraterBase;
@ -11,6 +12,7 @@ import com.hbm.world.biome.BiomeGenCraterBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -64,11 +66,17 @@ public class ItemWandD extends Item {
tom.destructionRange = 600; tom.destructionRange = 600;
world.spawnEntityInWorld(tom);*/ world.spawnEntityInWorld(tom);*/
EntityNukeTorex torex = new EntityNukeTorex(world); List<EntityNukeTorex> del = world.getEntitiesWithinAABB(EntityNukeTorex.class, AxisAlignedBB.getBoundingBox(pos.blockX, pos.blockY + 1, pos.blockZ, pos.blockX, pos.blockY + 1, pos.blockZ).expand(50, 50, 50));
torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0);
torex.setScale(1.5F); if(!del.isEmpty()) {
world.spawnEntityInWorld(torex); for(EntityNukeTorex torex : del) torex.setDead();
TrackerUtil.setTrackingRange(world, torex, 1000); } else {
EntityNukeTorex torex = new EntityNukeTorex(world);
torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0);
torex.setScale((float) BobMathUtil.squirt( 1.5 ) * 1.5F);
world.spawnEntityInWorld(torex);
TrackerUtil.setTrackingRange(world, torex, 1000);
}
/*EntityTracker entitytracker = ((WorldServer) world).getEntityTracker(); /*EntityTracker entitytracker = ((WorldServer) world).getEntityTracker();
IntHashMap map = ReflectionHelper.getPrivateValue(EntityTracker.class, entitytracker, "trackedEntityIDs", "field_72794_c"); IntHashMap map = ReflectionHelper.getPrivateValue(EntityTracker.class, entitytracker, "trackedEntityIDs", "field_72794_c");

View File

@ -6,6 +6,7 @@ import org.lwjgl.input.Mouse;
import com.hbm.config.GeneralConfig; import com.hbm.config.GeneralConfig;
import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.entity.projectile.EntityBulletBaseNT;
import com.hbm.handler.ArmorModHandler;
import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfigSyncingUtil;
import com.hbm.handler.BulletConfiguration; import com.hbm.handler.BulletConfiguration;
import com.hbm.handler.CasingEjector; import com.hbm.handler.CasingEjector;
@ -580,6 +581,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu
if(hasInfinity(stack, config)) return; if(hasInfinity(stack, config)) return;
if(isTrenchMaster(player) && player.getRNG().nextInt(3) == 0) return; if(isTrenchMaster(player) && player.getRNG().nextInt(3) == 0) return;
if(hasAoS(player) && player.getRNG().nextInt(3) == 0) return;
if(config.reloadType != GunConfiguration.RELOAD_NONE) { if(config.reloadType != GunConfiguration.RELOAD_NONE) {
setMag(stack, getMag(stack) - 1); setMag(stack, getMag(stack) - 1);
@ -831,4 +833,13 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu
public static boolean isTrenchMaster(EntityPlayer player) { public static boolean isTrenchMaster(EntityPlayer player) {
return player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() == ModItems.trenchmaster_plate && ArmorFSB.hasFSBArmor(player); return player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() == ModItems.trenchmaster_plate && ArmorFSB.hasFSBArmor(player);
} }
public static boolean hasAoS(EntityPlayer player) {
if(player.inventory.armorInventory[3] != null) {
ItemStack[] mods = ArmorModHandler.pryMods(player.inventory.armorInventory[3]);
ItemStack helmet = mods[ArmorModHandler.helmet_only];
return helmet != null && helmet.getItem() == ModItems.card_aos;
}
return false;
}
} }

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings { public class RefStrings {
public static final String MODID = "hbm"; public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod"; public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (4845)"; public static final String VERSION = "1.0.27 BETA (4851)";
//HBM's Beta Naming Convention: //HBM's Beta Naming Convention:
//V T (X) //V T (X)
//V -> next release version //V -> next release version

View File

@ -77,7 +77,10 @@ public class RenderTorex extends Render {
for(Cloudlet cloudlet : cloudlets) { for(Cloudlet cloudlet : cloudlets) {
Vec3 vec = cloudlet.getInterpPos(interp); Vec3 vec = cloudlet.getInterpPos(interp);
tessellateCloudlet(tess, vec.xCoord - cloud.posX, vec.yCoord - cloud.posY, vec.zCoord - cloud.posZ, cloudlet, interp); double x = vec.xCoord - cloud.posX;
double y = vec.yCoord - cloud.posY;
double z = vec.zCoord - cloud.posZ;
tessellateCloudlet(tess, x, y, z, cloudlet, interp);
} }
tess.draw(); tess.draw();
@ -114,7 +117,7 @@ public class RenderTorex extends Render {
float x = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize); float x = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
float y = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize); float y = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
float z = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize); float z = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
tessellateFlash(tess, x, y + cloud.coreHeight, z, (float) (10 * cloud.rollerSize), alpha, interp); tessellateFlash(tess, x, y + cloud.coreHeight, z, (float) (25 * cloud.rollerSize), alpha, interp);
} }
tess.draw(); tess.draw();

View File

@ -870,6 +870,7 @@ public abstract class DoorDecl {
@Override public String getCloseSoundStart() { return null; }; @Override public String getCloseSoundStart() { return null; };
@Override public String getCloseSoundEnd() { return "hbm:door.wgh_big_stop"; }; @Override public String getCloseSoundEnd() { return "hbm:door.wgh_big_stop"; };
@Override public float getSoundVolume() { return 2; } @Override public float getSoundVolume() { return 2; }
@Override public boolean remoteControllable() { return true; }
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -1012,6 +1013,10 @@ public abstract class DoorDecl {
return 0; return 0;
} }
public boolean remoteControllable() {
return false;
}
public float getDoorRangeOpenTime(int ticks, int idx) { public float getDoorRangeOpenTime(int ticks, int idx) {
return getNormTime(ticks); return getNormTime(ticks);
} }

View File

@ -175,6 +175,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
public boolean tryToggle(EntityPlayer player){ public boolean tryToggle(EntityPlayer player){
if(this.isLocked() && player == null) return false;
if(state == 0 && redstonePower > 0){ if(state == 0 && redstonePower > 0){
//Redstone "power locks" doors, just like minecraft iron doors //Redstone "power locks" doors, just like minecraft iron doors
return false; return false;

View File

@ -68,6 +68,7 @@ public abstract class TileEntityLockableBase extends TileEntity {
if(!isLocked) { if(!isLocked) {
return true; return true;
} else { } else {
if(player == null) return false;
ItemStack stack = player.getHeldItem(); ItemStack stack = player.getHeldItem();
if(stack != null && stack.getItem() instanceof ItemKey && if(stack != null && stack.getItem() instanceof ItemKey &&

View File

@ -1413,6 +1413,8 @@ item.cape_nostalgia.name=DrNostalgias Cape
item.cape_radiation.name=Cape (Radioaktiv) item.cape_radiation.name=Cape (Radioaktiv)
item.cape_schrabidium.name=Cape (Schrabidisch) item.cape_schrabidium.name=Cape (Schrabidisch)
item.cape_vertice.name=Lord Vertices Cape item.cape_vertice.name=Lord Vertices Cape
item.card_aos.name=Pik-Ass
item.card_qos.name=Pik-Königin
item.cart.crate.name=Stahlkistenlore item.cart.crate.name=Stahlkistenlore
item.cart.destroyer.name=Schuttzerstörende Lore item.cart.destroyer.name=Schuttzerstörende Lore
item.cart.empty.name=Lore item.cart.empty.name=Lore

View File

@ -2109,6 +2109,8 @@ item.cape_nostalgia.name=DrNostalgia's Cape
item.cape_radiation.name=Cape (Radiation) item.cape_radiation.name=Cape (Radiation)
item.cape_schrabidium.name=Cape (Schrabidic) item.cape_schrabidium.name=Cape (Schrabidic)
item.cape_vertice.name=Lord Vertice's Cape item.cape_vertice.name=Lord Vertice's Cape
item.card_aos.name=Ace of Spades
item.card_qos.name=Queen of Spades
item.cart.crate.name=Crate Cart item.cart.crate.name=Crate Cart
item.cart.destroyer.name=Scrap Destroying Cart item.cart.destroyer.name=Scrap Destroying Cart
item.cart.empty.name=Minecart item.cart.empty.name=Minecart

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B