more capacitors, rail stuff

This commit is contained in:
Bob 2023-06-10 16:06:53 +02:00
parent 36655d25b5
commit 6710370f81
29 changed files with 580 additions and 92 deletions

View File

@ -6,12 +6,22 @@
* Mustard gas * Mustard gas
* Euphemium capacitor * Euphemium capacitor
* Used for schrabidium transmutation, has infinite durability * Used for schrabidium transmutation, has infinite durability
* Capacitor blocks
* Like batteries without GUIs that are constantly in input/output mode
* Input is on the top of the capacitor block, for output the capacitor has to be placed onto a capaictor bus
* Capacitor buses have one side for the output, multiple buses can be chained up given they are placed in a straight line
* Incentivizes splitting the power grid, looping the output back into the input will yield the same weirdness as combining multiple IO energy storage blocks
* Desh bullet stamps
* Like regular bullets stamps but with infinite durability
## Changed ## Changed
* Updated russian localization * Updated russian localization
* Mist now spawns cloud particles with the correct color instead of standard white * Mist now spawns cloud particles with the correct color instead of standard white
* HE artillery shells and rockets now turn blocks into slag * HE artillery shells and rockets now turn blocks into slag
* The old static bunker structure has been removed and replaced with dynamically generated ones, using the same style of generation as vanilla strongholds.
## Fixed ## Fixed
* Fixed the TOXIC trait not respecting protection when applying potion effects * Fixed the TOXIC trait not respecting protection when applying potion effects
* Fixed some armor recipes only accepting polymer and not bakelite * Fixed some armor recipes only accepting polymer and not bakelite
* Fixed turbofans not sucking in players
* Fixed NTM skybox not applying to superflat worlds

View File

@ -490,12 +490,10 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl
int[] pos = this.findCore(world, x, y, z); int[] pos = this.findCore(world, x, y, z);
if(pos == null) return; if(pos == null) return;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if(tile == null) return;
x = tile.xCoord; x = pos[0];
y = tile.yCoord; y = pos[1];
z = tile.zCoord; z = pos[2];
EntityPlayer player = event.player; EntityPlayer player = event.player;
float interp = event.partialTicks; float interp = event.partialTicks;
@ -503,9 +501,11 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl
double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp; double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) interp;
double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp; double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp;
float exp = 0.002F; float exp = 0.002F;
int meta = world.getBlockMetadata(x, y, z);
ICustomBlockHighlight.setup(); ICustomBlockHighlight.setup();
for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(tile.getBlockMetadata() - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(meta - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1);
ICustomBlockHighlight.cleanup(); ICustomBlockHighlight.cleanup();
} }
} }

View File

@ -760,6 +760,8 @@ public class ModBlocks {
public static Block capacitor_bus; public static Block capacitor_bus;
public static Block capacitor_copper; public static Block capacitor_copper;
public static Block capacitor_gold; public static Block capacitor_gold;
public static Block capacitor_niobium;
public static Block capacitor_tantalium;
public static Block machine_coal_off; public static Block machine_coal_off;
public static Block machine_coal_on; public static Block machine_coal_on;
@ -1886,6 +1888,8 @@ public class ModBlocks {
capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L, "copper").setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L, "copper").setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper");
capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName("gold_block"); capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName("gold_block");
capacitor_niobium = new MachineCapacitor(Material.iron, 25_000_000L, "niobium").setBlockName("capacitor_niobium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_niobium");
capacitor_tantalium = new MachineCapacitor(Material.iron, 100_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_tantalium");
machine_coal_off = new MachineCoal(false).setBlockName("machine_coal_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_coal_off = new MachineCoal(false).setBlockName("machine_coal_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_coal_on = new MachineCoal(true).setBlockName("machine_coal_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); machine_coal_on = new MachineCoal(true).setBlockName("machine_coal_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F);
@ -3203,6 +3207,8 @@ public class ModBlocks {
register(capacitor_bus); register(capacitor_bus);
register(capacitor_copper); register(capacitor_copper);
register(capacitor_gold); register(capacitor_gold);
register(capacitor_niobium);
register(capacitor_tantalium);
GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName());

View File

@ -3,8 +3,11 @@ package com.hbm.blocks.machine;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.blocks.IPersistentInfoProvider;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.INBTPacketReceiver;
@ -33,7 +36,7 @@ import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class MachineCapacitor extends BlockContainer implements ILookOverlay, IPersistentInfoProvider { public class MachineCapacitor extends BlockContainer implements ILookOverlay, IPersistentInfoProvider, ITooltipProvider {
@SideOnly(Side.CLIENT) public IIcon iconTop; @SideOnly(Side.CLIENT) public IIcon iconTop;
@SideOnly(Side.CLIENT) public IIcon iconSide; @SideOnly(Side.CLIENT) public IIcon iconSide;
@ -93,6 +96,8 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
int charge = (int) Math.floor(percent * 10_000D); int charge = (int) Math.floor(percent * 10_000D);
int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8); int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8);
text.add("&[" + color + "&]" + (charge / 100D) + "%"); text.add("&[" + color + "&]" + (charge / 100D) + "%");
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + "+" + BobMathUtil.getShortNumber(battery.powerReceived) + "HE/t");
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + "-" + BobMathUtil.getShortNumber(battery.powerSent) + "HE/t");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
} }
@ -101,6 +106,18 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.YELLOW + "" + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "/" + BobMathUtil.getShortNumber(persistentTag.getLong("maxPower")) + "HE"); list.add(EnumChatFormatting.YELLOW + "" + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "/" + BobMathUtil.getShortNumber(persistentTag.getLong("maxPower")) + "HE");
} }
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
for(String s : I18nUtil.resolveKeyArray("tile.capacitor.desc")) list.add(EnumChatFormatting.YELLOW + s);
} else {
list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" +
EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" +
EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "> to display more info");
}
}
@Override @Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) { public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
@ -132,6 +149,9 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
public long power; public long power;
protected long maxPower; protected long maxPower;
public long prevPower;
public long powerReceived;
public long powerSent;
public TileEntityCapacitor() { } public TileEntityCapacitor() { }
@ -143,6 +163,8 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
public void updateEntity() { public void updateEntity() {
if(!worldObj.isRemote) { if(!worldObj.isRemote) {
long gain = power - prevPower;
ForgeDirection opp = ForgeDirection.getOrientation(this.getBlockMetadata()); ForgeDirection opp = ForgeDirection.getOrientation(this.getBlockMetadata());
ForgeDirection dir = opp.getOpposite(); ForgeDirection dir = opp.getOpposite();
@ -165,23 +187,32 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
pos = pos.offset(current); pos = pos.offset(current);
} }
long preSend = power;
if(pos != null && last != null) { if(pos != null && last != null) {
this.tryUnsubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ()); this.tryUnsubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ());
this.sendPower(worldObj, pos.getX(), pos.getY(), pos.getZ(), last); this.sendPower(worldObj, pos.getX(), pos.getY(), pos.getZ(), last);
} }
long sent = preSend - power;
this.trySubscribe(worldObj, xCoord + opp.offsetX, yCoord+ opp.offsetY, zCoord + opp.offsetZ, opp); this.trySubscribe(worldObj, xCoord + opp.offsetX, yCoord+ opp.offsetY, zCoord + opp.offsetZ, opp);
NBTTagCompound data = new NBTTagCompound(); NBTTagCompound data = new NBTTagCompound();
data.setLong("power", power); data.setLong("power", power);
data.setLong("maxPower", maxPower); data.setLong("maxPower", maxPower);
data.setLong("rec", gain);
data.setLong("sent", sent);
INBTPacketReceiver.networkPack(this, data, 15); INBTPacketReceiver.networkPack(this, data, 15);
this.prevPower = power;
} }
} }
@Override @Override
public void networkUnpack(NBTTagCompound nbt) { public void networkUnpack(NBTTagCompound nbt) {
this.power = nbt.getLong("power"); this.power = nbt.getLong("power");
this.maxPower = nbt.getLong("maxPower");
this.powerReceived = nbt.getLong("rec");
this.powerSent = nbt.getLong("sent");
} }
@Override @Override

View File

@ -1,5 +1,8 @@
package com.hbm.blocks.machine; package com.hbm.blocks.machine;
import java.util.List;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import api.hbm.energy.IEnergyConnectorBlock; import api.hbm.energy.IEnergyConnectorBlock;
@ -10,13 +13,14 @@ import net.minecraft.block.BlockPistonBase;
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.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess; 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 MachineCapacitorBus extends Block implements IEnergyConnectorBlock { public class MachineCapacitorBus extends Block implements IEnergyConnectorBlock, ITooltipProvider {
@SideOnly(Side.CLIENT) private IIcon topIcon; @SideOnly(Side.CLIENT) private IIcon topIcon;
@ -47,4 +51,9 @@ public class MachineCapacitorBus extends Block implements IEnergyConnectorBlock
ForgeDirection busDir = ForgeDirection.getOrientation(meta); ForgeDirection busDir = ForgeDirection.getOrientation(meta);
return dir == busDir; return dir == busDir;
} }
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
} }

View File

@ -100,7 +100,7 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM {
moveAngle -= angleOvershoot; moveAngle -= angleOvershoot;
double lengthOvershoot = angleOvershoot * length90Deg / 90D; double lengthOvershoot = angleOvershoot * length90Deg / 90D;
info.dist(lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX - dir.offsetX * 4 + rot.offsetX * 5, y, cZ - dir.offsetZ * 4 + rot.offsetZ * 5)).yaw((float) moveAngle); info.dist(lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX - dir.offsetX * 4 + rot.offsetX * 5, y, cZ - dir.offsetZ * 4 + rot.offsetZ * 5)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - dir.offsetX * turnRadius, y, axisZ - dir.offsetZ * turnRadius); return Vec3.createVectorHelper(axisX - dir.offsetX * turnRadius, y + 0.1875, axisZ - dir.offsetZ * turnRadius);
} }
if(effAngle < 0) { if(effAngle < 0) {
@ -108,13 +108,13 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM {
moveAngle -= angleOvershoot; moveAngle -= angleOvershoot;
double lengthOvershoot = angleOvershoot * length90Deg / 90D; double lengthOvershoot = angleOvershoot * length90Deg / 90D;
info.dist(-lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX + dir.offsetX , y, cZ + dir.offsetZ)).yaw((float) moveAngle); info.dist(-lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX + dir.offsetX , y, cZ + dir.offsetZ)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - rot.offsetX * turnRadius, y, axisZ -rot.offsetZ * turnRadius); return Vec3.createVectorHelper(axisX - rot.offsetX * turnRadius, y + 0.1875, axisZ -rot.offsetZ * turnRadius);
} }
double radianChange = angularChange * Math.PI / 180D; double radianChange = angularChange * Math.PI / 180D;
dist.rotateAroundY((float) radianChange); dist.rotateAroundY((float) radianChange);
return Vec3.createVectorHelper(axisX + dist.xCoord, y, axisZ + dist.zCoord); return Vec3.createVectorHelper(axisX + dist.xCoord, y + 0.1875, axisZ + dist.zCoord);
} }
@Override @Override

View File

@ -19,6 +19,11 @@ public class RailStandardRamp extends BlockDummyable implements IRailNTM {
public RailStandardRamp() { public RailStandardRamp() {
super(Material.iron); super(Material.iron);
this.bounding.add(AxisAlignedBB.getBoundingBox(-2.5, 0.0, -1.5, -1.5, 0.1, 0.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5, 0.0, -1.5, -0.5, 0.3, 0.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(-0.5, 0.0, -1.5, 0.5, 0.5, 0.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(0.5, 0.0, -1.5, 1.5, 0.7, 0.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(1.5, 0.0, -1.5, 2.5, 0.9, 0.5));
} }
@Override @Override
@ -92,7 +97,7 @@ public class RailStandardRamp extends BlockDummyable implements IRailNTM {
} }
double dist = (cX + 0.5 - targetX + 2.5) / 5; double dist = (cX + 0.5 - targetX + 2.5) / 5;
vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3); vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3);
vec.yCoord = MathHelper.clamp_double(dir == Library.POS_X ? cY + dist : cY + 1 - dist, cY, cY + 1); vec.yCoord = MathHelper.clamp_double(dir == Library.POS_X ? cY + dist : cY + 1 - dist, cY, cY + 1) + 0.1875;
vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5; vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5;
info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed)); info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed));
info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), cY + (motionX * speed > 0 ^ dir == Library.POS_X ? 1 : 0), cZ)); info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), cY + (motionX * speed > 0 ^ dir == Library.POS_X ? 1 : 0), cZ));
@ -107,7 +112,7 @@ public class RailStandardRamp extends BlockDummyable implements IRailNTM {
} }
double dist = (cZ + 0.5 - targetZ + 2.5) / 5; double dist = (cZ + 0.5 - targetZ + 2.5) / 5;
vec.xCoord = cX + 0.5 + rot.offsetX * 0.5; vec.xCoord = cX + 0.5 + rot.offsetX * 0.5;
vec.yCoord = MathHelper.clamp_double(dir == Library.POS_Z ? cY + dist : cY + 1 - dist, cY, cY + 1); vec.yCoord = MathHelper.clamp_double(dir == Library.POS_Z ? cY + dist : cY + 1 - dist, cY, cY + 1) + 0.1875;
vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3); vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3);
info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed)); info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed));
info.pos(new BlockPos(cX, cY + (motionZ * speed > 0 ^ dir == Library.POS_Z ? 1 : 0), cZ + (motionZ * speed > 0 ? 3 : -3))); info.pos(new BlockPos(cX, cY + (motionZ * speed > 0 ^ dir == Library.POS_Z ? 1 : 0), cZ + (motionZ * speed > 0 ? 3 : -3)));

View File

@ -90,7 +90,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
info.yaw(90F); info.yaw(90F);
} }
vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3); vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3);
vec.yCoord = y; vec.yCoord = y + 0.1875;
vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5; vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5;
info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed)); info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed));
info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), y, cZ)); info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), y, cZ));
@ -104,7 +104,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
info.yaw(180F); info.yaw(180F);
} }
vec.xCoord = cX + 0.5 + rot.offsetX * 0.5; vec.xCoord = cX + 0.5 + rot.offsetX * 0.5;
vec.yCoord = y; vec.yCoord = y + 0.1875;
vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3); vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3);
info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed)); info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed));
info.pos(new BlockPos(cX, y, cZ + (motionZ * speed > 0 ? 3 : -3))); info.pos(new BlockPos(cX, y, cZ + (motionZ * speed > 0 ? 3 : -3)));

View File

@ -47,6 +47,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
private double trainYaw; private double trainYaw;
private double trainPitch; private double trainPitch;
private float movementYaw; private float movementYaw;
private float movementPitch;
@SideOnly(Side.CLIENT) private double velocityX; @SideOnly(Side.CLIENT) private double velocityX;
@SideOnly(Side.CLIENT) private double velocityY; @SideOnly(Side.CLIENT) private double velocityY;
@SideOnly(Side.CLIENT) private double velocityZ; @SideOnly(Side.CLIENT) private double velocityZ;
@ -179,6 +180,9 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
} }
} else { } else {
PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + this.rotationPitch).color(EnumChatFormatting.RED).flush(), 1),
new TargetPoint(dimension, posX, posY + 1, posZ, 50));
if(this.coupledFront != null && this.coupledFront.isDead) { if(this.coupledFront != null && this.coupledFront.isDead) {
this.coupledFront = null; this.coupledFront = null;
@ -393,11 +397,13 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
this.motionY = this.velocityY; this.motionY = this.velocityY;
this.motionZ = this.velocityZ; this.motionZ = this.velocityZ;
this.trainYaw = this.movementYaw; this.trainYaw = this.movementYaw;
this.trainPitch = this.movementPitch;
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void setVelocity(double mX, double mY, double mZ) { public void setVelocity(double mX, double mY, double mZ) {
this.movementYaw = (float) this.motionX * 360F; this.movementYaw = (float) this.motionX * 360F;
this.movementPitch = (float) this.motionY * 360F;
this.velocityX = this.motionX = mX; this.velocityX = this.motionX = mX;
this.velocityY = this.motionY = mY; this.velocityY = this.motionY = mY;
this.velocityZ = this.motionZ = mZ; this.velocityZ = this.motionZ = mZ;
@ -614,7 +620,8 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
Vec3 nextLoc = moving.getCouplingPos(nextCouple); Vec3 nextLoc = moving.getCouplingPos(nextCouple);
Vec3 delta = Vec3.createVectorHelper(prevLoc.xCoord - nextLoc.xCoord, 0, prevLoc.zCoord - nextLoc.zCoord); Vec3 delta = Vec3.createVectorHelper(prevLoc.xCoord - nextLoc.xCoord, 0, prevLoc.zCoord - nextLoc.zCoord);
double len = delta.lengthVector(); double len = delta.lengthVector();
len *= 0.75; //suspension, causes movements to be less rigid //len *= 0.25; //suspension, causes movements to be less rigid
len = (len / (0.5D / (len * len) + 1D)); //smart suspension
BlockPos anchor = new BlockPos(moving.posX, moving.posY, moving.posZ); BlockPos anchor = new BlockPos(moving.posX, moving.posY, moving.posZ);
Vec3 trainPos = Vec3.createVectorHelper(moving.posX, moving.posY, moving.posZ); Vec3 trainPos = Vec3.createVectorHelper(moving.posX, moving.posY, moving.posZ);
float yaw = EntityRailCarBase.generateYaw(prevLoc, nextLoc); float yaw = EntityRailCarBase.generateYaw(prevLoc, nextLoc);
@ -740,15 +747,13 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
EntityRailCarBase first = this.trains[0]; EntityRailCarBase first = this.trains[0];
for(int i = forward ? 0 : this.trains.length - 1; forward ? i < this.trains.length : i >= 0; i += forward ? 1 : -1) { for(int i = !forward ? 0 : this.trains.length - 1; !forward ? i < this.trains.length : i >= 0; i += !forward ? 1 : -1) {
EntityRailCarBase current = this.trains[i]; EntityRailCarBase current = this.trains[i];
if(previous == null) { if(previous == null) {
PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + current.getClass() + " " + origSpeed).color(EnumChatFormatting.RED).flush(), 1),
new TargetPoint(current.dimension, current.posX, current.posY + 1, current.posZ, 50));
boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null); boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null);
int sigNum = inReverse ? -1 : 1; int sigNum = inReverse ? 1 : -1;
BlockPos anchor = current.getCurrentAnchorPos(); BlockPos anchor = current.getCurrentAnchorPos();
Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE)); Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE));
@ -786,7 +791,10 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
current.renderZ = (frontPos.zCoord + backPos.zCoord) / 2D; current.renderZ = (frontPos.zCoord + backPos.zCoord) / 2D;
current.prevRotationYaw = current.rotationYaw; current.prevRotationYaw = current.rotationYaw;
current.rotationYaw = current.movementYaw = generateYaw(frontPos, backPos); current.rotationYaw = current.movementYaw = generateYaw(frontPos, backPos);
Vec3 delta = Vec3.createVectorHelper(frontPos.xCoord - backPos.xCoord, frontPos.yCoord - backPos.yCoord, frontPos.zCoord - backPos.zCoord);
current.rotationPitch = current.movementPitch = (float) (Math.asin(delta.yCoord / delta.lengthVector()) * 180D / Math.PI);
current.motionX = current.rotationYaw / 360D; // hijacking this crap for easy syncing current.motionX = current.rotationYaw / 360D; // hijacking this crap for easy syncing
current.motionY = current.rotationPitch / 360D;
current.velocityChanged = true; current.velocityChanged = true;
} }
} }

View File

@ -173,6 +173,7 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
seat.setDead(); seat.setDead();
} else { } else {
Vec3 rot = seats[i]; Vec3 rot = seats[i];
rot.rotateAroundX((float) (this.rotationPitch * Math.PI / 180));
rot.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180)); rot.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
double x = renderX + rot.xCoord; double x = renderX + rot.xCoord;
double y = renderY + rot.yCoord; double y = renderY + rot.yCoord;
@ -188,6 +189,7 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
public void updateRiderPosition() { public void updateRiderPosition() {
Vec3 offset = getRiderSeatPosition(); Vec3 offset = getRiderSeatPosition();
offset.rotateAroundX((float) (this.rotationPitch * Math.PI / 180));
offset.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180)); offset.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
if(this.riddenByEntity != null) { if(this.riddenByEntity != null) {
@ -271,6 +273,7 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
//mmhmhmhm silky smooth //mmhmhmhm silky smooth
int index = this.dataWatcher.getWatchableObjectInt(4); int index = this.dataWatcher.getWatchableObjectInt(4);
Vec3 rot = this.train.getPassengerSeats()[index]; Vec3 rot = this.train.getPassengerSeats()[index];
rot.rotateAroundX((float) (train.rotationPitch * Math.PI / 180));
rot.rotateAroundY((float) (-train.rotationYaw * Math.PI / 180)); rot.rotateAroundY((float) (-train.rotationYaw * Math.PI / 180));
double x = train.renderX + rot.xCoord; double x = train.renderX + rot.xCoord;
double y = train.renderY + rot.yCoord; double y = train.renderY + rot.yCoord;

View File

@ -281,6 +281,11 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 4), new Object[] { "CWC", "PWP", " T ", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'P', ModItems.plate_polymer, 'T', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon, 4), new Object[] { "CWC", "PWP", " T ", 'C', ModItems.coil_copper, 'W', KEY_PLANKS, 'P', ModItems.plate_polymer, 'T', ModBlocks.red_wire_coated });
addRecipeAuto(new ItemStack(ModBlocks.machine_battery_potato, 1), new Object[] { "PCP", "WRW", "PCP", 'P', ItemBattery.getEmptyBattery(ModItems.battery_potato), 'C', CU.ingot(), 'R', REDSTONE.block(), 'W', KEY_PLANKS }); addRecipeAuto(new ItemStack(ModBlocks.machine_battery_potato, 1), new Object[] { "PCP", "WRW", "PCP", 'P', ItemBattery.getEmptyBattery(ModItems.battery_potato), 'C', CU.ingot(), 'R', REDSTONE.block(), 'W', KEY_PLANKS });
addRecipeAuto(new ItemStack(ModBlocks.capacitor_bus, 1), new Object[] { "PIP", "PIP", "PIP", 'P', ModItems.plate_polymer, 'I', MINGRADE.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.capacitor_copper, 1), new Object[] { "PPP", "PCP", "WWW", 'P', STEEL.plate(), 'C', CU.block(), 'W', KEY_PLANKS });
addRecipeAuto(new ItemStack(ModBlocks.capacitor_gold, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_PLASTIC.ingot(), 'C', GOLD.block(), 'W', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.capacitor_niobium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', RUBBER.ingot(), 'C', NB.block(), 'W', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.capacitor_tantalium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', TA.block(), 'W', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace });
addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', STEEL.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', STEEL.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', Blocks.furnace });
addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_electric_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', DESH.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', ModBlocks.machine_electric_furnace_off }); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_electric_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', DESH.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', ModBlocks.machine_electric_furnace_off });

View File

@ -13,10 +13,6 @@ import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAshes; import com.hbm.blocks.generic.BlockAshes;
import com.hbm.blocks.rail.IRailNTM;
import com.hbm.blocks.rail.IRailNTM.MoveContext;
import com.hbm.blocks.rail.IRailNTM.RailCheckType;
import com.hbm.blocks.rail.IRailNTM.RailContext;
import com.hbm.config.GeneralConfig; import com.hbm.config.GeneralConfig;
import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.mob.EntityHunterChopper; import com.hbm.entity.mob.EntityHunterChopper;
@ -70,7 +66,6 @@ import com.hbm.tileentity.machine.TileEntityNukeFurnace;
import com.hbm.util.I18nUtil; import com.hbm.util.I18nUtil;
import com.hbm.util.ItemStackUtil; import com.hbm.util.ItemStackUtil;
import com.hbm.util.LoggingUtil; import com.hbm.util.LoggingUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.GuiWorldInAJar;
import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.CanneryBase;
import com.hbm.wiaj.cannery.Jars; import com.hbm.wiaj.cannery.Jars;
@ -953,22 +948,26 @@ public class ModEventHandlerClient {
if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) { if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) {
World world = Minecraft.getMinecraft().theWorld; World world = Minecraft.getMinecraft().theWorld;
if(world == null) return;
if(world != null && world.provider instanceof WorldProviderSurface) { IRenderHandler sky = world.provider.getSkyRenderer();
IRenderHandler sky = world.provider.getSkyRenderer(); if(world.provider instanceof WorldProviderSurface) {
if(ImpactWorldHandler.getDustForClient(world) > 0 || ImpactWorldHandler.getFireForClient(world) > 0) { if(ImpactWorldHandler.getDustForClient(world) > 0 || ImpactWorldHandler.getFireForClient(world) > 0) {
//using a chainloader isn't necessary since none of the sky effects should render anyway //using a chainloader isn't necessary since none of the sky effects should render anyway
if(!(sky instanceof RenderNTMSkyboxImpact)) { if(!(sky instanceof RenderNTMSkyboxImpact)) {
world.provider.setSkyRenderer(new RenderNTMSkyboxImpact()); world.provider.setSkyRenderer(new RenderNTMSkyboxImpact());
return;
} }
} else { }
}
if(!(sky instanceof RenderNTMSkyboxChainloader)) {
world.provider.setSkyRenderer(new RenderNTMSkyboxChainloader(sky)); if(world.provider.dimensionId == 0) {
}
if(!(sky instanceof RenderNTMSkyboxChainloader)) {
world.provider.setSkyRenderer(new RenderNTMSkyboxChainloader(sky));
} }
} }
} }

View File

@ -37,7 +37,11 @@ public class RenderTrainCargoTram extends Render {
float yawInterp = prevYaw + (yaw - prevYaw) * interp - 720; float yawInterp = prevYaw + (yaw - prevYaw) * interp - 720;
GL11.glRotated(-yawInterp, 0, 1, 0); GL11.glRotated(-yawInterp, 0, 1, 0);
GL11.glRotated(-entity.rotationPitch, 0, 0, 1);
float pitch = entity.rotationPitch;
float prevPitch = entity.prevRotationPitch;
float pitchInterp = prevPitch + (pitch - prevPitch) * interp;
GL11.glRotated(-pitchInterp, 1, 0, 0);
GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_CULL_FACE);
bindTexture(ResourceManager.train_tram); bindTexture(ResourceManager.train_tram);

View File

@ -3,6 +3,7 @@ package com.hbm.render.entity.item;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.entity.train.EntityRailCarBase;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.Render;
@ -18,6 +19,18 @@ public class RenderTrainCargoTramTrailer extends Render {
@Override @Override
public void doRender(Entity entity, double x, double y, double z, float swing, float interp) { public void doRender(Entity entity, double x, double y, double z, float swing, float interp) {
GL11.glPushMatrix(); GL11.glPushMatrix();
EntityRailCarBase train = (EntityRailCarBase) entity;
double iX = train.prevPosX + (train.posX - train.prevPosX) * interp;
double iY = train.prevPosY + (train.posY - train.prevPosY) * interp;
double iZ = train.prevPosZ + (train.posZ - train.prevPosZ) * interp;
double rX = train.lastRenderX + (train.renderX - train.lastRenderX) * interp;
double rY = train.lastRenderY + (train.renderY - train.lastRenderY) * interp;
double rZ = train.lastRenderZ + (train.renderZ - train.lastRenderZ) * interp;
x -= iX - rX;
y -= iY - rY;
z -= iZ - rZ;
GL11.glTranslated(x, y, z); GL11.glTranslated(x, y, z);
float yaw = entity.rotationYaw; float yaw = entity.rotationYaw;
@ -29,7 +42,11 @@ public class RenderTrainCargoTramTrailer extends Render {
float yawInterp = prevYaw + (yaw - prevYaw) * interp - 720; float yawInterp = prevYaw + (yaw - prevYaw) * interp - 720;
GL11.glRotated(-yawInterp, 0, 1, 0); GL11.glRotated(-yawInterp, 0, 1, 0);
GL11.glRotated(-entity.rotationPitch, 0, 0, 1);
float pitch = entity.rotationPitch;
float prevPitch = entity.prevRotationPitch;
float pitchInterp = prevPitch + (pitch - prevPitch) * interp;
GL11.glRotated(-pitchInterp, 1, 0, 0);
GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_CULL_FACE);
bindTexture(ResourceManager.tram_trailer); bindTexture(ResourceManager.tram_trailer);

View File

@ -326,9 +326,9 @@ public class TileEntityMachineTurbofan extends TileEntityMachineBase implements
* Otherwise this could lead to desync since the motion is never sent form the server * Otherwise this could lead to desync since the motion is never sent form the server
*/ */
if(tank.getFill() > 0 && !MainRegistry.proxy.me().capabilities.isCreativeMode) { if(tank.getFill() > 0 && !MainRegistry.proxy.me().capabilities.isCreativeMode) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getRotation(ForgeDirection.UP);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP); ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
double minX = this.xCoord + 0.5 - dir.offsetX * 3.5 - rot.offsetX * 1.5; double minX = this.xCoord + 0.5 - dir.offsetX * 3.5 - rot.offsetX * 1.5;
double maxX = this.xCoord + 0.5 - dir.offsetX * 19.5 + rot.offsetX * 1.5; double maxX = this.xCoord + 0.5 - dir.offsetX * 19.5 + rot.offsetX * 1.5;
double minZ = this.zCoord + 0.5 - dir.offsetZ * 3.5 - rot.offsetZ * 1.5; double minZ = this.zCoord + 0.5 - dir.offsetZ * 3.5 - rot.offsetZ * 1.5;

View File

@ -16,7 +16,6 @@ import net.minecraft.block.BlockWeb;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemDoor;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;

View File

@ -3586,6 +3586,12 @@ tile.c4.name=C4
tile.cable_detector.name=Redstone-Stromschalter tile.cable_detector.name=Redstone-Stromschalter
tile.cable_diode.name=Rote Kupferdiode tile.cable_diode.name=Rote Kupferdiode
tile.cable_switch.name=Stromschalter tile.cable_switch.name=Stromschalter
tile.capacitor_bus.name=Kondensator-Bus
tile.capacitor_bus.desc=Output für Kondensatoren$Kann in einer geraden Linie aneinandergereit werden
tile.capacitor_copper.name=Kupferkondensator
tile.capacitor_gold.name=Goldkondensator
tile.capacitor_niobium.name=Niobkondensator
tile.capacitor.desc=Input: Oben$Output: Unten, über Kondensator-Bus
tile.charge_c4.name=Abrissladung tile.charge_c4.name=Abrissladung
tile.charge_dynamite.name=Zeitbombe tile.charge_dynamite.name=Zeitbombe
tile.charge_miner.name=Bergbauladung mit Zeitzünder tile.charge_miner.name=Bergbauladung mit Zeitzünder

View File

@ -4404,6 +4404,12 @@ tile.c4.name=C-4
tile.cable_detector.name=Redstone Power Switch tile.cable_detector.name=Redstone Power Switch
tile.cable_diode.name=Red Copper Diode tile.cable_diode.name=Red Copper Diode
tile.cable_switch.name=Power Switch tile.cable_switch.name=Power Switch
tile.capacitor_bus.name=Capacitor Bus
tile.capacitor_bus.desc=Output block for capacitors$Can be chained up in a straight line
tile.capacitor_copper.name=Copper Capacitor
tile.capacitor_gold.name=Golden Capacitor
tile.capacitor_niobium.name=Niobium Capacitor
tile.capacitor.desc=Input: Top$Output: Bottom, via Capacitor Bus
tile.charge_c4.name=Demolition Charge tile.charge_c4.name=Demolition Charge
tile.charge_dynamite.name=Time Bomb tile.charge_dynamite.name=Time Bomb
tile.charge_miner.name=Timed Mining Charge tile.charge_miner.name=Timed Mining Charge

View File

@ -13,10 +13,10 @@ v -1.000000 0.700000 -0.812500
v 1.000000 0.700000 -0.812500 v 1.000000 0.700000 -0.812500
v -1.000000 0.700000 -1.187500 v -1.000000 0.700000 -1.187500
v 1.000000 0.700000 -1.187500 v 1.000000 0.700000 -1.187500
v -1.000000 0.800000 -1.812500 v -1.000000 0.900000 -1.812500
v 1.000000 0.800000 -1.812500 v 1.000000 0.900000 -1.812500
v -1.000000 0.800000 -2.187500 v -1.000000 0.900000 -2.187500
v 1.000000 0.800000 -2.187500 v 1.000000 0.900000 -2.187500
v -1.000000 0.100000 2.187500 v -1.000000 0.100000 2.187500
v 1.000000 0.100000 2.187500 v 1.000000 0.100000 2.187500
v -1.000000 0.100000 1.812500 v -1.000000 0.100000 1.812500
@ -29,10 +29,10 @@ v -1.000000 0.762500 -1.187500
v -1.000000 0.762500 -0.812500 v -1.000000 0.762500 -0.812500
v 1.000000 0.762500 -0.812500 v 1.000000 0.762500 -0.812500
v 1.000000 0.762500 -1.187500 v 1.000000 0.762500 -1.187500
v -1.000000 0.862500 -2.187500 v -1.000000 0.962500 -2.187500
v -1.000000 0.862500 -1.812500 v -1.000000 0.962500 -1.812500
v 1.000000 0.862500 -1.812500 v 1.000000 0.962500 -1.812500
v 1.000000 0.862500 -2.187500 v 1.000000 0.962500 -2.187500
v -1.000000 0.162500 1.812500 v -1.000000 0.162500 1.812500
v -1.000000 0.162500 2.187500 v -1.000000 0.162500 2.187500
v 1.000000 0.162500 2.187500 v 1.000000 0.162500 2.187500
@ -121,22 +121,22 @@ v -0.937500 0.825000 -0.937500
v -0.625000 0.825000 -0.937500 v -0.625000 0.825000 -0.937500
v -0.937500 0.825000 -1.062500 v -0.937500 0.825000 -1.062500
v -0.625000 0.825000 -1.062500 v -0.625000 0.825000 -1.062500
v 0.625000 0.862500 -1.937500 v 0.625000 0.962500 -1.937500
v 0.937500 0.862500 -1.937500 v 0.937500 0.962500 -1.937500
v 0.625000 0.862500 -2.062500 v 0.625000 0.962500 -2.062500
v 0.937500 0.862500 -2.062500 v 0.937500 0.962500 -2.062500
v 0.625000 0.925000 -1.937500 v 0.625000 1.025000 -1.937500
v 0.937500 0.925000 -1.937500 v 0.937500 1.025000 -1.937500
v 0.625000 0.925000 -2.062500 v 0.625000 1.025000 -2.062500
v 0.937500 0.925000 -2.062500 v 0.937500 1.025000 -2.062500
v -0.937500 0.862500 -1.937500 v -0.937500 0.962500 -1.937500
v -0.625000 0.862500 -1.937500 v -0.625000 0.962500 -1.937500
v -0.937500 0.862500 -2.062500 v -0.937500 0.962500 -2.062500
v -0.625000 0.862500 -2.062500 v -0.625000 0.962500 -2.062500
v -0.937500 0.925000 -1.937500 v -0.937500 1.025000 -1.937500
v -0.625000 0.925000 -1.937500 v -0.625000 1.025000 -1.937500
v -0.937500 0.925000 -2.062500 v -0.937500 1.025000 -2.062500
v -0.625000 0.925000 -2.062500 v -0.625000 1.025000 -2.062500
v -0.812500 0.862500 -1.500000 v -0.812500 0.862500 -1.500000
v -0.812500 0.662500 -0.500000 v -0.812500 0.662500 -0.500000
v -0.812500 0.462500 0.500000 v -0.812500 0.462500 0.500000
@ -169,6 +169,86 @@ v -0.750000 0.987500 -1.500000
v -0.750000 0.787500 -0.500000 v -0.750000 0.787500 -0.500000
v -0.750000 0.587500 0.500000 v -0.750000 0.587500 0.500000
v -0.750000 0.387500 1.500000 v -0.750000 0.387500 1.500000
v 0.625000 0.900000 -1.875000
v 0.875000 0.900000 -1.875000
v 0.625000 0.900000 -2.125000
v 0.875000 0.900000 -2.125000
v 0.625000 -0.037500 -2.125000
v 0.625000 -0.037500 -1.875000
v 0.875000 -0.037500 -1.875000
v 0.875000 -0.037500 -2.125000
v -0.875000 0.900000 -1.875000
v -0.625000 0.900000 -1.875000
v -0.875000 0.900000 -2.125000
v -0.625000 0.900000 -2.125000
v -0.875000 -0.037500 -2.125000
v -0.875000 -0.037500 -1.875000
v -0.625000 -0.037500 -1.875000
v -0.625000 -0.037500 -2.125000
v 0.625000 0.700000 -0.875000
v 0.875000 0.700000 -0.875000
v 0.625000 0.700000 -1.125000
v 0.875000 0.700000 -1.125000
v 0.625000 -0.050000 -1.125000
v 0.625000 -0.050000 -0.875000
v 0.875000 -0.050000 -0.875000
v 0.875000 -0.050000 -1.125000
v -0.875000 0.700000 -0.875000
v -0.625000 0.700000 -0.875000
v -0.875000 0.700000 -1.125000
v -0.625000 0.700000 -1.125000
v -0.875000 -0.050000 -1.125000
v -0.875000 -0.050000 -0.875000
v -0.625000 -0.050000 -0.875000
v -0.625000 -0.050000 -1.125000
v 0.625000 0.500000 0.125000
v 0.875000 0.500000 0.125000
v 0.625000 0.500000 -0.125000
v 0.875000 0.500000 -0.125000
v 0.625000 0.000000 -0.125000
v 0.625000 0.000000 0.125000
v 0.875000 0.000000 0.125000
v 0.875000 0.000000 -0.125000
v -0.875000 0.500000 0.125000
v -0.625000 0.500000 0.125000
v -0.875000 0.500000 -0.125000
v -0.625000 0.500000 -0.125000
v -0.875000 0.000000 -0.125000
v -0.875000 0.000000 0.125000
v -0.625000 0.000000 0.125000
v -0.625000 0.000000 -0.125000
v 0.625000 0.300000 1.125000
v 0.875000 0.300000 1.125000
v 0.625000 0.300000 0.875000
v 0.875000 0.300000 0.875000
v 0.625000 -0.012500 0.875000
v 0.625000 -0.012500 1.125000
v 0.875000 -0.012500 1.125000
v 0.875000 -0.012500 0.875000
v -0.875000 0.300000 1.125000
v -0.625000 0.300000 1.125000
v -0.875000 0.300000 0.875000
v -0.625000 0.300000 0.875000
v -0.875000 -0.012500 0.875000
v -0.875000 -0.012500 1.125000
v -0.625000 -0.012500 1.125000
v -0.625000 -0.012500 0.875000
v 0.625000 0.100000 2.125000
v 0.875000 0.100000 2.125000
v 0.625000 0.100000 1.875000
v 0.875000 0.100000 1.875000
v 0.625000 -0.025000 1.875000
v 0.625000 -0.025000 2.125000
v 0.875000 -0.025000 2.125000
v 0.875000 -0.025000 1.875000
v -0.875000 0.100000 2.125000
v -0.625000 0.100000 2.125000
v -0.875000 0.100000 1.875000
v -0.625000 0.100000 1.875000
v -0.875000 -0.025000 1.875000
v -0.875000 -0.025000 2.125000
v -0.625000 -0.025000 2.125000
v -0.625000 -0.025000 1.875000
vt -0.000000 0.000000 vt -0.000000 0.000000
vt 0.187500 1.000000 vt 0.187500 1.000000
vt -0.000000 1.000000 vt -0.000000 1.000000
@ -471,6 +551,156 @@ vt 0.593750 0.156250
vt 0.593750 0.656250 vt 0.593750 0.656250
vt 0.593750 0.156250 vt 0.593750 0.156250
vt 0.593750 0.656250 vt 0.593750 0.656250
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.156250 0.468750
vt 0.031250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.843750
vt 0.156250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.156250 0.468750
vt 0.031250 0.718750
vt 0.156250 0.718750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.156250 0.468750
vt 0.031250 0.625000
vt 0.156250 0.625000
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.031250 0.968750
vt 0.156250 0.843750
vt 0.031250 0.843750
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.156250 0.468750
vt 0.031250 0.531250
vt 0.156250 0.531250
vt 0.406250 -0.000000 vt 0.406250 -0.000000
vt 0.187500 1.000000 vt 0.187500 1.000000
vt 0.187500 1.000000 vt 0.187500 1.000000
@ -500,6 +730,56 @@ vt 0.593750 0.656250
vt 0.593750 0.656250 vt 0.593750 0.656250
vt 0.593750 0.656250 vt 0.593750 0.656250
vt 0.593750 0.656250 vt 0.593750 0.656250
vt 0.156250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.156250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.156250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.156250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.156250 0.968750
vt 0.156250 0.968750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vt 0.031250 0.468750
vn 0.0000 1.0000 0.0000 vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000 vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000
@ -633,6 +913,56 @@ f 44/267/5 152/95/5 144/265/5
f 144/270/5 151/286/5 143/268/5 f 144/270/5 151/286/5 143/268/5
f 143/273/5 150/283/5 142/271/5 f 143/273/5 150/283/5 142/271/5
f 142/276/5 149/280/5 141/274/5 f 142/276/5 149/280/5 141/274/5
f 181/303/2 183/304/2 182/305/2
f 173/306/2 175/307/2 174/308/2
f 176/309/6 171/310/6 172/311/6
f 174/312/4 170/313/4 169/314/4
f 175/315/5 172/316/5 170/317/5
f 173/318/3 169/319/3 171/320/3
f 184/321/6 179/322/6 180/323/6
f 182/324/4 178/325/4 177/326/4
f 183/327/5 180/328/5 178/329/5
f 181/330/3 177/331/3 179/332/3
f 197/333/2 199/334/2 198/335/2
f 189/336/2 191/337/2 190/338/2
f 192/339/6 187/340/6 188/341/6
f 190/342/4 186/343/4 185/344/4
f 191/345/5 188/346/5 186/347/5
f 189/348/3 185/349/3 187/350/3
f 200/351/6 195/352/6 196/353/6
f 198/354/4 194/355/4 193/356/4
f 199/357/5 196/358/5 194/359/5
f 197/360/3 193/361/3 195/362/3
f 213/363/2 215/364/2 214/365/2
f 205/366/2 207/367/2 206/368/2
f 208/369/6 203/370/6 204/371/6
f 206/372/4 202/373/4 201/374/4
f 207/375/5 204/376/5 202/377/5
f 205/378/3 201/379/3 203/380/3
f 216/381/6 211/382/6 212/383/6
f 214/384/4 210/385/4 209/386/4
f 215/387/5 212/388/5 210/389/5
f 213/390/3 209/391/3 211/392/3
f 229/393/2 231/394/2 230/395/2
f 221/396/2 223/397/2 222/398/2
f 224/399/6 219/400/6 220/401/6
f 222/402/4 218/403/4 217/404/4
f 223/405/5 220/406/5 218/407/5
f 221/408/3 217/409/3 219/410/3
f 232/411/6 227/412/6 228/413/6
f 230/414/4 226/415/4 225/416/4
f 231/417/5 228/418/5 226/419/5
f 229/420/3 225/421/3 227/422/3
f 245/423/2 247/424/2 246/425/2
f 237/426/2 239/427/2 238/428/2
f 240/429/6 235/430/6 236/431/6
f 238/432/4 234/433/4 233/434/4
f 239/435/5 236/436/5 234/437/5
f 237/438/3 233/439/3 235/440/3
f 248/441/6 243/442/6 244/443/6
f 246/444/4 242/445/4 241/446/4
f 247/447/5 244/448/5 242/449/5
f 245/450/3 241/451/3 243/452/3
f 2/1/1 1/70/1 4/2/1 f 2/1/1 1/70/1 4/2/1
f 7/4/2 8/71/2 6/5/2 f 7/4/2 8/71/2 6/5/2
f 11/7/2 12/45/2 10/8/2 f 11/7/2 12/45/2 10/8/2
@ -643,38 +973,38 @@ f 27/19/1 28/44/1 25/20/1
f 31/22/1 32/74/1 29/23/1 f 31/22/1 32/74/1 29/23/1
f 35/25/1 36/49/1 33/26/1 f 35/25/1 36/49/1 33/26/1
f 39/28/1 40/79/1 37/29/1 f 39/28/1 40/79/1 37/29/1
f 17/31/3 34/303/3 33/32/3 f 17/31/3 34/453/3 33/32/3
f 10/34/4 27/304/4 26/35/4 f 10/34/4 27/454/4 26/35/4
f 18/37/4 35/305/4 34/38/4 f 18/37/4 35/455/4 34/38/4
f 12/40/5 28/306/5 27/41/5 f 12/40/5 28/456/5 27/41/5
f 20/42/5 36/307/5 35/43/5 f 20/42/5 36/457/5 35/43/5
f 11/7/6 25/20/6 28/44/6 f 11/7/6 25/20/6 28/44/6
f 5/46/3 3/308/3 4/47/3 f 5/46/3 3/458/3 4/47/3
f 19/13/6 33/26/6 36/49/6 f 19/13/6 33/26/6 36/49/6
f 13/51/3 30/309/3 29/52/3 f 13/51/3 30/459/3 29/52/3
f 6/54/4 2/310/4 3/55/4 f 6/54/4 2/460/4 3/55/4
f 21/57/3 38/311/3 37/58/3 f 21/57/3 38/461/3 37/58/3
f 14/60/4 31/312/4 30/61/4 f 14/60/4 31/462/4 30/61/4
f 8/63/5 1/313/5 2/64/5 f 8/63/5 1/463/5 2/64/5
f 22/65/4 39/314/4 38/66/4 f 22/65/4 39/464/4 38/66/4
f 16/68/5 32/315/5 31/69/5 f 16/68/5 32/465/5 31/69/5
f 7/4/6 4/2/6 1/70/6 f 7/4/6 4/2/6 1/70/6
f 24/72/5 40/316/5 39/73/5 f 24/72/5 40/466/5 39/73/5
f 15/10/6 29/23/6 32/74/6 f 15/10/6 29/23/6 32/74/6
f 9/76/3 26/317/3 25/77/3 f 9/76/3 26/467/3 25/77/3
f 23/16/6 37/29/6 40/79/6 f 23/16/6 37/29/6 40/79/6
f 141/81/5 149/277/5 46/82/5 f 141/81/5 149/277/5 46/82/5
f 145/84/3 47/247/3 43/85/3 f 145/84/3 47/247/3 43/85/3
f 153/87/3 49/318/3 51/88/3 f 153/87/3 49/468/3 51/88/3
f 46/90/4 51/319/4 49/91/4 f 46/90/4 51/469/4 49/91/4
f 48/93/7 52/288/7 160/94/7 f 48/93/7 52/288/7 160/94/7
f 42/83/8 49/320/8 153/96/8 f 42/83/8 49/470/8 153/96/8
f 44/97/6 50/321/6 52/98/6 f 44/97/6 50/471/6 52/98/6
f 53/100/5 55/246/5 165/101/5 f 53/100/5 55/246/5 165/101/5
f 45/103/7 56/258/7 168/104/7 f 45/103/7 56/258/7 168/104/7
f 43/106/8 53/100/8 161/102/8 f 43/106/8 53/100/8 161/102/8
f 47/108/6 55/322/6 53/109/6 f 47/108/6 55/472/6 53/109/6
f 41/111/4 54/323/4 56/112/4 f 41/111/4 54/473/4 56/112/4
f 61/114/3 63/117/3 59/115/3 f 61/114/3 63/117/3 59/115/3
f 63/117/6 64/123/6 60/118/6 f 63/117/6 64/123/6 60/118/6
f 62/120/4 61/114/4 57/121/4 f 62/120/4 61/114/4 57/121/4
@ -737,18 +1067,18 @@ f 164/257/5 168/104/5 56/258/5
f 163/259/5 167/255/5 168/260/5 f 163/259/5 167/255/5 168/260/5
f 162/261/5 166/252/5 167/262/5 f 162/261/5 166/252/5 167/262/5
f 161/263/5 165/249/5 166/264/5 f 161/263/5 165/249/5 166/264/5
f 144/265/8 156/324/8 50/266/8 f 144/265/8 156/474/8 50/266/8
f 143/268/8 155/325/8 156/269/8 f 143/268/8 155/475/8 156/269/8
f 142/271/8 154/326/8 155/272/8 f 142/271/8 154/476/8 155/272/8
f 141/274/8 153/327/8 154/275/8 f 141/274/8 153/477/8 154/275/8
f 149/277/7 157/89/7 51/88/7 f 149/277/7 157/89/7 51/88/7
f 150/278/7 158/294/7 157/279/7 f 150/278/7 158/294/7 157/279/7
f 151/281/7 159/292/7 158/282/7 f 151/281/7 159/292/7 158/282/7
f 152/284/7 160/290/7 159/285/7 f 152/284/7 160/290/7 159/285/7
f 50/287/3 156/328/3 160/94/3 f 50/287/3 156/478/3 160/94/3
f 156/289/3 155/329/3 159/285/3 f 156/289/3 155/479/3 159/285/3
f 155/291/3 154/330/3 158/282/3 f 155/291/3 154/480/3 158/282/3
f 154/293/3 153/331/3 157/279/3 f 154/293/3 153/481/3 157/279/3
f 45/103/3 148/105/3 140/295/3 f 45/103/3 148/105/3 140/295/3
f 148/254/3 147/256/3 139/297/3 f 148/254/3 147/256/3 139/297/3
f 147/251/3 146/253/3 138/299/3 f 147/251/3 146/253/3 138/299/3
@ -757,3 +1087,53 @@ f 44/267/5 48/93/5 152/95/5
f 144/270/5 152/284/5 151/286/5 f 144/270/5 152/284/5 151/286/5
f 143/273/5 151/281/5 150/283/5 f 143/273/5 151/281/5 150/283/5
f 142/276/5 150/278/5 149/280/5 f 142/276/5 150/278/5 149/280/5
f 181/303/2 184/482/2 183/304/2
f 173/306/2 176/483/2 175/307/2
f 176/309/6 173/484/6 171/310/6
f 174/312/4 175/485/4 170/313/4
f 175/315/5 176/486/5 172/316/5
f 173/318/3 174/487/3 169/319/3
f 184/321/6 181/488/6 179/322/6
f 182/324/4 183/489/4 178/325/4
f 183/327/5 184/490/5 180/328/5
f 181/330/3 182/491/3 177/331/3
f 197/333/2 200/492/2 199/334/2
f 189/336/2 192/493/2 191/337/2
f 192/339/6 189/494/6 187/340/6
f 190/342/4 191/495/4 186/343/4
f 191/345/5 192/496/5 188/346/5
f 189/348/3 190/497/3 185/349/3
f 200/351/6 197/498/6 195/352/6
f 198/354/4 199/499/4 194/355/4
f 199/357/5 200/500/5 196/358/5
f 197/360/3 198/501/3 193/361/3
f 213/363/2 216/502/2 215/364/2
f 205/366/2 208/503/2 207/367/2
f 208/369/6 205/504/6 203/370/6
f 206/372/4 207/505/4 202/373/4
f 207/375/5 208/506/5 204/376/5
f 205/378/3 206/507/3 201/379/3
f 216/381/6 213/508/6 211/382/6
f 214/384/4 215/509/4 210/385/4
f 215/387/5 216/510/5 212/388/5
f 213/390/3 214/511/3 209/391/3
f 229/393/2 232/512/2 231/394/2
f 221/396/2 224/513/2 223/397/2
f 224/399/6 221/514/6 219/400/6
f 222/402/4 223/515/4 218/403/4
f 223/405/5 224/516/5 220/406/5
f 221/408/3 222/517/3 217/409/3
f 232/411/6 229/518/6 227/412/6
f 230/414/4 231/519/4 226/415/4
f 231/417/5 232/520/5 228/418/5
f 229/420/3 230/521/3 225/421/3
f 245/423/2 248/522/2 247/424/2
f 237/426/2 240/523/2 239/427/2
f 240/429/6 237/524/6 235/430/6
f 238/432/4 239/525/4 234/433/4
f 239/435/5 240/526/5 236/436/5
f 237/438/3 238/527/3 233/439/3
f 248/441/6 245/528/6 243/442/6
f 246/444/4 247/529/4 242/445/4
f 247/447/5 248/530/5 244/448/5
f 245/450/3 246/531/3 241/451/3

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B